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

[Atmega 8][C] Niedziałające serwo again

jezjacek 04 Lis 2009 16:36 1854 1
REKLAMA
  • #1 7215058
    jezjacek
    Poziom 14  
    Znalazłem na forum kod dostosowałem do swoich potrzeb:

    /* Test serwo*/ 
    /* Programik przykladowy  */ 
    /* typ uC:  ATmega8 1MHz */ 
    /* licznik/timer1  w trybie  PWM  */ 
    /* Sygnal impulsowy (50Hz)   na wyprowadzeniu  PB1(OC1A) */ 
    /* Przyciski sterujace szerokoscia impulsu przylaczone miedzy PD2 i mase  oraz  PD3 i mase  */ 
    
    #define F_CPU 1000000L 
    #include <avr/io.h> 
    #include <avr/interrupt.h> 
    #include <util/delay.h> 
    #include <string.h> 
    #include <avr/signal.h> 
    
    int main(void) 
    { 
      int p = 750; 
      DDRD  = 0x00; 
      PORTD = 0x0c; 
      DDRB  = 0x02; 
      PORTB = 0x02; 
      ICR1  = 10000; 
      OCR1A = p; 
      TCCR1A = 0x80; 
      TCCR1B = 0x11; 
    
      for (;;) 
      { 
         if(bit_is_clear(PIND, 2)) 
         { 
             p+=50; 
             if(p > 1200) p=1200; 
             OCR1A=p;  
             loop_until_bit_is_set(PIND, 2); 
         } 
         if(bit_is_clear(PIND, 3)) 
         { 
             p-=50; 
             if(p < 500) p=500; 
             OCR1A=p;  
             loop_until_bit_is_set(PIND, 3); 
         } 
      } 
    }

    no i oczywiście nie działa. Tzn serwo ustawia się na środku ale nie reaguje na przyciski. Jak przed pętlą wstawiłem p=1200 to obróciło się max w jedną stronę jak wstawię dwie wartości p przedzielone delajem 3 sek to serwo i tak widzi pierwszą i ostatnią wartość. Sprawdziłem też częstotliwość na pinie D wynosi 50 Hz czyli ok ale wypełnienie jest 50% !!! I następny problem: podstawiałem różne wartości p. Przy 1200 wychylenie jest max w lewo. Natomiast w prawo udaje się skręcić o jakieś 30 stopni co odpowiada p=500 dalsze zmiejszanie p nic nie daje.
    Proszę o pomoc, wskazówki i rady.
    Dodam, że testowałem większość programów do sterowania serwami i w większości nie działają. Także nie działa config servos w Bascomie. Albo ja nie wiem jak dobrać reload i wartości wychylenia serwa.
    [Atmega 8][C] Niedziałające serwo again
  • REKLAMA
  • #2 7217131
    bkilian
    Poziom 10  
    Pokaż schemat, w szczególności jak masz podpięte przyciski.
REKLAMA