Mam problem jestem początkujący napisałem program który ma za zadanie regulować włączanie wiatraka i czas z jakim ma dmuchać , jednocześnie mierzy temperaturę i nie działa tak jak powinno : Temperatura pokazuję co jakiś czas błędny pomiar np 124 , 32 , 98 procek się resetuje chińskie znaki raz na jakiś czas w programie można było ręcznie zmieniać czas...
Przyciski - DEBOUNCE Odliczanie - CONFIG TIMER i przerwania.
Może używając timer1 i jakąś zmienną przechowującą ilość przerwań wywołanych przez ten timer - czyli co przerwanie timera zmienna+1 i jeśli osiągnie jakąś tam wartość (czyli ileś tam przerwań timera = jakiś czas (zależny od kwarcu)) to wtedy spełniać ten warunek.
Dzięki "emarcus" działa wyśmienicie :) teraz muszę to połączyć z moim programem JESZCZE RAZ DZIĘKI! POZDR! Dodano po 4 No i kolejna przeszkoda.... Chcę ten programik dodać do mojego głównego programu i chcę żeby dzałał on w pętli tylko wtedy gdy powiedzmy pind.0=0 niestety nie udaje mi się przerobić go tak aby odliczał czas i pokazał komunikat nie raz,...
witam wszystkich mam problem z niedziałającymi przerwaniami napisałem program który dobrze funkcjonował pod wersją bascoma 1.11.7.1 . ściągnołem najnowszą 1.11.8.3 bo w tej poprzedniej nie mogłem wysterować LCD w trybie 8 bitów . okazało się że programy wykorzystujące timery nie działają . co się zmieniło w obsłudze timerów ? może podeśle ktoś działający...
Po pierwsze to nie napisałeś jaki to procesor, a po drugie nie podałeś czestottliwości zegra, a po trzecie to raczej będzie ciężko robić rzerwanie co godzine... Przerwanie można robić częściej, a czas odliczać w zmiennej i oba te odciki czasu da się załatwić jednym tajmerem. Do czego Ci to w ogóle potrzebne?
Facet, zacznij od przejrzenia jakieś dokumentacji do '51. Nie dziwne, że Ci tyle późni bo przerwanie jest u Ciebie generowane co 71,111111 ms, a nie tak jak zdaje się chciałeś co 66,66666ms. Po pierwsze to trzeba ładować każdorazow licznik w obsłudze przerwania, a po drugie to dlaczego chcesz liczyć takie bezsensy jak 66,6666ms? Nie prościej odliczać...
Witam serdecznie. Czy ktoś by mógł mi wytłumaczyć to zadanie?:) Chodzi mi krok po kroku.
Witam. To tej pory nie stosowałem zbyt często timerów do generowania przerwań celem generowania odcinków czasu. Być może dlatego żyłem w słodkiej nieświadomości pewnych komplikacji będących nie bez wpływu na dokładność odmierzanych odcinków czasu. Do tej pory wydawało mi się, że dla danego rezonatora kwarcowego wystarczy: 1. Obliczyć czas trwania pojedynczego...
Mam taki fragment kodu: Config Portb = Output Portb.0 = 1 Config Portd = Output Config Portc = Output Config Porta = Input Declare Sub Kolor 'podprogram - nazwa Enable Interrupts ' zezwolenie na obsługę przerwań Config Timer0 = Timer , Prescale = 1024 Enable Timer0 On Timer0 Kolor Timer0 = 1 Do 'program Loop Kolor: 'poczatek podprogramu If Portb.0...
Witam. Napisałem taką prostą funkcję, ale nie działa tak jak bym tego chciał. Parametrem wprowadzanym do funkcji jest liczba (w moim przypadku typu byte) Funkcja ma zwracać wynik w formie zegara czasu tzn. zmienna byte = 75, funkcja zwraca string 01:15 Wszystko działa dobrze ale tylko do 9sekundy, później zaczyna mi to opóźniać, tzn. wynik jest wyświetlany...
Chcę napisac własny program z wykorzystaniem Timerów. Na początek proszę o wytłumaczenie dlaczego w poniższym programie: 1. wykorzystano podzial częstotliwości zegara (po preskalerze 256) 250/125 zamiast wykonac jedno dzialanie? 2. uzyto wartość początkową Timera0 = 250 przed Petlą do Loop End . [syntax=basic4gl] 'Timer0 do odmierzenia 1s $regfile =...
Witam! Mam pytania: jak w praktyce zastosowac timery? Jak one działają? W którą stronę zliczają? Jak zczytac ich stan? Do ilu mogą zliczać? chciałbym, aby ktoś wytłumaczył mi to na przykładzie Atmegi8 i języka Bascom. Wiem już że: -Timery zliczają impulsy które same generują wg. prescalera -Prescaler to taki dzielnik, który bierze jakąś część taktowania...
Koledzy znając życie to pewnie problem wynika z mojej niewiedzy. Mam podprogram Który ma mi zliczyć czasu załączenia pompy. W tym celu wykorzystałem sobie przerwanie które generuje mi przepełnienie co 500ms. W warunku Flagi 500ms jest zmienna (kala(n))która jest zwiększana co 500ms jeśli pompa jest załączona. Załączam sobie pompę np na 3,5s czyli zmienna...
Witam , żeby zrozumieć o co mi chodzi zamieszczam krótki programik: Config Timer1 = Timer , Prescale = 64 Timer1 = 0 Start Timer1 Do If Pind.5 = 0 Then xxxxx Loop Until Timer1 = 15067 Stop Timer1 Program będzię "zapętlony" , do chwili kiedy timer1=15067 ile to bedzie trwać w przeliczeniu na sekundy , czy na milisekundy.??? Jak obliczyć czas trwania...
Witam Problem następujący... Program ma liczyć imulsy, a dokładnie mierzy częstotliwość. Wszystko chodzi jeśli wybiorę zamiast TIMERA2 - TIMER1, ale ja musze to zrobić na TIMER2. Pozniżej kod: [syntax=basic4gl] $regfile = "m328pdef.dat" $crystal = 11059200 $hwstack = 256 ' rozmiar stosu sprzętowego $swstack = 128 ' rozmiar stosu $framesize = 128 Dim...
Pisze programik w bascomie (51'), który między innymi ma zliczać czas od włączenia układu. T0 i T1 będą wykorzystane do liczenia impulsów (ale to dopiero później) Wymyśliłem sobie, że czas będzie mierzony na podstawie licznika w głownej pętli programu tzn: Do Debounce P3.0 , 0 , Przycisk , Sub Gosub Opcja Incr Czas Waitms 50 Wczas = Czas * 20 Loop No,...
Witam poszukuje porady jeżeli chodzi o Bascoma pisze programik który ma mieć funkcje odliczania czasu dokładnego(chodzi mi typowo o sekundy) jak musiałaby wyglądać procedura timera dla odliczenia np 20 sekund. kwarc 160000 hz Z góry dziękuje
Witam Napisałem taki oto programik w bascomie, chce aby przerwanie bylo co 10ms. Mam jednak pewne zastrzeżenia do Bascom'u i nie jestem pewien czy w praktyce te 10ms bedzie dokładne ?? ile taktów zegara potrzeba na wpisanie wartosci dla timera oraz jego wystartowanie ?? gdzies wyczytalem ze 54 takty, ale nie jestem pewien tego. $crystal = 12000000 $large...
Witam! Biorę się z przerobienie programu zegarka na lampie vfd którego autorem jest ivanek89.Chce dorobić do tego budzik ,timer odliczający w dół no i może coś jeszcze :D . Oto moje pytania: -jak obsłużyć przerwanie int1 (połączone z int pcf'a) -jak napisać procedurę odliczajaca czas (jakoś nie mogę sobie dać z tym rady) Na timer pomysł miałem tak:...
Cześć Mam pewien problem do rozwiązania potrzebuje zrobić licznik który będzie mi zliczał do 10000 co 1 sek zrobiłem sobie liczniki T0 i T1 zliczają do 255 bo mają 8bit ale T2 ma 16bit nie mogę tego przeskoczyć[syntax=basic4gl] $regfile = "m32def.dat" $crystal = 16000000 Config Porta = &B11111111 : Porta = &B11111111 Config Portb = &B00000000 : Portb...
Cześć. Zaczynam programować i potrzebuję obliczyć lub policzyć ile trwa jedna pętla(Do-Loop) w moim programie(wiem tyle, że trzeba wykorzystać Timer tylko nie umiem się nim obsługiwać:cry:). Proszę o przykłady i także o brak wypowiedzi typu zajrzyj do help-a(bo patrzyłem).
Witam, zwracam się z prośbą o pomoc. Tworzę program sterujący silnikiem DC. Program składa się z menu głównego w którym są 4 podprogramy 3 z nich działają bezbłędnie. Największy kłopot sprawia mi 4 podprogram a zarazem najważniejszy. podprogram startt ma za zadanie odmierzyć zadany przedział czasowy gdy osiągnie wartość 0 wykonać pewną procedurę i zacząć...
Buforuj otrzymane znaki i przetwarzaj w procedurze pętli głównej programu. Oczywiście wiąże się to z wywaleniem wszelkiej maści form kodu blokującego procesor i oparciem odliczania czasu o Timer.
W tym wypadku powinien być Gosub Obrot i nie trzeba go deklarować. Dodam tylko że przy timer0=10 timer będzie odliczał od 10 do 255 a komenda load timer0, 10 spowoduje odliczenie 10 ticków czyli od 245 do 255.
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...
Jeśli chcesz to zrobić, tak jak mówisz, to musisz czas odliczać za pomocą Timera, ponieważ "Wait" blokuje Ci procesor.
Zastosować timer do odliczania czasu.
Po upływie 655.35ms następuje przepełnienie licznika, w takiej sytuacji trzeba utworzyć zmienną która będzie zliczać ilość przepełnień. Czyli.......... W takiej sytuacji (.."time out"; => Err=1) - trzeba przyjąc że instrukcja została zakończona i processor już nie powróci do jej kontynuacji, a raczej przystąpi do kolejnej instrukcji przewidzianej programem....
Ja wiem ze nie kazdy musi sie uczyc angielskiego ale moze by tak kolega przeczytal chociaz jaka jest poprwana pisownia komend w jezyku Bascom zamiast narzekac na brak pomocy ja rozumiem ze w obecnych czasach ludziom sie niechce czytac wola sie pytac od razu na forum ale zeby nie bylo ze nikt nie pomaga to ci napisze NIE MA TAKIEJ KOMENDY JAK WEIT JEST...
Zacznij od przerwania timera - w nim sprawdzaj stan przycisku, odliczaj czas, włączaj i wyłączaj odbiornik.
Timer będzie odliczał np. sekundy tak jak Waitms 1000, tylko dokładniej. Dobra rada: Odinstaluj BASCOM i zacznij się uczyć C dlatego: http://mikrokontrolery.blogspot.com/2011... Kurs C: http://mikrokontrolery.blogspot.com/2011... Kurs AVR w C: http://mikrokontrolery.blogspot.com/2011...
Witam Piszę program w BASCOMie dla układu attiny2313. Niestety nie mam tego uC, ale posiadam kilka AT89C2051 i programator BlowIt. Czy po za zmianą nazw wyprowadzeń i nazwy procesorka, trzeba bedzie coś jeszcze zmieniać przy przekładaniu programu z bascomAVR na bascom 51? Program to timer odliczający czas i wyświetlający czas na multipleksowanych 4...
Witam. Najpierw wysyłasz rozkaz pomiaru temperatury, później z pomocą timera lub nawet zmiennej zwiększanej w pętli odliczasz czas pomiaru lub większy (mikroprocesor w międzyczasie normalnie wykonuje program). Po tym odczytujesz wynik pomiaru z DS1820, co nie trwa zbyt długo. Pozdrawiam. EDIT: Uzupełniłem posta
Witam Chcę zrobić sterowanie fazowe 8 żarówkami, lecz brakuje mi pomysłu jak to zrobić. Z jednym kanałem jest sprawa prosta. Po wykryciu zera ładuje do timera zadaną wartość i w przerwaniu Timera załączam triaka. Jak to zrealizować dla 8 kanałów ? W sensie jak odliczać 8 wartości jednym timerem? Pozdrawiam
Zastawia mnie po co ciągle robisz warunek w warunku jak np. tu If Pinb.4 = 0 Then Waitms 1 Incr Setki If Setki = 10 Then Setki = 0 Incr Tys If Tys = 7 Then Tys = 0 End If End If End If Jak już mówiłem wcześniej, jeżeli zaprzęgnąłeś timer to wykorzystaj go do odliczania sekundy wtedy pętla główna zostaje do twojej dyspozycji i bez problemu tam umieścisz...
Do przeładowania Timer'a1 używaj: Int_timer1: Load Timer1 , 62500 [...] Return Mam jeszcze jedną regułę z przeszłości aby nie używać obsługi pamięci EEPROM w obsłudze przerwań (starsze wersje BASCOM'a przy rozbudowanych programach powodowały błędne działanie programu). Stosuję to do dziś dnia i nie mam zamiaru sprawdzać to w nowszych wersjach...
Program wyświetla to co chcesz ale w symulatorze to trwa bardzo bardzo długo. i Teraz ja licznik odlicza 100 impulsów to musisz pozmieniać obliczenia. Podczas symulacji w warunkach wpisz mniejsze wartości to się szybciej doczekasz tego wyświetlenia na lcd albo zwiększ zmienne ręcznie podczas symulacji. sygnał 125khz do generowania PWM 1,25khz. Nie rozumiem?...
Zrób to tak: [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 4000000 Config Timer0 = Timer , Prescale = 256 'onfiguracja timera, przescaler 256 On Timer0 Odmierz_1s 'włączamy timer0 Dim Licz_8ms As Byte 'definiujemy zmienną pomocniczą Dim Sekundy As Byte Enable Interrupts 'włączamy zezwolenie na przerwanie Enable Timer0 Load Timer0 = 125 'ładujemy...
Dałeś radę - prawie dobrze i nawet powinien działać... chociaż nie do końca jak byśmy tego chcieli ;) Parę moich poprawek: $crystal = 1000000 Config Pind.0 = Input Config Pinb.1 = Output Config Pinb.2 = Output Portd.0 = 1 Portb.1 = 0 Portb.2 = 0 Dim Dioda As Byte Dim Licznik1 As Byte Licznik1=0 Dioda = 0 '------------ Do Waitms 10 If Dioda > 0 Then...
To Ci będzie sterować kolejno czterema diodami na pinach od B0 do B3. Zalecam wnikliwą analizę, zanim zalejesz mnie pytaniami :) Timery zawsze rób na odliczanie w dół do 0, w przeciwnym wypadku po wpisaniu nowej wartości w trakcie odliczania możesz mieć niezły kwas - pomyśl dlaczego :) Pozdrawiam [syntax=basic4gl]$regfile "m8def.dat" $crystal = 8000000...
Moim zdaniem koncepcja powinna być taka: 1. Obsługa przetwornika analog-cyfra. Na początek dobrze żebyś umiał dobrze zmierzyć liczbę impulsów. Nie wiem dokładnie jaka jest specyfika Twojego sygnału, jaką amplitudę mają owe szumy, skąd się biorą i czy nie warto by ich po prostu potraktować filtrem dolnoprzepustowym, a jeśli mają odpowiednio niską amplitudę...
Może: Licz: If Co_robic = 0 Then 'Odliczanie przerwy Incr Licz_przerwe If Licz_przerwe > 1000 then Licz_przerwe = 0 Co_robic = 1 End If Else Incr Licz_impulsy If Licz_impulsy > 4 Then 'Odliczanie okresu przebiegu (4 - okres = czas 4 przerwań Timera) Toggle PortD.4 Incr Licz_przerwe 'Odliczanie ilości impulsów (10/2 = 5 impuslów)...
Witam! Jestem początkującym programistą i chciałbym zrobić sobie zegarek na LCD. Napisałem kod w BASCOM z wykorzystaniem TIMERA1 i wewnętrznego oscylatora, ale on się śpieszy. Nie mogę wcale ustawić aby dokładnie odliczał jedną sekundę. Czytałem w internecie, że do tego trzeba wykorzystać TIMER2 i zewnętrzny kwarc zegarkowy 32,768kHz, ale ja mam problem...
Aby ten program, który napisałem zadziałał, trzeba urchomić dwa Timery. Timer0 do odliczania 100 milisekund a Timer1 do odliczania 1 sekundy. Albo tylko 1 timer cyklicznie co 100 ms i liczymy do 10... ;)
W helpie BASCOMA jest wyraźnie napisane, że funkcja GETRC5 korzysta z TIMERA 0, wiec odliczanie czasu zrealizuj na innym timerze, tak najprościej i najszybciej.
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...
A żeby odliczał Ci ładnie 5 minut dobierz odpowiedni prescale i ustaw odpowiednią wartość timera na początku odliczania. Jak to wszystko policzyć znajdziesz na forum.
Problem rozwiązany, odliczanie zrobiłem za pomocą komendy "incr" , timerów i przerwań/
kolega juz napisał ze stosował klika kwarców po za tym do doliczania czasu w bascom słuzy clock a nie odlicza sie czas za pomocą timerów (duzo bardziej niedokładny pomiar)
z tego co wiem to delay to komenda to odliczania czasu w mikrosekundach, a do dokładnego odliczania czasu należy używać funkcji Timer.
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ć...
Z tego co wiem to bascomowe procedury LCD odliczają opóźnienie potrzebne wyświetlaczowi przy pomocy tego timera. Spróbuj zmienić timer albo poszukać w helpie bascoma.
Spróbuj zrobić tak Co4ms: 'procedura obsługi przerwania od Timera T/C0 wykonywana co 4ms Timer0 = 6 'załaduj do Timera0, żeby zliczył 250 (=256-6) impulsów Incr Licznik If Licznik = 6 Then 'zmienna Licznik liczy do 6 aby Licznik = 0 'sprawdzanie stanu przycisku następowało If Pind.0 = 0 Then 'co ok.24ms If Pomoc = 1 Then 'jeśli zmienna Pomoc...
Zmieniłem na timer1, teraz mam krzaki na lcd :D I na nic nie reaguje. Dodano po 4 krzaków już nie ma(nie zmieniłem timera w jednym miejscu), ale dalej nie odlicza
[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...
Ok coś tam rozumiem ale mam jeszcze taki problem albo prośbę bo nie wiem jak ustawić rejestry w attiny13 Tccr0a Tccr0b Admux Adcsra Adcsrb jakbym chciał pwm 8 bitowy (attiny13) z max częstotliwością tj chyba FAST PWM na pwm0a i pwm0b czyli 9600000/256=37500Hz przy działającym ADC. Reszta ustawień zostaje tak jak jest. To już będzie wszystko. Zacznij...
Zapakować czy na miejscu ? ;) A poszukać nie łaska ? ;) : http://www.elektroda.pl/rtvforum/topic19... http://www.elektroda.pl/rtvforum/topic17... Sio do czytania... ;)
Użyj wejścia ICP - wtedy zbocze zgłasza przerwanie i jednocześnie zatrzaskiwana jest zawartość timera. Odejmując dwie takie wartości masz długość impulsu, musisz jedynie zmieniać zbocze, na które reaguje ICP.
Jak masz ustawiony Int RC osc . to się nie dziw, że źle liczy czas. Daj kwarc, ustaw CKSEL=1110 albo CKSEL=1111 (Ext Crystal/Resonator High Freq). SUT (Start Up Timer) wybierz jakiś dłuższy czas dla startu.
Podaje program z komentarzem. ............ Ps. Nie ładowałem do licznika wartości bo potrzebuje dwóch pełnych przeładowań. W programie jest zupenie nie ważne ile tych przepełnień wystpuje; istotne aby rachunek odmierzanych odcinków czasu był zgodny z zamierzonym. Skoro jesteś zmuszony zliczać przepełnienia (co jest rzeczą absolutnie normalną), więc...
Witam Piszę program (bascom) i nadziałem się na problem z którym nie mogę sobie poradzić. Timer 1 pracuje jako zegar i po spełnieniu warunku , ma załączyć przekaźnik który ma być załączony na czas_pracy i po odliczeniu czasu pracy ma wyłączyć się na czas przerwy i zablokować włączenia przekaźnika na ten czas. Tak w skrócie: kod : $regfile = "m8def.DAT"...
Witam Użycie funkcji "waitms" zawsze spowoduje, że program zostaje zatrzymany na ten czas i nic innego nie realizuje - tak działa ta funkcja. Należy unikać tej funkcji i jej podobnych (wait; waitus). Zamiast tej funkcji należy użyć odliczania czasu przez "Timer".
Witam, tworzę sobie mały licznik w Bascomie, wszystko ładnie mi już odlicza, proszę tylko o małą poradę - w jaki sposób za pomocą dwóch przycisków (+ i -) regulować szybkością odliczania liczby? Teraz posługiwałem się Do For Licznik = 0 To 9 Print Licznik Waitms 500 Next Loop teraz jak wykonać regulowanie czasu przerwy - czyli prędkości odliczania?...
Pewnie ze ktoś to testował i nawet działa :) a dokładnie to odliczasz sobie czas na timer_ku i jak sie odliczy to odczytujesz dane z ds-a
odliczać timer timer odliczać odliczać bascom
volvo silnika pomierzyć głośniki membrana latać
saeco aulika tauron dodatkowe opłaty
Lodówka Polar TS136 nie wyłącza się - termostat działa bez przerwy Pin 4 RA3/MCLR/Vpp w mikrokontrolerze PIC12F1571