Skocz do zawartości

Atmega 328P UART i bufor cykliczny problem


Daniel_1995

Pomocna odpowiedź

Od jakiegoś czasu zmagam się z uruchomieniem UART-u na aAtmedze 328p z wykorzystaniem buforu cyklicznego. Mianowicie chcę aby dane wysyłane z komputera wywoływały określone działanie w tym przypadku banalnie prostą rzecz- zaświecenie diody. Atmega pracuje na wewnętrznym oscylatorze 1 Mhz, predkość jaką chciałem uzyskac to 2400 bodów. Dane wysyłane są z programu RealTerm na USB dalej poprzez konwerter do Atmegi. Problemem okazuje się obsługa bufora. Napisałem program z pomocą Bluebooka jednak nie rozumiem dlaczego nie działa. Dane są wysyłane, ponieważ widzę miganie diody na konwerterze. program ponizej.

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

#define FCPU 1000000 	// Clock Speed

#define UART_RX_BUF_SIZE 8
#define UART_RX_BUF_MASK  ( UART_RX_BUF_SIZE - 1 )

#define LED_TOGG PORTD ^= (1<<PD6)

volatile char UART_Rx_Buf[UART_RX_BUF_SIZE];
volatile uint8_t UART_RX_Head;
volatile uint8_t UART_RX_Tail;

void USART_Init(uint32_t);
char uart_getc(void);

int main (void){

DDRD |= (1<<PD6);
LED_TOGG;
USART_Init(2400);
sei();

while(1){
	uart_getc();

	if(UART_Rx_Buf[0]==1){
		LED_TOGG;
	}
}
}

void USART_Init( uint32_t baud){

uint16_t ubrr = (FCPU/16/baud-1); /*Set baud rate */
UBRR0H = (uint8_t)(ubrr>>8);
UBRR0L = (uint8_t)ubrr;
UCSR0B = (1<<RXEN0) | (1<<TXEN0); /*Enable receiver and transmitter */
UCSR0C |= (1<<UCSZ00) | (1<<UCSZ01); /* Set frame format: 8data, 1stop bit */
}

/*********************************/

char uart_getc(void){

if(UART_RX_Head == UART_RX_Tail) return 0;

UART_RX_Tail = (UART_RX_Tail + 1) & UART_RX_BUF_MASK;
return UART_Rx_Buf[UART_RX_Tail];
}

ISR (USART_RX_vect){

uint8_t tmp_head;
	char data;

	data = UDR0;
	tmp_head = (UART_RX_Head+1) & UART_RX_BUF_MASK;

if(tmp_head == UART_RX_Tail){
}else{

	UART_RX_Head = tmp_head;
	UART_Rx_Buf[tmp_head] = data;
}
}

Link do komentarza
Share on other sites

Jeśli to był bluebook od atnel-a to chyba powinieneś pytać o pomoc na forum powiązanym z tą firmą. Uważam że tam znajdziesz dno i wodorosty, ale skoro wsparłeś tak niesłuszne dzieło, pownieneś się tego trzymać.

  • Lubię! 1
Link do komentarza
Share on other sites

Ech, to długa historia. Jakiś czas temu trafił się na forum totalny oszołom, który wieszał ostatnie psy na atnelu. Długo nie gwiazdorzył, ale wystarczająco żeby mnie zainteresować. Z jego opinii wychodziło, że forum atnela to jedna wielka nędza, wazeliniarstwo u właściciela firmy, jednym słowem kult jednostki.

Po takiej reklamie nie byłbym sobą gdybym nie założył tam konta. Oczywiście miałem nieco złośliwe plany, ale zanim je zrealizowałem na forum trafił się faktycznie ciekawy przypadek - ktoś napisał program i wyglądało na to, że błąd jest w kompilatorze (gcc). Do takich przypadków mam wyjątkowy sentyment, więc zapomniałem o moich niecnych planach i autentycznie próbowałem zrozumieć gdzie jest problem...

Niestety dość szybko do dyskusji włączył się właściciel forum oraz firmy i zaczął prezentować własne mądrości. Było to autentycznie żenujące przeżycie, z którego moje wnioski są takie - google to skarbnica wiedzy. Poszukałem trochę opinii o atnelu i jego założycielu i znalazłem ciekawy wątek na elektrodzie, gdzie jechali po nim jak po burej s... że koleś skończył akademię rolniczą, a teraz zarabia kasę sprzedając marne kursy których sam nie rozumie. Niestety po moim krótkim doświadczeniu z tamtym forum stwierdzam, że google i opinie na elektrodzie mają dużo racji. Ja nie znam się na rolnictwie, więc staram sie nie pisać książek o tej tematyce.

W kwestii informatyki pozostaje mi tylko odradzać podobne doświadczenia i tego typu nauczycieli.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Taakie buty, to już wiem dlaczego mi kiedyś odradzałeś Bluebooka 😃.

Wiem, że offtopic ale Elvis co byś polecił dla mnie za lekturę z twoim czystym sercem 😉 .

Szkołę programowania Pratta już zamówiłem, to dobry wybór?

Link do komentarza
Share on other sites

Przy okazji moich przygód z tamtym forum trochę pooglądałem co oferuje atnel i pomijając już czysto osobiste odczucia, nie było to zachwycające. Ogólnie proponowane rozwiązania są delikatnie mówiąc baaardzo przestarzałe, a do tego drogie. Zacznijmy od platformy sprzętowej - wielka płytka z mikrokontrolerem w obudowie DIP40. Oczywiście ma to zalety, ale za taką cenę można kupić wiadro Arduino.... Do tego płytka właściwie do wyrzucenia po zakończeniu kursu, a arduino można z powodzeniem wykorzystać we wlasnych konstrukcjach.

Sam wybór mikrokontrolera też nie porywa - fakt AVR to sprawdzona konstrukcja, ale uczenie się wszystkich rejestrów tak starego układu to prawie jak nieśmiertelne 8051 na studenckich laborkach - jest bo ktoś kiedyś przygotował ćwiczenia. Niby układ fajny bo prosty, tylko po co tyle czasu poświęcać na tak stare rozwiązanie? To jakby uczyć się na pamięć wszystkich poleceń DOS-a 5.0.

Kolejne muzeum techniki to uczenie Delphi. Myślałem, że to środowisko już dawno umarło a tu niespodzianka - ktoś jeszcze tego użwa. I co gorsze uczy innych... Ja rozumiem, 20 lat temu było to super nowoczesne, ale może warto czasem coś nowego poznać. Informatyka dość szybko się zmienia, język Pascal to teraz bardzo niszowa opcja, prawie jak Cobol, czy inny Algol.

Obejrzałem też kilka video-poradników z tamtej strony. Najbardziej zapamiętałem bzdury opowiadane od drganiach styków. Fajnie że gośćiu nauczył się używać oscyloskop, ale jeśli podłączysz sondę i nie widzisz pewnego sygnału to nie znaczy że badanego zjawiska nie ma, tylko że akurat go nie zaobserwowałeś. Gdzieś między zdaniami było trochę sensu, ale jak dla mnie żeby uczyć innych, najpierw należy nauczyć się. A tutaj studia elektroniczne są chyba niezastąpione - inaczej jesteśmy skazani na słuchanie kogoś, kto prawie wie o czym mówi.

Kończę już moje opinie o tamtym forum i stronie, obiecuję już nie wracać do tematu. Tak jak pisałem wcześniej - super robota handlowo, ale merytorycznie - nie polecam.

Natomiast co do książek o programowaniu to polecam coś nie związanego z mikrokontrolerami, ale ogólnie o programowaniu C lub C++. Ja uczyłem się podstaw programowania bardzo dawno temu (nawet przed popularnością Delphi 😉 ), więc nie wiem jakie książki są teraz na topie. Wspomniane K&R, czyli "Język ANSI C" autorów samego języka jest zawsze wymieniana jako klasyka i chyba warta przeczytania. Ale pewine są inne - wiele osób chwali "Symfonię C++", ale nie mogę polecić, bo nie czytałem.

Link do komentarza
Share on other sites

Ja bym bardzo polecił https://learncodethehardway.org/c/ — znam autora, i pomimo bycia bardzo nieortodoksyjnym, jednak wie co mówi. Podejście do nauki ma takie, że przede wszystkim uczy debugowania — bo przecież tego robi się najwięcej. Od razu też uczy używania przydatnych narzędzi, w rodzaju Valgrinda (akurat na mikrokontrolerach tego trochę brak).

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.