Forum: Mikrocontroller und Digitale Elektronik ATtiny2313 USART - unmöglich?


von Jens (Gast)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

Hi

>UBR = 28 19200bps @ 8868238MHz

Das passt schon mal gar nicht. Wenn die Werte stimmen sind es 2400Bd.

MfG Spess

von Jens (Gast)


Lesenswert?

wieso paßt das gar nicht?

UBR = (Fcpu / (Baud * 16)) - 1

ergibt gerundet 28

von g457 (Gast)


Lesenswert?

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

von coder (Gast)


Lesenswert?

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...

von spess53 (Gast)


Lesenswert?

Hi

>wieso paßt das gar nicht?

Hast Recht. In meinem Rechenprogramm war noch ein Clockdivider von 8 
eingestellt.

MfG Spess

von NoPoP (Gast)


Lesenswert?

Bit UDRE im Register UCSRA muss 1 sein.

von Jens (Gast)


Lesenswert?

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.

von Jens (Gast)


Lesenswert?

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?

von g457 (Gast)


Lesenswert?

> 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
Noch kein Account? Hier anmelden.