Skocz do zawartości

Atmega 32 i dziwne odczyty pinu


Pomocna odpowiedź

Napisano

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;
}

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