Człowieku! Po co ci zmienne typu Single do liczenia kroków! Zastosuj Long jak już chcesz mieć zmienne 4 bajtowe.
Witam, koledze pewnie chodzi o polecenie Exit For :) szczegóły w pomocy Bascoma'a. Pozdrawiam, aleexander
To się nie ma prawa skompilować. Goto skacze do x, którego nie ma. Poza tym jest jeszcze kilka kwiatków w tym programie. Domyślam się, że program ma zmieniać stan końcówki PD.1 w wyniku zwarcia końcówki PC.4 do masy. Zatem [syntax=basic4gl]DDRC.4 = 0: PORTC.4 = 1 DDRD.1 = 1 Do Debounce PINC.4, 0, x, Sub Loop End x: waitms 30 toggle portd.1 Return[/syntax]...
:arrow: zumek Trzeba jeszcze włączyć na nowo przerwania (sei).
Po sprawdzeniu załączonego kodu widzę, że procedura Complet_reg zawiera wyłącznie ustawienie częstotliwości. Jeśli chcesz dodać do ramki inne opcje to musisz ustawić odpowiednie bity zmiennej Reg. Umieść to w procedurze Complet_reg: Sub Complet_reg: Reg = Frequency Reg.16 = 1 ' przykładowe ustawienie bitu 16-tego ramki Reg.17 = 0 ' jw bit 17 End...
Do If Pinb.0 = 0 And Pinb.1 = 0 Then 'migacz imitujący diode alarmu Waitms 500 'gdy zapłon i swiatła wyłączone Portd.0 = 1 Waitms 500 Portd.0 = 0 End If If Pinb.0 = 0 And Pinb.1 = 1 Or Pinb.0 = 1 And Pinb.1 = 0 Then 'jeśli zapłon wyłączony i światła włączone Waitms 500 'gdy zapłon i swiatła wyłączone Portd.1 = 1 Waitms 500 Portd.1 = 0 End If Loop Powinno...
uC wykonuje instrukcję po instrukcji. Może w jednej pętli wykonywać różne rzeczy ale nie w tym samym czasie. Napisz program tak jak ma się wykonać po kolei. Twój zakończy się po pierwszym END licząc od góry. Program który napisałeś nie kompiluje się z powodu braku deklaracji zmiennych i niekompletnej pętli Do: Loop. P. S. Dwie niezależne pętle w tym...
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...
Ty nie chcesz zatrzymywać program tylko drzwi, a to jest wielka różnica. Np. można posłać program do pętli warunkowej.
Nie ma maksymalnej liczby tylko możliwości piszącego program . Jeżeli to są początki przygody z Bascom'em to pozostań przy jednej pętli Do..Loop . A jeżeli nie kompiluje to zaremuj wszystko co w pętli i dopiero krok po kroku dodawaj nowe linie kodu tworzące logiczną całość , cały czas kompilując ( sprawdzając poprawność kodu ) . Nigdy nie pisz programu...
Specjalnej funkcji to nie ma, ale nic nie stoi na przeszkodzie napisać kilka linijek które to zrobią. Np. w pętli for next z użyciem mid()
(...) osobnym PinX i oczekuj na stan niski ADCx2 aż do spełnienia tego warunku. Jeśli na ADCx2 napięcia równe 0 mrugnij diodą Led1 jeden raz przez 300ms, wyłącz Przekaźnik1 na PinX Po czym wróć do góry procedury, do oczekiwania na napięcie na ADCx1 To właściwie tyle. Dziękuję za uwagę i wszelaką pomoc. Witam serdecznie na forum! Chętnie pomogę Ci przygotować...
przycisk progresywny? te materiały sam musisz chyba sobie wykombinować. robisz to za pomocą pętli , wciskasz przycisk , tworzysz sobie zmienną x = ileś tam milisekund która określa odstęp czasowy , w pętli zmieniasz sobie jakąś tam swoją inną zmienną, zmniejszasz x i czekasz x czasu, jeśli przycisk puściłeś to wychodzisz z pętli i the end.
1. W jakim celu konfigurujesz liczniki, wpisujesz im wartości początkowe, a potem wywołujesz ich zatrzymanie przez STOP TIMER0/TIMER2 skoro nigdzie indziej ich ponownie nie uruchamiasz? 2. Jakim cudem kompilator nie protestuje gdy w pętli głównej umieszczasz samo ON TIMER0/TIMER2 nie podając trzeciego słowa kluczowego GOTO/GOSUB i ostatniego ich parametru?...
skoro ma to być zegar, to po co używać pętli for? Zastąp ją lepiej pętlą nieskończoną typu do...loop lub jej asemblerowym odpowiednikiem
Program się zawiesi bo na czas zapisu program jest zatrzymywany w pętli oczekującej na zakończenie zapisu (tak robi BASCOM a domyślam się że mówisz o BASCOMowej funkcji zapisującej a nie jakiejś własnej). Kolejne przerwania od Timera będą wywoływane tuż po poprzednim a więc program główny będzie praktycznie stał w miejscu. O zajeżdżaniu pamięci EEPROM...
Jeśli DS'y masz podłączone 2 przewodowo to między pomiarami musisz odczekać około sekundy (jak sprawdzałem je w każdej pętli programu to wychodziły mi różne śmieszne rzeczy) , poza tym czas konwersji to około 750ms a ty masz chyba 800 ale us a nie ms (chyba że us to nie są mikrosekundy) ja mam waitms 750. Przy podłączeniu 3 przewodowym mogę sprawdzać...
Może sam spróbuj ;-) Tak w zarysie : w pętli głównej musisz dodać warunek: jeśli przycisk wciśnięty to zwiększ zmienną "czas" o 1 jeśli puszczony to zmienna "czas" =0 następnie: jeśli zmienna "czas" = 123 (dla przykładu, bo nie wiem jak szybko ta pętla przebiega) to : zmień tryb pracy (to masz strasznie napisane, więc trudno ogarnąć)...
1. Można wykorzystać przerwanie sprzętowe. 2. Umieścić pętlę w pętli głównej, która sprawdza tylko jeden klawisz w zależności od flagi, którą ustawisz on/off , jeśli on pętla wykonuje się jeden raz a tym samym wykonuje się pętla główna, jeśli off pętla wykonuje się dopóki nie naciśniesz klawisza i ustawisz flagę na on
[url=http://www.elportal.pl/index.php?mo... masz polski plik pomocy do Bascoma. Najlepiej zrobić to w jakiejś pętli np. Do instrukcje do wykonania Loop
Która wersja Bascoma ? Jeśli jedna z nowszych to spróbuj skompilować w wersji 1.11.9.5 lub 1.11.9.8. Bascom od wersji 2.x.x.x nie działają mi za dobrze, a zwłaszcza RC5 i Atmega168.
Zmień: dim Objetosc_lcd as string*10- a potem jakie x-sprawdź. Bascom jest wolny i gruby- jak wół. Można na nim w pewnym stopniu polegać Ale opanowanie rasowego konia jakim jest C- jest trudniejsze- ma sam na wiele spraw własne zdanie. Brakuje oscyloskopu. Chyba jest-widać sonde. P.S. W głównej pętli wywołujesz menu w którym "siedzisz" przez waitms...
Instrukcja Wait nie stopuje procesora. Procesor odlicza czas poprzez zmianę wartości rejestrów a więc działa. A skoro działa to powinien także odczytać informację, że nastąpiła sygnalizacja od przepełnienia Timera. Spróbuj zastosować tą instrukcję. Tylko nie wywołuj jej w obsłudze przerwania a w pętli głównej. Bo gdybyś wywołał jej obsługę w przerwaniu...
Witam. Można tak: $regfile = "attiny13.dat" $crystal = 1200000 Config Portb.3 = Output Config Pinb.4 = Input set pinb.4 reset portb.3 do if pinb.4=0 then do Set PORTB.3 Wait 1 Reset PORTB.3 Wait 1 Loop end if Loop W pętli odczytujesz stan przycisku i jak będzie niski zacznie migać.
$crystal = 14745600 Czy oprócz podłączenia takiego kwarcu ustawiłeś odpowiednie fuse bity? Następna rzecz to nie musisz robić resetu 1wire. Największy błąd polega na tym że nie czytałeś helpa bo gdybyś to zrobił to dowiedziałbyś się że zmienna do której zapisujesz ilość urządzeń koniecznie musi być typu WORD lub INTEGER. Na koniec radzę ci skorzystać...
neo_84 sprawdziłem ci to na ZL2AVR no i mogę potwierdzić że kod z pierwszego posta kompilowany 11174 działa, natomiast kompilowany wersjami 1119->2->3->5 nie działa poprawnie. Generalnie pomaga usunięcie opóźnienia z pętli (jest odczyt z ADC), ale pojawiają się problemy z multipleksowaniem wyświetlaczy.
Co do kwarcu to definiujemy go zawsze, niezależnie od tego czy proc pracuje na zewnętrznym, czy na wewnętrznym, bo to jest informacja dla kompilatora, wg jakiej wartości ma wyliczyć czasy dla różnych instrukcji. Jeżeli to jest "nówka sztuka" to pracuje na wewn. 1MHz. Jak sam zauważyłeś, instrukcja "Loop" powinna znajdować się po ostatnim "Endsub", ale...
Diodę gaś tak jak ją zapalasz. [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 1000000 Config Portb.0 = Input Config Portb.1 = Input Config Portd.5 = Output Przycisk1 Alias Pinb.0 Dioda Alias Portd.5 Przycisk2 Alias Pinb.1 PORTB.0 = 1' to jest podciąganie do Vdd - działaj w tym celu na rejestrze 'PORTX lub PORTX.Y PORTB.1 = 1 Reset Dioda Do If Przycisk1...
1) jeśli używasz przycisków to zawsze podłącz go tak aby przyciśnięcie zwierało nóżkę portu do masy czyli do -. To naprawdę ułatwia sprawę i zawsze działa 2) dobra praktyka - przyciski, jumpery itp podłączaj do pinu procesora przez rezystor np 180 omów. Chodzi o to że kiedyś możesz się pomylić, ustawić pin jako wyjście, dać na nim 1 czyli napięcie +...
Witam. Problem z histerezą polega na tym że histerezę ustalasz w liniach wykonywanych tylko raz po starcie procka, dlatego ona zawsze będzie wynosić 0+5 (zmienna przechowująca temperaturę zmierzoną po starcie programu będzie 0). zmienną histerezy musisz umieścić w pętli aby byłą aktualizowana cały czas wraz ze zmianą temperatury. Pozdrawiam
http://www.btc.pl/pliki/bas_listingi.zip ->program 8_24.BAS Ja też długo się męczyłem z RC5, ale odpaliłem to i już wiedziałem, gdzie miałem błędy. Spróbuj sobie tak jak w tym przykładzie dołożyć jakąś flagę i ustawiaj ją w procedurze obsługi przerwania RC5, a dopiero w pętli głównej badaj jej stan, bo bezcelowe wydaje się "Enable INT0" w każdym przejściu...
Najdłużej tam pewnie trwa oczekiwanie na wynik pomiaru ADC który jest dodatkowo podwójny. Bascom robi dwa odczyty jeden za drugim. Można to wyłączyć, ale pomyśl o samym oczekiwaniu na konwersję. Gdyby to było poza przerwaniem to inne przerwanie spokojnie mogłoby to oczekiwanie przerwać tak jak można przerwać każde Waitms. Spróbowałbym w przerwaniu ustawić...
To się i tak nie kompiluje bo brakuje połowy rzeczy. Miałeś przygotować coć co się kompiluje... Znalazłem jednak jedną cechę wspólną Twoich kodów wiec przypuszczam, że to nie literówka.. otóż kiedy uC ustawi flagę że odebrał uzgodniony znak czyli ustawi Got_match = 1 to potem testujesz ten warunek w pętli głównej... ..zapomniałeś jednak o jednym. Musisz...
...I dalej mam takie pytanie czy da się to zrobić prościej Bascom posiada funkcję skoków do podprogramu w/g indeksu. Portc.4 = 1 'podciagam port - przycisk Dim A As Byte , B As Byte Declare Sub Temp Declare Sub Temp2 Declare Sub Nap Declare Sub Przyc Const Maxa = 2 'maksymalna ilosc podprogramow A = 0 : B = 1 Cls Do 'petla glowna Debounce Pinc.4...
f S1 = 0 Then Stop Timer0 Call L_stop Call P_stop Do Loop End If No i tu program zakończy swoje działanie po spełnieniu warunku S1=0. Nie wyjdzie z pętli Do...Loop do pętli głównej. Aha... i jeszcze Case deklaruje się z dwukropkiem Select Case Stan Case 1: Gosub Pucieczka Case 2: Gosub Tucieczka Case 0: If Namierzony_sharp1 = 1 Then Gosub...
1 - doprowadź sygnały z czujników do trzech wejść jednego z portów 2- każdy z tych sygnałów doprowadź do wejścia przerwania INT0 ( odseparowane diodami lub przez transoptory np. CNY-17 ) Każde pojawienie się impulsu na jednym z wejść wyzwoli przerwanie INT0 W obsłudze przerwania sprawdzasz stan wejść i porównujesz z poprzednim stanem W zależności od...
Program w tej formie jaką zamieściłeś zaraz po zainicjowaniu zmiennych i sprzętu wchodzi w warunek "If Timer1" nawet bez wywołania przerwaniem. Później zdejmie coś ze stosu, albo przeleci się po pustym flash`u i zacznie od początku. Żeby w ogóle to zaczęło coś robić to powinieneś po Start Timer dodać, jakąś pustą nawet, pętlę "Do : Loop" Wtedy w pętli...
. Według mnie przerywanie co 100ms jest używane przez program w pętli głównej programu, ponieważ co 100ms odwołuje się do 3 pod programów. Owszem, są te odwołania ale brak jest do nich odpowiednich subrutyn, które nie koniecznie muszą być poprawne. Wygląda że to nie jest pełny program... Jeżeli robisz odświerzanie LCD co 100 msec, to nie zdążysz odczytać...
Proponuje dodać dodatkową zmienną pomocniczą której zadaniem będzie pamiętanie że program zaczął działać nie jestem pewien tego rozwiązania z bascomem miałem doczynienia dość dawno temu ale możesz spróbować tego $regfile = "attiny25.dat" $crystal = 4000000 Config Portb.3 = Output 'przekażnik Config Portb.2 = Input 'włącznik typu microswitch...
Dzięki za pochwałę do wejscia RXD mam podłączoną diode i opornik jak w pierwszym poście tylko ze dioda to 1n4148 a opornik ten sam czyli 10k wpiołes sie dobrze w szyne ibus ale widze ze masz dużo błędów w programie np brak pętli itp osobiście robię projekt na atmega16 który będzie pracował w roli tempomatu i obecny kod mam bardzo rozkopany postaram...
Myślałeś o tym by zatrzasnąć stan linii danych w rejestrze na zboczu i odczytać zawartość rejestru już później przez CPU. Mógłbyś dodać licznik i mala pamięć SRAM oraz bufor bo tak małego FIFO raczej nie kupisz... Ale moim zdaniem będzie droższe i większe niż dodanie prostego uC który będzie w pętli robił to czego potrzebujesz - ile teraz kosztuje najtańszy...
Moim zdaniem poprawna droga, to najpierw nauczanie się C normalnie na komputerach ... Idąc tym trybem niech najpierw spróbuje nauczyć się BASCOMA na komputerze - powodzenia! Innymi słowy, co za różnica, czy będzie uczył się C zapalając diody na AVR czy wyświetlając cyfry na ekranie komputera? W czym pomoże mu uczenie się pętli FOR na ekranie kompa,...
No, coś mi się wydaje, że jednak może nie do końca rozumiesz właśnie to wszystko i stąd takie podajęcie. Co to w ogóle dla ciebie znaczy, że: Bo niby po czym innym program ma poznać czy odczytane dane pasują w tym określonym miejscu ? .... toż twoja próba obsługi tego przerwania - pokazuje, że w 1000% mógłbyś wykorzystać mechanizm z Bytematch Ustawiłbys...
Co do nadawania RC5 to ten rozrzut czasowy nie jest aż taki, żeby wyjść poza zakres tolerancji raczej, a z przysiadaniem napięcia to niech autor pokaże schemat - nie wiadomo czy i jaki wzmacniacz siedzi między procesorem i diodą IR. Niestety moim zdaniem program jest zły, bo w przerwaniu (z tego co kiedyś ostro testowałem) nie ma sensu wyłączać samego...
Najważniejsze zadania "czasu rzeczywistego" można wykonywać w obsłudze przerwania timera. Usługi można wpisać w podprogramy (z jez C: funkcje) i w pętli głównej wybierac które mają byc wykonywane. Komunikacje z uzytkownikiem mozna na ogół wpisać w pętli głównej, gdyz ona zwykle jest potrzebna do podania danych przed wykonianiem zadania, lub po czyli...
Napisz tak: Dim Zmienna As Byte Zmienna = 0 Config Intx = Low Level | Rising | Falling [ | Change ] 'Konfiguracja reakcji na sygnał przerwania 'za x podstaw nr przerwania wybierz jeden ze sposobów pobudzenia kocówki uC Enable Interrupts 'Uruchomienie przerwań globalnych Enable Intx 'Uruchomienie przerwania INTx On Intx Obsluga_przerwania 'wskazanie...
to zatrzymanie timera przed załadowaniem wartości jakby pomogło (przynajmniej nie zachowuje się dziwnie) teraz miga w równych odstępach ... Home Lcd "P=" ; P ; "us" Lowerline Lcd "I=" ; I ; "us " ; Licznik If Licznik = P Then Portd.2 = 0 End If If Licznik >= C Then Portd.2 = 1 Licznik = 0 End If ... Dobra odczepiam się od portów :) I już mówię dlaczego...
No to przecież program powyżej obsługuje dokładną regulację. W pętli głównej przed LOOP dopisz np WAITMS 100. Wczoraj o tym zapomniałem. Więc procesor zbyt szybko zwiększa/zmniejsza szybkość i wychodzi ci to tak, jakby silnik miał tylko 2 prędkości. Użycie waitms jest prymitywne ale nie wiem co twój program ma jeszcze robić więc idę na łatwiznę i nie...
Wielopoziomowe menu to nie problem. 1) Masz główną pętlę do-loop. W niej piszesz 'menu główne' - korzystając z if-ów i jakiegos licznika który będziesz mógł zwiększać lub zmiejszać za pomocą przycisków góra/dół 2) Znając swój licznik, wiesz dokladnie która opcja menu jest wybrana, więc dopisujesz if-a - zeby skoczył do podprogramu który ma obsługiwać...
Z tego co porównuję z listingiem źródłowym z książki to masz kilka błędów: sprawdź: [syntax=basic4gl]Config Lcd = 16 * 2[/syntax] oraz umiejscowienie [syntax=basic4gl]Cls[/syntax] w pętli a u ciebie jest poza pętlą oraz wyrzuć konfigurację [syntax=basic4gl]Config Timer2 = Timer , Async = On , Prescale = 128[/syntax] sprawdź także ustawienia Fuse CKSEL3..0...
wartość portu pętli bascom rezystancja pętli generator pętli
zamek błysk kondensator trzeszcz centralny vento
złodziejka żarówka electrolux mruga start
Junak 104 4T ECU – silnik 80cc nie odpala po wymianie, brak rozruchu, tuning sterownika Moment dokręcenia śrub ślizgów Nissan Juke 1.6