Nie musisz czekać. Musisz zacząć trochę inaczej myśleć niż "linijka po linijce" Wykonaj konwersję i wystartuj timer. Pozwól programowi biec dalej. Odczytaj temperaturę, gdy timer odliczy te 800 ms. Pamiętaj, że program główny to zazwyczaj pętla. Niech nawet sobie bezproduktywnie biega w koło do czasu zanim nie będzie można odczytać temperatury. Później...
Tak, ale AVR-y mają możliwość programowego "podciągnięcia" wejść, jeżeli do rejestru DDRx wpiszesz 0, a do PORTx wpiszesz 1. Wtedy wejścia są podciągnięte przez wewnetrzny tranzystor MOSFET do VCC. Oczywiście możesz przecież wolne końcówki skonfigurować w programie jako wyjścia. Pozdrawiam Przrmotronik
zmien polecenie Goto Koniec na Gosub Koniec i Koniec: wait 1 return gdzies kiedys czytalem zeby unikac w miare mozliwosci komendy goto w bascomie
No właśnie problem tkwi w tym że zamiast program zatrzymać się ma na 100 ms to zatrzymuje się np. na 5 s przy wewnętrznym oscylatorze 1 Mhz . To nie jest mój pierwszy zaprogramowany mikro-kontroler parę małych projektów już zrobiłem wszystko działało do teraz ... Poniżej prosty program ma zapalać i gasić diody o odpowiednim czasie a tak nie jest Proszę...
A czy waitms moze mieć argument 5000? Poczytaj najpierw helpa do Bascoma.
PS: nie zadawajcie pytań czy podłączyłem dobrze bo dobrze podłączyłem. Ja po około 4 latach obcowania z tymi procesorami bym 10 razy wszystko sprawdził zanim bym takie coś napisał. Ty rozpoczynający przygody powinieneś sobie takie frazy darować, no chyba że nie oczekujesz tutaj pomocy. Tutaj pracujesz na sprzęcie i na to czy on będzie działał ma wpływ...
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.
Tak zapomniałem , myślę że wystarczy jakiś waitms .
musi być drugi wait po zmianie bitu [syntax=basic4gl]Do Portd.0 = 1 'zapal diode Waitms 200 Portd.0 = 0 'zapal diode Waitms 200 Loop [/syntax]
Potrzebny jest Timer i przerwanie od timera. Timer ustawia flagę jak się przepełni. Np. co 1s. W petli głównej sprawdzasz czy już upłynęła 1s. Dopiero potem wolno Ci odczytać pomiar temperatury. Nie wolno stosować Waitms jeśli program ma obsługiwać więcej niż jedno urządzenia.
a czy max. wartosc to nie waitms 250?
chciałbym go dowolnie zmienić w jednym miejscu zamiast 50 razy w kodzie Niestety Waitms jest już w tym dziwacznym Bascomie, wiec klapa. Można ten problem rozwiazać na przykład w ten sposób. [syntax=basic4gl]do portC.1=0 GoSub Czekaj_500_ms PortC.1=1 GoSub Czekaj_850_ms portC.1=0 GoSub Czekaj_1000_ms loop End Czekaj_500_ms: Waitms 500 Return Czekaj_850_ms:...
Witam. Przede wszystkim należy ustalić czy następuje prawidłowo detekcja zbocza. Więc w pierwszym warunku po detekcji zera wstaw waitms 5. W przeciwnym wypadku przy tej częstotliwości kwarcu nie zauważysz działa programu czyli migania led.
Nie wgłębiałem się , ale tak na szybko spróbuj zmienić w procedurze Odior_pilota: po Toggle Portc.0 waitms 5 na np. waitms 100
A może pomoże dopisać jedną linijkę do kodu "odbiornika" ? Proponuję dopisać w tą część kodu opóźnienie: If I = "a" Then Toggle Portb.0 Waitms 500 ' <<<<<<< End If Pozdrawiam. Stefan
wywal to $sim , jak pakujesz program do procesorka... ;) Przeznaczenie: Instruuje kompilator by nie generował pętli opóźniających dla instrukcji WAIT czy WAITMS. Spowoduje to zwiększenie szybkości symulacji.
w załączonym fragmencie nie masz kropki w m8def.dat program $regfile = "m8def.dat" $crystal = 1000000 Config Portd.0 = Output Led Alias Portd.0 led = 1 do led = 0 waitms 500 led = 1 waitms 500 loop end działa (sprawdzałem na płytce bez rezystora pod resetem) ale nie to jest problemem
Podaj kod źródłowy. Coś mi się wydaje, że masz zapalenie i zgaszenie diody a potem waitms 500 :-)
Witam. A może tak prościej? 'Odbieranie kodu RC5 $regfile = "m8def.dat" $crystal = 8000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portd.0 , E = Portc.4 , Rs = Portc.5 Config Rc5 = portd.2 Dim Address As Byte , Command As Byte Enable Interrupts Do Getrc5(Address , Command) Command...
Witam ! do dioda1 = 1 If przycisk1 = 1 and prycisk4 = 0 then dioda1 = 1 waitms 2 dioda1 = 0 waitms 20 end if loop itp. to początek resztę spróbuj sam Powodzenia życzę Stefan . GG6293398
Nie masz za dużo w funkcji obsługi przerwania. Dużo Waitms i jeszcze obsługa LCD. Może przerwania tak szybko nadchodzą, że nie zdąża czasu na wyjście z niego. Funkcja przerwania powinna być krótka
a w funkcji waitms nic nie zmieniam??
Cls Do Wart_ac = Getadc(1) Locate 1,1 Lcd Wart_ac V = Wart_ac * 0.0049 Wart_nap = Fusing(v , "#.&&") Locate 2,1 Lcd "Waga= " Lcd Wart_nap Lcd "kg " Waitms 1000 Loop End
w petli odczytu daj przerwe ( waitms ) ok 200ms
Witam. 1./ konfiguracja Timera1 musi być w jednej linii jako całość np. Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Disconnect Po za tym masz nie pozamykane prawidłowo warunki IF. Poniżej przykład całości: $regfile = "m8def.dat" $crystal = 8000000 Config Pinb.4 = Input Config Pinb.2 = Input Config Pinb.1...
Najprostszy możliwy program, na otworzenie portu - zaświecenie diody, jak chcesz zrobić miganie to poszukaj w helpie bascoma - zmiana stanu : Config Pinb.2 = Output - pin B.2 ustawiony jako wyjście pinb.2 = 0 - stan pinu B.2 jest 0 Do napisania migającej diody będziesz potrzebował jeszcze użyć pętle. Gotowy, tylko nie wiem czy działa, ale powinien Config...
Nie wiem czy będziesz mógł ustawić Timeout bo jest od wersji 2076. Najwyżej zakomentuj. Reszta powinna działać. Poczytaj o "Config Serialin" i "Ischarwaiting" Tak dokładniej to Input czeka na Enter albo na to co ustawimy żeby czekał (Config Input) Jak Enter nie nadchodzi z powodu jakiegoś błędu to przydaje się Timeout. Najczesciej odbieram dane po jednym...
Zastosuj locate a nie żadne waitms i cls w petli.
kurcze mi nie wychodzi :| timer chodzi co 1s ale reszta do kitu Dodano po 25 program chodzi :) oczywiscie musisz go przerobic na wlasne potrzeby dodac tyle ile chcesz przekaznikow i zmienic czasy w programie bo tam jest 10s i 40s ten program jest przygotowany pod ATmega8 i kwarc 8MHz $regfile = "m8def.dat" $crystal = 8000000 Config Pind.0...
No to teraz tak: Do For R = 0 To 255 Pwm1a = R Waitms 4 Next R For B = 255 To 0 Step -1 Ocr2 = B Waitms 13 Next B For G = 0 To 255 Pwm1b = G Waitms 7 Next G For R = 255 To 0 Step -1 Pwm1a = R Waitms 4 Next R For B = 0 To 255 Ocr2 = B Waitms 7 Next B For G = 255 To 0 Step -1 Pwm1b = G Waitms 10 Next G Loop A z tymi kolorami to przecież żartowałem.
Procek pracuje na wewnętrznym oscylatorze, ale odmierzanie czasu poleceniami wait i waitms szło mu całkiem przyzwoicie, więc raczej 8MHz jest. ...czy aby ATMega8 nie ma domyślnie ustawionego1MHz??? Nie wiem gdzie jest zadeklarowana, używam BascomAVR. Tu: http://obrazki.elektroda.pl/8600321800_1... ...i tu: http://obrazki.elektroda.pl/9274839800_1...
przepisałem ze zrozuminiem. Zauważyłem błąd i poprawiłem. Ale dalej jest to samo. Jak jest na 100% wypełnienie i nacisnę PLUS to spada do 0 wypełnienie. Użyj warunku ;) Pwm1a = 0 Do If Plus = 0 Then Waitms 15 If Obroty < 255 Then Incr Obroty Waitms 20 Pwm1a = Obroty End If If Minus = 0 Then Waitms 15 If Obroty > 0 Then Decr Obroty Waitms 20 Pwm1a...
Waitms 750 musisz mieć przed odczytem.
Po co ustawiasz "set s2" ? Skonfigurowałeś pin jako wejscie Z PODCIĄGANIEM DO PLUSA, więc puszczenie przycisku automatycznie powoduje odczyt logicznej "1" z tego pinu. Co do pinb.4 - Nie jest to zaden specjalny pin, tyle że to WEJSCIE danych SPI. Mi ten pin działał zawsze jak trzeba, ale zaproponuje inny kod (moze bedzie działać :) ) If S2 = 0 Then...
Sprawdzałeś fuse bity?
Ale przy Waitms nie trzeba pętli For bo Waitms przyjmuje parametry w postaci zmiennych.
Jak dasz waitms to Ci będzie na przemian migało "zasilanie włączone" i "zasilanie wyłączone". Jeżeli o to Ci chodzi to daj waitms i temat do zamknięcia.
Przypuszczam że przyczyną wieszania programu jest przepełnienie stosu. Chyba za bardzo pogubiłeś się w tych skokach :) Przyglądnij się podprogramowi Menu , który w rzeczywistości nie jest podprogramem, a wywołujesz go przez Gosub Menu w Podprogram_4 . [syntax=basic4gl]'----------------------... Menu:...
Jak można użyć licznika do sprawdzania stanu? Wait wykorzystałem, ale po uruchomieniu silnika nie było sytuacji że szpilka prądowa wyłaczy silnik, a także, żeby był czas na odpadnięcie krańcówki, bo inaczej również silnik by się zatrzymał. Czym moge zastąpić wait i waitms?
Wszędzie masz Waitms-y i stąd powolne działanie programu.
Do tego najlepiej użyć PWMa. Na medze ósmej musisz uruchomić timer1. [syntax=basic4gl] config timer1 = PWM , pwm = 10 , compare a pwm = clear up , compare b pwm = disconnect , prescale = 1 Dim opu as word do for opu = 0 to 1023 pwm1a = opu waitms 3 next opu for opu = 1023 to 0 step -1 pwm1a = opu waitms 3 next opu loop end [/syntax] To tak na szybko....
Może tak: skoro Waitms 1000 = 3,5 sec to 1 sec = Waitms 286. Spróbuj ale nie jestem pewien
Czy jest możliwy błąd podłączenia? Tutaj oczywiście zmieniłem na PB.1 Tak, wszystko jest możliwe... Spróbuj ten code: [syntax=basic4gl] 'DS18B20 - ROM reading test from single sensor DS18B20 $regfile = "m8adef.dat" $crystal = 4000000 $hwstack = 80 $swstack = 80 $framesize = 40 Config 1wire = Portb.1 'Config 1wire = Portd.5 Dim N As Byte Dim Dsid1(8)...
Ja generalnie przejawiam brak elastyczności umysłu i ludzi też tak traktuję, więc proszę się nie obrażać ;] Więc tak. Możesz zrobić ten układ na ATMedze8? Z resztą, co to za różnica przestawić literkę i jeden wyraz by pasiło do ATTINY ;] http://sp7dpt.qrz.pl/images/Atmega8-Pins... Tutaj masz rozpiskę pinów w ATMedze (widok od góry, od strony napisów)...
powinno to wyglądać jakoś tak: home: do if pin..... =1 then goto przod elseif pin ...=1 goto tyl end if loop przod: Do Waitms 1 Incr Pwm1a End If end if loop tyl: set port.... 'przekaźnik zmiany biegunów silnika Do if pin..... = then reset port.... pwm1a=0 goto home: end if . . Waitms 1 Incr Pwm1a End If end if loop tyl: Do if pin........
Jezeli juz to tak: $crystal = 1000000 Config Portb=Output Portb = 255 Do Toggle Portb.1 Waitms 500 Loop Pozdro Dexter
Dioda płynnie się zapala,kiedy uzyka maksymalną jasność gaśnie i program sie powtarza.100% dobry program wersja dla wewnętrzengo rezonatora RC 1MHZ $regfile = "m8def.dat" $crystal = 1000000 Config Pinb.1 = Output Config Pinb.2 = Output Dim I As Byte Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale...
Dokładnie tak jak piszecie, w linijce z komentarzem "'if you use 2-wire..." masz "Waitus 200 : Waitus 200 : Waitus 200 : Waitus 200", a powinno być "Waitms 500". Zmień to i powinno działać ja też tak miałem. Zobacz jeszcze na http://www.elektroda.pl/rtvforum/2-x-ds1... . Może to ci się przyda. Pozdrawiam
Co to znaczy że testowałeś już różne ustawienia crystal? Musisz być pewien co masz ustawione - w innym wypadku to nie robota ;) Fabrycznie nowa pracuje na 1MHz. Napisz prosty programik [syntax=vbnet] $crystal = 8000000 Config PORTB.0 = Output : Led Alias PORTB.0 Do Toggle Led Waitms 500 Loop[/syntax] To chyba oczywiste że dioda powinna mignąć 60 razy...
Na tej płycie masz LED-y. Sprawdź na nich. Sprawdziłem Twoje ustawienia -ale w Bascomie. Na takiej samej płytce. Wszystko chodzi. Wygląda to na układ a nie program. Poniżej program-napisałem w sposób zrozumiały dla C. $regfile = "M8def.dat" $crystal = 8000000 'Config Lcd = 20 * 2 'Config Lcdpin = Pin , Db7 = Portc.0 , Db6 = Portc.1 , Db5 =...
[syntax=vbnet]Automatycznie2: Locate 1 , 1 Lcd " Tryb Automat. " Locate 2 , 1 Lcd "Aktualnie: PR:2" Prog1 = 0 Prog2 = 1 Prog3 = 0 Prog4 = 0 Prog5 = 0 If Cofn = 0 Then Goto Wybor Else Dim Odlicz As Byte Odlicz = 120 Do Wait 1 Decr Odlicz If Cofn = 0 Then Goto Wybor Loop Until Odlicz = 0 Goto Automatycznie3 End If[/syntax] Możesz nawet zwiększyć czułość...
Korzystaj z symulacji krokowej. Ostatecznie nie dawaj $sim w programie natomiast waitms zmień na mniejsze (symulacja jest ok 100x wolniejsza od procka, więc zamiast waitms 200 daj 2) Sprawdzonego programu do zapalania diod na kolejnych portach nie ma. Np. możesz użyć jednej zmiennej WORD i rozbić ją potem na dwa proty. Zaletą jest to że operujesz na...
Witam. Proszę o sprawdzenie kodu: $regfile = "m8def.dat" ... Pind.0 = 0 .... Pinb.1 = 0 ... Pinb.2 = 0 Co to za bzdurne operacje :?: Założenia: Po po podaniu "1" na pd0 uruchamia się podprogram "pr1" ... Aby to zadziałało z przyciskiem, to MUSISZ PIND.0 "ściągnąć" do GND za pomocą rezystora np.10k. Jeżeli będziesz używał przycisku docelowo,...
Opis magistrali 1Wire masz w helpie. Poniżej kod na obsługę dallasa DS18B20. Config 1wire = P1.0 'konfiguracja magistrali 1wire Config Lcd = 16 * 1a 'konfiguracja wyswietlacza Deflcdchar 1 , 4 , 10 , 4 , 32 , 32 , 32 , 32 , 32 'znak stopnia Dim T1 As Single Dim T2 As Single Dim B1 As Byte , B2 As Byte , R As Byte Dim Tmp As String * 6 Dim Znak As String...
Dawid512 bo taka petla jest najbardziej zblizona ,ze waitms 500 = 500ms
Jeśli nawet by mrugały to zobaczysz zmianę diody co 50ms :?: Ustawiłem na 300 (2 razy waitms 150) a później na 1s. Dalej bez zmian. Swoją drogą, czy to prawda, że waitms ma maksymalną wartość 250?
no raczej działa nawet w następnych cyklach. sprawdz jeszcze to $regfile = "m8def.dat" Config Pinb.1 = Output $crystal = 1000000 Config Timer1 = Timer , Prescale = 64 Config Timer0 = Counter , Edge = Rising On Timer1 Odmierz_1s Dim Licz As Byte , I As Byte Enable Interrupts Enable Timer1 Start Timer1 Timer1 = 65535 - 15625 Do Loop End Odmierz_1s:...
Ja używam takiego kodu - odbiornika. Config LCD dostosuj do swoich potrzeb. Działa na każdym pilocie RC5. Instrukcję Lowerline wyrzuć. [syntax=basic4gl] 'Atmega8 Wyświetlanie z pamięcią i napisem Odczyt RC-5 $regfile = "m8def.dat" $crystal = 8000000 Dim Adress As Byte , Command As Byte , Togglebit As Bit Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4...
$regfile = "m8def.dat" $crystal = 8000000 Config Timer1 = Pwm , Pwm = 8 , Compare B Pwm = Clear Down , Prescale = 1 Config Portb = 255 Config Portc = 255 Config Portd = 255 Portb = 0 Dim A As Byte 'Czerwony Dim B As Byte 'Zielony Dim C As Byte 'Niebieski Dim D As Byte 'Czas A = 0 B = 255 C = 255 D = 4 Zolty: Do Pwm1b = A Set Portb.4 Waitms...
Zwłaszcza że pewne inklinacje do C już posiada. Cały program w nawiasach klamrowych. Baskom nie burzył się o to? I co wniosłeś do tej dyskusji oprócz złośliwego sarkazmu??? Do autora watku: Zakładam że posiadasz Silnik jak na schemacie z 1-go postu, razen z płytką ULN połączone ze sobą wtyczką bez zmian w konfiguracji połączenia. Korzystając do pewnego...
Witam Do pętli wsadź instrukcję "waitms 100" Zapomniałem o tym. Napewno będzie działać jak chcesz. -- pozdrawiam
W takim razie nie można wstawiać opóźnień. A w każdym razie nie takie duże jak podałem. Mozesz wypróbowac te instrukcje, które napisałem pod warunkiem przesunięcia instrukcji wait poza instrukcje Dodano po 1 No proszę. Ledwo co odpisałem a ty zmieniłeś częstotliwość impulsów z 80 na 300. To zmienia czas instrukcji Waitms z Waitms 10 na Waitms 3
Jasne, że się da :) np tak: If Pind.1 = 1 And Pind.2 = 1 Then Waitms 500 'oczekiwanie żeby odrazu nie wyjść z pętli Do 'nieskończona pętla Lowerline 'ustawienie kursora Lcd "Histereza:" ; H ; Chr(0) ; "C" 'wyświetlenie histerezy If Pind.1 = 1 Then 'jeśli guzik wciśnięty to zwiększ H = H + 1 Waitms 200 'odczekaj chwile,...
Spróbuj zmodernizować kod w ten sposób: Do A = Getadc(0) B = Getadc(3) C = A * 0.0049 D = B * 0.0049 T = Atn2(c , D) ' zwrócenie wartości arctan w radianach E = Rad2deg(t) 'zamiana rad na stopnie G = Fusing(c , "#.&&") 'zamiana wart. nap. sin na tekst H = Fusing(d , "#.&&") 'zamiana...
Zobacz to: $regfile = "m8def.dat" $crystal = 16000000 Config Portb = Output Portb = &B00000000 Config Portd = Input Portd = &B11111111 Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Disconnect , Prescale = 1 Przycisk Alias Pind.1 Dim D As Byte , Czekaj As Integer D = 0 Pwm1a = D Czekaj = 0 Do If Przycisk...
Aby mieć pewność, że problem nie leży w zależnościach czasowych pomiędzy wysłaniem na port adresu do multipleksera a odczytem stanu bitu, wstaw pomiędzy ustawianie portu i warunek IF opóźnienie np. 1ms: PORTB = PORTB | 0b00000001; waitms(1); if ( Pozdrawiam Mariusz Dodano po 9 Dodano: 74151 ma wyjścia 2 wyjscia komplementarne, więc dobrze by było opisać...
marslod z tymi LCD DM157 niema problemu w inicjalizacji BASCOM, mam kilka i tych 3 x 24 i 1 x 24 i wszystkie działają. Daj na początek coś takiego i będzie inicjalizował poprawnie... Waitms 300 Config Lcd = 20 * 2 Waitms 800 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portd.3 , .... Tym 16*2 nie musisz się przejmować, BASCOM prawidłowo adresuje...
a gdzie masz Prescale?? i napisz sobie w programie że PWM1a=A i przy ustawianiu portów jako wyjściowych usuń " ' " bo masz napisany i to Ci knoci wszystko Do For A = 0 To 255 PWM1a = A PWM1b = A waitms 4 Next A For I = 255 To 0 Step -1 Pwm1a =A Pwm1b =A Waitms 4 Next I Loop cześć kodu z książki Marcina Wiązania A z tego co zrozumiałem z twojej wypowiedzi...
Funkcja WAITMS nie jest odporna na przerwania. Jeśli masz jakieś to każde wystąpienie przerwania w trakcie WAITMS rozjedzie go. Niezależnie od stabilności tej funkcji, a nie ma powodu, żeby nie była powtarzalna jeśli nie jest przerywane wykonanie przerwaniami, to i tak lepsza praktyką będzie wykorzystanie timera.
Jaka będzie niedokładność przy użyciu zewnętrznego kwarcu 16MHz +/- 20 ppm i poleceniu waitms? +/- 20 ppm pod warunkiem, że użyjesz timera i przerwań, a nie waitms. Można oczywiście dodać korektę programową, by dokładność zwiększyć.
Do wysyłania tablicy jest proste polecenie fragment kodu [syntax=basic4gl]dim a(100) as Byte do waitms 5 printbin a(1) , ' tu można zadeklarować ile bajtów chcemy wysłać a także od którego zaczynamy czyli printbin a(1), 10 tylko 10 bajtów licząc od pierwszego , printbin a(8) od 8 do końca tablicy printbin a(7) , 20 od 7 do 20 itd loop[/syntax]
Stosy to dla mnie czarna magia, wiem tylko, że każdy przeskok wymaga zapisania adresu zwrotnego, ale nic poza tym :oops: No przy takim podprogramie to 1 megabajtowy stos to za mało :D, to się chyba nazywa rekurencja: [syntax=basic4gl]Petlapomiarowa: If Impulsy < 15 Then 'Jesli nie ruszono, wyswietlaj dalej napiecie Gosub Pomiaradc If Konwersja >...
Sprawdź jaki procesor masz ustawiony w opcjach bascoma... pewnie jakiś attiny2313 i bascom kompiluje program pod ten właśnie procesor. I spróbuj zaprogramować tym: $regfile = "m8def.dat" Config Portd = Output Config Portb = Output Do Toggle Portb Toggle Portd Waitms 200 Loop : End
No tak, bo ja nie mam w zamiarze mieć alarmu dźwiękowego. Więc usuń z programu także deklaracje odnosnie wymiarowania zbędnych zmiennych i uzupełnij poprawki j.w. Wytestuj program w symulatorze running "step into code" (F8) i w odpowiednich momentach kodu uzupełniaj 'ręcznie' zmiany logiczne pinów a także symulowane wartości zmiennych (np: odczyt temperatury...
Menu1: Cls DO ' Początek pętli 1wreset : 1wwrite &HCC : 1wwrite &H44 Waitms 200 1wreset : 1wwrite &HCC : 1wwrite &HBE T = 1wread(2) Ttmp = T / 16 Home Lcd " Aktualnie " ; Ttmp ; Chr(3) ; "C " LOOP UNTIL PIND.1=0 ' w kółko dopóki pd1=0 Return Menu2: Return Menu3: Return D_menu: Data...
1) Ustawiłeś nowym procesorom BODLEVEL na 2.7V (czy jakoś tak) i BDOEN = enable? 2) Po LOOP UNTIL daj WAITMS 100 żeby odkłócić INT z przycisków i SET PORTB.1 jako bezpiecznik 3) Przed RETURN w przerwaniu daj ENABLE INT0 i wywal ENABLE INT0 z pętli głównej przed powerdown 4) Jesli procesor nie chce czasem wyjść z powerdown to zrób test - odepnij wyjście...
Program jest banalny dla was ;) ja dopiero się uczę ;) Żaden program nie jest dla nikogo banalny jak jest w nim narozp*******ne. Nawet jak zamienisz Return na End Sub to program nie będzie działał bo tak go napisałeś że dla Menu_Id =0 program zawsze będzie wracał do wyświetlania temperatur. Dodano po 2 Pomiędzy "convert T" a "read" to Waitms 750 co...
Spróbuj tak. $regfile = "m8def.dat" $crystal = 1000000 Config Pinc.0 = Output Config Pinc.1 = Output Config Pinc.2 = Output Config Pinc.3 = Output Do Toggle Portc.0 Waitms 250 Toggle Portc.1 Waitms 250 Toggle Portc.2 Waitms 250 Toggle Portc.3 Waitms 250 Loop End
Waitms 100 to opóźnienie 100ms. Zmieniłem je na 1s (wait 1). Ale to też nie zadziałało.
Po ciężkich zmaganiach z metodą losową dla kolorów postanowiłem porzucić ten pomysł i zastosować przewidywalny sposób który będzie się powtarzał co jakiś czas. Może i nie jest to rozwiązanie pierwsza klasa, ale działa. Nie stosowałem jednak korekcji gamma, bo przy rozdzielczości PWM 8 bitów i zastosowaniu płynnego rozjaśniania było widać przeskoki (mruganie)...
Zasymulowałem Twoje środowisko i wprowadziłem kilka poprawek. Działa zgodnie z założeniami. Debouncingu nie dodawałem, choć przydałby się. [syntax=vbnet]$regfile = "m8def.dat" $crystal = 1000000 Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.2 , Rs = Portb.1 Config Lcd = 20 * 4 Cls Cursor Off noblink...
Mam pytanie odnośnie programu do ds1820 - czy nie da się zmienić WAITMS 750 na mniejsze tak aby szybciej odczytać temperaturę?
Wystarczy jedno wejście I NTx , które będzie wykrywało ten impuls. Ale jeśli to będzie impuls "z ręki" jakiś klawisz to bez sensu - ze względu na drgania styków a potrzebny minimalny czas np 1ms. Jeśli to będzie impuls z jakiegoś wyjścia cyfrowego to ok. Założenia: - wykorzystamy tylko jedno wejście INTx - wykorzystamy tylko jeden Timer sprzętowy Przygotować...
Witam. Potrzebuje program do Atmega8 który sterował by mostkiem H. Potrzebne mi są impulsy dwu sekundowe co minutę, raz na jednym porcie, raz na drugim. Miało by to sterować zegarem wtórnym PKP który zasilany jest impulsami co minutę, co impuls odwracana jest na nim polaryzacja. Nigdy nie pisałem programów więc proszę o pomoc i sprawdzenie tego co napisałem....
rozwiązałem to już nie wiem czy dobrze :) przed wysłaniem: stawiam CS na 0 waitms 2 wysyłam waitms 2 CS na 1 i działa :)
Ten kod to zupełnie najprostszy sposób jaki można sobie wyobrazić w Bascomie. Chodziło mi tylko o to aby sprawdzić czy ATMEGA działa: Config Pinb.0 = 1 ' port jako wyjście Do Portb.0 = 0 Waitms 2 Portb.0 = 1 Waitms 2 Loop End Na innym ATMEGA8 z kwarcem 8MHz impulsy 1µs mają wzorowy kształt prostokąta. Więc nie jest to kwestia sondy i oscyloskopu....
Udało się rozwiązać problem :) Zrobiłem to tak: [syntax=basic4gl]If Autoret > 0 Then Ust = 1 Decr Autoret If Autoret = 0 Then Gosub Zapis End If Else Ust = 0 End If[/syntax] [syntax=basic4gl]Zapis: Disable Interrupts Writeeeprom Tu , 35 Portd = &B11111111 Waitms 200 Enable Interrupts Return[/syntax]
Sprawdź w to na bardziej prostackim programie z taką pętlą: Do PORTD = &B11000000 Waitms 1000 PORTD = &B11111001 Waitms 1000 PORTD = &B10100100 Waitms 1000 Loop End
Zmień to tak: #include <avr/io.h> #include <avr/delay.h> #include "naglowkowy.h" void Waitms(int x) { for( ; x > 0; --x) { _delay_ms(1); } }
LCD jest inicjalizowany przed wykonaniem jakiegokolwiek (Twojego) kodu. Więc musisz ponowić inicjalizację. RW = 0 Waitms 100 INITLCD Jest też jakaś opcja w BASCOMie żeby jakiś fragment kodu wykonać przed wszystkim innym. Tego też można użyć i tam umieścić kod ustawiający pin RW w stan niski. „Config Lcdpin = …” albo “Config Lcd...
Witam. Ja zrobiłem tak: [syntax=basic4gl]Declare Sub PWM_ Dim Zm_pwm As Byte Sub Pwm_ For Zm_pwm = 0 To 255 Step 1 Pwm1a = Zm_pwm Pwm1b = Zm_pwm Waitms 15 Next Zm_pwm Wait 4 For Zm_pwm = 255 To 0 Step -1 Pwm1a = Zm_pwm Pwm1b = Zm_pwm Waitms 15 Next Zm_pwm End Sub[/syntax]
Na pętli For to chyba nie będzie elegancko, ale się da. Jeśli dobrze zrozumiałem twój zamiar to proponuje coś takiego: Dim S1_pressed As Byte Dim S2_pressed As Byte Dim Pwm_memory Do Waitms 25 If S1 = 0 Then S1_pressed = 1 Incr Pwm1a If Pwm1a = 0 Then Pwm1a = 255 Else If S1_pressed = 1 Then Pwm_memory = Pwm1a S1_pressed = 0 End If End If If S2 = 0 Then...
'///////////////////////////////////////... '// Police Alarm With ATmega8 (Use 4%) // '// Compiler: Bascom 1.11.9.0 // '// Programmer: Behnam zakizadeh // '// Web: www.avr64.com // '// Email: Behnamzaki(at)hotmail.com // '///////////////////////////////////////...
Jest to kawałek kodu w bascomie dla atmega8, może coś pomoże: **Podprogram konfiguracji** Sub Konfig Cls Pwm1a = 200 'to od podświetlenia lcd Lcd "USTAWIENIA" Locate 2 , 1 Lcd " PROGRAMU" Wait 2 Cls Lcd "Przycisk START" Do Getrc5(address , Command) Command = Command And &B01111111 If Adress <> 255 Then...
Stosując polecenie Waitms nie moge uzyskać czasu opóźnienia mniejszego niz ok 10ms Więc go nie stosuj. Do tego są Timery.
temperatura początkowwa na jakom jest ustawiony termostst czyta swicze Widzę że kolega ma problem z pisaniem w języku polskim ale do rzeczy... 1wr ma być call 1wr . Założę się że program nie jest twój... Patrząc dalej: If Tust1 > Tust Then Portb.2 = 1 znowu nie zadziała... Co do histerezy to lepiej zrealizuj ją tak: Temp = Temperatura(1)...
[syntax=bascom] Waitms 500 Portb = &B00010010 Portc = &B00001000 Portd = &B00001000 Waitms 150 Portb = &B00000100 Portc = &B00000001 Portd = &B00010001 Waitms 150 Portb = &B00001000 Portc = &B00000100 Portd = &B00100010 Waitms 150 Portb = &B00010010 Portc = &B00001000 Portd = &B00001000[/syntax] Zmienione, nadal to samo.
Po 1: funkcję void waitms(int ms) musisz zadeklarować, czyli na samej górze napisać prototyp funkcji: void waitms(int ms); po 2 w funkcji waitms masz o jedną klamrę za dużo.
Załamałem się tym zerem w kwarcu, to było to. Port D miałem ustawiony, B poprawiłem. Wyświetlacz działa jak należy. Mam jeszcze jedno pytanie, dotyczące instrukcji opóźnienia Wait w pętli głównej. Dla czego jest ona potrzebna i dla czego wpisując w jej miejsce Waitms z dowolną wartością wyświetla mi "000 0"?
Witam Co do ustawienia histerezy na 0 – to powinna być pomijana i wtedy również dogrzewanie impulsowe zostanie pominięte (ale nie testowałem tego). Oczywiście należało by zmienić fragment na : Mniej_hist: Decr Histereza Waitms 70 If Histereza = 0 Or Histereza > 20 Then Histereza = 0 Waitms 10 Writeeeprom Histereza , 6 Waitms 10 Goto Poczatek3...
waitms timer0 attiny waitms command waitms
nissan primera obrotów rozrzadu scenic tranzystor inwertera
ultimate speed prostownik ultimate speed prostownik
Charakterystyka pompy WITA Delta AQUA II 60-25: Efektywność i funkcje Konwersja generatora 3-fazowego na 1-fazowy AC