Hallo zusammen! Ich habe mir die uart libary von Peter Fleury http://homepage.hispeed.ch/peterfleury/avr-software.html#libs runtergeladen und versuche nun eine Verbindung zwischen PC un uC aufzubauen. Dazu benutzte ich das Codebeispiel von Fleury. Aber es will einfach nicht klappen!! Verwende STK500 mit 3.68 Mhz internem clock. Der PC sendet ein Zeichen und bekommt ein völlig falsches Zeichen zurück. Ab und zu kommen auch fehlerhafte Packete zurück. Ich verwende HTerm auf dem PC. Einstellung: 9600 Baud, Data 8 , Stop 1, Parity none, CTS Flow control keine Die Baudrate sollte stimmen und das UBRR Register habe ich im Simulator überprüft : 23 Ich habe schon den Code durchgeforstet und überprüft, was der uC alles ausführt. Das ist der init Abschnitt der er ausführt für den ATmega16: void uart_init(unsigned int baudrate) { UART_TxHead = 0; UART_TxTail = 0; UART_RxHead = 0; UART_RxTail = 0; #elif defined (ATMEGA_USART) /* Set baud rate */ if ( baudrate & 0x8000 ) { UART0_STATUS = (1<<U2X); //Enable 2x speed baudrate &= ~0x8000; } UBRRH = (unsigned char)(baudrate>>8); UBRRL = (unsigned char) baudrate; /* Enable USART receiver and transmitter and receive complete interrupt */ UART0_CONTROL = _BV(RXCIE)|(1<<RXEN)|(1<<TXEN); /* Set frame format: asynchronous, 8data, no parity, 1stop bit */ UCSRC = (1<<URSEL)|(3<<UCSZ0); Weis nicht mehr weiter. Hat das vieleicht scho jemand gemacht? ober sieht den Fehler. Gruss El
Hi El, Schau doch einfach mal ins Datenblatt des Mega 16. Die Beispiele zu UART sind sehr gut,leicht verständlich und vor allen Dingen sie funktionieren. Gut... Fehler die man sofort erkennt. Du sprichst von einem internen Takt. Beim MEGA16 mit STK 500 kannst du den Takt entweder vom STK 500 erzeugen lassen oder vom Mikrokontroller. Werkseinstellungen beim Mega 16 ist ein selbst erzeugter internen Takt(nicht STK 500). Dieser ist aber "relativ" ungenau und für RS232 Anwendungen solltest du über einen externen Quarz nachdenken.(Fuses Einstellungen nicht vergessen... und STK500 Jumper umstecken.) Gruß Uli
> Verwende STK500 mit 3.68 Mhz internem clock
Das glaub ich nicht!
STK500 glaub ich dir.
Ich glaub dir auch entweder 'interner clock' oder '3.68Mhz'
Aber '3.68Mhz interner Clock' glaub ich dir nicht.
Beachte: die Angabe der Taktfrequenz im Programm hat für
den Compiler informativen Charakter. Es ist nicht so, dass
du ins Programm 3.68 Mhz reinschreibst und dann läuft der
Prozessor auch so schnell. Es ist deine Aufgabe als
Hardware-Techniker einen Quarz mit der entsprechenden Frequenz
anzuschliessen und in Betrieb zu nehmen.
Vielen Dank für die Anregungen! in dem Fall seit ihr der meinung mit dem Takt ist nich nicht alles in Ordnung. Dann werde ich mal mein spetzielles Augenmerk darauf richten und alle Einstellungen überprüfen! gruss El
Die Sache ist ganz einfach. Entweder du hast einen externen Quarz dran oder du hast ihn nicht dran. Wenn du keinen externen Quarz hast, dann kannst du den Mega16 mit den Fuse Bits auf entweder 8Mhz oder 1Mhz einstellen. Wenn du an den Fuse Bits überhaupt nichts gemacht hast, dann läuft er mit 1Mhz. So wird er ausgeliefert. Wenn du aber einen externen Quarz dran hast, dann heist das noch lange nicht, dass der auch benutzt wird. Ein externer Quarz muss mittels Fuse-Bits auch aktiviert werden. Nachzutragen wäre noch: Sei extrem vorsichtig, wenn du mit den Fuse-Bits spielst. Grade mit den CKSEL Fuses kann man sich ganz schnell aus dem Prozessor aussperren. Alles doppelt und dreifach kontrollieren bevor die Bits gebrannt werden. * Ein Quarz ist kein Quarzoszillator! Also vorsichtig sein, welche Einstellung du benutzt * Immer, wirklich immer, zuerst die Fuse-Bits aus dem Prozessor auslesen und mit dem Datenblatt vergleichen. Nur dann wenn du jedes einzelne Bit im Datenblatt gefunden hast und das dann auch mit den dokumentierten Ausliefer- einstellungen übereinstimmt weitermachen.
Hallo Ich habe das Problem inzwischen lösen können. Es lag tatsächlich an den Einstellungen der Fuse-Bits die von mir falsch gesetzt wurden. Wie ich gesehen habe verursachen sie immer wieder Probleme bei Anfängern, so auch bei mir. Herausgefunden habe ich es mit einem Oszilloskop am Port eines Timerpins den ich nach jeden Takt toggeln lies. Schön wäre eine Funktion, die einem den Systemtakt zum Beispiel über die LEDs anzeigen würde. Vielen Dank für eure Antworten Gruss El
> Schön wäre eine Funktion, die einem den Systemtakt zum Beispiel über die > LEDs anzeigen würde. Neuere AVRs haben eine CKOUT-Fuse, mit der man den internen CPU-Takt (egal, woher er kommt) an ein Ausgangspin legen kann. OK, wer diese Fuse programmieren kann, kann vermutlich auch die für den Takt programmieren...
El schrieb: > Hallo > > Ich habe das Problem inzwischen lösen können. Es lag tatsächlich an den > Einstellungen der Fuse-Bits die von mir falsch gesetzt wurden. Wie ich > gesehen habe verursachen sie immer wieder Probleme bei Anfängern, so > auch bei mir. > Herausgefunden habe ich es mit einem Oszilloskop am Port eines Timerpins > den ich nach jeden Takt toggeln lies. > Schön wäre eine Funktion, die einem den Systemtakt zum Beispiel über die > LEDs anzeigen würde. > > Vielen Dank für eure Antworten > > Gruss El Bei 1 Mhz wirst du nicht mal ein Flimmern an deiner LED merken. Zumindest wenn du sie direkt auf die LED losjagst :D
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.