PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : komisches Verhalten ATmega8 und RS232



MDKMurdoc
02.10.2008, 20:19
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

Ceos
02.10.2008, 20:40
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 ^_^

MDKMurdoc
02.10.2008, 20:49
Hallo

Welche Formel meinst du??

UART initialisieren??

$regfile = "m8def.dat"


$crystal = 16000000 'Quarzfrequenz
$baud = 19200

ICh nutze das Atml Board von Pollin

MFG

Mario

peterfido
02.10.2008, 22:41
Bist Du sicher, dass die Fuses für die 16Mhz richtig gesetzt sind?

MDKMurdoc
02.10.2008, 22:46
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

peterfido
02.10.2008, 22:54
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.

MDKMurdoc
02.10.2008, 23:11
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

Sauerbruch
02.10.2008, 23:19
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

MDKMurdoc
02.10.2008, 23:30
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

Sauerbruch
03.10.2008, 00:26
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.

MDKMurdoc
03.10.2008, 09:04
So

Ich habe bei den Fusebits CKSEL1, CKSEL2 und CKSEL3 die haken entferntund bei CKSEL0 den Haken reingemacht.

Es funktioniert. Endlich. Dank der guten Hilfe und den Tipps von euch.

Aber eine Frage habe ich noch. der sendet immer hinter dem Text noch 2 Zeichen.
Hab schon oft gelesen, dass man diese Zeichen unterbinden kann wenn man hinter der Zeichenkette ein Semikolon setzt.

Ist das richtig??


MFG

Mario

stefan_Z
03.10.2008, 12:14
Ja, das stimmt. Mit Semikolon sendet er kein Zeilenende

fhs
03.10.2008, 12:59
Hi,

obwohl ich sonst immer ganz pingelig mit der Terminologie bei den AVR Fuses bin und andere auf die richtige Ausdrucksweise hinweise, habe ich Mario in seinem ersten Thread (https://www.roboternetz.de/phpBB2/viewtopic.php?t=43323) genau zu diesem Thema falsch beraten. CKSEL1-3 und SUT0 müssen für Quarzbetrieb mit höheren Frequenzen "1" sein, also unprogrammiert, worauf Sauerbruch oben hingewiesen hat. Tut mir leid, dass ich im anderen Thread Verwirrung gestiftet habe!

Gruß

Fred

MDKMurdoc
03.10.2008, 13:21
Hallo Fred

Kein Mensch ist Fehlerfrei!!

Aber wie ist das mit den beiden Symbolen, die nach dem eigentlichen String kommen. z.b. Ich sende "Test" an HTerm, dann kommen dahinter immernoch /r und /n.
Wenn ich Hinter

print "Test"
noch ein Semikolon setze ergo so

print "Test";
dann kommen die beiden nicht.

Very Komisch :?:

MFG

Mario

fhs
03.10.2008, 13:37
Hallo Mario,

dass ein nach einen String gestelltes Semikolon die sonst bei der Ausgabe automatisch angehängten Zeichen "return" und "new line" unterdrückt, war schon bei den uralten BASIC Dialekten so.

Viele Grüße

Fred

oderlachs
31.05.2015, 08:16
Hallo Mario !

Erst mal einen Gruss die Oder hinauf nach Ffo ! Wuste gar nicht das es hier im Grenzgebiet noch "MµC- Bessene" gibt ;) dann bin ich ja nicht alleine...
Ja ich möchte mal sagen , zu Deinen Problemen, es ging es mir ebenso zu Anfang.
Gerade mit dem Pony Programm und den Fuses hatte ich auch enorme Prob's .
Ich habe dann Pollinboard und Bascom in die unterste Schublade verbannt und fahre mit einem STK500 und per C und C++ weitaus besser.
Das ist aber jedem seine eigene Sache, wie man am Besten zurecht kommt.

Ich wünsche Dir weiter viel Freunde mit dem Hobby, hier Fragen stellen und lesen ist eine gute Schule dafür.
So sei allen hier auch Dank an alle hier für Ihre Hilfen gesagt!

Gerhard

peterfido
31.05.2015, 09:37
Hallo,

nach knapp 7 Jahren wird ihn das wohl nicht mehr so interessieren ;)

Wenn man Bascom hat, braucht man das (Fuse verwirrende) PonyProg nicht wirklich. Das Pollinboard ist für 'mal eben was testen' und mit Textool-Sockel zum regelmäßigen flashen gut geeignet. Nachteilig sind die verbauten Quarze. Diese sollte man sockeln oder so, damit man 'mal eben schnell' einen verfuseten AVR mittels Quarzoszillator schnell wieder gebrauchstüchtig bekommt. Verfusen kann auch passieren, wenn man den ISP-Takt zu hoch gewählt hat.

MfG Peter