Hallo!
Also ich habe ein großes Problem einem ATtiny2313 das senden via USART
beizubringen. Anfänglich habe ich versucht die Lib von Peter Fleury zu
verwenden (die bisher bei ATmegas immer gut funktionierte) und da das
alles nicht zum Erfolg führte habe ich jetzt ein ganz einfaches
Testprogramm geschrieben und auch das sendet immer nur 0x00 zu meinem
PC.
int main (void)
{
DDRD = 0b0000010; // Eingänge + Ausgänge
UBRRH = 0;
UBRRL = 28;
// UBR = 28 19200bps @ 8868238MHz
UCSRC = 0;
UCSRC = 0b00000110;
UCSRB = 0b00001000;
UDR = 0x31; // sende '1'
for(;;);
}
Eigentlich sollte ich eine '1' am Terminal empfangen, aber es kommt
immer 0x00 an, am µC habe ich den externen Quarz angewählt. Auch andere
Übertragungsgeschwindigkeiten liefern den selben Mist (nach
entsprechender Änderung)
Kann mich jemand ein wenig erleuchten was ich falsch mache?
Danke.
Hi
>UBR = 28 19200bps @ 8868238MHz
Das passt schon mal gar nicht. Wenn die Werte stimmen sind es 2400Bd.
MfG Spess
wieso paßt das gar nicht? UBR = (Fcpu / (Baud * 16)) - 1 ergibt gerundet 28
UBRR ist schon korrekt. > Kann mich jemand ein wenig erleuchten was ich falsch mache? Nicht wirklich falsch aber doch extrem kontraproduktiv: > UCSRC = 0b00000110; ..das bremst beim 'entschlüsseln' unnötig und man kann es viel lesbarer schreiben mit..
1 | UCSRC = _BV(UCSZ1) | _BV(UCSZ0); |
Aber der eigentlich fehler steckt woanders: Taktfrequenz (falsche Taktquelle, CKDIV8), Verdrahtung, falsche Einstellungen am Terminal. Geh mal die Checkliste [1] ∗komplett∗ durch. HTH [1] http://www.mikrocontroller.net/articles/AVR_Checkliste#UART.2FUSART
Der vollständigkeit halber: wie wird USCRA initialisiert? Da gibt es doch noch dieses U2X bit oder so ähnlich... weiterhin mal schauen ob das frameformat korrekt...
Hi
>wieso paßt das gar nicht?
Hast Recht. In meinem Rechenprogramm war noch ein Clockdivider von 8
eingestellt.
MfG Spess
UDRE wird doch vom µC gesetzt oder? Jedenfalls bin ich nun nen kleinen Schritt weiter, es wird eine "1" empfangen, aber auch ein zweites Zeichen 0xF8 - wieso, dafür gibts doch eigentlich kein Grund??? Vermutlich waren die bisherigen Probleme aufgetreten, da CKDIV8 gesetzt war.
und die Lib von Peter Fleury funktioniert bei Baud 300 und 600, größer 600 kommt nur Quatsch an ... aber 8.8 MHz und 19600 sollte doch unkritisch sein?
> funktioniert bei Baud 300 und 600, größer 600 kommt nur Quatsch an ... > aber 8.8 MHz und 19600 sollte doch unkritisch sein? ..so rein aus Parano^WNeugierde: Nimm für UBRR mal 25 und als Baudrate 19200 und schau was ankommt.
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.