hi zusammen, habe mir neulich ein AVR 128 board gekauft (http://cgi.ebay.com/ATmega-ATmega128-AVR-MINI-Development-Board-/260667006636?pt=LH_DefaultDomain_0&hash=item3cb0f6deac#shId) und naja jetzt bin ich soweit das ich uart implementieren will, habs mit dem testcode hier auf mikrocontroller.net probiert aber es kommen diesen error.... Build started 16.2.2011 at 15:44:19 avr-gcc -mmcu=atmega128 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT main.o -MF dep/main.o.d -c ../../main.c ../../main.c: In function 'uart_putc': ../../main.c:40: error: 'UCSRA' undeclared (first use in this function) ../../main.c:40: error: (Each undeclared identifier is reported only once ../../main.c:40: error: for each function it appears in.) ../../main.c:44: error: 'UDR' undeclared (first use in this function) ../../main.c: In function 'USART_Init': ../../main.c:63: error: 'UBRRH' undeclared (first use in this function) ../../main.c:64: error: 'UBRRL' undeclared (first use in this function) ../../main.c:66: error: 'UCSRB' undeclared (first use in this function) ../../main.c:68: error: 'UCSRC' undeclared (first use in this function) ../../main.c: In function 'main': ../../main.c:83: warning: pointer targets in assignment differ in signedness ../../main.c:87: warning: pointer targets in assignment differ in signedness make: *** [main.o] Error 1 Build failed with 8 errors and 2 warnings... hat jemand ne ahnung?? wäre sehr dankbar!!
UBRRH --> UBRR0H //für USART0 UBRRH --> UBRR1H //für USART1 für die andern Register natürlich auch ändern ...
Habe eigentlich schon controlliert... im Datenblatt steht: #define FOSC 1843200// Clock Speed #define BAUD 9600 #define MYUBRR FOSC/16/BAUD-1 void main( void ) { ... USART_Init ( MYUBRR ); ... } void USART_Init( unsigned int ubrr ) { /* Set baud rate */ UBRRH = (unsigned char)(ubrr>>8); UBRRL = (unsigned char)ubrr; /* Enable receiver and transmitter */ UCSRB = (1<<RXEN)|(1<<TXEN); /* Set frame format: 8data, 2stop bit */ UCSRC } zur initialisierung und: void USART_Transmit( unsigned char data ) { /* Wait for empty transmit buffer */ while ( !( UCSRA & (1<<UDRE)) ) ; /* Put data into buffer, sends the data */ UDR = data; } aber mein Compiler kennt die Register nicht... kann das sein das ich noch irgendeine Include benötige?? bin noch neu :) mfg
@..,- danke geht :D jetzt ist aber gleich noch eine frage aufgetaucht, also ich habe jetzt usart0 und die ist an PE0 bzw. PE1 oder?? weil da tut sich gar nix...
Hi >jetzt ist aber gleich noch eine frage aufgetaucht, also ich habe jetzt >usart0 und die ist an PE0 bzw. PE1 oder?? weil da tut sich gar nix... Vielleicht stört dein Programmierinterface. Das sind nämlich die Pins, über die der ATMega128 programmiert wird. MfG Spess
>kann das sein das ich noch irgendeine Include benötige?? Nur #include <avr/io.h> wird benötigt. Dort wird dann je nach eingestelltem Prozessor automatisch aufgelöst, was alles eingebunden werden muss. Dafür muss natürlich im AVR-Studio der richtige Prozessor eingestellt sein, oder manuell definiert werden. Grüße, Peter
vielen dank für die antworten µC sendet wie wild :) weiteres Problem: wollte nun auch mit dem avr empfangen können vom pc ( max232, terminalprogramm) und habe so uart initialisiert: void USART_Init( unsigned int ubrr ) { // Set baud rate UBRR1H = (unsigned char)(ubrr>>8); UBRR1L = (unsigned char)ubrr; UCSR1B = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE); // RX TX und RX interrupt enable // Set frame format: 8data, 2stop bit UCSR1C = (1<<USBS)|(3<<UCSZ0); } und die interrupt funktion sieht so aus: ISR(USART_RXC_vect) { unsigned char nextChar; // Daten aus dem Puffer lesen nextChar = UDR1; if( uart_str_complete == 0 ) // wenn uart_string gerade in Verwendung, neues Zeichen verwerfen { // Daten werden erst in string geschrieben, wenn nicht String-Ende/max Zeichenlänge erreicht ist/string gerade verarbeitet wird if( nextChar != '\n' && nextChar != '\r' && uart_str_count < UART_MAXSTRLEN - 1 ) { uart_string[uart_str_count] = nextChar; uart_str_count++; } else { uart_string[uart_str_count] = '\0'; uart_str_count = 0; uart_str_complete = 1; } } } (standart aus AVR tutorial :)) und naja wenn ich zeichen sende "hängt" sich der µC auf bis er resettet wird? jemand ne idee?? MFG Ricardo!
Ohne ins Datenblatt gesehen zu haben... Kompiliert das überhaupt? Muss da nicht USART1_RXC_vect verwendet werden? P.S. sollte man nicht fertig initialisieren bevor man TX, RX und ISR enabled?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.