najde se někdo, kdo by poradil? Píšu program, ale zasekl jsem se hned na začátku. Už s tím bojuju asi moc dlouho a potřeboval bych někoho s čistou hlavou. Napsal jsem si jednoduchý program, kde v přerušení kontroluji stisk tlačítka a v nekonečné smyčce pouze zapínám na pár ms větřák. Ve skutečnosti ovšem ale spínám pouze relé.
Problém ale je ten, že při stisku tlačítka mi program nereaguje. A už fakt nevím jestli mám blbě nastavené přerušení nebo něco jiného. Hold se mi nějak nedaří tu mršku chybku najít.
Tak třeba když se na to koukne někdo, kdo zrovna vstal od telky a má čistou hlavu, tak ji hned uvidí. Dík moc
krystal mám 12MHz
fce inicializace
Kód: Vybrať všetko
void inicializace(){
//nastaveni vstupnich pinu
DDRD &= ~(1 << TL_1);
DDRD &= ~(1 << TL_2);
//aktivace pull-up
PORTD |= (1 << TL_1);
PORTD |= (1 << TL_2);
//nastaveni vystupnich pinu
DDRB |= (1 << ventilator_1);
DDRB |= (1 << ventilator_2);
//nastaveni preruseni od citace casovace 0 (TLACITKO)
TCCR0A |= (1 << WGM01); //CTC mod
TCCR0B |= (1 << CS02)|(1 << CS00); // dělička kmitočtu CLK/1024
TIMSK |= (1 << OCIE0A); //Aktivace preruseni CTC modu
OCR0A = 188; //cca 16ms pro kontrolu tlačítka
sei(); //povoleni preruseni
}
Kód: Vybrať všetko
volatile unsigned char tl_prodleva_1,tl_present_1,tl_prodleva_2,tl_present_2 ;
ISR (TIMER0_COMPA_vect) {//compare interrupt B
//ošetření tlačítka TL_1 a jeho zákmitů
if((PIND & (1 << TL_1))){
if(tl_prodleva_1<20) tl_prodleva_1++;
if(tl_prodleva_1==19) tl_present_1=1;
}
else{
if(tl_prodleva_1==20){ //sem se dostane pouze pri stisku tlacitka
vetrak_1=1;
}
tl_prodleva_1=0;
}
//ošetření tlačítka TL_2 a jeho zákmitů
if((PIND & (1 << TL_2))){
if(tl_prodleva_2<20) tl_prodleva_2++;
if(tl_prodleva_2==19) tl_present_2=1;
}
else{
if(tl_prodleva_2==20){ //sem se dostane pouze pri stisku tlacitka
vetrak_2=1;
}
tl_prodleva_2=0;
}
}
Kód: Vybrať všetko
int main(){
inicializace();
while(1){ // nekonečný cyklus
if (vetrak_1==1){
PORTB |= (1 << ventilator_1);
_delay_ms(200);
PORTB &= ~(1 << ventilator_1);
_delay_ms(200);
vetrak_1=0;
}
if (vetrak_2==1){
PORTB |= (1 << ventilator_2);
_delay_ms(200);
PORTB &= ~(1 << ventilator_2);
_delay_ms(200);
vetrak_2=0;
}
}
return 0;
}