Weź sobie załaduj do jakiegoś podprogramu fragment w którym sprawdzane są przyciski, jednocześnie w tym podprogramie odliczaj opóźnienie. (np zrób pętle która będzie miała waitms 1 - ilość wykonań pętli ilość opóźnienia ale równocześnie sprawdzany port przycisku) Zamiast rozkaz waitms wywołuj ten podprogram. To tak najprościej i bez przerwań.
Tak ale on sie nie sypie z powodu drgań styków tylko sprawdzania przez procesor dwóch IFów:). Czyli : zaznaczyłem (***) Wtedy gdy kręci pętle . Na pewno da sie to jakoś (zapriorytetowac) aby najpierw sprawdzał pierwszego IFa. Tylko nie wiem jak. Bo to ma wygladać tak że jak kliknę raz to dioda miga 3 razy, a jeżeli będe nadal trzymał przycisk to ma...
Jeśli chcesz aby np. dwie diody mrugały z różną częstotliwością to w najprostszy sposób możesz to zrobić tak: na początku pętli głównej dajesz małe opóźnienie powiedzmy 5ms. Potem w każdym obiegu pętli (co 5ms) zwiększasz wartość dwóch zmiennych np. Licz1 i Licz2. Kiedy Licz1 osiągnie wartość 50 wtedy zerujesz ją i zmieniasz stan pinu do którego dołączona...
$crystal = 8000000 $regfile = "M8def.dat" Config Pinb.6 = Output Config Pind.4 = Input P Alias Pind.4 'switch-wejście D Alias Pinb.6 'dioda -wyjście 'Dim Mruganie As Bit 'nie wiadomo po co ta zmienna Set Portd.4 'podciąganie wejścia do + zas. Do If P = 0 Then Waitms 500 'D = 1 'a tu jest pułapka-można użyć Config pinx.y=output/input ale nie...
Parę zmian i z 117% zrobiło się 91% :), a można jeszcze niżej zejść. Mam nadzieje że byka nie zrobiłem :): [syntax=basic4gl]$regfile = "attiny2313.dat" $crystal = 8000000 ' dodano wielkości stosów i ramki ----------------- ' jeżeli będzie za mało ramu wartości można zmienić $hwstack = 40 $swstack = 16 $framesize = 32 '---------------------------------------...
Niebardzo rozumiem o co dokładnie tu chodzi ale: 1. Każde wystąpienie Lcd Chr(3) powinno być Lcd Chr(3); żeby nie były dodawane znaki nowej linii. 2. Żeby modulo 10 się obliczało poprawnie, to zamiast Dim Volt_d As Byte musi być Dim Volt_d As Word To jest związane z tym, że BASCOM nie potrafi rzutować typów z większego (Word) na mniejszy...
Zmienna T jest definiowana jakby z zewnątrz i nie może brać udziału w pętli For Next, za to pętla For Next musi reagować na zmienną T. Oto kot :) tzn Kod: [syntax=vbnet] $regfile = "attiny85.dat" $crystal = 8000000 Declare Sub Strobo Declare Sub Stand_alone Config Portb.2 = Output Config Portb.1 = Output Config Portb.0 = Output Config Pinb.3 = Input...
Zastanawiam się nad tym, żeby np. zapalić diodę na np. 3 sekundy i wykonywać dalej program. Ale chodzi mi o zapalenie diody, dalsze wykonywanie programu i po 3 sekundach zgaszenie jej. Waitms 1000 - odpada, bo zatrzymuje program. Może jest jakiś inny sposób? Pętle i zliczanie zmiennych? Trochę zabawy. Może jakiś inny sposób. Oczywiste dla mnie jest...
Usuń całkowicie Waitms z pętli odbiornika a w nadajniku zwiększ wartość Waitms. Jak nie pomoże to zrób odbiór na przerwaniu od URXC.
Zrób tak: 1. Usuń to: Do Debounce S1 , 0 , Mnu , Sub Debounce S2 , 0 , Cent , Sub Loop 2. To przenieś przed główną pętle programu Cls Lcd "MaxDamage" Waitms 500 Lowerline Lcd "maxdamage17(małpa)interia.... Wait 4 For I = 1 To 20 Shiftlcd Left Waitms 500 Next I Cls Lcd "-=xxxxxxxx=-" Lowerline Lcd "xxxxxxxxxxx"...
Koledzy z tego wszystkiego usunąłem sobie zapis jak zrobi tak żeby jak nacisnę przycisk to zostaje włączona pętla for ? np. mam taką pętle [syntax=basic4gl]do for A = 1 to 64 waitms 6 next loop [/syntax] to mam dodać np. [syntax=basic4gl]do if Sw1 = 0 then: for A = 1 to 64 waitms 6 next loop[/syntax] teraz chce dodać by po ponownym naciśnięciu się ściemniała....
Tą samą pętle można napisać jeszcze prościej :) do toggle portd.6 waitms 300 loop end Pozdrawiam i życzę udanych eksperymentów! :)
A po co jak masz od tego inne funkcję. Pomyśl trochę. Poczytaj i zrozum w końcu, że wszyscy ci dobrze radzą. pomyślałem i jak widać z cwaniakami niema co gadać - TO JEST FORUM - a może przypomnieć do czego służy forum można to kąmplikować i zrobić pętle - nie da się tego bezpośrednio niczym w prosty sposób zastąpić - prawdopodobnie zrobię to w taki...
wydaje mi się że zmiana zasilania serva to nie jest dobry pomysł. według mnie lepiej zrobi to porgamowo czyli jeśli chcesz przesunąc serwo z pozycji 100 do 200 w czasie 2s to należało by zrobić pętle for i = 100 to 200 servo(1)=i waitms 20 next I to dam nam opuźnienie 100x20ms = 2000ms = 2s pętla moze się powtużać mnijesz ailość razy ale czekać...
No właśnie, pokrywa się. Skoro silnik podłączony jest do pinów 0-3 to powinno być dobrze. Upss. Zanalizowałem program. [syntax=basic4gl]For J = 1 To 4 Step 1 Silnik = Fullstep(j) Waitms Opoznienie Next[/syntax] [syntax=basic4gl]For J = 1 To 8 Step 1 Silnik = Halfstep(j) Waitms Opoznienie Next[/syntax] Powyższe pętle (lub pętle do nich komplementarne)...
Jeżeli losowe i bascom to trzeba zrobić pętle od zera do zadanej a w środku wstawić waitms 1. Np tak: dim opoznienie as byte 'moze byc inne dim petla_pomoc as byte .... opozninie=rnd(60) for petla_pomoc=0 to opozninie waitus 1 next petla_pomoc ....
Zwróciłem uwagę, że często powtarzasz pętle "if prawo = 0", "if lewo = 0", "if wyjdz = 0" z tym samym warunkiem: można by od razu dać, np: [syntax=basic4gl]Do If Prawo = 0 Then Waitms 100 Incr Menusel Waitms 200 If Menusel = 4 Then Menusel = 1 End If End If [/syntax]
Przerzutnik T [syntax=basic4gl] Do IF S1 = 0 Then Waitms 25 if s1 = 0 Then Toggle LED end if end if Loop End [/syntax] Resztę sam dopisz, pętle masz gotową. PS: Przerzuć się na C, nauki tyle samo a możliwości ile :)
Postanowiłem wypróbować pwm i nie jest wcale takie trudne:) Napisałem program z rożnymi funkcjami, przełączam je przyciskiem ale nie raz muszę go przetrzymać aby się przełączyła i bywa tak że przełącza o kilka do przodu co koledzy polecacie aby wyeliminować te dwa problemy? Oto kod [syntax=basic4gl]'stroboskop by Pawel $crystal = 8000000 'Deklaracja...
[syntax=vbnet]'ja wykorzystałem pętle FOR NEXT 'oczywiście możesz dostosować do twoich ptrzeb 'po zwarciu pinu B4 o masy wykonuje się podprogram Pwm_ $regfile = "m8def.dat" $crystal = 8000000 Dim Zm_pwm As Byte Declare Sub Pwm_ Config Timer1 = Pwm , Pwm = 8 , Prescale = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Up Enable Interrupts Ddrb...
aha rozumiem juz czytam o przyciskach i to waitms 45 to ma ominąć drgania styków w takim razie będe musiał czekać 9 sekund zeby sprawdziło przycisk to musze z przycisku zrezygnować bo to za długo a zrobie zeby np po przejsciu pętli for next zamigało strobem pare razy i od nowa pętle
Jestem początkujący ale waitms 1000 mi strasznie nie pasuje: 1wreset 1wwrite &HCC 1wwrite &H44 Waitms 1000 1wreset 1wwrite &HCC 1wwrite &HBE mozesz miec wartosc max 255 przeczytaj w helpie :) Pozdrawiam Dodano po 7 pamietam ze przez taki wlasnie bląd program przerywał mi pętle główną
problem w tym że masz po sobie 2 pętle for rozjaśniające ledy w głównej pętli programu. Najpierw wykonuje się pierwsza potem druga. Druga rzecz to stosowanie jako opóźnienia funkcji waitms która zatrzymuje prace mikrokontrolera. Proponuje użyć timera który będzie generował przerwanie po przepełnieniu licznika np co 20ms. Potem jeżeli drzwi sa otwarte...
Dziękuję kolegom, już testowałem całość ;) Tzn na płytce stykowej, doszedłem do wniosku, że elminacja drgań jest konieczna (nawet sam na to wpadłem ;P) i na początku dałem 20ms okazało się za mało, nawet przy 100 było ciężko, dlatego dałem aż 300 i naprawdę wygodnie to teraz działa :) Ostatecznie jednak zostawiłem 3 pętle i kod teraz wygląda tak: $regfile...
Dobra już wiem o co chodzi już nie mruga wywaliłem cls przed pętle "do" w w pętli dałem locate 1 , 1 do pierwszej lini w drugiej ak jak było i jest git. Co do oryginalnego programu z książki pozwole się zapytać czemu jest tak: Do cls lcd Time$ lowerline lcd date$ waitms 100 loop Chodzi mi o to że cls jest w pętli i dodatkowo na końcu opóźnienie 100ms....
Ja używam czegoś takiego :) Locate 3 , 1 For Licznik = 1 To 20 Lcd Chr(3) Waitms 200 Next gdzie: Deflcdchar 3 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 'caly prostokat Wystarczy napisac: lcd Chr(255) i zamknąć to w pętle tak jak napisali koledzy wyżej
Witam Potrzebuje zrobic sterowanie silnikiem lewo prawo za pomoca procesora bedzie to wygladalo tak ze po wlaczeniu ukladu silnik zacznie sie krecic w prawa strone do momentu kiedy nacisne przsysk s1 nastepnie po nacisnieciu przycisku s2 bedzie sie krecil w lewo do momentu nacisniecia przycisku s3 uklad sterowania silnikiem mam juz wykonany i steruje...
Witajcie Buduje zasilacz (schemat w załączniku) , obecnie jestem na etapie programowania. Oto program: http://obrazki.elektroda.pl/1824166400_1...
Już rozumiem, super dzięki, za chwilkę będe sprawdzał. Dodano po 1 Sprawdziłem działa tyle, że jak nacisne to zapala się led na portb.0 (inne porty mają stan wysoki), portd po naciśnięciu też ma stan H. Najważniejsze że śmiga, czas wziąść się w takim razie za mostek H ;) Dodano po 5 Mam problem z mostkiem H-Bridge ze strony Beam, tranzystorki są BC327x2...
Pogram zatrzymuje sie, bo wykonujesz dwie pętle jedna w drugiej i nie ma mozliwości wyskoczenia z nich. W programie głównym nie ma wywołania podprogramu który napisałeś. Co do sposobu zapisu- straaasznie to długie. Ten kawałem który ma zaświecać LED-y w kółko proponuję zapisać tak: Portb = &B11111111 Portd = &B1111111 For k=0 to 7 Reset Portb.k Waitms...
Witam Potrzebuje pomocy w napisaniu programu dla Atmega32 w Bascom Mam prosty układ w którym podanie masy z przycisku na pin PC0 (PINC.0) powoduje sofstart na PWM1A (PD5) od 0 255 i po softstarcie PWM1A pozostaje na wartosci 255 aż do puszczenia przycisku na PINC.0. Natomast podanie masy z przycisku na pin PC1 (PINC.0) podowduje taki sam efekt ale na...
A jak zrobisz długi i krótki impuls? (no bo z takich imp. skałada sie każdy znak) ja bym odczytał każdy klawisz i każdemu przypisał komendę : If znak (np. A) then Set Portb.0 Reset portb.0 waitms 50 (krótki) Set Portb.0 waitms 8 (przerwa dla odczytu A) Reset Portb.0 waitms 90 (długi) Set Portb.0 End If Tak czy inaczej...
Pętle Do/Loop musisz rozpocząc przed warunkiem If a skończyc po end if i wtedy będzie działac. I nogę procesora do której podajesz sygnał podłącz do masy przez rezystor 10k. $regfile = "attiny2313.dat" $crystal = 1000000 Config Portb = Input 'Port B jako wejścia Portb = &B00000000 'Stan spoczynkowy Config Portd = Output 'Port D jako wyjścia...
Witam, w ramach pracy mgr tworze automatyke do bramy. Napęd itd to jest rzecz malo istotna, ale sterowanie zrobiłem na atmedze 16, program napisłem w bascom, wydaje mi sie z reszta bardzo prosty, ale jakieś cuda sie robią:P mianowicie. brama po otwarciu czeka sobie pewien czas i sie zamyka. W trakcie czekania aktualny czas wyświetlany jest na lcd. I...
Witam serdecznie. Mam taki problem w sumie udało mi się go rozwiązać elektronicznie ale... chodzi o zwis procesora (atmega8) np gdy ten wyłącza jakiś przekaźnik, dałem parę kondensatorów tu i ówdzie i problem już nie występuje, ale pomyślałem aby dać jeszcze "łaczdoga" w programie. Jako że nigdy tego nie robiłem to poproszę o małą pomoc. Jest tak: -----------------------...
Witam, Niewiele poprawiłeś. Co to jest ?: Sub Obliczenia If Czujka = 1 Then If Czujka = 1 Then End Sub If B1 = 1 Then Waitms 2 If B1 = 1 Then Toggle Menu If Menu = 0 Then Goto Screen If Menu = 1 Then Lcdclear Lcdgoxy , 2 , 5 Lcdstr "Wprowadz date" , 1 , 1 Waitms 5 If Speed > Maxspeed Then Maxspeed = Speed Notoryczny brak END IF. Jeśli napiszesz...
Witam. Mam takie pytanie. Robię termometr na atmega 16 + ds18b20 + 2xled. Prawie wszędzie godzie dotąd widziałem podczas odczytu temperatury z ds 1820 jest pętla opóźniająca. W moim programie jak wstawię pętle to w tym czasie wyświetlacz mi nic nie wyświetla. Ponieważ sam ten program tworzyłem a odczyt temp skądś zaporzyczyłem to niekoniecznie jest...
Rozbijesz się o częstotliwość i przepisy. Być może masz rację ale do pewnej mocy parę miliwatów można nadawać bez zezwolenia.Rzecz jasna pod warunkiem nie zakłócania innym służbom ,radiofonii telewizji czy też uprawionym użytkownikom określonych pasm ale przyznaję ,że problem istnieje z nadajnikiem i prawidłowym posługiwaniem się nim. Generator kwarcowy...
Witam Jak zrealizować dobry i porządny podprogram do obsługi przycisków używany do nawigacji i ustawień w menu? Napisałem już 2 wersje ale każda nie jest według mnie doskonała i ma swoje minusy: [syntax=basic4gl]Flaga_ok = 0 If Ok = 0 Then Waitms 25 If Ok = 0 Then Flaga_ok = 1 End If End If Flaga_esc = 0 If Esc = 0 Then Waitms 25 If Esc = 0 Then Flaga_esc...
Zrozum na jakiej zasadzie działa ten programik i zrób identyczny.Napisz czy działa bo u mnie na symulacji tak.Czas jest mierzony co 1 milisekunda i jak dojdzie do czasu który sobie określiłeś to się włączy.Przez tą pętle cały czas jest sprawdzany stan na porcie p01.Powinieneś zrozumieć jak nie to napisz to jaśniej wyjaśnie. $sim Dim Czas As Byte Dim...
odbiornik cos odbiera poniewaz po wlaczeniu ukladu na lcd jest 0,0 dopiero po wcisnieciu przycisku na pilocie zmienia sie na 255,127 nic nie odbiera. bo na starcie masz wyszyszczoną pamięc ram i wszystkie komurki mają 0. gdy nadusisz cos na pilocie to to dostajesz przerwanie i pilot prubuje coś odebrac. dostajesz 255 255 ale robisz and 127 i dlatego...
No niestety to wielka wada tego rozwiązania, że przerwania kradną czas ;/ Teraz widzę, że dodanie opóźnienia nawet waitus 1 wywraca na głowę główną pętle programu. Oto moje wypociny, niestety jeszcze nie spełniłem wszystkich warunków o których wspominaliście. Program obsługuje dwa przyciski w pętli głównej które zwiększają i zmniejszają wartość zmiennej...
Dla 51 można zrobić np. tak: p1 = 0 'to ten sterowany port p3 = 255 ' to port z przyciskami Do if p3.0 = 0 then gosub zapalanie_od_p1.0_do_p1.7 ' jesli przycisk na p3.0 wcisniety to skacze do etykiety "zapalanie_od_p1.0_do_p1.7" if p3.1 = 0 then gosub zapalanie_odwrotnie if p3.2 = 0 then p1 = 0 'dodatkowy przycisk czyszczący port p1, można to samo robić...
Reg_no(i) = 1wsearchfirst() For I = 1 To 8 Writeeeprom Reg_no(i) , 10 Next tego całkowicie nierozumiem, najpierw zapisujesz dane do tablicy pod indexem którego nawet nieznasz (zmienna 'i' niejest zainicjalizowana) oraz nierozumiem zapisu 8 bajtów, wszystkie pod ten sam adres w pamięci eeprom, pierwsze 7 bajtów zostanie nadpisane i ich nieodzyskasz....
Czekam na przesyłkę bo zamówiłem tego nieszczęsnego MAX232 o który takie nerwy :D. a w między czasie szperałem w necie i posklejałem w ten sposób: [syntax=basic4gl]$regfile = "attiny2313.dat" $crystal = 12000000 $baud = 19200 Config Portb.2 = Output Config Portb.3 = Output Config Portb.4 = Output Config Serialin = Buffered , Size = 30 Set Portd.3 Set...
Witam Wszystkich Forumowiczów :) Prosze o pomoc w rozwiązaniu problemu z programowym PWM na Attiny2313. Chciałem zrobić program że jak jest na nóżce PIND.4 stan niski to zawsze ma się świecić jedna dioda natomiast jak wystąpi stan wysoki to ma zgasną ta dioda a zaświecić się druga dioda z płynnym wykorzystaniem PWM. Po tym zadaniu procesor ma oczekiwać...
Mam pytanie tak jak w temacie czyli jak zrobic zeby program realizowal poszczegolne petle pod rzad, a nie wskakiwal w ta ktora sie "uda"...Juz tlumacze o co mi chodzi ;). Otoz staram sie napsiac program do "programowania diod" tzn najpierw urzytkownik za pomoca dwoch przyciskow wybiera diode i zapisuje ile kazda z nich ma byc zaswiecocna. Potem gdyz...
Hej! No ten przykład co podałeś to albo jest coś nie do końca napisane, albo nie za bardzo jeszcze siedzisz w mikrokontrolerach. Ale nie ma się co martwić. Wracając do Twojego przykładu to w nieskończoność wykonuje się pętla odczytu kodu RC5 i to bez opóźnienia a odczyt DS w ogóle nie nastąpi. Ja bym to zrobił mniej więcej tak: do Getrc5(a , B)...
Witam, Mam problem z programem na Atmege8a, mianowicie: Piszę program sterujący pracą silnika (za pomocą L293D) który dodatkowo będzie zliczał w czasie impuls od przerwań zewnętrznych i tu pojawia się problem: kiedy napisałem program obsługujący tylko pracę silnika, wszystko działa sprawnie, kiedy napisałem program zliczający impulsy w czasie, również...
Witam, od pewnego czasu pracuje nad zwykłym sonarem na 40kHZ. Przetwornik jest podłączony bezpośrednio do portb.3 , a odbiornik, przez wzmacniacz tranzystorowy na pinb.0. Na początku procesor(attiny2313) wysyła jedną 'fale' 40khz: ping: sbi portb,3 rcall _25us cbi portb,3 rcall _25us sbi portb,3 rcall _25us Tak wygląda procedura opóźnienia: _25us:...
ds18b20 waitms atmega8 waitms waitms timer0
głośnik disney internet radiowy komputery wycinanie kondensatora
diagbox peugeot filtracja zasilania
Vaillant F.72 - Usterka czujnika temperatury zasilania/powrotu Windows 10 Professional bez klucza produktu - jak ominąć aktywację?