Skocz do zawartości

[C] Sterowanie silnikiem krokowym z wykorzystaniem atmega32


skyline11

Pomocna odpowiedź

Chciałbym wysterować silnik krokowy za pomocą z wykorzystaniem timera0.

#include <avr/io.h> 
#include <avr/interrupt.h> 

char licznik = 0;
const short tablica1[5]= {0x03, 0x06, 0x0C, 0x09, 0};
short i=0;

int main()
{
    DDRA=0;
    DDRC = 0xFF;
    TCCR0 |= (1<<CS00) | (1<<CS01);
    TIMSK |= 1<<TOIE0;
    TCNT0 = 131;
    sei();

    while() {}

}



SIGNAL(SIG_OVERFLOW0) 

{

    licznik++; //zwiększenie o 1

    if(licznik > 125) //sprawdzamy, czy nie minęło już 125 przepełnień

    {
          if(bit_is_set(PINA,1))
          { 
              if(i==5)i=0; //zapobiegniecie wyjscia spoza tablicy
              PORTC = tablica[i];
              i++;
          }

         licznik = 0; //wyzerowanie licznika

    }

    TCNT0 = 131; //ustawienie wartości początkowej

}

W chwili pojawienia się sygnału na porcie A warunek zostaje spełniony i podawany jest sygnał na jedno z wejść silnika. Za każdym razem gdy wystąpi przerwanie i warunek zostanie spełniony zasilane jest inne uzwojenie silnika. Jeżeli zostanie zasilone uzwojenie np. trzecie a następnie warunek nie zostanie spełniony sekwencja zostanie przerwana, a uzwojenie 3 nadal będzie pod napięciem. Nie możemy bezpośrednio po podaniu sygnału do silnika wyzerować linię, bo uzwojenie nie zostanie nawet zasilone. Czy ktoś wie jak rozwiązać mój problem, aby w chwili zaniku sygnału żadne z uzwojeń nie było pod napięciem?

Link do komentarza
Share on other sites

Możesz dokładniej opisać o co Tobie chodzi? Niestety opis jest strasznie chaotyczny.

Jak dobrze zrozumiałem to chcesz zrobić tak, że jak pina bit 1 nie będzie wysterowany to ma zniknąć napięcie z silnika?

1. Zmienna licznik powinna być typu volatile (zmieniasz ją w przerwaniu i po implementacji pkt.2 także w programie głównym)

2. W pętli while() sprawdzaj czy pina,1 is reset i jak tak to zeruj licznik i zapisuj PORTC=0; - problem rozwiązany.

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.