welche Einstellungen bei der Fleury-UART-Bibliothek

Gast #2888222
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.
Gast #2888250
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.
#2888263
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
Gast #2888270
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
Gast #2888295
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.
Gast #2888367
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ß.
Gast #2888386
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!
Gast #2888424
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
Gast #2888453
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.
Gast #2888612
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?
Persönliche Seite #2888618
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
Gast #2888837
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren