Hi, hab hier ein komisches USART-Problem. Habe jetzt ermittelt dass die Baudrate um den Faktor 16 höher ist als die laut Formel gültige (bei definierten 1200Baud empfange ich die Zeichen am PC bei 19200Baud richtig), d.h. UBR_VAL ist um den Faktor 16 zu niedrig. Dieser Faktor schreit geradezu nach einem Konfigurationsproblem, jedoch konnte ich im Datenblatt nichts auffälliges finden und die Formel ist laut Datenbaltt für den asynchronen Betrieb richtig. Prozessor: ATMEGA32 Oszillator: Quarz mit 16MHZ FUSE-Bits: siehe Screenshot Code: ... #define F_CPU 16000000UL ... #define BAUD 1200UL #define UBR_VAL ((F_CPU/(16*BAUD))-1) ... UCSRB|= (1<<RXEN)|(1<<TXEN); UCSRC|= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); UBRRH = UBR_VAL >> 8; UBRRL = UBR_VAL & 0xFF; Kann jemand den Fahler entdecken oder mich mit nem Tritt zum richtigen Beitrag befördern?
Also der erste Fehler, den ich erkenne, ist dass du die |= zu = umwandeln solltest. Mit UCSRC |= machste nämlich nen Fehler (du liest UBRRH ein und setzt dann zusätzlich in diesem Wert die drei Bits). Hast du diese Fuse-Bit Ansicht auch erst "geladen"? Also nach dem öffnen nen "Read"-Access durchgeführt? Den richtigen Quarz drin? Das richtige include für den Prozessor benutzt? Ist im Makefile auch m32 angegeben?
...|= zu = -> hab ich korrigiert Fuse-Bits wurden neu geladen, Quarz stimmt schon (Funk-AVR-Evaluations-Board von Pollin). Mit m32 meinst du wahrscheinlich "MCU=atmega32". m32 bewirkt afaik dass das ganze in 32bit kompiliert wird.
Der Atmega32 ist 8 bittig ! einseinseinself!!! Das 32 im Namen steht afaik für 32k Flash
>UBR_VAL ist um den Faktor 16 zu niedrig.
Da könnte man doch glatt vermuten das F_CPU irgendwo auf 1MHz
umdefiniert wird. Irgend welche Warnings beim compilieren?
Oder ändere die Baudrate mal auf 2400 Baud. Dann müsste sie bei dir auf 38400 Baud arbeiten. Oder bewirkt die Änderung evtl. gar nichts?
Da hab ich wohl den Wald vor lauter Bäumen nicht mehr gesehen. Ich mach ein #ifndef F_CPU (was ich hier nicht erwähnt habe), binde zuvor aber schon die delay.h ein, welche den Wert auf 1mhz setzt.... Danke für die Hilfe!
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.