Forum: Mikrocontroller und Digitale Elektronik atmega8 mit rs232 zu Putty


von Pascal B. (mini12345)


Lesenswert?

Hallo, ich versuche gerade Werte o.ä im Putty anzeigen zu lassen.

Das Problem ist wenn ich "Hallo" schreiben will kommt der obere Balken, 
siehe Bild.

Wenn ich 123 schreiben lassen will kommt das untere..

Wisst ihr wo der Fehler liegen könnte?

http://gyazo.com/0b11463ae6aa7e560be972faacc26ff9

$baud = 9600

Print "123"

Danke.

Ps: das Kabel benutze ich 
http://www.amazon.de/gp/product/B00425S1H8/ref=oh_details_o09_s01_i00?ie=UTF8&psc=1

und das Pollin Board.

: Bearbeitet durch User
von tester (Gast)


Lesenswert?

zunächst einmal... du kannst bilder im post anhängen, wenige hier werden 
irgendwelche hoster besuchen in der hoffnung die sind schadfrei ! ;)

zum anderen sehe ich nur ein bild, die rede war von zwei... oder täusche 
ich mich?

und ich würde für serielle kommunikation auf ein terminal á la 
hyperterminal (oder wie die auch alle heißen) zurückgreifen... putty ist 
da glaube ich die etwas abgespeckte variante

von Pascal B. (mini12345)


Angehängte Dateien:

Lesenswert?

Ich meine oben im Putty den Balken und weiter unten das qrs.

Ich hab bei Youtube schon gesehen das es mit dem Putty gehen muss....

von spess53 (Gast)


Lesenswert?

Hi

>Ich meine oben im Putty den Balken und weiter unten das qrs.

>Ich hab bei Youtube schon gesehen das es mit dem Putty gehen muss....

Anscheinend stimmt etwas mit deiner Senderoutine nicht:

Zeichen       1    2    3   ->   q    r    s
ASCII-Code  0x31 0x32 0x33     0x71 0x72 0x73

Bei 'Hallo' würden bei gleichem Offset von 0x40 Zeichen oberhalb von 
0x7F entstehen -> nicht darstellbar.

MfG Spess

von Pascal B. (mini12345)


Lesenswert?

Hi, und gibt es da eine Idee wie ich das richtig anzeigen lassen kann?

von spess53 (Gast)


Lesenswert?

Hi

Zeig doch mal dein Programm.

MfG Spess

von Pascal B. (mini12345)


Lesenswert?

Das ist eigentlich nur ein Testprogramm...

$regfile = "m8def.dat"
$crystal = 1000000
$baud = 9600



Do


Print "hallo"
Waitms 500

Loop
End

von Martin S. (tungl)


Lesenswert?

Und dein Mega8 laeuft wirklich mit 1MHz?

von Karl H. (kbuchegg)


Lesenswert?

> $crystal = 1000000

Bei Verwendung des internen Taktgenerators ist das nicht ungewöhnlich, 
dass die Baudrate nicht exakt eingehalten werden kann.

Allerdingsd vermisse ich ein CONFIG COM1 und aus der BASCOM Doku geht 
nicht hervor, auf welche Defaults die UART dann eingestellt wird.
Allerdings deutet vieles darauf hin, dass dein Mega eben nicht mit 1Mhz 
läuft, sondern vielleicht mit 900kHz, oder mit 1.1Mhz. Beim Mega8 ist 
das alles noch sehr schwankend, weswegen da auch immer ein QUarz 
empfohlen wird, der dann natürlich auch aktiviert und bei crystal 
angegeben werden muss.

: Bearbeitet durch User
von Pascal B. (mini12345)


Lesenswert?

ok, das versuch ich mal, ich stell ihn einfach mal auf den 8mhz um , ist 
ja auf dem board mit drauf.
ich melde mich ob es was gebracht hat .

von 0815 (Gast)


Lesenswert?

Pascal B. schrieb:
> 0b11463ae6aa7e560be972faacc26ff9.png

Ich liebe aussagekräftige Dateinamen.

Nimm mal ein vernünftiges Diagnoseprogramm für die Serielle 
Schnittstelle. Das Zeugs was Putty da abliefert kann doch kein Mensch 
lesen - passt zum Dateinamen.

Mit HTerm z.B. könntest du dir direkt angucken, was da für Binärdaten 
übertragen werden. Putty ist ein Terminalemulator, der alle möglichen 
Steuersequenzen interpretiert. Das willst du gerade nicht, wenn du 
analysieren möchtest, was da auf der Schnittstelle los ist bzw. schief 
geht.

von Pascal B. (mini12345)


Lesenswert?

Perfekt , Ihr seid die Besten. Es war tatsächlich am Quarz gelegen.
Mit den 16Mhz gehts wie gewollt.

Die Frage am Rande ist allerdings ob es mit dem internen generell nicht 
geht?

Danke euch !

von Lukas (Gast)


Lesenswert?

Pascal B. schrieb:
> Die Frage am Rande ist allerdings ob es mit dem internen generell nicht
> geht?

Es funktioniert auch mit dem internen. Verschiedene Geschwindigkeiten 
ausprobieren. 4800baud geht fast immer. Der interne Oszillator läßt sich 
auch mit dem OCCCAL Register nachstellen.

von Pascal B. (mini12345)


Lesenswert?

ok, danke . Ich teste das mal ...

von Mike (Gast)


Lesenswert?

Lukas schrieb:
> Verschiedene Geschwindigkeiten ausprobieren. 4800baud geht fast immer.

Um diese Aussage auf eine theoretische Basis zu stellen, wäre die 
Antwort auf die Frage interessant, was einen Baudratenfehler von z.B. 5% 
bei 4800Bd von einem Fehler von 5% bei 19200Bd unterscheidet, wenn die 
Signale ansonsten sauber über die Leitung gehen.

von Lukas (Gast)


Lesenswert?

Mike schrieb:
> Lukas schrieb:
>> Verschiedene Geschwindigkeiten ausprobieren. 4800baud geht fast immer.
>
> Um diese Aussage auf eine theoretische Basis zu stellen, wäre die
> Antwort auf die Frage interessant, was einen Baudratenfehler von z.B. 5%
> bei 4800Bd von einem Fehler von 5% bei 19200Bd unterscheidet, wenn die
> Signale ansonsten sauber über die Leitung gehen.

Die Frage ist weniger wissenschaftlich zu lösen als besser die Antwort 
in BASCOM zu suchen.

"$baud = 9600" Durch diese Zeile wird USART initialisiert. Anscheinend 
ohne das UC2X Bit zu berücksichtigen (BASCOM V2.0.7.5). Bei 1MHz 
Oszillatortakt ergibt sich dadurch ein Baudratenfehler von 7%. Bei 
$baud=4800 nur noch ein Fehler von 0,2%.

Bei 8MHz Systemtakt und 9200 Baud liegt der Fehler dann auch nur bei 
0,2%.

Der Baudratenfehler ist im Compilerreport von BASCOM aufgeführt.

Bei 8MHz Oszillatorfrequenz sollten 19200 Baud oder 4800 Baud  kein 
Problem sein. Bei 1MHz ist der Fehler bei 19200 Baud auch 7%.

Im Datenblatt zum Mega8 "Examples of Baud Rate Setting" gibt es weitere 
Infos zur Beziehung zwischen Baudrate und Systemtakt.

von Lukas (Gast)


Lesenswert?

Lukas schrieb:
> ohne das UC2X Bit zu berücksichtigen (BASCOM V2.0.7.5). Bei 1MHz

Sorry, sollte U2X Bit heißen.

von Karl H. (kbuchegg)


Lesenswert?

Lukas schrieb:

> Bei 8MHz Systemtakt und 9200 Baud liegt der Fehler dann auch nur bei
> 0,2%.

Du missverstehst da etwas.
die angegebenen 0.2% Fehler entstehen deshalb, weil man mit 8Mhz die 
angegebenen 9600 Baud nicht exakt erreichen kann, weil es keinen 
entsprechenden ganzzahligen Teiler gibt.
Aber Voraussetzung dafür ist, dass die 8Mhz auch wirklich 8Mhz sind.

Hier geht es aber um etwas anderes. Hier geht es darum, dass die 8Mhz 
eben nicht 8Mhz sind, sondern ein wenig kleiner bzw. größer, je nachdem 
wie der RC-Schwingkreis im IC gerade drauf ist.
Weicht der Schwingkreis um 6% von den 8Mhz ab, dann tut er das bei ALLEN 
Baudraten! 6% sind 6%, egal welchen kleineren Takt du davon ableitest 
(und was anderes tut man ja nicht, bei der Einstellung der Baudrate)

> Bei 8MHz Oszillatorfrequenz sollten 19200 Baud oder 4800 Baud  kein
> Problem sein. Bei 1MHz ist der Fehler bei 19200 Baud auch 7%.

Du redest von etwas ganz anderem bzw. gehst von ganz anderen 
Voraussetzungen aus. Du setzt voraus, dass die Taktfrequenz auch 
tatsächlich die ist, die draufsteht.
Das ist aber bei einem Mega8 bei Benutzung des internen Taktgebers (der 
entgegen landläufiger Meinung eben KEIN Quarz ist, sondern ein 
RC-Schwingkreis) aber nicht so. Gerade die älteren AVR weichen da schon 
mal kräftig davon ab und halten die Frequenz auch nicht besonders gut. 
Man kann da mit dem OSCCAL Register gegensteuern, braucht dann aber im 
Sommer andere Korrekturwerte wie im Winter, weil das ganze 
temperaturabhängig ist.

: Bearbeitet durch User
von Lukas (Gast)


Lesenswert?

Karl Heinz schrieb:
> Lukas schrieb:
>
>> Bei 8MHz Systemtakt und 9200 Baud liegt der Fehler dann auch nur bei
>> 0,2%.
>
> Du missverstehst da etwas.
> die angegebenen 0.2% Fehler entstehen deshalb, weil man mit 8Mhz die
> angegebenen 9600 Baud nicht exakt erreichen kann, weil es keinen
> entsprechenden ganzzahligen Teiler gibt.
> Aber Voraussetzung dafür ist, dass die 8Mhz auch wirklich 8Mhz sind.

Nein, kein Mißverständnis. War und ist mir schon klar.

> Hier geht es aber um etwas anderes. Hier geht es darum, dass die 8Mhz
> eben nicht 8Mhz sind, sondern ein wenig kleiner bzw. größer, je nachdem
> wie der RC-Schwingkreis im IC gerade drauf ist.
> Weicht der Schwingkreis um 6% von den 8Mhz ab, dann tut er das bei ALLEN
> Baudraten! 6% sind 6%, egal welchen kleineren Takt du davon ableitest
> (und was anderes tut man ja nicht, bei der Einstellung der Baudrate)

Dadurch kann der abweichende RC-Oszillator bei unterschiedlichen 
Baudraten mit ihren unterschiedlichen Fehlerraten bei Nennfrequenz den 
Fehler ausgleichen, bei anderen vergrößern. Hab da vorher nicht auf den 
Punkt geantwortet :(

>> Bei 8MHz Oszillatorfrequenz sollten 19200 Baud oder 4800 Baud  kein
>> Problem sein. Bei 1MHz ist der Fehler bei 19200 Baud auch 7%.
>
> Du redest von etwas ganz anderem bzw. gehst von ganz anderen
> Voraussetzungen aus. Du setzt voraus, dass die Taktfrequenz auch
> tatsächlich die ist, die draufsteht.

Nicht unbedingt. Hab das nur nicht weit genug erläutert. Wenn für 8MHz 
Systemtakt verschiedene Baudraten eingestellt werden, gibt es 
verschiedene systembedingte Baudfehlerraten. Weichen die 8MHz von ihrer 
Sollfrequenz ab, verkleinert sich der Baudratenfehler zu der einen 
Baudrate. Gleichzeitig könnte eine andere Baudrate gar nicht mehr 
funktionieren.

Ich möchte das gar nicht im einzelnen Ausrechnen - deshalb war mein 
Vorschlag, das auszuprobieren, was geht.

Das BASCOM ausgerechnet bei 1MHz und 9600 Baud eine mangelhafte 
Konfiguration verwendet, war Pech für den TO. Immerhin wird der große 
Bauderror im Compilerreport angezeigt.

> Das ist aber bei einem Mega8 bei Benutzung des internen Taktgebers (der
> entgegen landläufiger Meinung eben KEIN Quarz ist, sondern ein
> RC-Schwingkreis) aber nicht so. Gerade die älteren AVR weichen da schon
> mal kräftig davon ab und halten die Frequenz auch nicht besonders gut.
> Man kann da mit dem OSCCAL Register gegensteuern, braucht dann aber im
> Sommer andere Korrekturwerte wie im Winter, weil das ganze
> temperaturabhängig ist.

Ja, keine Frage, daß der interne Oszillator driftet. Auch 
unstabilisierte Versorgungsspannung von zB direkt versorgenden Batterien 
können einem plötzlich Rätsel aufgeben. Ich bin ja auch für einen 
stabilen Takt. Bei einer Schaltung, die aber sonst keinen Quarz benötigt 
und um schnell ein paar Debuginfos ausgeben zu lassen, würd ich immer 
wieder versuchen, den internen zu verwenden. Die guten Erfahrungen haben 
bei weitem überwogen.
(dies ist nur die Meinung des Authors und erhebt keinen Anspruch auf 
Allgemeingültigkeit :)

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.