Skocz do zawartości

[C] Niedzialajace przyciski


Pomocna odpowiedź

Napisano

mam taki oto kod:

/* "led.c" - programik do testowania środowiska WinAVR */
/* układ ATmega 1MHz */
/* PB0,PB1 - diody LED; PD0 - przycisk */

#define F_CPU 1000000L
#include <avr/io.h>
#include <util/delay.h>                

int main(void)
{
   DDRC = 0xFF; // wszystkie piny portu c jako wyjscia
 DDRB  = 0x00;
 PORTB = 0x03;

   while (1) 
   {
     PORTC = 0xFF;    /* 0xaa binarnie 1010 1010 */
     /* opóźnienie 0.33 sek. */
     _delay_ms(100); 
      PORTC = 0x00;    /* 0x55 binarnie 0101 0101 */
     /* opóźnienie 0.33 sek. */
     _delay_ms(100);

  if(!(PIND & 0x01)) PORTC = 0xFF;
   }
}

do takiego schematu :

aa_36.jpg

Dlaczego przycisk mi nie zapala diód ? tak jakby wgl nie dzialal

if(!(PIND & 0x01)) PORTC = 0xFF; 

Pomyliłeś porty, podłączone jest do PB nie PD (tak przynajmniej jest na schemacie).

Natomiast jeśli jest tak jak w opisie, to trzeba włączyć pullup:

 PORTD |= 0x01;

i sterować portem B zamiast C (w komentarzu jest opis, że ledy są podpięte do PB)

[ Dodano: 11 Wrz 09 08:34 ]

I jeszcze jedno. Zaraz po instrukcji warunkowej i tak wykonujesz PORTC = 0xFF;, więc program nie ma szans dawać widocznych rezultatów.

[ Dodano: 11 Wrz 09 08:39 ]

Jeśli masz podłączenie jak na schemacie, proponuję taki kod:

int main(void)
{
 DDRC = 0xFF; // wszystkie piny portu c jako wyjscia
 DDRB  = 0x00;
 PORTB = 0x0F;

 while (1) {
   if ((PINB & 0x01)==0) 
     PORTC = 0xFF;
   else
     PORTC = 0;
   }
} 

Kolego Laik, a jaki masz programator? Jeśli USBasp to musisz jedną ze zewrzeć zworkę Slow SCK, która służy do programowania mikrokontrolerów taktowanych z częstotliwością 1MHz i poniżej 1MHz.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...