logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATmega8][AVR] Sterowanie predkoscia silnikiem krokowym

mm17 16 Paź 2008 22:08 2324 11
REKLAMA
  • #1 5639128
    mm17
    Poziom 11  
    Moze ma ktos pomysl jak napisac program na Atmege8, ktora sterowala by predkoscia w silnikow krokowym za pomoca 2 przyciskow. Czesc programu juz mam ale niestety nic nie dziala ;/ ma ktos jakis pomysl? Z gory dziekuje za wszystkie odopwiedzi Pozdrawiam
  • REKLAMA
  • #2 5639273
    krzychS
    Poziom 29  
    Przrwaniem obsługujesz przyciski. W zależności który naciskasz zostaje zwiększona lub zmniejszona wartość zmiennej. Zmienna służy do ustalania częstotliwości wystąpienia przerwania Timera, w którym obsługujesz kroki silnika.
  • #3 5639691
    mm17
    Poziom 11  
    Mam takie cos:
    
    #define cbi(sfr,bit)(_SFR_BYTE(sfr)&=~_BV(bit))
    #define sbi(sfr,bit)(_SFR_BYTE(sfr)|=_BV(bit))
    #include<avr/interrupt.h>
    #include<avr/io.h>
    char krok;
    union"
    {
    unsigned int TCN1;
    unsigned char TCN1c[2];
    }volatile TCN1u;
    unsigned int licznik=0;
    
    SIGNAL (SIG_OVERFLOW1)
    {
    krok ++;
    if (krok>Cool krok = 1;
    
    TCNT1H=TCN1u.TCN1c[1];
    TCNT1L=TCN1u.TCN1c[0];
    
    }
    
    
    int main(void)
    { unsigned int a;
    
    char tab[8];
    tab[1]=0b00000011;
    tab[2]=0b00000010;
    tab[3]=0b00000110;
    tab[4]=0b00000100;
    tab[5]=0b00001100;
    tab[6]=0b00001000;
    tab[7]=0b00001001;
    tab[8]=0b00000001;
    a=3906;
    DDRA=0b00001111;
    TCN1u.TCN1=0xFFFF-a;
    TCNT1H=TCN1u.TCN1c[1];
    TCNT1L=TCN1u.TCN1c[0];
    sbi (TCCR1B,CS12);
    sbi (TCCR1B,CS10);
    sbi (TIMSK,TOIE1);
    sei();
    while (1)
    {
    
    PORTA=tab[krok];
    
    
    TCN1u.TCN1=0xFFFF-a;
    if (bit_is_clear(PINB,0))
    {a=a+1;
    if (a>65000) a=65000;
    }
    
    if (bit_is_clear(PINB,1))
    {a=a-1;
    if (a<10) a=1000;
    }
    }
    }


    Teraz jak to ustawic aby sterowalo predkościa na 2 przyciski?

    Do wyróżnienia kodu , używamy [code] - proszę pamiętać o tym na przyszłość.
    Poprawiłem.
    [zumek]
  • REKLAMA
  • #4 5639760
    vcd_a
    Poziom 18  
    Musisz zmieniać interwały czasowe pomiędzy zapisami na cały port, pozdrawiam Krzysiek
  • #5 5640729
    mm17
    Poziom 11  
    hmm.. niezabardzo teraz wiem gdzie to zmienic ? ;/
  • REKLAMA
  • #6 5640768
    vcd_a
    Poziom 18  
    A masz w ogóle jakiekolwiek pojęcie jak ten kod działa? ;), pozdrawiam Krzysiek
  • REKLAMA
  • #7 5640988
    szelus
    Poziom 34  
    Sądząc z programu, to te przyciski powinny iść do masy, a nie do VCC. Należałoby też włączyć pull-up-y na porcie B (przez wpisanie jedynek).
  • #8 5643895
    mm17
    Poziom 11  
    ten program pomogl mi pisac znajomy, ale wiem ze tutaj jest pare bledow i te napiecie rowniez. Tylko niezabardzo wiem jak sie teraz do tego zabrac :/ hmmm
  • #9 5647175
    mm17
    Poziom 11  
    Moze mi ktos pomoc w dokonczeniu tego programu?
  • #10 5648380
    szelus
    Poziom 34  
    Przyciski podłączone taj, jak na Twoim schemacie nie będą działać. Programowo tego się nie da poprawić.
    Przełączyłeś już przyciski do masy? Bo program wygląda, że powinien chodzić.
  • #11 5648733
    mm17
    Poziom 11  
    no wlasnie chcialbym aby przyciski chodzily z Vcc, chyba da sie tak zrobic? wiem ze program jest napisany troche inaczej bo do masy i dlatego chcialbym to zmienic
REKLAMA