Witam, mam pytanie, czy żeby mikrokontroler działał prawidłowo musi być w nim użyta pętla DO.. LOOP i w niej cały kod? Czy taki kod zadziała tak jak chcę: $regfile = "m8def.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 = &B00000000 Config Portc = Output 'pprt c jako wyjścia Portc = &B0000000 Dim Dzwiek As Bit Dzwiek = 0 Do ' poczatek petli glowne If Pinb.0 = 1 Then ' wlacza migajaca diode PORTD.0 Do Toggle Portd.0 Waitms 1000 Loop End If If Pinb.1 = 1 Then ' wlacza policyjne swiatla diod PORT.D1-3 (po kolei diody się zaświecają (jednocześnie świeci tylko jedna)) Do Portd.1 = 1 Portd.2 = 0 Portd.3 = 0 Waitms 250 Portd.1 = 0 Portd.2 = 1 Portd.3 = 0 Waitms 250 Portd.1 = 0 Portd.2 = 0 Portd.3 = 1 Waitms 250 Loop End If If Pinb.2 = 1 Then ' wlacza buzzer na PORTD.4 (jakaś melodyjka) If Dzwiek = 0 Then Dzwiek = 1 Do Sound Portd.4 , 4 , 10 Waitms 500 Sound Portd.4 , 4 , 15 Sound Portd.4 , 1 , 10 Sound Portd.4 , 1 , 15 Sound Portd.4 , 1 , 20 Sound Portd.4 , 1 , 30 Waitms 600 Sound Portd.4 , 1 , 30 Sound Portd.4 , 1 , 20 Sound Portd.4 , 1 , 10 Sound Portd.4 , 5 , 5 Waitms 1000 Loop Dzwiek = 0 End If End If Loop 'koniec pętli glownej End Proszę o odpowiedź... A i czy można jeszcze jakoś sterować buzzerem, żeby wydawał tony o różnej głośności?
|
|||
zynzynier
teoretycznie nie wiem czy będzie działał.
korzystasz z języka BASCOM wiec
a) program zawsze zawiera się w pętli nieskończonej DO / LOOP / END
b) warunki dla przycisków można zrobić poprzez odpowiednie np IF / END IF
c) można obsłużyć przerwania / np. zewnętrzne INT1/INT2
d) do głośności i melodii buzerra w BASCOM wykorzystuje się instr.
SOUND pin , il_impulsów , czas_impulsu
np.:
Sound Portb.1 , 10000, 10 'generuj jakiś dźwięk
End
polecam plik help do bascoma
Re; Buzzer
Buzzer musi być bez generatora, sama membrana bo inaczej zagra tylko tym co ma zaszyte w środku
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.
Podalibyście jakiś przykład
Podalibyście jakiś przykład kodu, którym obsłużyć przycisk ON i OFF?
Da się jakoś regulować napięcie które wychodzi z PINu? taki rodzaj potencjometru?
Nie da się wyłączyć softowo
Nie da się wyłączyć softowo procka można go przełączyć w tryb power down i wybudzić przerwaniem (ale bez specjalnych komend się nie da). Za to możesz dać wyłącznik, lub dwa przyciski + dwa tranzystory (lecz takie rozwiązanie nawet gdy układ nie pracuje też pobiera odrobinę prądu)
Odnośnie pętli to nie jest konieczna z tego co pamiętam ale jeżeli jej niema to program dochodzi do końca i już nie będzie reagował.
Mam jeszcze jedną uwagę
Aby wyjść z tej pętli musisz odłączyć zasilanie / ew ściągnąć reset do masy na chwilę. Jeżeli chcesz aby programowo można było wyjść z tej pętli dostaw w niej:
Kolejna uwaga debonucing przycisków (u ciebie niekonieczne bo 1 przycisk nie jest wykorzystywany już w pętli do której prowadzi) jedna gdybyś chciał zrobić wyjście z pętli tym samym przyciskiem to jest to raczej konieczne, zresztą gdybyś projekt kiedyś rozwinął...
dam ci przykład:
na początku programu - jeszcze przed pętlą masz:
Każda zdeklarowana zmienna na starcie ma wartość 0 więc nie trzeba tego pisać.
kolejna uwaga:
Przy kliknięciu przycisku na Pb.2 zmieniasz wartość zmiennej "Dzwiek" następnie program w chodzi do pętli z której nie może się wydostać, a za pętlą masz:
więc teoretycznie i w praktyce ta akcja nigdy się nie spełni.
odnośnie wychodzenia z pętli to mam taki trick :)
pokaże to na przykładzie programiku który zmienia stan na końcówce jeden przycisk PB.2 drugi PB.3, ale robi to tylko raz (sprawdza czy switch jest nie przyciśnięty, odczekuje 10ms sprawdza, czy jest przyciśnięty, czeka 10ms znowu sprawdza czy jest przyciśnięty i jeżeli tak to zmienia stan)
powinno działać - ja zawsze używam przycisków ściągających do masy i warunki wciśnięcia są inne(jeśli 1,wait,jeśli 0, wait, jeśli 0, część wywoływana po kliknięciu ), musisz tylko dostosować numery pinów/portów i wstawić to co chcesz w pętli
powiedz jak ma działać program (dokładnie bo nie wiem co mam ci poradzić) bo jest tu jeszcze kilka drobiazgów.
Taki pierwszy prosty program
Taki pierwszy prosty program który po naciśnięciu klawisza nr 1 dioda zaczyna mrugać, po ponownym naciśnięciu przestaje.
przycisk nr2 i 3 tak samo tylko inne funkcje (mruganie 3 diód oraz buzzer)
tak na szybko, kod nie jest
tak na szybko, kod nie jest doskonały gdyż mój sposób nadaje się do krótkich akcji a miganie diody i te waitms trwają długo, dlatego aby wyjść z "efektu" należy przytrzymać klawisz bo warunek nie jest sprawdzany cały czas. Jeżeli będę miał chwilę czasu to pomyślę jak to rozwiązać.
jak już pisałem zawsze używam przycisków ściągających do masy, tu zrobiłem program dla twoich przycisków, niemniej nie testowałem tego rozwiązania, ale teoretycznie powinno być ok.
Nie ręczę za działanie opcji sound, gdyż nigdy jej nie używałem i nie jestem w stanie powiedzieć czy jest dobrze.
Zmienna "deb" odpowiada za czas debonucingu trzeba go dobrać eksperymentalnie dla microswitchy używam 10-20ms dla niektórych przycisków czas ten trzeba wydłużyć, choć w takiej wersji programu nawet jakikolwiek debonucing jest zbędny :)
PS.
mirley
Te "bloki" komentarzy opisujące fragmenty kodu są bardzo użyteczne i od kiedy znalazłem twoją stronę używam je we wszystkich programach.
ok dzieki ;)
ok dzieki ;)
Jakiej baterii użyć do
Jakiej baterii użyć do zasilania, jakieś 5-voltowej? Podajcie numer, nie chce łączyć trzech AA, żeby mieć 4,5V.
Niema standardowych/tanich
Niema standardowych/tanich baterii 4-5v, można użyć baterii 4,5v (płaskiej), kupić koszyczek na trzy paluszki, bądź kupić baterię o wyższym napięciu i je zbić lub wysabilizować.