Forum: Mikrocontroller und Digitale Elektronik welche Einstellungen bei der Fleury-UART-Bibliothek


von Anfänger (Gast)


Lesenswert?

Ich möchte mit Hilfe der Fleury-UART-Bibliothek Zeichen an meinen PC 
senden. Das hab ich auch getan und ich empfange schon mal ein Zeichen. 
Leider entspricht das Zeichen, was ich empfange, nicht dem Zeichen, dass 
ich versend.

Senden tue ich eine 1:
uart_putc ('1');
Empfangen tue ich mit PuTTY ein "g"

Oder ich sende ein y:
uart_putc ('y');
im PuTTY-Anzeigefenster erscheint ein "C"

Mein erster Gedanke war, check mal, ob die Einstellungen stimmen
in PuTTY eingestellt:
-Baudrate 2400
-Databits 8
Stop bits 1
Parity None
FlowControl XON/XOFF

Im Atmega88
1
 
2
...
3
/* define CPU frequency in Mhz here if not defined in Makefile */
4
#ifndef F_CPU
5
#define F_CPU 1000000UL
6
#endif
7
...
8
#define UART_BAUD_RATE      2400
9
...

Die Baudraten stimmen überein, wie die anderen Sachen sind, konnte icn 
nicht herausfinden. In der ausgedruckten Anleitung zu den 
Fleury-Funktionen werden nur die allg. Funktionen erklälrt wie die 
Funktionen uart_putc und die anderen funktionieren. Andere spezifische 
Einstellungen schein ich da nicht einstellen zu können, leider habe ich 
bis jetzt noch nicht rausbekommen, wie genau die Einstellungen da sein 
müssen.

Andere Möglichkeit wäre vielleicht, dass bei PuTTY der falsche 
Zeichensatz eingestellt ist? Ich hab da einfach mal verschiedene 
ausprobiert, Latin-1-WestEurope war standardmässig eingestellt ..., ich 
weis es halt nicht.
Falls mir da jemand von Euch einen Tipp geben könnte, freute ich mich 
sehr darüber.

von Anfänger (Gast)


Lesenswert?

ach so, der Atmega88 benutzt seinen internen Oszillator. Der hat wohl, 
wie ich es gelesen habe, eine Frequenz von 1MHz.

von Spess53 (Gast)


Lesenswert?

HI

>ach so, der Atmega88 benutzt seinen internen Oszillator. Der hat wohl,
>wie ich es gelesen habe, eine Frequenz von 1MHz.

Ja. Aber der ist für die serielle Schnittstelle ungeeignet.

MfG Spess

von Anfänger (Gast)


Lesenswert?

Spess53 schrieb:
> Ja. Aber der ist für die serielle Schnittstelle ungeeignet.
>
> MfG Spess

Hmm, dass ist ja blöd :-(

Und wenn ich eine ganz langsame Baudrate nehme, zB. statt 2400 100 oder 
10 - ganz langsam halt?

Liegt es daran, dass der Fehler zu groß ist? Oder ist der interne 
Oszillator zu ungenau?

Müssten dann aber die Zeichen nicht auch schwanken? Ich erhalte immer 
das gleiche Zeichen.

von Master (Gast)


Lesenswert?


von H.Joachim S. (crazyhorse)


Lesenswert?

Du kannst runter gehen bis 1 baud - der Fehler bleibt immer gleich.
Der Name sagt es schon - asynchrone Datenübertragung. D.h. auf gut 
deutsch, beide Übertragungspartner gehen von einer einigermassen 
stabilen Zeitbasis aus, um eintreffende Daten einsortieren zu können.
Lösungsmöglichkeiten:
-stabile Zeitbasis auf beiden Seiten, dann funktioniert es so, wie 
gedacht
-synchrone Übertragung, erfordert eine eigene Taktleitung
-eine Übertragungsmethode, die den Takt mitführt (verdoppelt aber die 
Frequenz bzw. halbiert die effektive Übertragungsgeschwindigkeit bei 
gegebener Bandbreite)
-"intelligente" Methoden, die sich aufeinander abstimmen und auch mal 
mit einer Baudrate von z.B. 21700 klar kommen

von Spess53 (Gast)


Lesenswert?

Hi

>Liegt es daran, dass der Fehler zu groß ist? Oder ist der interne
>Oszillator zu ungenau?

Ersteres resultiert aus letzterem.

Du könntest mit dem OSCCAL-Register die Frequenz des internen 
RC-Oszillators in einen brauchbaren Bereich verschieben. Bleibt aber 
eine Frickellösung. Stabil wird es erst mit einem Quarz, Quarzoszillator 
oder Keramikoszillator.

MfG Spess

von Master (Gast)


Lesenswert?

Spess53 schrieb:
> Du könntest mit dem OSCCAL-Register die Frequenz des internen
> RC-Oszillators in einen brauchbaren Bereich verschieben. Bleibt aber
> eine Frickellösung. Stabil wird es erst mit einem Quarz, Quarzoszillator
> oder Keramikoszillator.

Da ich ein Anfänger bin und mir das, was Du vorschlägst, noch zu tief in 
die Materie geht - verschieben der internen Frequenz - ist es einfacher, 
einen externen Quarz anzuschließen.

Aber ich danke Euch für den Hinweis mit der mangelnden 
Taktfrequenzgenauigkeit.

von Jackfritt (Gast)


Lesenswert?

Port an serielle oder ist ein pegelkonverter dazwischen?
Einfach mal die bits invertieren. Den fehler habe ich auch noch vor ein 
paar tagen gemacht.

Gruss,
Jörg

von Ein Gast schreibt (Gast)


Lesenswert?

Anfänger schrieb:
> Und wenn ich eine ganz langsame Baudrate nehme, zB. statt 2400 100 oder
> 10 - ganz langsam halt?

Das meinst du nicht ernst, oder. Ein 2% Baudratenfehler bleibt ein 2% 
Baudratenfehler, egal wie schnell. Der Fehler ist relativ, in diesem 
Fall relativ zu groß.

von Rainer Zufall (Gast)


Lesenswert?

Meine Erfahrung:
Der interne Oszillator von moderneren Atmel-Controllern ist durchaus 
recht stabil und auch bei den in Wohnräumen vorkommenden 
Temperaturschwankungen kann man den schon für UART verwenden, wenn man 
weiss was man tut.


Für kritische Sachen natürlich Resonator oder Quarz!

von spess53 (Gast)


Lesenswert?

Hi

Nachtrag:

>uart_putc ('1');
>Empfangen tue ich mit PuTTY ein "g"

>uart_putc ('y');
>im PuTTY-Anzeigefenster erscheint ein "C"

Das Verhalten lässt sich allerdings durch einen (kleinen) 
Baudratenfehler nicht so richtig erklären (LSB links) :

1->g  10001100 -> 11100110
y->C  10011110 -> 11000010

Jackfritt (Gast) könnte Recht haben:

1 (invertiert)     01110011
g (verschoben)      11100110

y (invertiert)     01100001
C (verschoben)      11000010

Da sollte der TO mal die Schaltung preigeben.

MfG Spess

von katastrophenheinz (Gast)


Lesenswert?

Ein Gast schreibt schrieb:
>> Und wenn ich eine ganz langsame Baudrate nehme, zB. statt 2400 100 oder
>
>> 10 - ganz langsam halt?
>
>
>
> Das meinst du nicht ernst, oder. Ein 2% Baudratenfehler bleibt ein 2%
>
> Baudratenfehler, egal wie schnell. Der Fehler ist relativ, in diesem
>
> Fall relativ zu groß.

ja und nein: Der Fehleranteil, der durch den ungenauen Systemclock 
bedingt ist, bleibt konstant. Der Fehleranteil, der durch den nicht 
ganzzahligen Quotienten von Fosc/Baudrate auftritt, wird jedoch mit mit 
abnehmender Baudrate kleiner. bei 1Mhz und 2400 Baud sind das jedoch nur 
0,2%, also kein Ding. (Zum Vergleich 1Mz/9600 Baud sind 7% Fehler. Das 
ist dann schon relevant) Im Nomalfall ist der interne Osc. ausreichend 
genau, um bei langsamen Baudraten den UART fehlerfrei befeuern zu 
können.

Ich tippe auf das, was Spess da ausgerechnet hat: Signal ist invertiert 
und die jeweils fehlende 0 ist dann das Startbit.

von Anfänger (Gast)


Lesenswert?

Jackfritt schrieb:
> Port an serielle oder ist ein pegelkonverter dazwischen?

Ja genau, ein MAX232 hängt noch dazwischen. Ich habe jetzt eben 
festgestellt, dass ich den Pegelwandler falsch angeschlossen habe :-(

Ich habe nur die Pins 15 und 16 angeschlossen und an die Pins 15 und 16 
auch die beiden Kondensatoren drangehängt, die eigentlich an die Pins 2 
und 6 gehören. Aber an die Pins 15 und 16 liegt ja dann auch noch eine 
Spannung an. Darum war im Oszi das Signal vorher zwar auch immer 
sichtbar, aber es lag auch immer nur so bei 3 Volt. Jetzt schwingt das 
Signal im Oszi auch richtig bis 12 Volt hoch und das Zeichen wird 
korrekt empfangen.

Was mir in dem Tutorial Kopfzerbrechen bereitet hat war, dass man für 
den MAX232 zwei Anschlussbilder gezeichnet hat, dass hat mich Anfänger 
verwirrt. Dort werden in dem ersten Bild die Verknüpfungen zwischen uC, 
Kondensatoren und dem Stecker zur seriellen Schnittstelle gezeigt, dann 
aber nochmal ein zweites Bild, wo ICP2 steht und was anscheinend auch 
für den MAX232 gilt, wo dann gesondert nochmal zu 5V und GND eine 
Verbindung stattfindet.

Mal noch eine andere Frage - der MAX232 erhöht ein Signal auf bis zu 12 
Volt - aber ich schließe als Versorgungsspannung doch "nur" 5 Volt an. 
Und es ist doch Gleichstrom, also ein kleiner eingebauter Trafo, der mir 
aus 5 Volt 12 Volt macht, ist wohl nicht in dem MAX232 drinnen verbaut?

von Lötlackl *. (pappnase) Benutzerseite


Lesenswert?

> Mal noch eine andere Frage - der MAX232 erhöht ein Signal auf bis zu 12
> Volt - aber ich schließe als Versorgungsspannung doch "nur" 5 Volt an.
> Und es ist doch Gleichstrom, also ein kleiner eingebauter Trafo, der mir
> aus 5 Volt 12 Volt macht, ist wohl nicht in dem MAX232 drinnen verbaut?
Eine Ladungspumpe. http://de.wikipedia.org/wiki/Ladungspumpe

von spess53 (Gast)


Lesenswert?

Hi

>also ein kleiner eingebauter Trafo, der mir
>aus 5 Volt 12 Volt macht, ist wohl nicht in dem MAX232 drinnen verbaut?

Nein. Stichwort ist Ladungspumpe.

MfG Spess

von Anfänger (Gast)


Lesenswert?

cool, was es alles gibt. Vielen Dank für den Hinweis mit der 
Ladungspumpe :-)

von spess53 (Gast)


Lesenswert?

Hi

Noch was:

>FlowControl XON/XOFF

solltest du abschalten.

MfG Spess

von Anfänger (Gast)


Lesenswert?

Ich hab nochmal eine Frage. Im Internet hab ich einfach mal diese 
Beschaltung des MAX232 gefunden:

http://www.botskool.com/images/forums/microcontroller_uart_max232_circuit.jpg

Dort steckt im Gegensatz zu der Beschaltung im AVR-Tutorial zw. PIN2 und 
PIN6 nur ein Kondensator. Im AVR-Tutorial befinden sich daran zwei 
Kondensatoren, die dann weiter zu Masse und +5V führen.

Geht diese Beschaltung auch oder erfüllt sie eine ganz andere Aufgabe?

von Spess53 (Gast)


Lesenswert?

Hi

>Ich hab nochmal eine Frage. Im Internet hab ich einfach mal diese
>Beschaltung des MAX232 gefunden:

>http://www.botskool.com/images/forums/microcontrol...

Für dem MAX232 gibt es ein gültiges Datenblatt des Herstellers. Das ist 
maßgebend.

MfG Spess

von Anfänger (Gast)


Lesenswert?

Spess53 schrieb:
> Für dem MAX232 gibt es ein gültiges Datenblatt des Herstellers. Das ist
> maßgebend.

Warum macht man eigentlich bei dem MAX232 die Kondensatoren extern? 
Warum kann man die nicht gleich noch in dem Chip mit integrieren? Oder 
gibt es nicht so kleine Kondensatoren, die in den Chip reinpassen 
wuerden?

von Spess53 (Gast)


Lesenswert?

Hi

>Warum macht man eigentlich bei dem MAX232 die Kondensatoren extern?

Weil es dann kein MAX232 ist. Du kannst aber gern einen anderen nehmen, 
der keine Kondensatoren benötigt:

http://datasheets.maximintegrated.com/en/ds/MAX220-MAX249.pdf

MfG Spess

von Anfänger (Gast)


Lesenswert?

Spess53 schrieb:
> Weil es dann kein MAX232 ist. Du kannst aber gern einen anderen nehmen,
> der keine Kondensatoren benötigt:

Vielen Dank für den Hinweis.

Gibt es auch einen fertigen MAX XXX, der auch gleich Optokoppler zur 
galvanischen Trennung integriert hat?

von Spess53 (Gast)


Lesenswert?

Hi

>Gibt es auch einen fertigen MAX XXX, der auch gleich Optokoppler zur
>galvanischen Trennung integriert hat?

So etwas?

http://de.rs-online.com/web/p/products/264412/?cm_mmc=DE-PPC-0411-_-google-_-3_Supplier+M-Z+07+2012-_-nm232dd_Broad&gclid=CP3izIKTn7MCFQu7zAod9RcAsw

MfG Spess

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.