Zdravím, potřebuji ovládat osm serv tak jsem spáchal tento program a on částečne funguje serva nastaví výchozí polohu to je v pořádku, problém mám v tom že když v hlavní smičce while přepíšu proměnou novou hodnotou tak na ní program nereaguje a generuje stále ten ze začátku programu, copa dělám špatně ?
uint8_t port = 0;
uint8_t cas = 100;
uint8_t servox = 0;
#define servomin 91
uint8_t servo0 = 100;
uint8_t servo1 = 100;
uint8_t servo2 = 100;
uint8_t servo3 = 100;
uint8_t servo4 = 100;
uint8_t servo5 = 100;
uint8_t servo6 = 100;
uint8_t servo7 = 100;
uint16_t hodnota;
ISR(TIMER0_COMP_vect)
{
switch(servox)
{
case 0:PORTC = 0b01000000;TCNT0 = 0;OCR0 = servomin;servox += 1;break; // čas potřebný pro min polohu
case 1:PORTC = 0b01000000;TCNT0 = 0;OCR0 = servo1;servox += 1;break; // nastavení polohy serva 1
case 2:PORTC = 0b00100000;TCNT0 = 0;OCR0 = servomin;servox += 1;break;
case 3:PORTC = 0b00100000;TCNT0 = 0;OCR0 = servo2;servox += 1;break;
case 4:PORTC = 0b00010000;TCNT0 = 0;OCR0 = servomin;servox += 1;break;
case 5:PORTC = 0b00010000;TCNT0 = 0;OCR0 = servo3;servox += 1;break;
case 6:PORTC = 0b00001000;TCNT0 = 0;OCR0 = servomin;servox += 1;break;
case 7:PORTC = 0b00001000;TCNT0 = 0;OCR0 = servo4;servox += 1;break;
case 8:PORTC = 0b00000100;TCNT0 = 0;OCR0 = servomin;servox += 1;break;
case 9:PORTC = 0b00000100;TCNT0 = 0;OCR0 = servo5;servox += 1;break;
case 10:PORTC = 0b00000010;TCNT0 = 0;OCR0 = servomin;servox += 1;break;
case 11:PORTC = 0b00000010;TCNT0 = 0;OCR0 = servo6;servox += 1;break;
case 12:PORTC = 0b00000001;TCNT0 = 0;OCR0 = servomin;servox += 1;break;
case 13:PORTC = 0b00000001;TCNT0 = 0;OCR0 = servo7;servox += 1;break;
case 14:PORTC = 0b10000000;TCNT0 = 0;OCR0 = servomin;servox += 1;break;
case 15:PORTC = 0b10000000;TCNT0 = 0;OCR0 = servo0;servox = 0; break;
}
}
int main(void)
{
DDRC = 0b11111111; // port c jako výstup
TCCR0 |= 1<<CS01 | 1<<CS00; // nastavení předděličky časovače 0 na 64
OCR0 = cas; // registr pro porovnání obsahu časovače
sei(); // povolení přerušení
TIMSK |= 1<<OCIE0; // povolení přerušení od časovače 0
while(1)
{
servo1 = 50;
servo2 = 150;
}
}