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.
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
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.
Ich halte das USI für weitgehend unbrauchbar. Ich mache dann lieber die UART komplett in Software: Beitrag "Software UART mit FIFO" Peter
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.
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.