Witam. Zaczynam naukę programowania w bascomie przy okazji buduję linefollowera na tiny2313. Program udało mi się napisać bez większych problemów, jednak chciałbym go niedługo wzbogacić, m.in. o PWM. Tu się zaczyna problem-mimo że trochę poczytałem nie wiem jak to zrobić. Config Timer1 = Pwm , Pwm = 8 , Prescale = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down Jednak nie wiem co dalej-jak ustawić port na którym ma być przebieg i jak ustawić jego wypełnienie? Pozdrawiam
|
|||
Re; PWM
Coś mi tutaj nie gra.... do PWM0a rozumiem że masz podłączony MOSFETN.... Jak chcesz podłączyć 2 tranzystory to wystarczy podłaczyć dwie bramki równolegle. Do bramek nie wpływają żadne prądy.
Co do MOSFETAP + NPN to sprawa też jest prosta. Bramka musi być podłączona jakimś rezystorem, np 10k do źródła (podłączonego do zasilania), czyli do + zasilania. Ta sama bramka podłączona jest do kolektora NPN a jego emiter do masy. Rezystor na bazie npn np 10k. Odbiornik jest między drenem mosfeta a masą. Podanie napięcie na bazę NPN powoduje jego otwarcie i ściągnięcie bramki mosfeta do masy co powoduje jego włączenie.
Tak czy inaczej lepiej dać dwa mosfety N jeśli nie ma to znaczenia dla innych układów współpracujących
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Czyli coś takiego.
Czyli coś takiego. Niepotrzebny jest rezystor między emiterem a bazą tranzystora NPN? i między bramką a źródłem MOSFETA?
RE: pwm
R5 jest niepotrzebny a zamiast tego obowiązkowy jest rezystor od bramki do żródła (do +12V) mosfeta bo inaczej nigdy się nie wyłączy
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Ok poprawiłem. Dałem rezystor
Ok poprawiłem. Dałem rezystor między bramką, a źródłem mosfeta, tylko jest jeszcze jeden problem, bo chciałem podłączyć jeszcze jeden mosfet tyle że nie wiem czy lepiej bedzie go podłączyć pod T5 czy porostu bać drugi tranzystor i mośfet na porcie PB.1?
Re: Tranzystor
Daj drugi mosfet i podłącz dwie bramki bezpośrednio do siebie.... to mosfety i można łączyć bramki bez kłopotu, w przypadku bipolarnych tranzystorów tak by się nie dało.
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Witam, potrzebuje podobny
Witam, potrzebuje podobny program do regulacji jasności ledów, chciałbym używając jednego przycisku włączać i zwiększać jasność co np 51 i tak klikając aż do 255 a jeśli przekroczy wartość 255 to wraca do 0 i tak w koło, jednak nie do końca wiem jak to rozwiązać gdyż program po przekroczeniu 255 nie gasi diody tylko zaczyna od kolejnej wartości 51. Dodatkowo chciałbym aby nie było powtarzania za każdym razem od 0 do 51 i później od 0 do 102 itd tylko aby wartości były płynnie dodawane bez zbędnego "rozświecania" od nowa przy każdej zmianie wartości Proszę o pomoc. Oto program:
Re: Witam, potrzebuje podobny
Zobacz co napisałeś w programie.
Na początek dajesz deklarację zmiennej A jako byte.
Więc ta przyjmie max wartość rzędu 255, a Ty dalej sprawdzasz warunek
Warunek nigdy nie zostanie spełniony. Tyle na początek.
Moja strona w powijakach
Dobrze, ale jeśli zadeklaruje
Dobrze, ale jeśli zadeklaruje
to również nic nie zmienia, tak samo jak do zmiennej A przypisze integer
i jak wygląda sprawa z płynnym dodawaniem określonej liczby do PWM aby od nowa nie rozświetlalo ?
Dziękuję za odpowiedzi :)
edit:
problemem iż za każdym razem program zaczyna od wartości minimalnej jest ten kawałek kodu
teraz rodzi się pytanie jak go zaimplikować tak aby po calym cylku zrobił 0 na wyjściu i dopiero później next click rodzi liczbę 51 na wyjściu itd...
Edit:
Oto aktualny kod, i nadal nie potrafię osiągnąć pełnego wygaszenia po 6 naciśnięciu przycisku. Proszę o sprawdzenie i naprowadzenie.
Re: Bascom-PWM
Problemem w tym przypadku jest to że dajesz obliczenie typu
Z takiego działania przy zmiennej byte też nigdy nie uzyskasz liczby większej niż 255. Przeanalizuj sobie:
załóżmy że na początku mamy wartość 0, za pierwszym razem przy działaniu
będziesz miał wartość 51, później kolejno 102, 153, 204 i 255.
Teoretycznie gdtbyś napisał warunek:
to według powyższych założeń powinno się udać. Do tego w warunku dokładasz zerowanie zmiennej A czyli
Sprawdź.
Moja strona w powijakach
Przepraszam, że tak długo nie
Przepraszam, że tak długo nie odpisywałem jednak miałem naprawde sporo pracy, teraz znalazlem chwile. Przetestowałem sugestie jednak w dalszym ciągu jest brak gaszenia po 6 kliknięciu tylko po 5, a to mnie nie urządza, gdyż nie osiągam pełnej mocy świecenia która następuje po 5 kliknięciu. może ktoś zasugerować jakieś rozwiązanie ? Bardzo dziękuję za pomoc
Re: Bascom-PWM
No to dodaj sobie jakąś tam zmienną i ją zwiększaj przypisując jej odpowiednie wartości PWM. Na przykład tak:
Moja strona w powijakach
Oto kod: $regfile =
Oto kod:
taki zdążyłem spłodzić, przyznam ze uczyłem się select case, gdyż nigdy wcześniej tego nie używałem. Aktualnie sytuacja wygląda identycznie jak w poprzednim kodzie, czyli 5 kliknięć = 5 poziomów jasności, a 6 kliknięcie powoduje powrót do pozycji 1 czyli minimalnego wypełnienia PWM omijając pozycję 0, jakieś sugestie ? i przepraszam że tak męczę. Przyznam ze select case to całkiem ciekawa, dla mnie nowa opcja potrafiąca uprościć sporo :)
drgania styków i wszystko
Drgania styków i wszystko jasne :), teraz działa. Gdybyś tylko jeszcze mógł sprawdzić czy powyższa składnia jest zgodna z sztuką programowania, czy if'y są dobrze zagnieżdżone itd.
Z całego serca ślę tobie matrix podziękowania za całą dotychczasową pomoc
podpowiedź
Brakuje jednego End tego najważniejszego.
Ciekawostka
to:
można zapisać tak:
dla lepszej czytelności ;-)
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
Re: Bascom-PWM
Wiesz, każdy pisze jak mu pasuje. Kolega kaktus dobrze podpowiada, jest wtedy bardziej przejrzyście.
Za Loop daj End jak napisano wyżej, dodatkowo ten fragment:
Możesz zapisać tak:
Jeśli warunek mieści się w jednej linii to nie musisz pisać end if.
Moja strona w powijakach
poprawione, i działa dalej
poprawione, i działa dalej bezbłędnie :) mam do was pytanie, czy trudno jest napisać program tak, aby dioda nie rozjaśniała się za każdym razem do wybranej wartości pwm od zera tylko aby płynnie dodawało wartość pwm bez zbędnego gaszenia ?
8-)
Jakoś nie mogę odgadnąć co autor ma na myśli.
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
Re: Bascom-PWM
No ja też nie za bardzo jarzę więc jakby trochę jaśniej można było poprosić.
Moja strona w powijakach
Przepraszam :), może ciężko
Przepraszam :), może ciężko jest to sobie wyobrazić, to jest chyba "problem" którego słowa nie opiszą dlatego udostępniam krótki materiał video, oto on:
http://www.youtube.com/watch?v=lgs6XABVgmA
Re: Bascom-PWM
W tym miejscu masz wpisywanie do PWM'a wartości 0
Dodaj zmienną stary_pwm i najpierw wpisz wartość aktualnego pwm'u do starego a dopiero obsługuj klawisze czyli inkrementację:
stary_pwm = wartosc_pwm
I zamiast tak:
napisz tak:
Moja strona w powijakach
Dziękuję, teraz program
Dziękuję, teraz program działa tak jak tego oczekiwałem :) po dodaniu wszystkiego co zasugerowałeś, miałem jeszcze problem z
gdyż mimo wszystko co prawda nie rozświetlał od zera kolejnej pozycji, ale szybko mignął i dodawał do poprzedniej wartości pwm. Rozwiązaniem było wpisać
Jeszcze raz bardzo dziękuję wszystkim, i podziwiam za chęć pomocy, sam na pewno będę odwiedzał forum i starał się pomagać potrzebującym gdy tylko będę w stanie.
PWM wentylatora
Witam
Nie będę zakładał nowego tematu bo mój problem też jest związany z funkcją PWM.
Chce zbudować trzy stopniowy regulator wentylatora ale regulacja będzie się odbywała za pomocą przełącznika trzystopniowego.
Napisałem mały programik ale nie działa od dobrze w 100%
Zasada jest prosta:
- Pozycja przełącznika 1 = 50% mocy
- Pozycja przełącznika 2 = 75% mocy
- Pozycja Przełącznika 3 = 100% mocy
Gdzie ja w programie robię błąd?
Oto mój kod:
Pozdrawiam
Odp. Pwm wentylatora
Przepraszam, nie doczytałem że masz ustawione Pwm = 8. Masz chyba Pinb.1 = Output ..nie powinno być Port?
BARTek
Moja strona
Problem jest w tym że jak
Problem jest w tym że jak przełączam między portami nie zawsze zmienia się wartość zachowanie jest takie jak by się atmega zawiesiła.
Zmieniłem na timer0 i teraz to w ogóle nie reaguje.
Nie ma to znaczenia czy pin
Nie ma to znaczenia czy pin czy port zachowanie programu jest takie same.
Nie ma to znaczenia czy PIN
Nie ma to znaczenia czy PIN czy PORT. Zachowanie programu jest takie same.
Re: PWM wentylatora
Zamiast
powinno być
Chociaż w smumie może tego nie być bo bascom po deklaracji PWMA sam ustawia dany pin jako wyjście.
Spróbuj dopisać
A tak poza tym to ja wolałbym korzystać z PWM'a programowego. Mi programowy zawsze działa bezbłędnie.
No chyba że odmierzasz kilka innych rzeczy to programowy PWM odpada.
Moja strona w powijakach
Odp. PWM
Często szybciej coś napiszę a potem dopiero myślę ;)
Jeśli tylko o to chodzi to te Sub`y sa chyba niepotrzebne.
Napisz w pętli
Drgania styków nie będą tu miały znaczenia.
BARTek
Moja strona
Teraz to w ogóle nie reaguje.
Teraz to w ogóle nie reaguje. Czasami dioda zgaśnie :(
Na próbę zrobiłem regulację z potencjometria i ona działa. Czyli timerek działa.
Przełącznik - oszczędzanie pinów procesora
Dokładając dwie diody do przełacznika i przepisując lekko warunki możesz oszczędzić wyprowadzenia procesora.
W tej konfiguracji w pozycji "3" obydwa piny maja stan niski.
Obsługa przerwań jest w tych trybach niepotrzebna (Enable Interrupts i Enable Timer1).
Nie należy też chyba mylić Clear Up z Set .. tam w Clear Up po prostu licznik liczy albo w dół albo w górę.
Zmieniając kilka rzeczy naraz w programie nie dojdziesz do jego funkcjonalnej postaci :D
BARTek
Moja strona
Co mi po tych diodach jak
Co mi po tych diodach jak program nie reaguje, a timer działa jak pisałem wyżej.
Odp. Pwm
W Helpie pisza żeby używać zmiennych do odczytu i zapisu danych w rejestrach Compare. Spróbuj napisać tak:
BARTek
Moja strona
Teraz w ogóle sygnału na
Teraz w ogóle sygnału na wyjściu nie ma. Chyba sobie daruję.
Wentylator PWM 100% working ;)
Miałem tyle chęci by zbudować to Twoje cudo. Podłączyłem nawet wentylator z komputera poprzez IRFZ44 ;)
Działa sto procentowo bo mi wartość PWM wyświetla na LCD. Każdorazowe dotknięcie któregoś z pinów PORTC ustawia żądaną wartość PWM i tak się zachowuje wentylator. Enkoder sobie dołączyłem dla zabawy. Też ładnie działa.
Co ciekawe Kompilator nie pozwala już ustawiac żadnych stanów na PORTB.1 jeśli skonfiguruje się PWM...on go zajmuje.
Dodam co doczytałem wczoraj. Wiki Bascoma pisze, że użycie Compare A/B lub Compare A/B PWM automatycznie ustawia korespondujący z nim Pin jako wyjście, chyba że wpisze się NO_OUTPUT lub, jak ja, Disconnect.
Drugą sprawą jest to, że fabryczne ustawienia ATmega8 to 1MHz. Na 8MHz trzeba ją sobie przestawić.
BARTek
Moja strona
Pwm
Napisałem programik tak:
Zmieniłem na atmegę16, program reaguje poprawnie między wartościami 160 i 255. Natomiast gdy przełączę na 100 czyli najmniejszą dioda gaśnie. Miernik pokazuje 0V.
Jak możesz to wrzuć mój programik u siebie i zobacz czy tak samo reaguje.
Odp. Pwm + USB control
Widzisz Kolego problem jest w tym, że pytasz, a nie czytasz odpowiedzi. Napisałem Ci wyraźnie, że w instrukcji, którą najwyraźniej przeczytałem za Ciebie, jest napisane by do odczytu i zapisu rejestrów Compare używać zmiennych. Zrobiłem jak napisali i mi wszystko działa. Poszedłem w międzyczasie dalej. Wentylator rusza się dopiero od wartości PWM = 50 więc na wszelki wypadek, żeby silnik czasem nie stał w miejscu, zrobiłem mu "rozruch", po czym śmiga na najniższej prędkości 50.
Sprawdziłem tez pomysł z diodami do wyboru prędkości i spisuje się znakomicie. Prędkością wentylatora można też sterować poprzez Terminal na porcie Com wpisując wartość PWM. Pokręcając enkoderem widzimy wartość PWM w oknie Terminala.
Może zerknij na działające rozwiązanie i porównaj ze swoim.
Miłego dnia
BARTek
Moja strona
Owszem czytam kolego :) Czy
Owszem czytam kolego :)
Czy zrobię to tak:
Czy tak:
Efekt jest ten sam. Sam sprawdź.
Dioda pod Pwm
Napiszę Ci tak :D
Z ciekawości, zamiast wentylatorka podłączyłem diodę LED.
U mnie podłączona jest do +5V i procesor przez 200R i MosFeta zwiera ją do masy.
W tej konfiguracji i ustawieniu "Clear Up" Dioda świeci pełnym blaskiem od 255 do około 100. Rozjaśnianie się diody najbardziej widać od 2 do 50 ..potem dla oka jakby wszystko jedno. Zapewniam Cię że nie wszystko jedno było wentylatorkowi. Natomiast wpisanie "Clear Down" odwraca logikę i dioda przy 255 gaśnie a świeci pełnym blaskiem przy Pwm = 0. PwmB jest od drugiego pinu (u Ciebie PD4). Ja na OC1B mam już LCD więc mam je odłączone od Timera.
Podsumowując podłącz może element którym chcesz końcowo sterowac bo diody rozświetlają sie nieliniowo.
Przed chwilą sprawdziłem. Między 255 a 128 różnica w świeceniu jest prawie żadna...a wentylatorek napewno zauważył by zmianę ;) Przy 50 wentylatorek dopiero rusza, a dioda już normalnie świeci...
BARTek
Moja strona