fehler in der formel zur baudberechnung ?
richtige frequenz im programm eingestellt?
ein codefetzen in dem du UART initialisierst und die controller einstellungen wäre hilfreich um das problem einzugrenzen ^_^
Hallo zusammen.
Durch rumprobieren mit verschiedenen Baudraten ist mit folgendes aufgefallen.
Wenn ich die gleiche Baudrate nehme im Terminal wie im Controller kommt dabei nur Müll raus.
Wenn ich z.b. im Controller die Baudrate auf 19200 setze und im Terminal auf 1200 dann klappt die Kommunikation ohne Probleme.
Es kommt auch genau das an was ankommen soll im Terminal.
Hat einer eine Idee woran das liegen kann.
MFG
Mario
fehler in der formel zur baudberechnung ?
richtige frequenz im programm eingestellt?
ein codefetzen in dem du UART initialisierst und die controller einstellungen wäre hilfreich um das problem einzugrenzen ^_^
Hallo
Welche Formel meinst du??
UART initialisieren??
$regfile = "m8def.dat"
$crystal = 16000000 'Quarzfrequenz
$baud = 19200
ICh nutze das Atml Board von Pollin
MFG
Mario
Bist Du sicher, dass die Fuses für die 16Mhz richtig gesetzt sind?
Wenn das Herz involviert ist, steht die Logik außen vor! \/
Woran seh ich das die Fuses für 16 MHz gesetzt sind.
Bei mir sind folgende Fuses aktiviert:
Bootsz1, Bootsz0, SUT0, CKSEL3, CKSEL2 und CKSEL1 sowie SPIEN. Den letzten kann ich nicht ändern.
Ich bin noch Anfänger.
MFG
Mario
Dazu müsstest Du erstmal mehr Details zu Deiner Schaltung nennen. Ist überhaupt ein externer Quarz dran, oder ein Quarzoszillator? Am besten wäre, wenn Du im Programm erstmal die Crystal umstellst. z.B. auf 1000000 und dann gucken, ob die Kommunikation passt. Wenn nicht 2000000 ausprobieren, usw. In jedem Fall nicht einfach an den Fuses rumschrauben, wenn Du nicht genau weißt, was Du machst.
Wenn das Herz involviert ist, steht die Logik außen vor! \/
Also
Ich bin noch voll am Anfang. Ich will erstmal probieren, damit ich ein Gefühl dafür bekommen.
Auf dem Board sind 3 Quarze vorhanden. 1 mal 8 MHz und 2 mal 16 MHz.
An den Atmega8 sind der 16MHz angeschlossen.
So habe den Crystal auf 1000000, da kommen nur irgendwelche Symbole an in HTerm bei 2000000.
Baudrate habe ich im Terminal 9600 und im Programm auch.
Was ich nicht versteh, wenn ich im terminal die Baudrate auf 600 umstelle. dann kommen die daten an die ich über den Controller sende.
MFG
Mario
Dass die Kommunikation mit 19200 Bd am Controller und 1200 Bd am Terminal läuft, ist interessant. Dabei fällt auf, dass 19200 / 1200 genau 16 ergibt. Das heißt, dass Dein Controller wohl nur mit 1/16 der vermuteten Frequenz läuft. Und das riecht sehr danach, als wäre der interne 1MHz-Oszillator aktiv.
Wenn Du die fuses CKSEL 3, 2 und 1 aktiviert hast, ist der interne 1MHz-Oszillator aktiv. Ein extrem hilfreiches Fuse-Tool findest Du hier:
http://www.engbedded.com/cgi-bin/fc.cgi
Also - änder´doch einfach mal $Crystal auf 1000000, oder ändere die CKSEL-Fuses auf 1110 (exakt - "aktiviert" entspricht Low!).
Mit welcher Software programmiertst Du denn die Fuses?
Gruß,
Daniel
Das mit den umstellen auf 10MHZ habe ich schon probiert. kein erfolg.
Ausgelesen habe ich die Fusebits mit Ponyprog2000.
Wegen den Fusebits. Da muss ich also:
CKSEL3, CKSEL2 und CKSEL1 haken raus und bei CKSEL0 den Haken rein.
Oder habe ich das jetzt falsch verstanden.
MFG
Mario
Das mit den Haken ist genau richtig.
Wenn Dein Controller mit dem internen Oszillator mit 1 MHz getaktet wird, kann´s mit 10 MHz ($Crystal = 10.000.000) auch nicht klappen.
Probier´s entweder mal mit 1 (!) MHz als $Crystal-Wert, oder setze eben die CKSEL-Fuses auf 0001. Dann ist der externe Quarz aktiviert.
Lesezeichen