Forum: Mikrocontroller und Digitale Elektronik UART Prob bei verschiedenen Taktfrequenz


von Marcel M. (marcel)


Angehängte Dateien:

Lesenswert?

Hey!
Ich hab im Bascom AVR folgende Zeilen programmiert:
$regfile = "m8535.dat"
$crystal = 4000000
$baud = 1200
Do
Print "Hello World!"
Loop

Allerdings hat es nicht richtig funktioniert. Daher habe ich die
Taktfrequenz auf 1 Mhz geändert. Ergebnis: Alles lief Fehlerfrei!
Ich benötige die Funktion aber bei 4Mhz. Kann mir jemand sagen warum es
bei 4Mhz nicht funktioniert? Im Anhang habe ich ein Bildschirmmitschnitt
von dem was das Terminalprogramm ausgespuckt hat.

Danke schonmal!

von Marius S. (lupin) Benutzerseite


Lesenswert?

Hast du schonmal versucht 4000000 durch 1200 zu teilen? das haut nicht
hin, oder?

Also besorg dir einen quarz dessen frequenz man durch 1200 teilen kann
oder benutze eine baudrate die halt besser passt (allerdings lässt sich
die serielle schnittstelle nicht dazu bewegen solch eine baudrate zu
benutzen)

von Peter D. (peda)


Lesenswert?

Das ist ganz einfach Stolperfalle Nr. 1 (kommt jede Woche):

Ab Werk ist der interne 1MHz RC aktiv, Du mußt die Fuses
umprogrammieren dann klappt es auch mit dem Nachbarn (4MHz).


Peter

von Marcel M. (marcel)


Lesenswert?

Also kann das eigentlich sehr gut Teilen.
Mit der Formel zum berechnen von UBR komme
ich auf eine Baudrate von 1202.
Das dürfte funktionieren.
Aber ich hab gerade mal andere Baudraten probiert.
Die gehen ebenfalls nicht bei 4Mhz

von Marcel M. (marcel)


Lesenswert?

Hey Peter:
Hab ich gemacht im PonyProg
Hab eigentlich auch an die umgedrehte Logik gedacht.
Und im Code hab ich das $crystal = 4000000 auch geändert.

von Marius S. (lupin) Benutzerseite


Lesenswert?

entferne doch einfach mal den quarz und schau ob er dann immernoch
funktioniert - wenn er noch irgendwas sendet dann ist der interne RC
noch an :)

von Marcel M. (marcel)


Lesenswert?

Ich will ihn doch mit dem internen Quarz benutzen.
Ich hab den Quarz jetzt mal ausgeschalten und nen externen
drangehangen. Siehe da, es klappte!
Also habe ich ihn mal was senden lassen, und das UBR in jedem Zyklus
erhöht. Es zeigte sich das er bei einer Baudrate von 2400 (im Terminal
eingestellt) und dem Registerwert 109 (statt 103) keine Fehler mehr
gemacht hat. Daher würde ich davon ausgehen, das der RC-Oszillator sehr
starke Temperaturschwankungen zeigt. Aber war ja auch gutes Wetter
heute:-)

von Marius S. (lupin) Benutzerseite


Lesenswert?

Also der RC-Oszillator läuft eigentlich immer auf 1 mhz, den kann man
nicht verstellen.

Ja ich glaub aufgrund der synchronisation geht das mit 2400 baud noch.
aber bei höheren geschwindigkeiten bekommst du bestimmt probleme.

von Marcel M. (marcel)


Angehängte Dateien:

Lesenswert?

Also mit den Fusebits kann man den Oszillator verstellen (siehe Auszug
aus dem Datenblatt)

von Thomas K. (thkais)


Lesenswert?

@Marius: Datenblätter lesen.

@Marcel: Der interne Oszillator ist nicht sehr genau. Deshalb gibts
eine Möglichkeit zum "Feintuning" mit dem OSCCAL-Register.
Temperaturstabiler ist aber ein externes Quartz.

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.