Proměnné:
Kód: Vybrat vše
volatile int transistor;
Definice:
Kód: Vybrat vše
#define F_CPU 16000000UL
#define CURRENTKONST 4 //256x rozdělení periody
#define SIGN >
#define OSIGN <
Obsluha přerušení:
Kód: Vybrat vše
SIGNAL(TIMER1_OVF_vect)
{
OCR1A = transistor;
} Nastavení registrů:
Kód: Vybrat vše
TCCR1A |= (1 << COM1A1) | (1 << COM1A0) | (1 << WGM10) | (1 << WGM11); //PWM 10bit; 3 mód PWM
TCCR1B |= (1 << CS11); //8mi bitová předdělička
TIMSK1 |= (1 << TOIE1); //povolení přerušení časovače1 (PWM)Část kódu:
Kód: Vybrat vše
//regulace proudu pro 13500mV až 14000mV
if ((voltage > 13500) & (voltage < 14000))
{
if (current SIGN 100)
{
transistor+=CURRENTKONST;
if (transistor > 1023)
{
transistor = 1023;
}
}else if (current OSIGN 100)
{
transistor-=CURRENTKONST;
if (transistor < 1)
{
transistor = 0;
}
}
}Děkuji předem za odpovědi.
Martin Smolák
Edit.:
Mám ještě jeden problém když jsem použil více přerušení. Použil jsem Timer0, Timer1, Timer2, ADC, INT0. A problém je ten, že když se "volá" např.: timer2 tak to rozhodí hodnoty adc a timeru1, atd. Nevíte někdo co s tím?