Skocz do zawartości

PWM w Atmega8


andrzej31-91

Pomocna odpowiedź

Witam wszystkich.

Chciałbym sterować za pomocą tego układu i tranzystora elektrosprzęgło ale chodzi mi o to aby sprzęgło nie zaczynała przenosić napędu od razu co powodowało by szarpnięcia tylko żeby zaczynało przekazywać napęd płynnie. I chciałbym prośić aby ktoś wstawił taki prosty programik w bascomie który bedzie działał tak że jak na jednym porcie wejściowym pojawi się stan 1 to przez ok 2-3 sekundy na porcie wyjściowym będą generowane sygnały PWM których wypełnienie będzie rosło aż po 2-3 sekundach na tym porcie bedzie tylko stan wysoki. A jak stan portu wejściowego zmieni się na 0 to układ przełącza port wyjściowy w stan 0. Czy da się coś takiego zrobić? Ja jestem jeszcze zielony z programowania ale staram się coś nauczyć, szukałem na forum podobnych tematów ale za bardzo nic nie znalazłem. Bardzo proszę o pomoc.

Link do komentarza
Share on other sites

Witam

szukałem jeszcze na forach i znalazłem taki program

'******* procek ******* 
$regfile = "attiny2313.dat" 
$crystal = 8000000 

$hwstack = 30 
$swstack = 30 
$framesize = 30 

'****** dioda R/G 1 ***** 
Config Pind.5 = Output 
Config Pinb.2 = Output 

' nic = a=0 b =255 
'*** pwm **** 
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Up , Prescale = 1 

'****** dioda R/G 2 ***** 
Config Pinb.3 = Output 
Config Pinb.4 = Output 
'*** pwm **** 
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Up , Prescale = 1 

'***** przyciski **** 
Config Pinb.1 = Input 
Config Pinb.0 = Input 
Set Portb.1 
Set Portb.0 

'***** zmienne ***** 
Dim I As Byte 
Dim J As Byte 

Do 

If Pinb.1 = 0 Then 
Waitms 45 
If Pinb.1 = 0 Then 
  Incr I 
  Pwm0a = I 
  Pwm0b = I 
End If 

Elseif Pinb.0 = 0 Then 
Waitms 45 
If Pinb.0 = 0 Then 
  Incr J 
  Pwm1a = J 
  Pwm1b = J 
End If 

End If 

Loop 
end

wiem że to jest na attiny2313 jak to będzie działać to również będę zadowolony. według autora jest to układ do sterowania jasnością diod led

Jak wcisniesz przycisk 1 to zwiekszasz wypelnienie 2 wyjsc pwm,

jak wciskasz przycisk 2 to zwiekszasz wypelnienie 2 innych wyjsc pwm

proszę powiedzcie mi co bym musiał zmienić żeby przystosować to do tego co sobie założyłem.

[ Dodano: 08 Paź 10 11:02 ]

Poczytałem na diodzie kursy programowania w bascom i znalazłem takie coś

$regfile = "attiny2313.dat"                 'najpierw określamy typ proca 
$crystal = 1000000                          'definiujemy z jakim taktowaniem będzie pracował 


config portb=input                          'port b  jako wejścia 
      portb=&B00000000                     'wszędzie stan spoczynkowy-0 
config portd=output                         'pprt d jako wyjścia 
      portd=&B0000000                      'wszędzie stan spoczynkowy-0 


do                                         'pętla nieskończona 

  if pinb.0=1 then                         'jeżeli przycisk 1 wciśnięty 
  portd.0=1                                'zaświeć diodę 
  waitms 2000                              'czekaj dwie sekundy 
  portd.0=0                                'zgaś diodę                            
  waitms 1500                              'czekaj 1,5 sekundy 
  portd.0=1                                'zaświeć diodę 
  waitms 3000                              'czekaj 3 sekundy 
  portd.0=0                                'zgaś diodę 
  endif                                    'koniec bloku warunkowego 

loop                                       'koniec pętli 

end                                         'koniec programu

jeżeli dodał bym jeszcze kilka razy by program gasił i zapalał diode na coraz dłuższe odcinki czasu to można by było to zastosować ?

Link do komentarza
Share on other sites

W Bascomie musiałbyś po prostu stworzyć sobie funkcję/etykietę do softstartu, gdzie zwiększałbyś w pętli od np. 50 do 255 wypełnienie PWM o 5 co 200ms (dlaczego od 50 a nie 0? Bo silniki pewnie i tak nie zareagują np. na wypełnienie 20/255 - oczywiście to zależy od modelu; podałem jedynie przykład).

Na samej górze (tam gdzie deklarujesz zmienne, ustawiasz porty) potrzebujesz oczywiście deklaracji/konfiguracji sprzętowego PWM, np.:

Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
'PWM1A => wypełnienie PWM prawego silnika
'PWM1B => wypełnienie PWM lewego silnika

Pod pętlą główną programu tworzysz etykietę Softstart:

Softstart:
For Zmienna=50 To 255
  PWM1A=Zmienna
  PWM1B=Zmienna
  Zmienna=Zmienna+5
  Waitms 200
Next

A wywołujesz ją z dowolnego miejsca w pętli programu - w momencie, gdy chcesz uruchomić silniki - za pomocą polecenia:

Gosub Softstart

Możesz też poczytać tą stronę, na pewno nie zaszkodzi:

http://www.elektroda.pl/rtvforum/topic513945.html

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

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