ATtiny85 UART mit USI [ASM]: Wo liegt der Fehler?

Gast #2325996
Hallo,

ich bin gerade mit einem Thermometer mit ATtiny85 beschäftigt, das per 
UART an den PC angebunden werden soll. Die Temperatursensoren (DS18S20) 
laufen später per 1-Wire-Bus, diese Funktionalität ist jedoch noch nicht 
implementiert.

Probleme macht mir zur Zeit der UART. Ich habe mich hauptsächlich an der 
Application Note AVR307 orientiert 
(http://www.atmel.com/dyn/resources/prod_documents/doc4300.pdf). Nun ist 
der Code (--> Anhang) schon seit Sonntag fertig, aber funktioniert immer 
noch nicht. Ich versuche bei 8 MHz Taktfrequenz und 300 baud (zum 
Testen, später mehr) ein einziges Byte zu übertragen.
Leider bin ich hardwaretechnisch etwas schlecht ausgerüstet, durch 
Verlangsamen der Übertragungsrate auf 1/64 und Anschließen einer LED an 
den TX-Ausgang konnte ich jedoch schon den Fehler ungefähr lokalisieren. 
Meine bisherigen Testergebnisse:

Nach der Übertragung der zwei "1"-Bits geht der AVR in die Routine 
USI_OVF_ISR_TX_FIRST_HF. Dort schaltet er die LED an PB3 ein. Statt die 
5 Bits zu übertragen, ruft er sofort die Routine uart_init_rx auf, die 
den Timer stoppt und das Senden abbricht. Es ist der rcall bei 
USI_OVF_ISR_TX, unter der Kommentarzeile "Beide Hälften übertragen?". 
Kommentiere ich diesen rcall aus, überträgt er sofort korrekt die zweite 
Hälfte, wie in USI_OVF_ISR_TX_SECOND_HF vorgesehen, ohne jedoch vorher 
die erste Hälte gesendet zu haben. Dennoch wird noch VOR der Übertragung 
der zweiten Hälfte LED1 eingeschlatet.

Ich vermute, es ist ein Problem beim Aufrufen der USI_OVF_ISR. Könnte 
bitte jemand mit mehr Erfahrung den Code durchschauen und mir einen Tipp 
geben, wo der Fehler liegen könnte?
Vielen Dank schon mal.
Angehängte Dateien:
Gast
Bin leider immer noch nicht weitergekommen.
Der Fehler liegt meiner Meinung nach im allgemeinen Programmablauf oder 
in der Steuerung des USI_OVF Interrupts, nur sehe ich nicht wo.

Ich wäre euch dankbar, wenn nur jemand kurz drüberschauen könnte, 
vielleicht findet er ja mögliche Fehler.
Fragen, warum ich was wie gemacht habe, kann ich selbstverständlich 
gerne beantworten.
Hi
Such mal nach OpenEye. Das Programm hab ich mir mal geschrieben, um dem 
Controller auf die Variablenwerte zu sehen. Da ist soweit ich es noch 
weiß, auch eine Anleitung für den UART drin, allerdings auf ATMEGA8 
bezogen. Trotzdem solltest du es dir mal anschauen. Kostet auch nix, hab 
ich zur freien Verfügung reingestellt. Ist aber schon ein Weilchen her.
Gruß oldmax
Gast
Vielen Dank, aber so wie ich das sehe, nutzt dein Programm den Hardware 
UART des Mega8. Den hat mein Tiny85 nicht, und erst wenn ich meinen 
Software-UART fertig habe, kann ich Daten mit dem PC austauschen. 
Ansonsten wäre es sicher hilfreich, nur kann ich es wie gesagt jetzt 
noch nicht einsetzen.
Gast
Vielen Dank für den Link, aber ich habe mittlerweile genau das gemacht:
USI Counter in Software nachgebildet und in der TIM0_COMPA_ISR die Bits 
rausschicken.
Es waren noch andere Fehler drin, aber hauptsächlich lags am USI. Mit 
reiner Software funktionierts einwandfrei.

Danke an alle, die geantwortet haben.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.