Forum: Mikrocontroller und Digitale Elektronik UART klemmt


von tex (Gast)


Lesenswert?

Hi!
ich versuche seit Tagen die Uart Schnittstelle meine Mega128
einzustellen.
Inzwischen bekomme ich zwar Daten aber es ist nur Mist.
Vom Sender wird 150531204010543 abgeschickt und der mega sagt er hätte
756967369626996 empfangen?
Ich meine das der interne Takt dran schuld sein könnte aber wir
übertragen hier mit 300 Baud. So krumm kann unmöglich der int. Takt
sein.
Bin ich zu blöd den Reloadwert zu brechnen?

UBRR1L = 0x82;                    UBRR1H = 0x05;

von Thorsten (Gast)


Lesenswert?

Ich nehme mal an, du möchtest für 8MHz Takt berechnen. Dann komme ich
auf UBRR1H = 0x06, bei deinem Wert komme ich auf 354 Baud und das kann
logischerweise nicht funktionieren.

Gruß
Thorsten

von dave (Gast)


Lesenswert?

Da ist man doch froh, dass wir alle deinen Takt kennen.. ups.. doch
nicht.

 (Clock / (Baud*16)) - 1 ) = UBRR

 Clock = (UBRR+1)*(BR*16)

 Clock = (1410+1)*(4800) = 6.772.800Hz

Hab ich richtig gerechnet? Gib mal deinen Takt her.

dave

von Thorsten (Gast)


Lesenswert?

Da er interner Takt geschrieben hat, kann nur 1, 4 oder 8MHz in Frage
kommen. Seine Werte sprechen für 8MHz und ich vermute, daß er einfach
nur das Highbyte wegen des Divisionsrest korrigiert hat statt
notwendigerweise das Lowbyte. Kann aber natürlich auch nicht so sein :)

von tex (Gast)


Lesenswert?

@ Torsten. Natürlich ist 06 richtig, inzwischen bin ich vom Pfad der
technik gewichen und versuche mit sukzessiver Approximation anz Ziel zu
gelangen

@Dave
Taktgeber sollte der interne Oszillator mit 8Mhz sein

von tex (Gast)


Lesenswert?

Wenn ich das Programm in einer Endlosschleife laufen lasse, kommen fast
nur noch 2en und 6en dabei raus? Ausserdem gibt es eine 7 die bei jedem
Durchlauf um 2 Stellen nach rechts wandert.

von tex (Gast)


Lesenswert?

offenbar habe ich 17 Byte, wo eigentlich nur 15 sind!? wie geht sowas?

von dave (Gast)


Lesenswert?

Warum machst du es dir so schwer...
1665,6666666666666666666666666667 kommt als Wert raus...

Dann sagen wir 1666...
0x06 als high und 0x82, so wie du es hattest.

"offenbar habe ich 17 Byte, wo eigentlich nur 15 sind!? wie geht
sowas?"

Die Baudrate gibt an, wie lange ein Bit dauert.. wenn der PC jetzt also
schneller ist als dein MC, dann liest er in einer bestimmten zeit auch
so und so viel mehr..
Hast du Stopbit, Parität und Datenbits richtig gesetzt? Haste mal den
Code vom Tutorial hier ausprobiert?

dave

von tex (Gast)


Lesenswert?

Die Baudrate habe ich ja richtig berechnet und auch die Parität usw
eingestellt. Aber es kam nur Müll raus. Da habe ich mal ein paar andere
Reloadwerte probiert (daher die 05).
Die Daten kommen ja nicht vom PC. Dar wäre ja einfach, weil synchron.
Wenn ich das richtig mitbekomme habe ich 1 bis 2 byte zu viel und das
würde bedeuten, das mein Reloadwert ungefähr 6% vom korrekten Wert
abweicht?

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.