mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer0, Interrupt


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

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

Als Neuling versuchte ich, ein einfaches Programm, das den Timer 0
zählen lässt und bei einem Überlauf eine Interruptroutine ausführt zu
programmieren.
Leider schlägt bereits die Simulation in AVR Studio 4 fehl, da offenbar
eine Zuweisung aus r16 an TIMSK0 zu folgender Fehlermeldung führt:
Illegal argument type or count.
Die entsprechende Zeile im beiliegenden Code ist mit einem Pfeil
gekennzeichnet.
Für Hinweise zur Lösung wäre ich dankbar.

Gruss Justus

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi...

TIMSK0 kenne ich nicht, das Timer-Interrupt-Mask-Register heißt bei den
üblichen AVRs TIMSK. Falls das beim Mega169 anders sein sollte, bitte
ich um Verzeihung...

Bit- & Bytebruch...
...HanneS...

Autor: justus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im am Anfang des Codes definierten Include File des Mega169 sind die
Register bzw. Speicher-Adressen wie folgt benannt:

;*********************************************************************** 
******
; I/O Register Definitions
;*********************************************************************** 
******

;**** Memory Mapped I/O Register Definitions  (0xFF-0x60) ****
.equ  LCDDR18   = 0xFE
[snip]
.equ  ADCH      = 0x79
.equ  ADCL      = 0x78
.equ  TIMSK2    = 0x70
.equ  TIMSK1    = 0x6F
.equ  TIMSK0    = 0x6E
.equ  PCMSK1    = 0x6C
.equ  PCMSK0    = 0x6B

d.h. meiner Meinung nach hat jeder der drei Timer ein eigenes
"Mask"-Register. Und der Name, den ich benützt habe scheint auch
korrekt zu sein. Die Fehlermeldung deutet vielleicht auf etwas
anderes... aber auf was?

Justus

Autor: Ingo Henze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie der Hilfe zum Befehl out zu entnehmen ist, darf der erste
Parameter, also die Zieladresse nur zwischen 0 und 63 (dezimal)
liegen.
Bei Adressen oberhalb dieses Wertes muß man statt dessen sts
verwenden.

Das gleiche gilt sinngemäß für in / lds.

Gruß
Ingo

Autor: justus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank. Da wäre ich vermutlich nie darauf gekommen, da ich den
Initialisierungscode aus einem Beispiel kopiert habe.

Justus

Autor: Michael Waiblinger (wiebel42)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ha da war ich kürzlich auch ;)
Du solltest mal avra versuchen (assembler, keine ahnung ob's den auch 
für windows gibt), der gibt klarere Auskunft was falsch ist.
Dein Programm beginnt in der Interrupt Tabele, was schlecht ist, diese 
Erfahrung musste ich auch schon machen. Wenn jetzt ein interrupt 
aufgerufen wird der nach Timer0_OVF kommt springt der mitten in deinen 
code, was vermutlich nicht erwünscht ist.
schreibe entweder (dirty) ein .org $0030 (naja > 26 IIRC) vor dein 
reset:
oder was viel besser ist füll die Interrupttabelle ganz auf.
Die Sache mit dem OUT <-> STS ist bei dem m169 doch sehr häufig der hat 
viele I/O-register, daher auch viele >64 ($40) schau im zweifel in die 
m169def.inc.

Ich hänge mal mein aktuellen Code an. (auch Butterfly) Achtung Chaos. ;)
Ist viel auskommentiert.
Nimm das aber nicht als Mass der Dinge, ich mach das auch erst seit sehr 
kurzer Zeit. ;)

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Knapp zwei Jahre später auf einen Beitrag zu antworten ist bestimmt sehr 
sinnvoll...

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
STK500-Besitzer wrote:
> Knapp zwei Jahre später auf einen Beitrag zu antworten ist bestimmt sehr
> sinnvoll...
???
2007 - 2004 = 3...

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>STK500-Besitzer wrote:
>> Knapp zwei Jahre später auf einen Beitrag zu antworten ist bestimmt sehr
>> sinnvoll...
>???
>2007 - 2004 = 3...

Das fällt unter Rundungsfehler... :)

Autor: Michael Waiblinger (wiebel42)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
argh, peinlich, hab ich grade mal direkt nicht gemerkt, sry ;)
Dann wollen wir den thread wieder in Ruhe weiter sterben lassen.
Wie pietätlos von mir.

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.