Skocz do zawartości

grudi91

Użytkownicy
  • Zawartość

    1
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O grudi91

  • Ranga
    1/10

Informacje

  • Płeć
    Mężczyzna
  1. Witam. Jestem początkujący w programowaniu mikroprocesorów. Chciałbym korzystając z tego kursu, na początek móc zapalać diody przez bluetooth. Wykonałem program na telefon, taki jak w przykładzie dla start/stop w robocie, z tą różnicą, że dla przycisku button 1 - włącz diodę wysyłam numer 1, zaś dla button 2 - wyłącz diodę wysyłam 0. Nie wiem jak napisać program na uC. Próbowałem korzystać z przykładowego programu ze strony: mikrokontrolery.blogspot Przerobiłem go następujaco: #include <avr\io.h> #include <stdio.h> #include <avr/interrupt.h> #include <util/delay.h> //zmienne dot. odbioru danych volatile unsigned char odb_x; //odebrana liczba X volatile unsigned char odb_flaga =0;//flaga informująca main o odebraniu liczby void usart_inicjuj(void) { //definiowanie parametrów transmisji za pomocą makr zawartych w pliku //nagłówkowym setbaud.h. Jeżeli wybierzesz prędkość, która nie będzie //możliwa do realizacji otrzymasz ostrzeżenie: //#warning "Baud rate achieved is higher than allowed" #define BAUD 19200 //tutaj podaj żądaną prędkość transmisji #include <util/setbaud.h> //linkowanie tego pliku musi być //po zdefiniowaniu BAUD //ustaw obliczone przez makro wartości UBRRH = UBRRH_VALUE; UBRRL = UBRRL_VALUE; #if USE_2X UCSRA |= (1<<U2X); #else UCSRA &= ~(1<<U2X); #endif //Ustawiamy pozostałe parametry moduł USART //U W A G A !!! //W ATmega8, aby zapisać do rejestru UCSRC należy ustawiać bit URSEL //zobacz także: http://mikrokontrolery.blogspot.com/2011/04/avr-czyhajace-pulapki.html#avr_pulapka_2 UCSRC = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0); //bitów danych: 8 //bity stopu: 1 //parzystość: brak //włącz nadajnik i odbiornik oraz ich przerwania odbiornika //przerwania nadajnika włączamy w funkcji wyslij_wynik() UCSRB = (1<<TXEN) | (1<<RXEN) | (1<<RXCIE); } ISR(USART_RXC_vect) { //przerwanie generowane po odebraniu bajtu odb_x = UDR; //zapamiętaj odebraną liczbę odb_flaga = 1; //ustaw flagę odbioru liczby dla main() } int main(void) { usart_inicjuj(); //inicjuj moduł USART (RS-232) sei(); //włącz przerwania globalne DDRC=0xff; while(1) { if(odb_x==0x00){PORTC=0x00;} if(odb_x==0x01){PORTC=0xff;} //czekamy na informację o odebraniu danej nie blokując mikrokontrolera if(odb_flaga) { odb_flaga = 0; //zgaś flagę } } } Podsumowując, usunąłem części programu dotyczące nadawania, zmieniłem prędkość BAUD na 19200 i wpisałem w pętli głównej 2 warunki dotyczące diody. Program nie działa, nie mam pojęcia dlaczego. Mógłby ktoś mnie nakierować, jakie błędy popełniłem, bądź też podać linki do jakiś sprawdzonych programów lub opracowań na ten temat? Próbowałem też korzystać z dokumentacji Atmegi 8 (str. 135 i 139 - program bez przerwań gdzie obie opisane funkcje wywoływałem w funkcji głównej programu (tak jak na str. 135 tyle że dodatkowo w pętli dodałem USART_Receive(). Mógłby ktoś pomóc? Korzystam z Atmegi8.
×
×
  • Utwórz nowe...