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
4 MHz interner Takt sind sehr schlecht, da der Takt sehr ungenau. Da gibts sehr oft probleme, verwende mal probeweise einen 3,6863MHz.
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
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
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
Das ist aber nicht das originale C Programm, oder? Die Initialisierung vom USART hätte ich eher innerhalb der main-Funktion vermutet, nicht ausserhalb.
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.
@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
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?
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
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
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
@ 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.
@Jens123 Flury? Der Mann heißt Peter Fleury... (Nur damit er gefunden werden kann.;-)) Gruß Elektrikser
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.