Einzelnen Beitrag anzeigen
Alt 24.08.2010, 20:23   #5
Atomschwammerl
Abonnent
 
Registriert seit: 04.09.2001
Alter: 40
Beiträge: 4.355


Atomschwammerl eine Nachricht über ICQ schicken
Standard

du wirst einen timer brauchen der der eine globale variable erhöht

Dieser sourcecode würde auf einem ATMega32 laufen.
Je nach microcontroller kann sich der code geringfügig ändern.

PHP-Code:
volatile int zeit=0;

//interrupt service routine
// wird ausgelöst wenn OCR0 erreicht wird
SIGNAL(TIMER0_COMP_vect)
{
  
zeit++;
  
TCNT0 0x00//timer wieder auf null setzen
}


int main(void){
sei();  //enable interrupts

//Timer 0 initialisieren 
TCNT0 0x00//Timer 0 mit Null initialisieren
OCR0 0x5;  //Vergleichsregister initialisieren
TIMSK = (1<<OCIE0);    //Output Compare interrupt enable
sbi(TCCR0,CS02);    
while(
true){
 if(
zeit==60)
 {
  
sbi(DDRC,PC1);  //schalte PC1 als output
  
sbi(PORTC,PC1);    //schalte PC1 auf 1
 
}
}

mit dem vergleichsregister OCR0 legst du fest wie weit er zählen soll bis der interrupt SIGNAL auslöst und raufzählt.
und im main legst dann fest welcher output des microcontrollers geschalten werden soll wenn ein bestimmter wert erreicht ist.

Du musst das vergleichsregister halt dann richtig einstellen damit er genau 1 sekunde zählt
oder 60 sekunden.

je nach Taktfrequenz der microcontrollers.
____________________________________
\'I think I spider\'


Geändert von Atomschwammerl (24.08.2010 um 20:26 Uhr).
Atomschwammerl ist offline   Mit Zitat antworten