Hallo, ich versuche seit geraumer Zeit bei einem ATTiny2313A den UART zum Laufen zu bringen. Da sich der Controller bereits auf einer Platine befindet, habe ich bei der Hardware kaum noch Änderungsmöglichkeiten. Was habe ich bisher gemacht: - Ich habe einen kleinen Code geschrieben für einen ATMega48 in Verbindung mit einem RFM12B. Zum Testen habe ich mir dafür auch den UART eingerichtet. -Nachdem alles problemlos funktionierte, habe ich mir die Platine gebaut, allerdings bestückt mit einem ATTiny2313A. Ich bekomme damit zwar eine UART-Verbindung, aber nur Hieroglyphen. Ich habe praktisch alle Baudraten durchbrobiert, kein Erfolg. Getaktet wird der Prozessor vom RFM12 mit 10MHz. -Zum Testen habe ich dann noch eine Lochstreifenplatine mit einem einfachen ATTiny2313(DIL) bestückt. Anfangs gab es auch damit Probleme, aber nach Änderung der UBRR-Formel (ursprünglich hatte ich die Formel aus dem Tutorial) lief es eigentlich problemlos. Auch die C_Variante von Fleury lief einwandfrei. -Diese Erkenntnis habe ich auf den 2313A übertragen, aber auch das war erfolglos. Auch die C-Funktion von Fleury habe ich getestet. Allerdings ist auch dort der 2313A nicht standardmäßig enthalten, sondern nur der 2313. Da die beiden aber praktisch baugleich sein sollen, sollte diese Anpassung kein Problem darstellen. Leider funktioniert aber auch das nicht. Nun bin ich mit meinem Latein am Ende, daher die Frage, ob jemand schon einschlägige Erfahrung mit dem 2313A gemacht hat.
Bruno M. schrieb: > -Nachdem alles problemlos funktionierte, habe ich mir die Platine > gebaut, allerdings bestückt mit einem ATTiny2313A. Ich bekomme damit > zwar eine UART-Verbindung, aber nur Hieroglyphen. Ich habe praktisch > alle Baudraten durchbrobiert, kein Erfolg. Getaktet wird der Prozessor > vom RFM12 mit 10MHz. Sagst du. Wenn die Baudratenberechnung korrekt ist (und mit Hilfe der Makros aus setbaud.h ist das ja keine Hexerei), dann deuten deine 'Hieroglyphen' zuallererst einmal dahin, dass der Tiny eben nicht mit 10Mhz fährt, sondern mit 1Mhz. Das lässt sich aber auch leicht ausprobieren: Häng eine LED an einen Portpin, und lass die mittels _delay_ms(1000) blinken. Wenn dein benutzten F_CPU mit der Realität übereinstimmt, dann ergibt ein _delay_ms(1000) dann auch wirklich eine Zeitdauer von 1 Sekunde. Wenn du allerdings bei F_CPU 10Mhz hinschreibst, der Tiny aber nur mit 1Mhz arbeitet, dann ergibt gleicher _delay_ms(1000) eine reale Zeit von 10 Sekunden. Ein Unterschied, der mit freiem Auge leicht erkennbar ist. > Nun bin ich mit meinem Latein am Ende, daher die Frage, ob jemand schon > einschlägige Erfahrung mit dem 2313A gemacht hat. Die allererste und oberste Frage lautet immer gleich: Arbeitet der µC mit der Taktfrequenz, die die annimmst oder nicht. Wenn du noch nicht an den Fuses drann warst, dann kannst du dir den Test auch schenken, dann dann arbeitet dein Tiny mit Sicherheit nicht mit dem externen Takt.
Denke aber auch dran, daß bei 10MHz Takt nur Baudraten bis 14400 einen Fehler <=0,9% aufweisen. Vielleicht bist Du zu schnel beim Senden/Empfangen. MfG Paul
Karl H. schrieb: > dann deuten deine 'Hieroglyphen' > zuallererst einmal dahin, dass der Tiny eben nicht mit 10Mhz fährt, > sondern mit 1Mhz. das kann ich ausschließen, da ich nicht nur eine sondern zwei Platinen (Sender und Empfänger) habe und bei beiden der gleiche Fehler auftritt. Das alleine ist zwar noch kein Beweis, aber daß der Sender zusätzlich mit dem ATmega48 kommuniziert schon. Außerdem reicht eine einfache Spannungsmessung. Paul B. schrieb: > Denke aber auch dran, daß bei 10MHz Takt nur Baudraten bis 14400 einen > Fehler <=0,9% aufweisen. Vielleicht bist Du zu schnel beim > Senden/Empfangen. Auch darüber bin ich mir im Klaren. Ich habe wie gesagt alle Baudraten getestet und nichts geht. Beim 2313 funktionieren aber auch 56kBaud.
Bruno M. schrieb: > Außerdem reicht eine einfache > Spannungsmessung. Hä? Ganz bestimmt nicht zur Bestimmung der Taktfrequenz, mit dem der Controller läuft... Außerdem hast du noch nicht einmal klargestellt, mit welchen Takt das Teil denn nun eigentlich laufen soll. Und du hast auch nicht die Fuses gepostet, die deiner Meinung nach dafür sorgen, dass er mit diesem Takt läuft. Bis zum Beweis des Gegenteils ist ein Fehler an dieser Stelle überaus wahrscheinlich. > Auch darüber bin ich mir im Klaren. Ich habe wie gesagt alle Baudraten > getestet und nichts geht. Wenn der Takt nicht stimmt, ist genau das das normale und erwartbare Ergebnis. Und wenn dann noch Änderungen an einer vielfach bewährten und getesteten Routine zur Einstellugn der Baudrate zu einem Teilerfolg führen, dann ist sogar praktisch sicher, dass der Takt nicht stimmt...
Es gibt beim -A gerade im Bereich des UART Unterschiede! Siehe angehängtes Dokument (Atmel).
Ja es gibt Unterschiede, aber es geht dabei darum, die USART auch als SPI zu verwenden. Dazu muß das Bit 7 in UCSRC gesetzt werden. Hat man dieses beim Initialisieren so wie früher schon empfohlen mit "0" belegt, dann aändert sich nichts.
c-hater schrieb: > Bis zum Beweis des Gegenteils ist ein Fehler an dieser Stelle überaus > wahrscheinlich. Ich muß Dich, aber besonders natürlich mich enttäuschen! Auch wenn ich auf Grund des Gesamtverhaltens der Schaltung nichts anderes erwartet hatte, habe ich es mit dem Oszi kontrolliert. Es bleibt bei 10MHz.
Konrad S. schrieb: > Hast du dazu CKOUT aktiviert? nein, ich habe den Ausgang vom RFM12 geprüft. In der Zwischenzeit habe ich die Lösung auch gefunden! Es ist mir zwar etwas peinlich, aber vielleicht hilft es ja auch mal anderen weiter. Der 2313A ist einer von den Controllern, bei denen die CLKDIV8-Fuse standardmäßig gesetzt ist. Ich wußte bis jetzt allerdings nicht, daß diese Fuse auch bei externem Takt wirksam ist. Aber man lernt ja nie aus:-)
Bruno M. schrieb: > Ich habe praktisch > alle Baudraten durchbrobiert, kein Erfolg. Bei 1/8 der Nenn-Baudrate hättest du dann korrekte Zeichen sehen müssen.
Georg G. schrieb: > Bei 1/8 der Nenn-Baudrate hättest du dann korrekte Zeichen sehen müssen. Nicht, wenn mann bei Sender und Empfänger immer die gleiche einstellt, was normalerweise ja richtig und logisch ist... Nur eben dann nicht, wenn die gleiche Einstellung bei einem der beiden Partner zu einer abweichenden tatsächlichen Rate führt. Was eben genau dann passiert, wenn der tatsächliche Takt zur Laufzeit eben nicht den Erwartungen der Routine entspricht, die aus angeblichem Takt zur Entwurfszeit und der angegebenen Baudrate die entsprechenden Teiler berechnet hat. Meine Fresse, das kann doch nicht so schwer zu begreifen sein?!
Bruno M. schrieb: > Der 2313A ist einer von den Controllern, bei denen die CLKDIV8-Fuse > standardmäßig gesetzt ist. Mit der Vorgehensweise, die Karl Heinz vorgeschlagen hat, wärst du einen Tag früher fertig gewesen: Karl H. schrieb: > Ein Unterschied, der mit freiem Auge leicht erkennbar ist. c-hater schrieb: > Nicht, wenn mann bei Sender und Empfänger immer die gleiche einstellt, > was normalerweise ja richtig und logisch ist... Einer der Partner ist offenbar ein PC. Da kann man die Baudrate ganz einfach durchklicken. Mir hätte ein Oszilloskop da nach 5 min Licht ins Dunkel gebracht: Ich hätte einfach mal 1 Bit ausgemessen und dann mit einem Blick auf den Blockschaltplan im Datenblatt über die Takterzeugung nachgedacht. c-hater schrieb: > Meine Fresse, das kann doch nicht so schwer zu begreifen sein?! Dieser Satz ist unnötig (und) aggressiv.
:
Bearbeitet durch Moderator
c-hater schrieb: > Meine Fresse, das kann doch nicht so schwer zu begreifen sein?! In Sachen "wie suche ich Fehler zielgerichtet" musst du offenbar noch viel dazu lernen. Über dein Sozialverhalten wollen wir besser nicht diskutieren.
Lothar M. schrieb: > Mit der Vorgehensweise, die Karl Heinz vorgeschlagen hat, wärst du einen > Tag früher fertig gewesen: Theoretisch stimmt das, bei einer fertigen SMD Platine aber auch nicht so einfach zu realisieren.
Bruno M. schrieb: > nein, ich habe den Ausgang vom RFM12 geprüft. Das war dann so sinnlos, wie festzustellen das das Licht nicht angeht - die Birne defekt ist, man aber mit absoluter Sicherheit feststellt: "Am Schalter ist aber Strom!" Bruno M. schrieb: > In der Zwischenzeit habe ich die Lösung auch gefunden! Es ist mir zwar > etwas peinlich, aber vielleicht hilft es ja auch mal anderen weiter. > > Der 2313A ist einer von den Controllern, bei denen die CLKDIV8-Fuse > standardmäßig gesetzt ist. Ich wußte bis jetzt allerdings nicht, daß > diese Fuse auch bei externem Takt wirksam ist. Aber man lernt ja nie > aus:-) > Also das was alle von Anfang an sagten: "Falscher Takt!". Und CLKDIV8 ist bei jedem Tiny/Mega von Werk aus gesetzt, also ganz normal.
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.