Witam,
na wstępie dziękuję wszystkim na forum, wasze posty są nieocenionym źródłem wiadomości. Zajmuję się ponad pół roku hobbystycznie elektroniką. Od pewnego czasu siedzę nad problemem związanym z ATMEGA16. Problem dotyczy odczytywania stanu wejść logicznych na mikrokonrolerze. Docelowo ma być to klawiatura, jednak ponieważ projekt klawiatury na płytce stykowej nie chciał działać cofnąłem się do podstaw. Odczytanie 1 wejścia i ustawienie innego wyjścia w ten sam stan logiczny. Poniżej zamieszczam schemat
Podłączyłem mikrokontroler na kwarc 4MHz. Dioda LED2 ma wyświetlać status wejścia PORTA.0, LED1 jest diodą kontrolną która miga w 2 sekundowym cyklu.
Kod głównej funkcji main wygląda następująco:
Zaprogramowanie mikrokontrolera powyższym kodem skutkuje miganiem diody kontrolnej. Próby odczytania portu wejściowego i zapalenia diody LED2 na porcie wyjściowym nie powiodły się.
Nie mogę znaleźć błędu więc jeśli ktoś widzi go lub posiada jakieś sugestie które mi pomogą zlokalizować ten błąd - jestem wdzięczny. Z góry dziękuję za wszelkie odpowiedzi.
pozdrawiam
na wstępie dziękuję wszystkim na forum, wasze posty są nieocenionym źródłem wiadomości. Zajmuję się ponad pół roku hobbystycznie elektroniką. Od pewnego czasu siedzę nad problemem związanym z ATMEGA16. Problem dotyczy odczytywania stanu wejść logicznych na mikrokonrolerze. Docelowo ma być to klawiatura, jednak ponieważ projekt klawiatury na płytce stykowej nie chciał działać cofnąłem się do podstaw. Odczytanie 1 wejścia i ustawienie innego wyjścia w ten sam stan logiczny. Poniżej zamieszczam schemat
Podłączyłem mikrokontroler na kwarc 4MHz. Dioda LED2 ma wyświetlać status wejścia PORTA.0, LED1 jest diodą kontrolną która miga w 2 sekundowym cyklu.
Kod głównej funkcji main wygląda następująco:
uint16_t j;
uint8_t i;
//inicjalizacja
DDRA = 0x00;
DDRB = 0xFF;
PORTB = 0x00;
PORTA = 0x00;
//pętla główna
while (1>0){
//wczytanie i wyświetlenie informacji na wyjściu
i = PORTA;
//ustawienie wyjścia
if ((i & 0x01) == 0x00) PORTB &= ~0x01; else PORTB |= 0x01;
//wyłączenie diody LED1
PORTB &= ~0x02;
//opóźnienie
for(j=0;j<1000;j++) _delay_loop_2(1000);
i = PORTA;
if ((i & 0x01) == 0x00) PORTB &= ~0x01; else PORTB |= 0x01;
//włączenie diody LED1
PORTB |= 0x02;
for(j=0;j<1000;j++) _delay_loop_2(1000);
}
Zaprogramowanie mikrokontrolera powyższym kodem skutkuje miganiem diody kontrolnej. Próby odczytania portu wejściowego i zapalenia diody LED2 na porcie wyjściowym nie powiodły się.
Nie mogę znaleźć błędu więc jeśli ktoś widzi go lub posiada jakieś sugestie które mi pomogą zlokalizować ten błąd - jestem wdzięczny. Z góry dziękuję za wszelkie odpowiedzi.
pozdrawiam