Hallo Leutz ! Weis gerade nicht mehr weiter. Versuche die AppNote AVR304: Half Duplex Interrupt Driven Software UART auf einem ATmega16 zu implementieren (Ich weis das ATmega16 Hardware-UART hat, muß aber später auf einen Tiny umsteigen) Nun zu meinem eigentlichen Problem: Ich kann weder Zeichen senden, noch empfangen. Zumindest erscheint am Terminal nichts (habe Hyperterminal und Tera Term ausprobiert). Einstellungen sind/waren jeweils 38400 Baud, 8 Datenbits, 1 Stopbit, kein Paritätsbit, keine Flusssteuerung. Für die Übertragung nutze ich die RXD/TXD Pins (richtig gesteckt ;-)) und den RS232 Spare Port auf dem STK500. Dann gehts weiter an den COM2 Port meines PC's. Als Clock benutze ich jetzt die STK500 @3.686 MHz. Fuse (Ext. Clock; Start-up time: 6 CK + 0 ms; [CKSEL=0000 SUT=00]) und Jumper (XTAL1 Jumper mounted, OSCSEL auf default) auf dem STK500 sollten laut "Help" (AVR Tools User Guide) richtig gesetzt sein. Nutze den mitgelieferten C-Code von Atmel und compile mit IAR Embedded Workbench Kickstart Die Software habe ich etwas anpassen müssen (Registerbezeichnungen, etc.). Habe ich noch etwas wichtiges übersehen ?? Bin dankbar für jede Hilfe ! Gruß schamp
Laeuft der Timer-Interrupt? Timer richtig intitialisiert (Timing/Interrupt)? Im Zweifel mit LED ("blinken") oder Oszi. pruefen.
Hab mir ein paar Zeilen für ein "blinkendes" Status LED programmiert und die auch mal in der Timeroverflow-Interruptroutine ausprobiert (haben nicht geblinkt, springt also nicht in die Routine). Wird dann wohl echt an einer falschen Timerinitialisierung liegen.. Wenn net, werd ich morgen mal den Code posten. Thx einstweilen & einen schönen Abend !!
Ich bin mir fast sicher, das der Timer richtig initialisiert ist.. Trotzdem wird irgendwie kein Timer Overflow Interrupt ausgelöst :-( Hänge mal den Quellcode mit an, vielleicht werdet ihr daraus schlauer. In Main() sende ich einfach nur ein "Hallo" ans Terminal. Was mir auch noch beim Debugging aufgefallen ist, das ins TIFR (in der Funktion uart_init) nicht TOV0 gesetzt wird sondern 0x02 (OCF0). Es wird aber kein Output Compare Match Interrupt benutzt... Liegts vielleicht daran ? Wie kann ich das umgehen bzw. ändern ?
keiner einen Tipp oder Lösung für das Problem ?? Hab noch einen Screenshot vonner Debugging Session gemacht. Weis nicht, ob das wirklich an dem TOV0 Overflow Flag liegen kann, das der Timer nicht richtig initialisiert wird... Gruß schamp
Hallo zusammen ! Hab das Programm nochmals "Schritt für Schritt" aufgebaut und geschaut, wo es hängt. Sobald ich etwas ins TCNT0 Register lade (in der uart_transmit() die Zeile mit TCNT0 = (256-N+(14/C)); // Set timer delay to first bit) wird nicht mehr in die ISR gesprungen. Kann sein, das die Interrupts einfach wieder disabled werden ??? Wenn ich die Zeile testweise auskommentiere wird die ISR durchlaufen allerdings auch nur einmal. Kann mir jemand erklären warum dem so ist ? Die Software sollte doch eigentlich einwandfrei laufen. Denke die Leute bei Atmel werden sich bei der AppNote schon was gedacht haben und nicht einfach fehlerbehaftete Software publizieren. Vom eigentlichen Ablauf und Aufbau des Codes sind für mich auch keine groben Fehler ersichtlich... Fällt noch jemanden was diesbezüglich auf ?? Bin für jede Hilfe dankbar ! Gruß schamp
Tach Schlamp, hast Du schon versucht, die Leute von Atmel versucht anzumailen? Es sind ja auch nur Menschen, es kann durchaus sein, dass ihnen Fehler unterlaufen... Eine andere Idee: Vielleicht steht ein anderer Processor in den Einstellungen,und daher werden falsche Regs gesetzt?
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.