Hallo zusammen, ich versuche gerade die Kommunikation zwischen meinem Laptop und meinem ATmega2561 hinzubekommen. Dazu halte ich mich an das Beispiel von Atmel. Wenn ich Zeichen von hterm zum ATmega2561 sende, bekomme ich immer kleine Quadrate zurück. Zumindest die Anzahl der Zeichen stimmt mit der Anzahl der gesendeten Zeichen überein. Mein Programm: #include <avr/io.h> #define FOSC 7372800 // Clock Speed #define BAUD 9600 #define MYUBRR (FOSC/16/BAUD-1) void USART_Init( unsigned int ubrr){ /* Set baud rate */ UBRR0H = (unsigned char)(ubrr>>8); UBRR0L = (unsigned char)ubrr; /* Enable receiver and transmitter */ UCSR0B = (1<<RXEN0)|(1<<TXEN0); /* Set frame format: 8data, 1stop bit */ UCSR0C = (3<<UCSZ00); } // USART_Init void USART_Transmit( unsigned char data ) { /* Wait for empty transmit buffer */ while ( !( UCSR0A & (1<<UDRE0)) ) ; /* Put data into buffer, sends the data */ UDR0 = data; } unsigned char USART_Receive( void ) { /* Wait for data to be received */ while ( !(UCSR0A & (1<<RXC0)) ) ; /* Get and return received data from buffer */ return UDR0; } int main(void) { USART_Init(MYUBRR); /* Replace with your application code */ while (1) { USART_Transmit(USART_Receive()); } } Hat jemand eine Idee? Vielen Dank. Grüße datatom
Integer Größe bei Berechnungen beachten:
1 | #define FOSC 7372800UL
|
Fuses beachtet?
Thomas H. schrieb: > Hat jemand eine Idee? Rx und Tx verwechselt? Fuses auf externen Quarz gesetzt? Mit internem Oszillator kann die Baudrate zu stark daneben liegen.
LOW.CKDIV8 hat keinen Haken. Mehr Fuses-Einstellungen kenne ich leider nicht. Ich habe festgestellt, dass, wenn ich bei hterm den Wert Data von 8 auf 7 ändere, ich beim Senden von Zahlen die richtige Zahl zurück erhalte. Bei Buchstaben erhalte ich zwar auch immer den richtigen Buchstaben zurück, nur dass er manchmal als Großbuchstabe zurück kommt, obwohl ich einen Kleinbuchstaben gesendet habe.
Jim M. schrieb: > Integer Größe bei Berechnungen beachten: > #define FOSC 7372800UL Snake oil :-) 7372800 ist bereits long.
Läuft der Atmega mit gezogenem Quartz ? Wenn ja dann läuft er mit dem internen RC-Oszillator. Gruß JackFrost
Thomas H. schrieb: > Mehr Fuses-Einstellungen kenne ich leider nicht. Du musst den externen Quarz-Betrieb mit den Fuses aktivieren, sonst läuft dein Prozessor mit dem internen Oszillator (der nicht sehr genau ist).
Thomas H. schrieb: > Mehr Fuses-Einstellungen kenne ich leider nicht. Dann wirst du sie kennenleren müssen (wenn du weiterkommen willst).
Ich habe einen Quarz, welchen ich auf mein Board aufstecken kann. Der Quarz arbeitet mit 7,3728 MHz. Sehe ich das richtig, dass ich bei der Fuse-Einstellung LOW.SUT_CKSEL folgende Auswahl treffen kann? Ext. Crystal Osc. 3.0 - 8.0 MHz; Start-up time: 16K CK + 65MS
Thomas H. schrieb: > Ext. Crystal Osc. 3.0 - 8.0 MHz; Start-up time: 16K CK + 65MS Habe die Einstellung vorgenommen und die Kommunikation mit dem Laptop funktioniert hervorragend. Vielen Dank.
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.