mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit Software-UART und mega16 (AppNote AVR304)


Autor: schamp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Laeuft der Timer-Interrupt? Timer richtig intitialisiert
(Timing/Interrupt)? Im Zweifel mit LED ("blinken") oder Oszi.
pruefen.

Autor: schamp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 !!

Autor: schamp (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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 ?

Autor: schamp (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: schamp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Lexele (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.