PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : TIMER-->Berechnung alles klar --- aber wie weiter???



surfer
11.10.2004, 10:59
So....
Hab mich jetzt durch das Roboternetz durchgeschlagen und weiss nun, wie man die Timerzeiten berechnen kann... Beispielprogi hat auch gut funktioniert, mit verschiedenen Zeiten...

Nun weiss ich nur nicht so genau, wie das mit den Interrupts funktioniert.
Ja, ich weiss, das bei jedem Überlauf der Interrupt Signal_usw.... ausgelöst wird...
Jedoch weiss ich nicht, wie ich nun diesen Interrupt an einer bestimmten Stelle in meinem Programm laufen lassen kann...

Ich möchte z.B. einfach eine Verzögerungsschaltung machen, bei der bei Tastendruck die LED's für 2s leuchten...

kann ich jetzt irgendwie in diesen Codeschnipsel


while(1)
{
if(PINB==0x01)
{
outp(0xFF,PORTA);
------> !!!!!!!!!!Hier will ich die 2s Verzögerung!!!!!!!!!! <---------
}
outp(0x00,PORTA);
}

die Verzögerung einbauen??

Ich hoffe, ihr könnt mir helfen

surfer
12.10.2004, 11:20
OOOOH.... :cry:

will mir denn niemand helfen????

Ich muss nur wissen, wie ich die Verzögerung aufrufen kann..., wie ich den TIMER und die Zeit intialisieren kann ist klar....

BITTE

12.10.2004, 12:13
Taster gedrückt -> Initialisierung und Start des Timers -> Timerinterrupt nach Zeit x -> deaktivieren des Timers und Ausführen der gewünschten Aktion

Wo ist das Problem und warum so ungeduldig? Mit ein bischen Gehirnschmalz bekommt man das einfach hin.

surfer
12.10.2004, 13:11
Danke mal für deine Antwort...
Der Ablauf ist mir eigentlich auch klar...
Schreib jetzt mal meinen Code rein. Berechnet ist ca. 1s mit 1024 prescaler und 16-bit timer...
Sagt mir was noch nicht stimmt....
Danke


#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

int timer_init (void)
{
TIMSK = _BV(TOIE1);
TCNT1 = 57724;
TCCR1B = _BV(CS12) | _BV(CS10);
sei();
}


int main (void)
{
DDRA=0xFF;
while(1)
{
timer_init();
outp(0xFF,PORTA);
timer_init();
outp(0x00,PORTA);
}
}