PIC16F690-jednoduchý program, přepínání stavů jedním tlač.

Ahoj, chtěl jsem zkusit naprogramovat jednoduchý prográmek na přepínání stavů jedním tlačítkem, ale zaboha to ne a ne rozjet. Prosím mrkněte se na to a napiště co dělám špatně. Děkuju

[code] a = PORTA;
a = a & 0b00000100;

	if(a)
	{
		ok_1 = 1;
		__delay_ms(100);
	}
	if(a && (ok_1 == 1))
	{
		ok_1 = 0;
		__delay_ms(100);
	}[/code]

Cau,co to ma presne delat ? nak sem to nepochopil
asi takle …?a = PORTA; a = a & 0b00000100; if(a) { if(ok_1)ok_1=0; else ok_1=1; }
ten delay tam je jako nejaky osetreni ? :unamused:

No jde o to, aby se 1 a 0 v ok_1 měnila při stisknutí tlačítka. Prostě On/Off jedním tlačítkem. Už jsem z toho tak zblblej, že jsem zkoušel psí kusy a jde to udělat jednoduše.

Díky za příklad, funguje to, ale když tam dám to zpoždění, bez něj to tam skáče jak to chce.

if(a) { if(ok_1) { ok_1 = 0; __delay_ms(100); } else { ok_1 = 1; __delay_ms(100); } }

Díky moc

jde to i jednodušeji

[code]
if(a) ok_1 ^= 1;

    [/code]

prostě výstup vyXORuješ

tuhle tabulku si vtluč do paměti :smiley:

set bit         a |= 1 << x;      //bit do 1
clear bit       a &= ~(1 << x);  //bit do 0
toggle bit      a ^= 1 << x;     //přepínání 1 - 0 - 1 - 0
test bit        a & (1 << x);    //čtení stavu bitu

ten poslední řádek už jsi vlastně použil pro zjištění stavu vstupu x by v tvém případě bylo 2 - a & =(1 << 2); je to samé jako **a=a & (1 << 2); **- stejně jako tvoje a = a & 0b00000100;

to zpoždění tam musíš mít kvůli tomu, že bez něj se ti procesor na stav vstupu zeptá “milionkrát” za sekundu a je jen na náhodě v jakém stavu tlačítko zastihne.

Můžeš taky třeba počkat, dokud tlačítko nerozepne:

if(a) ok_1 ^= 1;  
while(a);   // čeká na rozepnutí tlačítka

ten delay a cekani na rozepnuti tlacitka je opravdu nestastny…
staci si zapamatovat posledni stav vstupu a pri dalsim cteni je porovnat jestly je zmena nebo ne :wink:
asi taklea = PORTA; aktualni _stav= a & 0b00000100; if(!(stary_stav==aktualni _stav)){ stary_stav=aktualni _stav; if(aktualni _stav) { if(ok_1)ok_1=0; else ok_1=1; }

PS:neresi to ale zakmity tlacitka

Děkuji moc za rady a připomínky. DObrej programátor ze mě asi nikdy nebude, ale spíš se snažím jenom zkoušet blbůstky, ale hasičský stopky jsem naprogramoval a dokonce fungujou :smiley: