Forum: Mikrocontroller und Digitale Elektronik ATtiny13V und Timer Overflow Interrupt


von spawn s. (spawn83)


Angehängte Dateien:

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

von Holger (Gast)


Lesenswert?

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

von spawn s. (spawn83)


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

von Peter D. (pdiener) Benutzerseite


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

von spawn s. (spawn83)


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. :/

von Peter D. (pdiener) Benutzerseite


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

von spawn s. (spawn83)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.