Atmega 32, program obsługujący klawiaturę - 4 przyciski, odczytywane co 20 ms ( co któreś przerwanie timera 1), przyciski podpięte pod PC), PC0,PC1,PC2,PC3.
jeżeli w programie wykorzystuję PC0 i PC1 to jest ok , ale jeśli w pętli obsługi przerwania odczytującego klawiaturę sprawdzam stan przycisków PC2 i PC3 to zgłoszenia przerwania są w każdym odczycie klawiatury...., chociaż napięcia na tych nóżkach jest 4,81. Luty posprawdzane , napięcia też. Czyżby chodziło o rezystory podciągające ?
Oto funkcja main: (freagment):
________________________
Jak widzicie w zależności które wykryto naciśnięcie klawisza to odpowiednia wartość zostaje wpisana do zmiennej x.
Najdziwniejsze jest ze symulacja tego programy w VMLAb działa doskonale...
Dodano po 19 [minuty]:
Czyżby problem wynikał z tego że PC2 i PC3 są używane do JTAG-a ?
jeżeli w programie wykorzystuję PC0 i PC1 to jest ok , ale jeśli w pętli obsługi przerwania odczytującego klawiaturę sprawdzam stan przycisków PC2 i PC3 to zgłoszenia przerwania są w każdym odczycie klawiatury...., chociaż napięcia na tych nóżkach jest 4,81. Luty posprawdzane , napięcia też. Czyżby chodziło o rezystory podciągające ?
Oto funkcja main: (freagment):
PORTC=0x0f; //
DDRC=0x00;// PC0-PC3 wejscie z podciąganiem;
//PC4-PC7 - nie ruszane - wysoka imp.
TIMSK=1<<TOIE0; //zezw na przerwania od Timera0
sei();
while(1)
{
if(x!=0x00)
{
piszilcd(0x01); //czyść LCD
czekaj(1.64*tau); //wymagane dla instrukcji czyszczenia ekranu opóźnienie
switch(x)
{
case 0x01: pisztekst(tekst1);
break;
case 0x02: pisztekst(tekst2);
break;
case 0x03: pisztekst(tekst3);
break;
case 0x04: pisztekst(tekst4);
break;
}
x=0x00;
}
}
funkcja obsługującej przerwanie :
SIGNAL (SIG_OVERFLOW0)
{
TCNT0=tau0; //licznik timera0
if(--liczt0==0) //czy czytac klawiature ?
{
x=0x00;
if(bit_is_clear(PINC,PC0))
{
x=0x01;
}
else{
if(bit_is_clear(PINC,PC1))
{
x=0x02;
}
else
{
if(bit_is_clear(PINC,PC2))
{
x=0x03;
}
else
{
if(bit_is_clear(PINC,PC3))
{
x=0x04;
}
}
}
}
liczt0=klaw;
}
}
________________________
Jak widzicie w zależności które wykryto naciśnięcie klawisza to odpowiednia wartość zostaje wpisana do zmiennej x.
Najdziwniejsze jest ze symulacja tego programy w VMLAb działa doskonale...
Dodano po 19 [minuty]:
Czyżby problem wynikał z tego że PC2 i PC3 są używane do JTAG-a ?