Skocz do zawartości

Atmega 32 i dziwne odczyty pinu


slathos

Pomocna odpowiedź

Witam,

Mam problem ze swoim programem. Niżej opisana funkcja ma docelowo obsługiwać zamykanie klapy przesuwnej. Jednakże zamiast czekać aż czujnik wykryje zamknięcie klapy, pętla wewnątrz funkcji wychodzi w losowym momencie, zazwyczaj po 3-5 jej cyklach. Czujniki i obsługę silników mam na porcie C, w funkcji init jest więcej aktywowanych pinów, jednakże nie mają one wpływu na tą funkcję. Sprawdziłem w fuse bitsach i mam wyłączony debug po JTAG, więc to raczej nie to. Bardzo bym prosił o poradę, co może powodować takie zachowanie.

Z góry dziękuję.

uint8_t temp;
int init(void)
{
   PORTA |= 0xFF;
   DDRC |= 0x1F;
   PORTC |= 0x60;
//    TCCR0 |= (1<<COM01) | ((1<<WGM01)) | (1<<WGM00) | (1<<CS00);
//    OCR0 |= 0xFE;
   return 0;
}
int close_slide(void)
{
   PORTC |= 1;  // Otwieranie zabezpieczenia zamknięcia
   _delay_ms(1000);
   PORTC &= 1;
   PORTC |=0x08; // Silnik zamykania klapy
   temp = PINC & 0x20; // Czujnik
   while(temp != 0)
   {
       temp = PINC & 0x20;
       if (temp== 0)
       {
           _delay_ms(100);
           PORTC |=0x02; // Zamykanie zabezpieczenia zamknięcia
           _delay_ms(1000);
           PORTC &=0x02;
           PORTC &=0x08;
       }
       _delay_ms(300);
   }
   return 0;
}
Link do komentarza
Share on other sites

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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.