mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmel8: Interrupt mit 8-Bit Timer0 geht nicht


Autor: Konrad Schwarz (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute ..
Als NewBee bei Atmel hat man so seine Probleme ...
Das Board ist ein STK500 mit Atmel8
Der Externe Int0 und Int1 funktionieren prima mit den Tasten,
aber warum läuft der Timer nicht bzw generiert keine Interrupts bzw
warum wird inth1 nur vom Tastendruck und nicht zusätzlich zyklisch vom
Timer-generierten Interrrupt angesprungen ?

Da fehlt wohl irgendetwas?
Danke schon mal für die Hilfe.

Konrad

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo hast du denn deine Timer-Overflow-Interrupt-Routine?

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> aber warum läuft der Timer nicht bzw generiert keine Interrupts bzw
> warum wird inth1 nur vom Tastendruck und nicht zusätzlich zyklisch
> vom Timer-generierten Interrrupt angesprungen ?
>
> Da fehlt wohl irgendetwas?

Eigentlich nicht.
Sollte so funktionieren. Auch in der Simulation läuft das
sauber durch.

Autor: Konrad Schwarz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke das ist der Interrupt Vektor 10 ..
Zum test springt sowohl der externe Interrupt1 und der Timer-Overfl.Int
nach inth1: ??
Angepringen über zeile 12:
    rjmp inth1    ;10 TC0 overflow
Sollte zumindest ..

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich sehe da auch keine Probleme. Sollte eigentlich funktionieren.
Interrupt-Vektor-Nummer stimmt auch. Welche Taktfrequenz hast Du denn?
Passiert an Port B gar nichts ohne Tastendruck?

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
'cli' und 'sei' in den Interrupt-Routinen kannst du dir sparen. Der
'cli' wird beim Auslösen eines Interrupts sowieso ausgeführt und beim
Verlassen mit 'reti' wird das 'I'-Flag wieder gesetzt.

Autor: Konrad Schwarz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, am Port B ändert sich nix ..
Der Zählerstand von r16 ändert sich nur bei Tastendruck ...

ähhh ( peinlich ) ich hae grade festgestellt, dass im Borad ein
ATMega8515L steckt .. ich hoffe, das mach nix .. die Port-Adressen für
die Interrupt Register sind gleich ?

dumme Frage zur Simmulation.
Simmuliert die auch die Interrupts ? Das tut Sie bei mir nicht ..

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich kenne keinen "Atmel8". Falls Du den ATMega8 meinst, dann
vergleiche bitte mal die Interrupt-Sprungtabellen vom Mega8 und
Mega8515. Die sind nämlich unterschiedlich. Beim Mega8535 wäre es
gegangen, die ist identisch mit der des Mega8.

...

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> die Port-Adressen für die Interrupt Register sind gleich ?

Die Adressen der Register im I/O-Space (wenn Du das mit
"Portadressen" meinst) sind vermutlich gleich. Aber die
Interrupt-Vektoren sind es nicht. Daher vermutlich auch das
"nicht-Funktionieren" des Timer Overflow-Interrupts. Der liegt beim
Mega8515 nämlich auf Vektor Nr. 8 (Adresse 0x07)

Autor: Konrad Schwarz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So allso ich bin schon ein bischen doof .. sorry ..
Es steckt ein ATMega8515 drin .. habe auch die Int-Vektorentabelle
korrigiert ... es geht zwar noch nix .. aber ich muß jetzt erst mal das
richtige handbuch runterladen .. vielleicht sind die Timer0 Register
auch anders .. sorry und danke nochmal ..

Konrad

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aua...
Wieder Jemand, der ohne Datenblatt drauflos wurschtelt... Das tut
weh...

...

Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
will den Thread nicht ewig in die Länge führen.
Habe Timer1 16bit auf dem ATmeg8 dieser soll im CTC Mode arbeiten.
habe COM1A0 im TCCR1A gesetzt und CTC1 im TCCR1B ebenso.
CTC Modus aktiviert und OC1A wird getoggelt beim compare mit OCR1Ax.
Muss ich noch im TIMSK das OCIE1A setzen oder wird der OC1A Pin auch
ohne dieses Bit getoggelt?
Ich weiss es ist keine grosse Mühe es zu setzen,aber kann man es auch
weglassen?
Vielen Dank

daniel

Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
ps der Interruptvector für Timer 0 Overflow unss an die Adresse 0x007
.org 0x007
  rjmp  inth1

daniel

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du das OCIE1A setzt, musst Du auch eine Interrupt-Routine
definieren, sonst gibts bei jedem Compare einen Reset (vorausgesetzt Du
programmierst in C). Das setzen des Ausgangspins ist aber völlig
unabhängig davon, ob der Interrupt aktiv ist oder nicht.

Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@johnny.m
vielen dank

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.