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.