Żeby zrobić za pomocą Timera - to nie możesz używać trybu PowerDown tylko Sleep - żeby właśnie Timery mogły działać to po pierwsze. W taki trybie jednak będziesz miał nieco większy pobór prądu niż w pełnym PowerDown. Więc wszystko zależy na ile ma wystarczać bateria o ile jest to coś zasilane z baterii. Bez PowerDown'a na pewno będzie to sporo krótszy...
[syntax=vbnet] ...... Do Debounce S1 , 0 , Pr1 ,Sub Loop End ' koniec pętli Pr1: Waitms 100 Serwo(1) =150 Waitms 150 Serwo(2)=250 Waitms 200 Serwo(2)=50 Waitms 250 Serwo(1)=50 Wait 1 Serwo(1)=150 Waitms 100 Serwo(1)=50 Wait 1 Serwo(1)=150 Waitms 100 Serwo(1)=50 Return [/syntax] Przy takim kodzie serwa działają jak bym chciał tylko procesor wykonuje...
Ten drugi pomysł jest moim zdaniem lepszy. Do tego możesz użyć końcówki przerwania INT - ma konfigurację zbocza, którym jest wyzwalane przerwanie.
Witam Właśnie piszę program do sterowania diodami na dyskotekę tzn. wąż świetlny. Projekt jeszcze nie jest skończony ale niby działa i niestety pojawił się problem. Przycisk Sv1 Alias Pind.3 służy jak na razie do wyboru programu (zwiększa o jeden) Na razie jest 6 programów. Owy przycisk działa na zasadzie przerwania od przepełnienia timer0, które to...
Witam Czy ktoś ma doświadczenie z przerwaniami w bascomie. Napisałem sterownik temp. I cyklicznie za pomocą przerwania wywołuje podprogram który odczytuje temperaturę niestety często zdarzają się kaszaki na LCD poczym reset procesora zazwyczaj w ekranach parametrów po wyłączeniu przerwania wszystko jest ok. Domyślam się że przerwanie zatrzymuje działanie...
Witam mam pytanie do bardziej zaawansowanych programistów :) Chciałbym się dowiedzieć w jaki sposób zatrzymać program w dowolnym momencie danym przyciskiem. Na przykładzie: odsuwanych drzwi załóżmy do garażu... w jaki sposób po uruchomieniu wyjścia zatrzymać przyciskiem drzwi w dowolnym momencie i aby po zatrzymaniu można było je rozsunąć bardziej bądź...
Witam i mam takie pytanie: co w tym programie jest źle :?: Kod: [syntax=basic4gl] $regfile = "attiny2313.dat" $crystal = 8000000 Config Portd = Input Portd = &B00000000 Config Portb = Output Portb = &B0000000 Config Timer0 = Timer , Prescale = 64 On Timer0 Przerwanie_co_2ms Dim Licznik As Integer Enable Interrupts Enable Timer0 Timer0 = 56 Licznik =...
Witam, Mam pewien problem: Piszę program który posiada jakieś menu, do tego celu wykorzystuje komendę: Debounce Pinc.5 , 0 , Prog_1, Sub która odnosi się do któregoś z podprogramów, natomiast jeśli przeskakuję tak pomiędzy programami to po kilku razach program zawiesza się i na LCDku robi się totalny chaos, a czasami procek sam się resetuje. Przykładowy...
Witam, proszę o pomoc w następującym problemie. Uproszczony przeklejony program w bascom działa w ten sposób że po przesłaniu określonych liter przez rs zapala RGB ledy w odopowiedni sposób. Przerwanie działa dobrze. Natomiast chodzi o procedure "zmieniaj" która to wywołana w przerwaniu działa, ale przerwanie nie powoduje wyjścia z niej. Musi wykonać...
Witam Niedawno zaczolem programowac w bascom chce napisac program do µP tak aby dzialal jak przelacznik Zrobilem cos takiego: Config Portb = &B11111111 Portb = &B11111111 Config Portd = &B1111110 Portd = &B1110111 Dim K As Byte K = 0 Do If Pind.0 = 0 Then Incr K If K = 0 Then Portb = &B11111111 If K = 1 Then Portb = &B11111011 If K = 2 Then Portb...
Witam. Mam problem z odpowiednim programem dla uc (bascom) który odczyta mi np 7 kliknięć, przerwań? (dzwonków). Jak wyglądał by taki program, i jakie komendy użyć. Kwestia podłączenia nie wymaga omawiania - powiedzmy 6 stanów niskich (0) i siedem wysokich (1) ---> stan wysoki na jakąś nóżkę. Przerwań w helpie bascoma nie mogę znaleźć :( Pozdrawiam.
Witam chciałbym aby w bascomie zaprogramować przycisk że po wciśnięciu i przytrzymaniu określoną liczbę sekund np 20 włączy program
Napisalem w bascomie program ktory ma mierzyc czas trwania impulsu. Dokladniej jest to pokazane na rysunku w zalaczniku. Ale niestety program niechce dzialac a dokladniej pokazuje mi na lcd caly czas 101 i niewiem co jest grane bo moim zdaniem jezeli zmienia sie czas trwania impulsu to powinna sie zmienic iloscimpulsow zliczonych przez licznik. dodam...
Witam, Podczas pisania programu menu wyskoczył mi taki mały problem , może najpierw przedstawię kod [syntax=basic4gl] Config Pind.3 = Input Set Portd.3 Memo Alias Pind.3 Config Pind.4 = Input Set Portd.4 Smulti Alias Pind.4 Dim Nr_menu As Byte , Klucz As Bit , Step_ As Byte , Vfoab As Byte Nr_menu = 0 Do Cls Lcd Lookupstr(nr_menu , D_menu) On Nr_menu...
Witam mam pytanko odnośnie programu. Chcę żeby po podaniu masy na PINC.1 na PINA.1 pojawiło się napięcie i zniknęło. ale tylko raz aż do odłączenia masy od PINC.1 co natomiast spowodować ma pojawienie się i zniknięcie napięcia na PINA.2 ale nie może sie to dziać co obrót pętli tylko raz po każdej zmianie stanu na PINC.1 Proszę poprawić tytuł wiadomości...
Witam. Czy mógłby ktoś podać jakiś dobry sposób na odczyt stanu przycisków, najlepiej jakiś kawałek kodu w bascomie.
Cześć. Napotkałem ostatnio na pewien problem, mianowicie w momencie gdy wywołuję przerwanie w swoim układzie, to po jego obsłudze główny blok programu nie jest kontynuowany, tylko wszystko zaczyna się od początku (albo resetuje procek). W załączniku schemat urządzenia. Załącznik usunąłem. http://obrazki.elektroda.net/63_12624652... Przerwanie...
Witam. Mam liczbę T1 w formacie SINGLE. Chcę z niej uzyskać część rzeczywistą (z zaokreąglaniem lub bez - obojętnie, jak prościej). Jak to zrobić? Myślałem eby w jakiś sposób zastosować asemblerowskie div, ale to coś nie działa. Pomocy, już siedzę nad tym...ehh Procek to AT89C4051. update: niżej dalsza część problemu ;)
Witam. Mam problem z kodem w bascomie. W skrócie opiszę co ma robić. W pętli głównej bada jaka liczba przychodzi przez RS232 (A = Inkey() ). Jeżeli jest to 87 to wtedy ma wyskoczyć do procedury/podprogramu o nazwie "Lowandslow". Tam na chwilę ustawia piny od B.4 do B.7 na "1" i załączane zostają przekaźniki spuszczania powietrza z czterech poduszek....
Witam, Mam mały problem z napisaniem kodu tak aby ten program uruchamiał się za pomocą przycisku [syntax=basic4gl]Config Pinb.1 = Output 'linia pb1 jako wyjście Config Timer0 = Timer , Prescale = 256 'deklaracja timera jako czasomierza On Timer0 Przerwanie_co_2ms 'deklaracja jaka etykieta obsługuje Led Alias Portb.1 'alias dla wyjścia b.1 Dim Licznik...
Gdy już usuniesz wewnętrzną pętlę do..loop to zwróć uwagę, że stan przycisku będzie sprawdzany raz na 60s. Możesz zrobić sprawdzanie np. tak (co 1 sek.): dim x as byte ... do 'sprawdź przyciski if x=60 then x=0 toggle ... end if wait1 incr x loop end Albo wykorzystać timer lub przerwanie.
1. Nie wykluczyles drgan na przycisku s1 2. Zebys wykonac to co chcesz zrobic bedzie ci potrzebne przerwanie. 3. Dziwie sie, ze sprawnie dziala ci ten kod (chyba, ze specjalnie robisz sprawdzanie przycisku w petli, zeby nie bylo przerwania i wykonal kod do konca, a pozniej sprawdzil czy przycisk jest wcisniety. W tym przypadku przepraszam)
Do atmegi8mki Ci może nie wejść obsługa FATu. Poszukaj na elektrodzie FAT SD Atmega i coś znajdziesz gotowego. - Napewno nie Bascom :D Potem jakieś przerwanie i mierzyć czas i robić systematyczne opróżnianie buffora na drabinke R2R albo DAC.
elektryk: chyba nie masz "dejavu", no chyba ze ja tez mam :) polecam uzywac przycisku "szukaj"
A może sprzętowe rozwiązanie ? Zamiast przycisków NO zastosować NC ?
Co do bascomowego symulatora to działa on u mnie bardzo wolno, a Hardware simulator wyświetla jakieś bzdury Symulację można przyśpieszyć dodając $sim , ale działa to przez usunięcie opóźnień, więc może zmienić zachowanie. W każdym razie polecam przyjrzeć się co się dzieje w pamięci RAM. [url=https://avrhelp.mcselec.com/index.h...
Uruchom przerwanie od Countera (najlepiej od porównania wartości zliczonej z ustawioną) i zmień stan portu w podprogramie obsługi przerwania lub prościej, ale mało elegancko zmień [syntax=basic4gl]If Counter1 = 100 Then ...[/syntax] na [syntax=basic4gl]If Counter1 >= 100 Then ...[/syntax] Nie tak jest to, że w chwili zliczenia setki nasz if może się...
$regfile = "attiny2313.dat" $crystal = 4000000 Config Pind.2 = Input Config Portd.0 = Output Config Portd.1 = Output Config Portd.3 = Output Set Portd.2 Przycisk Alias Pind.2 Dim Sekwencja As Byte Declare Sub Pierwsza Declare Sub Druga Declare Sub Trzecia Enable Interrupts Enable Int0 On Int0 Przycisk_przerwanie Do Loop End Przycisk_przerwanie:...
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
Do kolegi arktik1 dlaczego kolega namawia do sprawdzania w petli danego pinu skoro luki55 ma w programie sprawdzac tylko ten przycisk to lepiej go dac w przerwanie zewnetrzne a do glownego do__loop wstawic nop. Jesli juz taki "duzy" procesor stosowac to wykorzystac go przynajmniej tyle ile sie da i ile ulatwi zycie. P.s. Attiny13 tez bylby za duzy :D
Radziłbym Ci zobic tak: Cały PWM zrób na przerwaniu od jakiegoś Timera; nie uzywaj zmiennych typu single, jeżeli częstotliwośc przerwań bedzie odpowiednio szybka wystarczy zmienna typu byte lub word. Obsługe LCD czy przycisków i innych obliczeń zostaw w pętli główne Przykładowy PWM dla portb.3: Gdzie a to jakas amienna a do b podajesz wartosc PWM (0-255)......
Sprawdziłem ten kod przed chwilą i jeśli na PD6 jest przycisk.. to jego kolejne naciskanie włącza lub wyłacza naprzemiennie diode LED na pinie PORTD.7 100% tested [syntax=vbnet]$regfile = "m644pdef.dat" $crystal = 8000000 $hwstack = 40 $swstack = 16 $framesize = 32 Pcmsk3 = &B01000000 Enable Pcint3 : On Pcint3 Pcint3_isr Config Portd.6 = Input : Set...
Musisz ustawiać znacznik, albo lepiej- odblokować przerwanie :-)
Przycisk na przerwaniu... świetny pomysł... prosisz się o kłopoty.
Możesz sobie podłączyć przycisk pod zewnętrzne przerwanie i w programie przerwania na początku zrobić Disable INT0 , wtedy drgania stuku będą chyba wyeliminowane.
Witam i jak zwykle proszę o pomoc. Otóż piszę program do sterownika wytrawiarki, zrobiłem Menu (hehe, 50% flasha), i potrzebuję zrobić termostat z czujnikiem temperatury, a wybrałem sobie DS1820, bo łatwodostępny i pospolity. Problem mam taki, że w programie głównym wyświetlam tą temperaturę, (przechodzę do podprogramu), a czas odczytu wynosi 750ms,...
Nie wiem czy odbierasz tam jakieś komendy. Wywal te Wait`y. Tutaj po zmianie stanu do zmiennej Blokada zostanie wpisana wartość do odliczenia w dół. Jeśli nastąpi następne przerwanie to w zależności od tego czy minął już czas blokady, to albo zostanie przedłużony jej czas bo ktoś trzyma przycisk dłużej albo.. :D [syntax=basic4gl]Dim Blokada As Word...
Przycisk do końcówki INT0. On INT0 Int0_handler Config INT0 = Falling Enable INT0 Int0_handler: Gosub Get_ADC_16 ADC_Offset = Napiecie Rerurn Get_ADC_16_2: Disable INT0 'Żeby wciskanie przycisku nie przerwało normalnego pomiaru. Gosub Get_ADC_16 Napiecie = Napiecie - ADC_Offset Enable_INT0 Return Do pomiarów używasz procedury Get_ADC_16_2, która...
Wiec tak: W ogóle wyrzuciłbym zmienna/flagę F. Nie jest potrzebna tutaj. W programie głównym zamiast sprawdzania F, sprawdzaj A, czyli warunek IF z przerwania przenieś do programu głównego, łącznie z zerowaniem A. W przerwaniu zwiększaj tylko A. Zamiast: If F = 1 Then Cls Locate 2 , 1 Lcd "przerwanie" Wait 1 Cls F = 0 Enable Int0 End If zrobilbym...
No na modyfikację nie mam czasu. Zwłaszcza, że już dawno nic nie pisałem. W dodatku ja nie używam wait (i Tobie też odradzam) co wymaga trochę innego podejścia do pisania programu. Mogę jedynie podpowiedzieć, że najlepiej było by skorzystać z przerwań INT0 i INT1 podłączonych pod przyciski. Wtedy przerwanie aktualnego zadania było by możliwe natychmiast....
Witam sprawdź ten kod co prawda są inne numery portów i inny procek ale jak zmienisz powinno działać. Problem jest jeden w momencie jak naciskasz przycisk i zmieniasz końcówkę na WYJŚCIE to stan tego pinu Musi być (0) Niski , żeby nie zrobić zwarcia. '$sim $regfile = "attiny2313.dat" $crystal = 11059200 $baud = 9600 enable interrupts 'włącz...
Ja bym sugerował podpiąć przycisk pod przerwanie zewnętrzne. Jeden timer byłby puszczany i zatrzymywany w przerwaniu do pomiaru czasu, a drugi do multipleksowania wyświetlania.
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...
Wlaśnie przestudiowałem przerwania INT0 i INT1 no i wychodzi na to, że raczej nie da się tak zrobić jak chciałem. Ponieważ moje pod programy są w pętli, a przerwanie czeka na zakończenie podprogramu...
Rezystora nie ma na schemacie ale fizycznie go wlutowalem i dalej nic. Najczesciej wyzwalaja sie przyciski klawiatury lub zewnetrzne przerwanie. W programie wlaczone pull-up.
tak samo jak resztę. Jeżeli timer ci daje przerwanie co 10 ms , to 60sek to będzie...6000 cykli :-). Zmienna (licznik) typu word załatwi sprawę ...
Wracajac do tematu czy moglbym prosic przynajmniej o pseudo kod obslugi przykladowo drgania w przyciskach , wysterowania przekaznika np przez 2s oraz komunikacji 1wire jednym timerem (atmega8 ma az 2 timery wiec pewnie szybko skoncza sie jego mozliwosci chcac napisac kod bez zatrzymywania) Cały dowcip polega na tym że z tego 8 bitowego timera możesz...
Port a nie ma przerwań, ale jeśli to ma być obsługo przycisku można wykorzystać przerwanie timera co np 50ms. przy 2 wykryciu stanu niskiego wykonujesz odpowiednie działanie. przy 2 bo dzięki temu od razu wyeliminujesz drgania styków.
1. Jak masz podłączony przycisk? Powineien być tak żeby zwierał pin procesora do masy. 2. if portd.0 = 0 then !!! 3. taki program Ci bedzie dziwnie dzialal bo jest cos takiego jak drgania stykow. Jezeli odczyt trafi akurat na moment ze styk sobie odskoczy to choc ty myslisz ze g wcisnales to nic sie nie zrobi. Wniosek: trzeba wytlumic rgania stykow....
Tak jak sam napisales jest to przerwanie programu obojetnie w ktorym momencie, to do tego sluzy takie cos jak "przerwanie" int0/1 Uzyj wyszukiwarki i helpa do bascom, a o wszystkim sie dowiesz.
Spróbowałem wszystkiego, zamknąłem warunki i zaczął mi zwracać błędy przy kompilacji. Chodzi oto, że program się kompiluje, ale jest problem z zładowaniem go do procesora, Pisząc Bascom Demo miałem na myśli Bascom AVR DEMO. Jak już pisałem to wszystko przez ten Timer0, a konkretnie On Timer0 Co4ms, gdy wykasuje tą linijkę z włączeniem tajmera to program...
Jeżeli sprawdzasz przycisk podłączony do masy, to czemu przerwanie Timer ma być wyzwalane zboczem rosnącym ? Config Timer0 = Counter , Edge = Rising
[syntax=basic4gl]Config Timer0 = Timer , Prescale = 1024 Enable Timer0 : On Timer0 Przerwanie0 Dim Tmp As Word Tmp = 0 Dim Ptimer1 As Word Ptimer1 = 0 Do If Klawisz = 0 Then If Ptimer1 = 0 Then Ptimer1 = 100 End If If Ptimer1 < 95 And Klawisz = 0 Then Tmp = 1 End If End If If Tmp = 1 And Ptimer1 < 85 And Ptimer1 > 70 Then If Klawisz = 1 Then...
Witam. Mam program, który działa w pętli DO..LOOP typu: DO ... IF warunek THEN procedura ... LOOP przerwanie: ... return sub procedura ... end sub Procedura wywołana w pętli głównej ma opóźnienia na WAITMS. Chciałbym przy pomocy przerwania (przycisk) zrezygnować w dowolnym momencie z wykonywania 'procedury' i wyjść z jej obsługi do pierwszej instrukcji...
A jeszcze 2 pytanka, czy przerwanie musi być co 1ms co się stanie jak będzie rzadziej i jak dorobić to rozpoznawanie krótkiego i długiego wciśnięcia?
Te 6 przycisków połącz z jednej strony do 6 pinów a z drugiej wszystko do INT0 lub INT1. Przed położeniem procka spać pin przerwania ustaw jako wejście i podciągnij, pozostałe 6 pinów jako wyjścia w stanie niskim. Naciśnięcie któregokolwiek przycisku spowoduje wybudzenie procka (wybudzaj stanem niskim lub zboczem opadającym) a po wybudzeniu OD RAZU...
Witam, w związku z tym, że nie udaje mi się pogodzić zewnętrznych przerwań z obsługą 1-wire (zatrzymywanie przerwań na czas obsługi 1-wire co zakłóca mi odczyt z zewnętrznych przerwań) mam pytanie do bardziej doświadczonych: Czy możliwym jest wgranie "dwóch" programów do jednego uC, żeby działało to mniej więcej tak: 1-szy program tylko z obsługą 1-wire...
Należy pierwsze poczytać o przerwaniach, a nie czekać na gotowca. Bascom ma dosyć intuicyjnego helpa z przykładami. Tylko, żeby przerwanie mieć z klawiatury musisz podpiąć jej wszystkie wiersze lub kolumny przez diody do jednego z wejść INTx
jesli masz przerwania i przy przytrzymaniu przycicku program cały czas zlicza to masz prawdopodobnie przerwanie ustawione "poziomem" zmien odpowiedni bit w rejestrach specjalnych, tak aby przerwanie było ustawine zboczem. pozatym, przydał by sie jakis obwodzik RC na tym właczniku, ewentualnie "szmit", ale najlepiej zrobić to programowo
Warto by było tą konfigurację rozwinąć o jeszcze jedną linię (odświeżaną za każdym razem po wywołaniu przerwania): [syntax=basic4gl] Timer0= x 'lub Timer0=Timer0 + x 'opcja dokładniejsza [/syntax] gdzie x=256-licznik, "licznik" dobierasz w zależności od tego jak gęsto ma być wywoływane przerwanie. Przykładowo dla zegara 8Mhz i Prescale =64, aby uzyskać...
Żeby zmieniać czas odstępów między zmianiami najprościej chyba byłoby zrobić coś takiego: Przerwanie: ' co 16 us Incr Licznik x=0 do waitus 10 incr X loop until X>Y If Licznik > 100 Then Licznik = 0 Set R Set G Set B End If If Licznik > Red_color Then : Reset R : Else : Set R : End If If Licznik > Green_color Then :...
Wszystko jest ok, domyślam się przyczyny niedziałania: - przerwanie jest jako low level - dopóki wciskasz przycisk to przerwanie ciągle się wykonuje, po jego puszczeniu główny program może się nie wykonać Zrób tak: - w twoim ostatnim programie w przerwaniu wpisz: Disable Int0 - pozornie bez sensu ale zauważ że po wyjściu z powerdown będzie się wykonywało...
Oczywiście, że mają wyzwalanie zboczem. Opadającym, narastającym i dowolnym. Tylko nie pamiętam czy Bascom pozwala przez swoje funkcje skonfigurować wyzwalanie zboczem. Ale wystarczy odwołać się bezpośrednio do rejestru MCUCR.
Wszytsko wrzuce w poniedziałek po południu bo nie mam dostępu teraz do niego. Ogólnie przerwanie działa ale też nie do końca, bo jak jedno się wykona i stoi na wait'cie w pętli głównej to już na kolejne, nie reaguje Obsługa przycisku w przerwaniu jest niezbyt wskazana. Owszem przycisk uruchomi przerwanie ale do tego należy również doliczyć drgania styków....
1.Możesz powiedzieć CO chciałeś uzyskać jako wynik działania INT0? Jak napisał Logan-to jest przerwanie zewnętrzne-od zewnętrznego przycisku np. 2.Czy kompilowałeś ten program w miarę pisania czy napisałeś cały i dopiero potem skompilowałeś?
pier - twój program działa bardzo dobrze, dokładnie tak jak go napisałeś. A że napisałeś go badziewnie to taki masz efekt. Błędy: 1) W przerwaniu INT0 wyskakujesz z niego GOTO do głównego programu, tak nie można. Wyjdź z przerwania komendą RETURN, ale na jego końcu a nie przez podmianę GOSUB. Powinno być: If Sw = 1 Then Powerdown i RETURN na koncu....
Czegoś tu chyba nie rozumiem. Obliczyć (określić) czas potrzebny na przerwanie? Czyli czas wykonania przerwania? Każdy czas nawet pojedynczego cyklu w [ms] można określić za pomocą symulatora działania programu zawartego w kompilatorze Bascom. Uruchamiamy program ale krok po kroku (każdy rozkaz na kliknięcie mychy), zadajemy (wymuszamy) przerwanie przyciskiem...
przerwać przycisk bascom bascom przerwać przycisk bascom przycisk przerwać
przełacznik transformatorów nagrywanie plików ekran dotykowy kupić
adelid opinie wyrzuca bezpiecznik
SATEL MICRA brak sygnału włamania na telefon – konfiguracja SMS, GSM, powiadomienia Podłączenie licznika w Iveco Daily 2.8 - schematy i porady