Forum: Compiler & IDEs wahrscheinlich einfaches USART Problem


von Tom (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich versuche mein USART an einem ATMEGA8 zum laufen zu bringen, aber
irgendwo liegt der Hase im Pfeffer.
Ich habe den Code angehängt und meine Hardware ist Mega8, interner Takt
4MHz, Max232 und AVR-GCC.
Das senden einer Konstante funktioniert einwandfrei, allerdings kann
ich nichts vom PC empfangen. Der mC kommt auch nicht zum übertragen der
Konstante die ich am Ende sende. Ich denke auch ich habe alles korrekt
verdrahtet(kann man das prüfen?).
Mit der uartlibrary geht garnichts, wieso auch immer.

Grüße Tom

von Hubert (Gast)


Lesenswert?

4 MHz interner Takt sind sehr schlecht, da der Takt sehr ungenau. Da
gibts sehr oft probleme, verwende mal probeweise einen 3,6863MHz.

von Tom (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Hubert,
was heisst denn ungenau genau ;-)

Das senden von mC nach PC klappt einwandfrei und die Signale vom PC
kommen auch richtig am mC an (mit Oszi geschaut). Ich habe auch schon
den Mega getauscht und den Max. Ausserdem habe ich auch die Fuse Bit
neu gesetzt und einen externen 8MHz Oszillator drangehabt. Alles bringt
irgendwie nichts. Mein ursprunglüch angehängter Code hatte einen kleinen
Copy and Paste Fehler. Korrierter Code ist auch angehängt.
Kann mir da noch jemand helfen ?

Grüße Tom

von Hubert (Gast)


Lesenswert?

Hallo Tom, der interne Oszillator ist in der Frequenz nicht sehr genau.
Du hast dir sicher im Datenblatt die UBRR Settings angeschaut und dabei
festgestellt das diese geraden Frequenzen nicht das ideale sind. Wenn
dann die interne Frequenz auch noch daneben ist dann hast du rasch mehr
als die 0,2% Fehlertoleranz. Daher sollte man bei Verwendung des UART
eine dieser krummen Frequenzen nehmen.
Bei deinem Assebler-Problem kann ich dir nicht helfen.

MfG Hubert

von Tom (Gast)


Lesenswert?

Morgen,

@Hubert
Welches Assembler Problem? Egal.

Wie schon erwähnt klappt einfaches senden von mC zu PC einwandfrei. Ich
kann dort keine Fehler feststellen. Das Problem ist nur wenn ich die
andere Richtung senden will. Da klappt garnichts.
Und über die Genauigkeit kann ich nichts sagen. Es klappt ja auch nicht
mit einem externen Oszillator.
Vielleicht hat ja jemand sonst noch einen Vorschlag. Die Signale kann
ich am mC ankommen sehen aber nicht verarbeiten.

Vielen Dank
Tom

von A.K. (Gast)


Lesenswert?

Das ist aber nicht das originale C Programm, oder? Die Initialisierung
vom USART hätte ich eher innerhalb der main-Funktion vermutet, nicht
ausserhalb.

von Jörg Wunsch (Gast)


Lesenswert?

Der interne Oszillator taugt durchaus für ,,Wohnzimmeranwendungen''
(als T ~ const, Ucc ~ const), sofern man OSCCAL ordentlich benutzt.
Wird selbst von Atmel in AVR-Seminaren so empfohlen, ich hab's auch
schon zur Genüge benutzt.  (Bei F_CPU = 1 MHz muss man allerdins das
U2X-Bit setzen, um in der Toleranz bleiben zu können.)

Hardwaremäßig ist alles OK, ja?  Insbesondere der Pegelinverter
(MAX232 oder sowas).  Was ich nicht verstehe: woher weißt du bei
dieser Applikation, dass sie zwar senden aber nichts empfangen kann?
Die sendet doch erst, nachdem sie was empfangen hat.

Ich würde innerhalb von main() noch eine Endlosschleife drum ansetzen.

von Tom (Gast)


Lesenswert?

@A.K. nein das ist nicht das original Prog ich habe nur copy und paste
gemacht, da der original code sehr lang ist.

@Jörg
ich habe auch schon versucht nur zu senden. das klappt alles wunderbar,
z.B in einer Endlosschleife immer irgendwelche Zahlen oder Strings
senden Das Terminalprog zeigt auch immer alles richtig an.
Beim senden gibt es halt irgendwie Probleme. Wenn ich mit dem Oszi am
Eingang des mC schaue erkenne ich immer wenn vom PC gesendet wird das
kurzzeitig eine Sequenz aus High und Low ankommt. Geht halt verdammt
schnell. Daher schließe ich drauf, dass der Pegelwandler korrekt
arbeitet.
Von Fehlern beim senden ist mir noch nichts aufgefallen.

Grüße Tom

von Mike (Gast)


Lesenswert?

Wenn du ein Oszi hast, dann kannst du dir doch genau anschauen, was der
MC sendet und ob das Timing stimmt?!
Oder ist es kein Speicheroszi?

von Tom (Gast)


Lesenswert?

Hallo Mike,

für ein Speicheroszi habe ich nicht den nötigen Geldbeutel.
Würde es sinn machen um die physikalische Verbindung zu setzten zwei
MAX hintereinander zu schalten und dann jeweils einen ComPort zum
senden und einen zum empfangen zu nehmen. Ist zwar von hinten durch die
Brust aber ich habe sonst keine weiteren Ideen.

Grüße Tom

von Peter (Gast)


Lesenswert?

hallo,
beschäftige mich seit geringer zeit mit µC -> PC mit USART.
jetzt ist mir hier was aufgefallen und zwar von:

Hubert, der schreibt:
Du hast dir sicher im Datenblatt die UBRR Settings angeschaut und dabei
festgestellt das diese geraden Frequenzen nicht das ideale sind. Wenn
dann die interne Frequenz auch noch daneben ist dann hast du rasch mehr
als die 0,2% Fehlertoleranz.

meine frage ist wie berechne und aus welchen parametern kann ich die
fehlertoleranz bestimmen.

mfg
Peter

von Jens123 (Gast)


Lesenswert?

Hallo
kleiner tipp..
such mal nach Peter Flury der hat eine sehr gute Uart Libary
lass dich nicht verwirren durch die Quarzprobleme..
ich habe UART mit dem internem 8MHz Oszilator ohne Probleme am laufen
gehabt..

wobei du beim empfanngen nur aufpassen must (besonders bei hohen
bautraten) ist dass die Zeit zum verarbeiten der empfanngenen daten
nicht zu gross wird

das Problem hatte ich mal beim mega8
ich hatte Daten vom PC gesendet an den µC und dieser sollte dann die
Bytes aufs Display schreiben
einige Zeichen waren in ordnung andere nicht
dabei war sogar ein Muster
erstes zeichen ok zweites, drittes nicht rest ok
abhilfe brachte da nur die daten im RAM zwichenzuspeichern

Gruss Jens

von Hubert (Gast)


Lesenswert?

@ Tom
Entschuldige den Unsinn mit Assembler, ich meinte natürlich C. Ich habe
noch keinen selbstgestrickten UART verwendet da ich die Lib von Fleury
nehme, die funktioniert bestens. Mit dem internen Oszillator hatte ich
allerdings immer Probleme.

@Peter
Die Berechnungen stehen im Datenblatt beim USART.

von Elektrikser (Gast)


Lesenswert?

@Jens123

Flury? Der Mann heißt Peter Fleury...
(Nur damit er gefunden werden kann.;-))

Gruß Elektrikser

von Tom (Gast)


Lesenswert?

Hallo,

ich habe mein komplettes System neu aufgesetzt und die uart Library von
Peter Fleury heruntergeladen und getestet. Nun läuft alles wunderbar.
Ich kann mir zwar nicht erklären warum, vielleicht gab es einfach ein
Problem mit GCC.
Für sogenannte Heimanwendungen kann ich nur sagen, dass der interne
Quarz sich wunderbar eignet. Bisher konnte ich noch keine Probleme
feststellen.
Schöne Ostern euch allen und vielen Dank

Tom

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.