ATMega8: UBRR in BASCOM

Gast #1725494
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
#1725544
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
Gast #1725554
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 ...
Gast #1725557
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
Gast #1725565
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)
Gast #1725580
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)
Gast #1725670
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
Gast #1725718
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
#1725729
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
Gast #1725740
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
Gast #1725758
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
Angehängte Dateien:
Gast #1725794
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
#1725805
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
Gast #1725817
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
#1725832
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
#1725896
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.
Gast #1726585
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.. :-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren