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

[Attiny2313][C] PWM - czas rekacji

krzepson 11 Lis 2008 03:17 1392 4
REKLAMA
  • #1 5724645
    krzepson
    Poziom 10  
    Oto kod dot. sterowania PWM. Jak łatwo zauwazyc ma on zmieniać wartość timera w zależności o wejścia na pinach 4 i 5 portu B. Programik działa ale mam co do niego pytanie. Dlaczego zmiana obrotów czasami następuje natychmiast po podlaczeniu masy do jednego z pinow a czasem trzeba odczekac dosc znaczny okres czasu (ok.3 sek)? Czy jest to zależne od czestotliwosci sprawdzania warunków? Jeżeli tak to jak ustawić aby zmiany zachodziły natychmiastowo. Prosze o pomoc i wyrozumiałość :)
    #include <avr/io.h> 
    
    void timer(void)  { 
      TCCR0A = (1<<WGM01) | (1<<WGM00); 
      TCCR0A |= (1<<COM0A1); 
      OCR0A = 255; 
      TCCR0B |= (1<<CS00); 
    } 
    
    void out(void) { 
      DDRB |= (1<<2);
      DDRB &= ~(1<<5);  
      DDRB &= ~(1<<4);
    } 
    
    int main (void) 
    {  
      
      out(); 
      timer(); 
      
       
     while(1) 
     {
     
      if (PINB & (1<<5)) 
      OCR0A= 255; 
      
      else if (PINB & (1<<4)) 
      OCR0A = 125;
     
      else 
      OCR0A = 0;
     
     }
        
    return (0); 
    }
  • REKLAMA
  • #2 5725420
    dawid512
    Poziom 32  
    Zapomniałeś o drganiach styków. Dodaj opóźnienie do warunku.
  • REKLAMA
  • #3 5725810
    krzepson
    Poziom 10  
    A jakiś przykładzik? :)

    Przy takim ustawienu z mniejszych obrotów na wyższe przeskakuje natychmiastowo jednak z wyższych na niższe i na 0 nadal ok 3 sek...
      if (PINB & (1<<5)) 
      {
      _delay_ms(5);
      OCR0A= 255; 
      }
      
      else if (PINB & (1<<4)) 
        {
    	_delay_ms(5);
      OCR0A = 125; 
      }
      
      else 
      {
        _delay_ms(5);
      OCR0A = 0; 
      }
     } 
  • REKLAMA
  • #4 5725929
    dawid512
    Poziom 32  
    5ms to zdecydowanie za mało, daj tak 100ms. Pytanie kolejne to jaką częstotliwość oscylatora podałeś w programie? Odnośnie fuse bitów mam nadzieje że dobrze ustawione.
  • #5 5726399
    krzepson
    Poziom 10  
    F_CPU = 1000000

    Ustawiłem 100 ms. Powiedzmy, że czas oczekiwania się zmniejszył, jednak nadal szybciej przechodzi z niższych na wyższe obroty, niż odwrotnie. Chciałbym również aby po zrzuceniu 'jedynki' z 4 lub 5 pinu silnik się zatrzymywał, a nie kręcił jeszcze przez chwile jak się to obecnie dzieje.
REKLAMA