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
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
> 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 ...
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
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)
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)
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
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
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
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
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 ??
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.
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.
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
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
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
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
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
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.
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.
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.
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.. :-)
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 ;)