Forum: Mikrocontroller und Digitale Elektronik ATMega8: UBRR in BASCOM


von Thurys (Gast)


Lesenswert?

Hallo liebes Forum.
Bei meinem ersten Projekt mit Mikrocontrollern bin ich ziemlich schnell 
schon auf das erste Hindernis gestoßen.
Ich möchte den ATMega8 über die serielle Schnittstelle (RS232) mit dem 
Computer verbinden.
Den Schaltkreis habe ich aufgebaut und als Taktgeber verwende ich einen 
4MHz Quarz.
Dies ist das Programm, welches ich auf dem Controller laufen lasse:
1
$regfile = "m8def.dat"
2
3
$crystal = 4000000
4
5
$baud = 9600
6
7
8
Do
9
10
  Print "Hello World"
11
  Waitms 250
12
Loop
13
14
15
16
End

Jedoch kommt am Rechner nur Müll an (ich benutze den von Bascom 
integrierten Terminal).
Jetzt habe ich gelesen, dass man den UBRR ändern muss, jedoch weiß ich 
nicht, wie dieses in BASCOM geht.
Die Formeln habe ich mir auch schon angeguckt und ich verstehe auch, 
warum man es ändern muss, nur nicht wie.
Es wäre nett, wenn mir das jemand zeigen könnte.

Liebe Grüße
Thurys

von Kluchscheißernder N. (kluchscheisser)


Lesenswert?

Thurys schrieb:

> Jedoch kommt am Rechner nur Müll an (ich benutze den von Bascom
> integrierten Terminal).

Das lässt vermuten, dass die Baudrate nicht stimmt.

> Jetzt habe ich gelesen, dass man den UBRR ändern muss, jedoch weiß ich
> nicht, wie dieses in BASCOM geht.

Das macht Bascom bereits für Dich, da Du Controllertakt und Baudrate 
angegeben hast. Wie gut Bascom das macht, kann ich Dir allerdings nicht 
sagen.

> Die Formeln habe ich mir auch schon angeguckt und ich verstehe auch,
> warum man es ändern muss, nur nicht wie.

Schau Dir im Datenblatt die I/O-Register an (Zusammenfassung ganz 
hinten), Du kannst mit einfachen Zuweisungen (Registernahme=Zahl) darauf 
zugreifen.

> Es wäre nett, wenn mir das jemand zeigen könnte.

Ich vermute aber, dass es gar nicht daran liegt. Du hast zwar einen 
(nicht besonders für Baudraten geeigneten) Quarz angeschlossen. Hast Du 
ihn aber auch angemeldet? Damit meine ich, hast Du dem Mega8 durch 
entsprechendes Einstellen der Fusebits mitgeteilt, dass er den Quarz 
auch benutzen soll?

Wenn nein, dann probiere bitte nicht wild und unverstanden drauflos, 
denn dann sperrst Du Dich mit hoher Wahrscheinlichkeit aus. Wenn man an 
die Fusebits geht, muss man wissen was man tut. Da gibt es einige 
Möglichkeiten, den Controller für weiteres ISP-Programmieren 
lahmzulegen.

>
> Liebe Grüße
> Thurys

MfG, Consulter

von Spezi (Gast)


Lesenswert?

> Jetzt habe ich gelesen, dass man den UBRR ändern muss, jedoch weiß ich
> nicht, wie dieses in BASCOM geht.

Warum sollte man das tun? Wenn bei BASCOM die Angaben

> $crystal = 4000000
> $baud = 9600

korrekt eingetragen sind, berechnet es den Wert richtig. Eine Änderung 
von Registern ist nicht nötig.
(In dem Compiler-Log von BASCOM kann man die Abweichung der realen 
Baudrate zum Soll nachlesen)

Wie sind die Fusebits vom Controller eingestellt? Externer Quarz 
aktiviert? (CKSEL3..0 = 1111) Sonst läuft der interne Oszillator mit 
1MHz ...

von Thurys (Gast)


Lesenswert?

Danke dir für deine Antwort.
Die Fusebits habe ich schon auf den externen Quarz umgestellt.
Habe jetzt auch die Fehlerrate bei 9600Bd ausgerechnet, die liegt bei 
0.1%, also sollte sie noch akzeptabel sein.
Habe es jetzt so versucht:
1
$regfile = "m8def.dat"
2
3
$crystal = 4000000
4
5
$baud = 9600
6
Ubrr = 25
7
8
9
10
Do
11
12
  Print "Hello World"
13
  Waitms 250
14
Loop
15
16
17
18
End
Bringt aber auch keinen Vorteil...
Die Schaltung habe ich jetzt auch noch einmal kontrolliert, es sollte 
alles richtig sein (es ist wie im Tutorial beschrieben geschaltet).
Prinzipiell sollte es doch auch mit meinem Quarz funktionieren oder ist 
ein Baudratenquarz Pflicht?


Liebe Grüße
Thurys

von Spezi (Gast)


Lesenswert?

Was für eine serielle Schnittstelle verwendest du? (USB-Wandler, direkt 
im PC eingebaut, ...) Steht die Baudrate vom Terminal richtig?

> Prinzipiell sollte es doch auch mit meinem Quarz funktionieren oder ist
> ein Baudratenquarz Pflicht?

Antworten:  Ja  /  Nein  (die Abweichung von 0,2% ist problemlos)

von Hc Z. (mizch)


Lesenswert?

Kommt der Müll denn ziemlich genau 4mal pro Sekunde?  Erhöhe mal die 
Warteschleife auf 1000ms und zähl mal ab.

von Thurys (Gast)


Lesenswert?

Ja es sind ziemlich genau 4 mal pro Sekunde (glaube ich, ich werde die 
Wartezeit gleich mal auf 1000ms erhöhen und gucke dann, ob es einmal die 
Sekunde kommt).
Ich verwende direkt den COM-Port an meinem Rechner.
Die Baudrate steht auch in dem Terminalprogramm richtig.
Danke für eure Hilfe schonmal, freut mich, dass so schnell Antworten 
kommen =)


So habe es auf eine Sekunde gestellt und das stimmt genau (Jedenfalls 
stimmt es mit meiner Uhr überein)

von Hc Z. (mizch)


Lesenswert?

Wie sieht die Hardware aus, die an RxD und TxD des ATmega angeschlossen 
ist?

von malte (Gast)


Lesenswert?

Hallo!

Hast Du auch die Massen verbunden? Also die Masse Deiner Schaltung mit 
der Masse von Deinem Rechner? Ich meine mich dunkel zu erinnern, dass 
das Fehlen dieser Verbindung zu dem von Dir beschriebenen "Müll" führt. 
Nur so'n Gedanke...

Gruß
Malte

von David .. (david1)


Lesenswert?

Wie kommt den RX und TC vom µC zum PC?
Hast du einen Pegelwandler dazischen?
Wenn nicht wirds wohl daran liegen.


Gruss
David

von Thurys (Gast)


Lesenswert?

Als Pegelwandler habe ich den MAX232 zwischengeschaltet. Dies habe ich 
genau so gemacht, wie im Tutorial beschrieben.
Masse ist auch angeschlossen. Die ganze Schaltung ist auf einem 
Steckboard (Breadboard) aufgebaut. Kann es vielleicht daran liegen?

Liebe Grüße
Thurys

von David .. (david1)


Lesenswert?

Also an der Hardware liegts dann höchstwahrscheinlich nich.

Aber dann geh mal ins Bascom Terminal, dann auf den Reiter "Terminal" 
und dann "Settings" und schau ob da auch die richtige Baudrate 
eingestelle is ;)

Und wenn das auchnix hilft schau mal ob der µC wirklich mit dem externen 
Quarz läuft und zieh den einfach mal raus und schau ob dann immernoch 
was ankommt aufem Terminal. Wenn ja läuft er aufem internen ;)


gruss
David

von Thurys (Gast)


Lesenswert?

Hier habe ich mal einen Ausschnitt von dem Müll der rauskommt:
1
mdðålì߁zéÜìˆkÌðHelìoÀ{ëœÌC[Á•±q}ºíÜìˆiÄ𐕱±}téK±‘5Qü•±±ýº½Éq1m¤ðHell
2
½É1C[Á)a±ýºõ™áC[Á)aqýéõ‰áCkÄð)aqý¹½‘áC[Á)aq}]}áCKÁeììß ¯yáam¤ø
3
eÜìßôé\nˆu¢ø%±q};é“^nˆm¦ø%±±};é\îˆi¤ø)±qºé^îˆi¤ø%±q}zé\îˆi¤ø±c}
4
vé\îˆm¤ø5±q}ré\îˆmdø0)qñ}º½Éq!uÒüHelloÀ]½Éaa[ƒHelÜ}ôé—/‹WÁHÅaáyÑ+K¬
Bei genauerem Hinschauen sind Fragmente des "Hello World"s zu erkennen, 
was mich aber auch nicht weiterbringt.

Liebe Grüße

von David .. (david1)


Lesenswert?

Wie gesagt hast du die Baudrate im Terminal überprüft?

von Thurys (Gast)


Angehängte Dateien:

Lesenswert?

Habe den Quarz während des Betriebs rausgezogen, der Controller macht 
jedoch weiter.
Ich bin mir aber sicher, alles richtig eingestellt zu haben. Anbei ist 
ein Screenshot von den Fusebits (ausgelesen mit PonyProg).

Liebe Grüße

von Joe (Gast)


Lesenswert?

Wie lang dauert ein Wait 1 ?

Genau eine Sekunde ?


Oder stelle mal $crystal = 1000000 ein.

GGf. ist der ext. Quarz doch nicht aktiv.

Hast du einen Oszi ??

von Joe (Gast)


Lesenswert?

Du kannst auch in BASCOM deine Fuses setzen.

von Joe (Gast)


Lesenswert?

Es macht keinen Sinn, das UBRR zu benutzen, wenn man $baud = 9600 
benutzt.

Dabei wird schon alles richtig eingestellt.

UBRR ist nur bei manueller Festsetzung der Baudrate in Ass o.ä 
sinnnvoll.

von Karl H. (kbuchegg)


Lesenswert?

Thurys schrieb:
> Habe den Quarz während des Betriebs rausgezogen, der Controller macht
> jedoch weiter.

Dann wird dein Quarz nicht benutzt

> Ich bin mir aber sicher, alles richtig eingestellt zu haben.

Kann nicht sein.
Nochmal kontrollieren.

Wenn der µC auf Quarz steht und kein Quarz vorhanden ist, KANN der µC 
nicht arbeiten.

von Thurys (Gast)


Lesenswert?

Leider bin ich nicht im Besitz eines Oszis, bin ja noch ein armer 
Schüler ;)
Waitms 1000 dauert genau eine Sekunde.
Wenn ich $crystal = 1000000 setze, denn stimmen die Zeitabstände 
überhaupt nicht mehr (es ist alles viel schneller, als es sein sollte).
Mit $crystal = 4000000 haben die Wait-zeiten gestimmt, was für mich 
eigentlich ein Zeichen war, dass der Quarz genutzt wird. Jedoch 
verwundert es mich, dass der Controller weiterarbeitet, wenn der Quarz 
gezogen wird.


Liebe Grüße

von Samuel C. (dragonsam)


Lesenswert?

Dann hast du wohl deinen internen Quarz auf 4MHz gestellt.

von Kluchscheißernder N. (kluchscheisser)


Lesenswert?

Samuel C. schrieb:
> Dann hast du wohl deinen internen Quarz auf 4MHz gestellt.

Es gibt keinen internen Quarz .

Sollte der interne RC-Oszillator auf 4 MHz gesetzt worden sein, dann 
sollte man auch bedenken, dass dann der Oszillator des Mega8 bei anderen 
Einstellungen als 1 MHz nicht kalibriert ist und der Oszillator nach der 
"Blankenheimer Sonne" geht. Damit ist ein funktionierender UART sehr 
unwahrscheinlich.

MfG, Consulter

von Samuel C. (dragonsam)


Lesenswert?

Kluchscheißender Consulter schrieb:
> Es gibt keinen internen Quarz .

Entschuldigung, da hab ich wohl nicht aufgepasst.

von Thurys (Gast)


Lesenswert?

Hm das hilft mir jetzt auch nicht weiter.
Wie in dem Bild zu sehen ist, welches ich oben gepostet habe, sollten 
die Fusebits (meiner Meinung nach) richtig gesetzt sein. In BASCOM 
schaffe ich es übrigends nicht eine verbindung zu meinem Controller her 
zu stellen.

Grüße

von Kluchscheißernder N. (kluchscheisser)


Lesenswert?

Thurys schrieb:
> Hm das hilft mir jetzt auch nicht weiter.
> Wie in dem Bild zu sehen ist, welches ich oben gepostet habe, sollten
> die Fusebits (meiner Meinung nach) richtig gesetzt sein.

Ja, stimmt, ich hätte zwar noch SUT auf 11 gesetzt, aber daran wird es 
wohl nicht liegen.

Wenn Dein Mega8 wirklich diese Fusebit-Einstellung hat, dann darf er bei 
entferntem Quarz nicht laufen. Daher solltest Du mal prüfen, ob Dein PC 
Dich nicht narrt, also ob Du nicht irgeneinem anderen Irrtum am PC 
aufgesessen bist.

> In BASCOM
> schaffe ich es übrigends nicht eine verbindung zu meinem Controller her
> zu stellen.

Ich auch nicht, aber ich arbeite sowiso meist im AVR-Studio.

>
> Grüße

MfG, Consulter

von Janosch (Gast)


Lesenswert?

Einfache Hinweise für Anfänger (Schüler)

http://home.arcor.de/wosm/AtmegaProjekt/index.htm

... auch zum Programmieren mit BASCOM

von Thurys (Gast)


Lesenswert?

Kluchscheißender Consulter schrieb:
> Daher solltest Du mal prüfen, ob Dein PC
> Dich nicht narrt, also ob Du nicht irgeneinem anderen Irrtum am PC
> aufgesessen bist.

Hm gut und wie sollte ich das am besten herausfinden? Also auf welche 
Art und Weise finde ich das heraus?


Liebe Grüße

von Paul Baumann (Gast)


Lesenswert?

Miß mal an den Anschlüssen 2 und 6 des MAX232 gegen Masse (15) die
Spannungen. Es müssen dort ca. + bzw. - 9,5 Volt erzeugt werden.

MfG Paul

von Karl H. (kbuchegg)


Lesenswert?

Du kannst von einem ausgehen:

Wenn dein µC ohne Quarz arbeitet, dann ist er nicht auf Quarzbetrieb 
umgestellt.

Solange du also den Quarz rausziehen kannst und dein µC arbeitet weiter 
als wäre nichts gewesen, dann ist der Quarz 100% nicht aktiv.

von Thurys (Gast)


Lesenswert?

Da stellt sich mir die Frage, wie ich diesen Quarz nun aktiv bekomme....
Habe es jetzt mit einem weiteren Mega8 probiert -> gleicher Fehler.

von Karl H. (kbuchegg)


Lesenswert?

Thurys schrieb:
> Da stellt sich mir die Frage, wie ich diesen Quarz nun aktiv bekomme....
> Habe es jetzt mit einem weiteren Mega8 probiert -> gleicher Fehler.


Dein Brennprogramm malträtieren.
µC auslesen
Fuses ändern
in µC reinschreiben

zur Kontrolle: µC aus der Fassung nehmen
Brennprogramm muss beim Ausleseversuch einen Fehler melden

µC wieder rein.
Fuses erneut auslesen. Stimmen die noch?

Nachdem du das Programm (über BASCOM) gebrannt hast: Fuses nochmal 
auslesen, nicht das der BASCOM Brenner sich an den Fuses vergreift, weil 
irgendwo in den Konfigurationsoptionen ein Häkchen eingeschaltet ist.

Du musst da ein wenig spielen und probieren.
Aber Fakt ist: Bei richtiger Einstellung läuft der µC nicht ohne Quarz.

von Paul Baumann (Gast)


Lesenswert?

Seriell verbinden  ohne Quarz,
ärgert den Bediener schwarz!

(alte mongolische Volksweisheit)

;-)
MfG Paul

von David .. (david1)


Lesenswert?

Also ich hab bei mir paar Sachen im Einsatz die laufen auf den internen 
4Mhz vom Mega8, und da funzt der Uart wunderbar.

Ich glaub eher die Terminaleinstellungen sind falsch.

von r-u (Gast)


Lesenswert?

Ich denke auch, daß Du den internen Oszillator auf 4MHz eingestellt 
hast, sondt würde der Chip ohne Quarz nicht laufen. Du kannst auch 
versuchen, etwas zu mogeln: Crystal=4100000 oder 3900000 probieren (bzw. 
an passende Werte 'rantasten) und die Fuses so lassen. Allerdings ist 
Deine Lösung dann chip- und temperaturabhängig.. :-)

von kruemeltee (Gast)


Lesenswert?

intern 1Mhz ist voreingestellt und wirds wahrscheinlich auch noch sein, 
klick im Ponyprog Fusebits Dialog auch mal auf Read, wenn du das noch 
nicht getan hast ;)

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.