ATTiny2313A-Problem mit UART

OP #4259367
Lesenswert?

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.
#4259371
Lesenswert?

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.
OP #4259400
Lesenswert?

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.
Gast #4259437
Lesenswert?

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...
OP #4260482
Lesenswert?

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:-)
Gast #4260842
Lesenswert?

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?!
Moderator (Firma: Titel) Persönliche Seite #4261023
Lesenswert?

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.
Gast #4261417
Lesenswert?

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.

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