mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik tiny26 timer interrupt schaltet port nur bis "reti"


Autor: Kurt S. (ksch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

Ich habe folgendes Problem bei dem ich nicht mehr weiterkommen, nicht 
mal einen Ansatz finde...
Ich habe einen ATtiny26 auf dem ich den Timer0 oder 1 (mit beiden schon 
getestet) benutze, als Testfall soll nur eine Led ein bzw. ausgeschaltet 
werden. Nun ist es aber so, dass der Port jeweils nur bis zum "reti" des 
isr umschaltet und danach in den alten Zustand zurück fällt. Hab ich mit 
einem Oszilloskop angeschaut.

Das gleich funktioniert aber beim Mega8 problemlos.

Hier noch das geschriebene, erwartet aber nicht zu viel, versuche mich 
noch nicht so lange darin.
.include "tn26def.inc"

.def temp1=r16

.org 0x0000
    rjmp main

.org OVF0addr
    rjmp tc0ovf

main:
    ldi temp1,RAMEND    ;Stackpointer initialisieren
    out SP,temp1

    ;;; PORTA als Ausgang
    ldi temp1, 0xFF
    out DDRB, temp1
    out PORTB, temp1

    ldi temp1, (1 << CS00) | (0 << CS01) | (1 << CS02) ;Vorteiler von 1024
    out TCCR0, temp1

    ldi temp1, (1 << TOIE1)
    out TIMSK, temp1

    sei

loop:
    rjmp loop

;;;
;;; Overflow Timer 0
tc0ovf:
    push temp1
    in temp1, sreg

    sbic PORTB,0
    rjmp clr_bit
    sbis PORTB,0
    rjmp set_bit

set_bit:
    sbi PORTB,0
    rjmp end_tc0_isr
clr_bit:
    cbi PORTB,0

end_tc0_isr:
    out sreg, temp1
    pop temp1
    reti

Neben hoffentlich nicht zu vielen anderen Fehlern, sieht jemand an was 
dieses zurückfallen des PortB, gleich nach "reti", liegt? Oder überseh 
ich etwas das beim Attiny26 vollkommen anders funktioniert als beim 
Mega8?

Bin für jede Hilfestellung dankbar.
beste grüsse
kurt

Autor: Gastofatz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>sbic PORTB,0
>rjmp clr_bit
>sbis PORTB,0
>rjmp set_bit

Sollte besser so aussehen:

sbic PORTB,0
rjmp clr_bit
rjmp set_bit

Autor: Kurt S. (ksch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Danke, hab ich gar nicht überlegt...
Aber wäre dann nicht gleich besser ich würds so machen?
    sbic PORTB,0
    rjmp clr_bit
    sbi PORTB,0
    rjmp end_tc0_isr
clr_bit:
    cbi PORTB,0
    rjmp end_tc0_isr

gruss
kurt

Autor: Gastofatz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funzt natürlich auch und wär noch kürzer. Allerdings ist das alles 
bestimtm nicht die Ursache für Dein Problem, wozu mir im Moment leider 
auch nix einfällt.

Autor: Gastofatz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du es schon mal via Simulator vom AVRStudio gecheckt?

Autor: Kurt S. (ksch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, du hast recht. Die erste Diskussion ändert sicher nichts an meinem 
Problem, aber ich lerne wieder was dabei :-)

Im Simulator hab ich das getestet und dort scheint es auch zu 
funktionieren.

Autor: Gastofatz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, mysteriös. Kannst Du vielleicht das fragliche Signal vom Oszi 
abfotografieren und hier reinstellen?

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du setzt Timer0 OVF ISR auf, erlaubst aber Timer1 OVF ISR:
  ldi temp1, (1 << TOIE1)

Bitteschön :D

Autor: Kurt S. (ksch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten morgen zusammen

Ich sehs nicht mehr, ich hab die Aenderungen wie Gastofatz sie 
vorgeschlagen hat heute morgen kurz umgesetzt, was allerdings nichts mit 
dem eigentlichen Problem auf sich hat. Danach neu geschrieben und jetzt 
reagiert auch der Tiny26 richtig.
Ich kann den Fehler aber auch nicht mehr reproduzieren...
Hab jetzt das ganze wieder mit Timer1 gemacht und dann CTC hinzugefügt 
und das geht jetzt auch... ich weiss nicht was ich davon halten soll.

Das nächste mal fotographiere ich das Oszi bevor ich wieder was 
verändere...

@MWS Yep... das ist richtig, war allerdings nur ein Fehler hier.

danke für die Hilfe und gruss
kurt

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.