www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATtiny13V und Timer Overflow Interrupt


Autor: spawn spawnsen (spawn83)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo liebe uC-Fans

Bisher konnte ich meine Mikrocontroller-Probleme immer über die Suche 
oder Datenblätter erklären, daher hier mein erster Post im Forum... aber 
nun habe ich ein (bestimmt simples) Problem und komme nicht weiter.

Ich versuche ein simples Blinklicht an einem ATtiny13V zum Laufen zu 
bringen und zwar mit Hilfe des Timer Overflow Interrups. Das Programm 
siehe Anhang

Die LED bleibt aber leider aus.

Die Schaltung+LED ist auch getestet und funktioniert mit z.B. einer 
simplen _delay_ms-Schleife. Ich habe jedes Register 5mal im Datenblatt 
geprüft.
Ich habe auch in die ISR einfach mal nur ein "PORTB |= (1<<PB3);" 
gesetzt um zu prüfen ob er überhaupt in die ISR kommt, dies war nicht 
der Fall, auch hier blieb die LED aus. Ich weiß nun leider nicht was ich 
noch vergessen habe.
Über Hilfe würde ich mich freuen.

Danke schonmal.

Nachtrag1:
 im Code steht noch IST(...) anstelle von ISR, war eben ein TIppfehler 
als ich nochmalalles auf Vordemann gebrahct habe. Auch mit ISR(..) geht 
es nicht ;)

Nachtrag2:
ATtiny ist frisch vom Werk, also läuft mit 9,6Mhz, CKDIV8=1 etc. nichts 
verändert

Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timer Start Bit vergessen.
Damit der Timer auch startet. (verodern im Timer-Controll-Register)
Gruss Holger.

Autor: spawn spawnsen (spawn83)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jetzt hab ich grad nochmal alle Register gecheckt im Datenblatt unter 
Timer, in TCNT0 kann ich den Zähler ja auslesen (und schreiben). Dass 
ich das aber "manuell" mit initialisieren muss wäre mir neu, da ähnliche 
Programme auf einem Atmega16 funktionierten (da aber anderer 
Interrupt-Vektor).

Habe aber mal testweise eben mal TCNT0 auf 0x00 gesetzt aber brachte 
auch keine Änderung

Kannst du mir sagen welches Register/Bit du meinst ? 
Timer-Control-Register konnte ich nicht im Datenblatt finden beim 
atttiny
Danke für die Hilfe.

bin echt kurz vorm Zusammenbruch, da ich schon seit 2-3h hier an der 
Fehlersuche bin.


EDIT:

Habe das Register GTCCR gefunden ("General Timer/Counter Control 
Register) aber laut Datenblatt sollten beide 0 sein für meinen Test

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TCCR0 gibt es nicht, der Prescaler liegt in TCCR0B.
TIMSK gibt es auch nicht, das heißt TIMSK0.

void ioinit()
{

  DDRB |= (1<<PB3);
  PORTB &= ~(1<<PB3);
  TCCR0B |= (1<<CS02) | (1<<CS00); //Prescaler = 1024
  TIMSK0 |= (1<<TOIE0); //Timer0 Overflow Interrupt Enable
}

Datenblatt lesen hilft manchmal...
Die Fehlermeldungen vom Compiler sollten doch darauf bereits hingewiesen 
haben.

Grüße,

Peter

Autor: spawn spawnsen (spawn83)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hatte das mit TCCR0B und TIMSK0 auch gesehen und versucht, bei beiden 
meldet mein Compiler aber Fehler (undeclared, first use in this 
function). Fehlt mir dazu dann evtl. irgendein header-file?

In unserer Vorlesung/Praktikum hatten wir auch jeweils TCCR0 und TIMSK, 
war da aber ein Atmega16. Wenn ich das richtig in Erinnerung habe, 
spreche ich mit zB "TCCR0" sowohl TCCR0A und TCCR0B an. Ohne nun den 
exakten technischen Hintergrund wiederholen zu können.

Also TCCR0B und TIMSK0 funzen auch nicht, wegen Compiler Fehler. :/

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Also TCCR0B und TIMSK0 funzen auch nicht, wegen Compiler Fehler. :/

Dann hast du im AVR-Studio den falschen Prozessor eingestellt.

Project->Configuration Options: Device richtig einstellen.

>Wenn ich das richtig in Erinnerung habe,
>spreche ich mit zB "TCCR0" sowohl TCCR0A und TCCR0B an. Ohne nun den
>exakten technischen Hintergrund wiederholen zu können.

Das ist vollkommen falsch.

Das Header-File, dass alle Register definiert, ist io.h. Von dort aus 
wird mittels dem Typ der CPU entschieden, was eingebunden wird. Der Typ 
der CPU wird vom AVR-Studio dem Compiler übergeben, das stellt man wie 
oben gezeigt ein.

Grüße,

Peter

Autor: spawn spawnsen (spawn83)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah daran lag es, nun gibts keine Fehler mehr bei TCCR0B und TIMSK0 und 
meine LED blink periodisch =)

Das mit den "zusammen ansprechen" hab ich dann wohl verwechselt mit 
irgendwas, was wir mal beim Atmega16 hatten. Vllt Sowas  Wie zB "OCRn1H 
(High) und OCRn1L (Low) = OCRn1 oder so ? Naja, gefährliches Halbwissen 
gerade von mir ;)

Danke Peter und allen Lesern erst mal einen guten Rutsch

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.