Uruchomić timer w trybie CTC. Tryb CTC [syntax=vbnet]CONFIG TIMER1 = ..... CLEAR TIMER = 1[/syntax]
Wojtek - wchodzisz tutaj: [url=http://www.frank-zhao.com/cache/avr... z kalkulatorem 16MHZ z preskalerem 1024 oznacza że: - 1 sekunda nastąpi po 15625 cyknięciach timera - przerwanie następuje przy przepełnieniu jeśli wybierzesz OVERFLOW, ale może tez nastąpić przy COMPARE, od tego zależy jaką wartość wpiszesz do timera (czy odejmiesz...
Załóżmy że chcesz uzyskać 100Hz. Procesor kreci się na przykład 8MHz. Timer napędzany jest sygnałem takim jak procesor, ale można ten sygnał podzielić tak żeby, na przykład co 1024 takty procesora do Timera trafiał jeden takt. Taki podział uzyskuje się za pomoca preskalera. Teraz wiadomo że Timer jest już taktowany wolniej bo co 1024 takty z 8MHz, ale...
A może wyłumaczyć mi ktoś tak jaśniej niż whelpie bascoma ;) co to jest ten prescaler i co on dzieli. Może tak po kolei jak twój program widnieje: 1. Jeżeli PORTB jest przeznaczony do obsługi LCD to nie konfiguruj go w ogóle w stylu jaki podałeś w pierwszym poście. Config Portb = &B11111111 : Portb = &B11111111 ===> źle!!! Może to powodowac zakłócenia...
. Zamierzam zrobić tak by mogli wprowadzić korektę (jeśli będzie potrzebna) i zapisać w eeprom. czy to dobry pomysł? Jakoś tak; $Crystal=12000000 Config Timer1 = Timer , Prescale = 8 On Timer1 Inter_1mS Inter_1mS: Counter1 = Counter1 + Licznik (64036 - wychodzi z obliczeń, że da to 1ms) /tu odliczę sobie 103/ Błednie to rozumujesz, albo błednie podałeś...
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...
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...
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...
Lecz zrobiłem sobie testy: Że na wyświetlaczu wyświetlam wartość B, i jak się okazało, jeśli zamienię Config Timer0 = Timer , Prescale = 1 na Config Timer0 = Timer , Prescale = 8 to wartość B zmienia się szybciej! Dlaczego tak się dzieje? Może dlatego że jest jest prescale =1 to przerwanie jest wykonywane co 32us czyli w czasie tego waitams 20 trafia...
POWERSAVE (ATMEGA88) This mode is identical to Power-down, with one exception: If Timer/Counter2 is enabled, it will keep running during sleep. The device can wake up from either Timer Overflow or Output Compare event from Timer/Counter2 if the corresponding Timer/Counter2 interrupt enable bits are set in TIMSK2, and the Global Interrupt Enable bit...
OPIS FUNKCJI LOAD Action Load specified TIMER with a reload value. . . . It will do the calculation. (256-value) So LOAD TIMER0, 10 will load the TIMER0 with a value of 246 so that it will overflow after 10 ticks. TIMER1 is a 16 bit counter so it will be loaded with the value of 65536-value. Czyli u ciebie ładuje 65536 - 65436 = 100 Przepełnienie właśnie...
Co zrealizować? Programowe zliczanie impulsów? Ustawiasz timer tak, żeby generował przerwanie co 100 us, sprawdzasz stan portu, robisz xor z poprzednim stanem i testujesz, które bity są ustawione - ustawiony, znaczy zaszła zmiana stanu, czyli inkrementujesz odpowiednią zmienną.
Zawsze jak wchodzisz w przerwanie np.On Timer lub w podprogram sub procesor odkłada zawartość pewnych rejestrów na stos (co zajmuje mu ileś us) a po przerwaniu (lub sub-ie) zdejmuje ze stosu (co znowu zajmuje czas). Rachunkowo wygląda wszystko dobrze w programie-ale tylko gdy procesor chodzi z nieskończoną prędkością. A chodzi ze skończoną. A-w tych...
Ten sam kod, który zaprezentowałem w pierwszym poście , natomiast przerwanie wywołane już na nodze portb.0 i działa zmienna nie jest nadpisywana. Cała reszta kodu bez zmian poza zmianą przerwania. Przerwania skonfigurowane prawidłowo. Moze przerwania masz skonfigurowane prawidlowo... ale..... Czy mozesz wyjasnic w jakim celu, w obsludze przerwania...
Ciekawe jest to widać w twoim profilu (Pomógł: 79927) :P ale do rzeczy. Według mnie coś takiego można zrealizować w następujący sposób: - konfigurujesz przerwanie zewnętrzne żeby było wyzwalane przerwanie zboczem opadającym, rosnącym etc. - w tym przerwaniu uruchamiasz timer który zlicza sobie impulsy - jeżeli zliczy określoną ilość impulsów to wykonujesz...
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ę...
Program zajmuje 50%. Może i jest źle napisany ale działa.. Ja bym to stwirdzenie troche skorygował; Program działa tak jak jest napisany!... bo - "Jest jeszcze jeden problem." Co jakiś czas temperatura podskakuje o 10 stopni a czasami nawet do 200 podskoczyło co spowodowało zbędne załączenie przekaźnika. Z czym jest problem? Popatrz na pracę timera0,...
Witam Jak wielu spotkałem się z problemem problemem kłopotliwej obsługi pilota z RC5. Po poszperaniu w necie wpadłem na http://www.elektroda.pl/rtvforum/topic20... ten temat. Jak się okazało wszystko na tym programie pracowało, ale nie zawsze. Kłopotem było napisanie programu "pod pilota". Oczywiście pochwała dla Sabotaz'a który problem "ruszył"...
Z dwoma bajtami uC i Dallas w 5ms wyrobią się spokojnie. Problemem jest brak synchronizacji pomiędzy przerwaniami generowanymi przez Timer a funkcją Waitms. Ponieważ przerwanie występuje teraz co 5ms to można w nim ustawić flagę że własnie się zakończyło. Wtedy w pętli głównej możesz sobie spokojnie liczyć te flagi. 50x 5ms = 250ms co bardzo tu pasuje....
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...
Robi się to prosto na wejściu ICP Atmegi, mierzysz czas pomiędzy kolejnymi zboczami, raz jest opadające, raz narastające itd.. potem to tylko interpretacja wyników, liczenie bitów i po odliczeniu 64 bitów z transmitowanych 66, bo dwa ostatnie dla uproszczenia procedury pomijasz. wyświetlasz na LCD lub wysyłasz po RS232 do komputera, a tam wyświetlasz...
nie wiem czy o to chodziło bo nie mam na czym uruchomić tego programu (tzn. mam Bascom ale nie mam zestawu '51), ale wg mnie dopiero ten program zadziała: $crystal = 16000000 '$default Xram $large Dim Cyfra(12) As Byte Dim Jedn_sekund As Byte Dim Tempo As Byte Config Timer0 = Timer , Gate = Internal , Mode = 1 Th0 = &Hd8 ' Tl0 = &Hd7 ' =10025 cykli...
łatwiej się już chyba nie da. Sorki, ale ja bym raczej powiedział, że: "JUŻ GORZEJ SIĘ NIE DA :(" Co to za rozwiązanie gdzie w środku siedzi jeszcze obrzydliwy Wait !!! brrr ale żeby nie być gołosłownym, który tylko krytykuje.... Ok, panowie - widzę, że wasze zmagania spełzają na niczym, pokażę wam więc jak się powinno podchodzić do programowania....
http://obrazki.elektroda.pl/7329866000_1... Miernik częstotliwości o całkiem niezłych parametrach, bo potrafiący mierzyć częstotliwości od 1Hz do 10MHz (9,999,999Hz) z rozdzielczością 1Hz w całym zakresie. Idealny do generatorów funkcyjnych lub jako zwykły miernik. Do tego tani i prosty w wykonaniu, z ogólnodostępnych części, a małe wymiary...
(at)stozek - normalnie w Bascom nie jest potrzebna komenda Start Timer0 bo jest on uruchamiany od razu podczas konfiguracji. Używa się tej komendy tylko jeśli poprzednio zatrzymałeś Timer poprzez Stop Timer0. Rozumiem, że zatrzymujesz timer. Tak więc zatrzymywanie timera to zabranie mu źródła taktowania. Bascomowe komendy moża wiec rozumieć tak: Start...
Rozumiem, że można timerem obsłużyć procedurę programowego pwm, ale i samo miganie Led, czylindodawanie/odejmowanie zmiennych odpowiedzialnych za jasność i to będzie sobie działało niezależnie od tego co w pętli głównej, czy tak? Dokładnie. Czyli timer generuje np. 1000 przerwań/s, tam sobie inkrementujesz/dekrementujesz zmienne, robiąc programowy...
(...) żdy zasilany z osobnego źródła i odseparowany transoptorami PC817. Ze względu na ich szybkość oraz niską wartość prądów je sterujących 1mA zegar musi być obniżony do 10KHz ma. Chcę zrezygnować z polecenia: waitus 100 w zamian zrealizować to w obsłudze timer0 a w główną pętle przeznaczyć na inne cele. Rozumiem, że chcesz optymalizować swoje oprogramowanie...
http://obrazki.elektroda.pl/9838687700_1... Trochę z obawą prezentuję kolejny już na elektrodzie sterownik oświetlenia, no bo ileż tego już tutaj było? A jednak nie znalazłem rozwiązania mnie zadowalającego, dlatego też powstał niżej prezentowany układ, powstał ponieważ klasyczne lampy z czujnikami ruchu mają pewną zasadniczą wadę:...
Witam. W pewnym sofcie dla Atmega16 wykorzystałem już: - Timer1 (16 bit) do odliczania 0,0001s odcinków czasu - Timer2 (8 bit) jest wykorzystywany przez odbiornik podczerwieni (instrukcja getrc5) Timer 0 niby jest wolny, ale nie wiem / nie jestem pewien czy nie jest on wykorzystywany przez jakieś używane przeze mnie instrukcje (np. print dla sprzętowego...
Nie znam się zbyt na Bascom, musisz sobie doczytać w Helpie, jakimi słowami się ustawia tryb CTC (Clear on Timer Compare) w tym liczniku, Przerwanie nazywać się chyba będzie "On Compare3" or sth.
$crystal = 12000000 Config Timer0 = Timer , Mode = 1 , Gate = Internal Load Timer0 , 50000 ' =50ms On Timer0 Przerwanie Enable Timer0 Enable Interrupts Dim Licz As Byte Licz = 0 do loop Przerwanie: Incr Licz If Licz = 20 Then 'przerwanie co 1s przy kwarcu 12MHz Licz = 0 End If return zachęcam do lektury Bascom College, szczególnie wykładu 3, materiały...
W chwili gdy obsługuje 1-Wire, Bascom ZAWSZE nawet na czas generowania resetu, co trawa ok 500us, później presence, co daje razem ok 800us, zawiesza przerwania. To samo w czasie transmisji danych, transmisja bajtu to ponad 500us zawieszone przerwania. W tym czasie nie wykona się przerwanie od timera, od i cała tajemnica. Ale zabobony. Każdy może otworzyć...
Nie zmienia, bo masz błąd w innym miejscu. Dokładnie to miałem na myśli-że błąd jest gdzieś indziej. Zastanów się, co oznacza nazwa trybu CTC (?) – w ang. jest to ‘Clear Timer on Compare’ (pol. - wyzeruj zawartość licznika/timera, gdy jego zawartość jest równa wyznaczonej z góry i ustalonej, bądź to wyliczonej jakiejś wartości w zmiennej...
Jeśli chodzi o cmd_timeout to chodzi o to, że wejscie RX kiedy pin używany jest przez USART nie jest niczym podciągane. Kiedy jest podłączony do drugiego urządzenia np. procesora lub MAX485 to problemu nie ma bo pin jest podciągany wyjściem TX tego uC lub MAX485. Kiedy jednak odłączysz to na pinie stan jest nieustalony i wpadają na USART śmieci. Ten...
Niestety to nie to ani timer ani pnd.2 hardware jest ok bo bez przerwan dziala
Witam wszystkch. Mam wątpliwości co do odmierzania czasu w Bascom za pomocą Timerów. Sprawa dotyczy procków 51. Proszę o poprawienie mnie jeśli się myle. 1. Timer zlicza w górę od wpisanej wartości do 65535(16bit), Tryb 1. Zadaną wartość ładujemy komendą load timerx, yyyyy 2. Tak więc aby odliczyć 1 sekundę należy np.: 20 razy odliczyć po 50ms więc...
Jeśli pomiędzy przerwaniem od timera a wpisaniem do niego nowej wartości upływa zbyt "długi" czas to może się okazać, że timer zgłosił przerwanie w międzyczasie, które zostanie uwzględnione jeśli zapiszemy Timer1 = Timer1+wartość, a utracone jeśli zastosujemy Timer1 = wartość.
Jakie są założenia co do rozdzielczości oraz stabilności generowanej częstotliwości (jitter) ? Generacje częstotliwości kHz na AVR najlepiej zrobić przez zastosowanie DDS. jeden timer w ctc generuje przerwanie w równych odstępach, resztę załatwia się w przerwaniu (trochę tylko kiepsko bo bascom zmarnotrawi dużo czasu- najlepiej tę część napisać w asm).
OK później zaprogramuje ale wyszło to tak: $regfile = "attiny13.dat" Config Portb.4 = Output $hwstack = 32 $swstack = 16 $framesize = 8 Dim A As Byte Config Timer0 = Timer , Prescaler = 64 On Timer0 Przerwanie Enable Interrupts Enable Timer0 Start Timer0 Do Loop end Przerwanie: Timer0 = 106 Toggle Portb.4 Return
Witam Jestem w trakcie robienia zagara nixie ze strony http://mirley.firlej.org/zegar_nixie Mikrokontrolerem jest Atmega8 a wkład zrobiony na Bascomie. Potrzebuję dodać opcję chwilowego wyłączenia lamp, w celu zabezpieczenia lamp przed zatruciem. Bardzo proszę o pomoc. To kod: '************* Konfiguracja uC ***************** '***************************************...
Witam Szukam i szukam i nie mogę znaleźć odpowiedzi dlaczego poniższy kod nie działa? '[syntax=vbnet] Config Timer2 = Timer , Async = On , Prescale = 128 On Timer2 Sectic Enable Interrupts Enable Timer2 'Config Clock = Soft , Gosub = Sectic [/syntax] Mam klon arduinoMega2560 i dołączony kwarc zegarkowy do TOSC1 i TOSC2,gdy użyję "Config Clock" działa...
Witam Jakoś dziwnie to napisane. Przede wszystkim jak piszę TIMER to nie używam potem OVF1. Jakoś mi to brzydko wygląda choć działać powinno. Skoro chcesz mieć jeden odczyt na dwie sekundy to zrób to zupełnie inaczej. Np. w programie głównym zrób sobie licznik i dla wartości powiedzmy jeden niech wyśle rozkaz do DSa ażeby przetwarzał temperaturę. następnie...
No niestety: zajrzyj do helpa . Dokładniej tu, gdzie jest opisane jak: - skonfigurować timer - włączyć timer - wyłączyc timer - odczytać stan timera Pseudokod: SKONFIGURUJ TIMER ZRESETUJ TIMER DO WLACZ TIMER (tu kod ktory sprawdzasz) WYLACZ TIMER ODCZYTAJ TIMER (tu obsluga wartosci wzietej z timera) ZRESETUJ TIMER LOOP Zeby takie pomiary...
Witam. Można i tak kolego Kuniarz , ja robię to troszkę inaczej . Korzystam z przerwania od porównania wartości dla timera 1 . Przerwanie INT0 staruje timer od zera natomiast przerwanie Compare A załącza triak a Compare B wyłącza impuls bramkowy. Wartość od zera do wartości Compare A to opóźnienie załączania triaka od przejścia przez zero . Natomiast...
Te impulsy wejściowe i wyjście ma być na tym samym pinie ? PD.0? Jeśli nie to ustawiamy przerwanie na INT0 i w obsłudze przerwania zwiększamy zmienną. Jeśli zmienna osiągnie dziesięć ustawiamy wyjscie na stan wysoki. Jednocześnie timer zlicza czas pomiędzy impulsami i jeśeli jest większy niż 60 sekund ustawia wyjście na stan niski. Podumowując: Przerwanie...
Nie chodziło mi o przerwanie od Timera tylko o coś takiego że odpalasz konwersję/pomiar oraz przerwanie kiedy będzie już wynik czyli procesor nie czeka a może w tym czasie zrobić coś innego. Jednak ta funkcja wykonuje się w 107 taktów zegara w 0.01ms więc myślę, że nie masz co kombinować. Lepiej byś napisał co to za procesor i jakie ma taktowanie bo...
Może sie komuś przyda ... działajacy kod sprawdzałem testowalem niby wszystko działa czestotliwosc PWM = 123 Hz $regfile = "m8def.dat" $crystal = 8000000 Config Pinb.1 = Output 'Konfiguracja 4 pinów wyjściowych PWM Config Pinb.2 = Output Config Pinb.3 = Output Config Pinb.4 = Output Dim Wyp(4) As Byte 'zmienne wypełnienia Dim Licz...
[syntax=basic4gl]'KONFIGURACJA PRZERWAN PROCESORA Config Timer0 = Timer , Prescale = 256 Enable Interrupts On Timer0 Odmierz_1s Enable Timer0 Load Timer0 = 144 Odmierz_1s: Load Timer0 = 144 Incr Licz_5ms If Licz_5ms = 200 Then Licz_5ms = 0[/syntax] Jeśli tak napiszę kod w Bascom przy zastosowaniu kwarcu 7.3728 MHz to przerwanie odmierz_1s będzie faktycznie...
nic panowie nie czytacie :P ładuje watrością nie 65000 tylko 55000 a to różnica :) Napisałem ze usiłuję uzyskać przerwanie 10ms przy kwarcu 8MHz w drugim poście. Jeśli chodzi o ustawiania portów itd to pomijam takie rzeczy żeby nie zaciemniać. Z tym że: Panowie na ten moment nie jest to problemem zupełnie ponieważ timer nie odpowiada nawet bez początkowego...
Jeżeli sprawdzasz przycisk podłączony do masy, to czemu przerwanie Timer ma być wyzwalane zboczem rosnącym ? Config Timer0 = Counter , Edge = Rising
Zamiast Config Timer1 wstaw: [syntax=basic4gl]Config Timer2 = Timer , Async = On , Prescale = 128 , Compare = Disconnect , Clear Timer = 0 , Pwm = Off , Compare Pwm = Disconnect[/syntax] Przerwanie nastąpi co sekundę. Później zamiast [syntax=basic4gl]On Timer1 Czas[/syntax] wstaw [syntax=basic4gl]On Ovf2 Czas[/syntax] Powinien działać. No i kwarc zegarkowy...
Wait nie stopuje programu. Program nadal się wykonuje.Piszesz trochę niejasno o tym, że timer wywołuje przerwanie z częstotliwoscią około 400 Hz. Czy to znaczy, że przerwanie wykonuje się około 400 razy na sekundę? Zliczasz coś?
Bascom mnie odrzuca, ale o ile się nie mylę to wykorzystujesz przerwanie z przepełnienia timera. Prescaler dajesz 256, timer jest 8-bitowy, więc daje przerwanie raz na 65536 cykli, czyli zaledwie 122Hz. I to jeszcze dzielisz na poszczególne wyświetlacze - musi mrugać. Zwiększ szybkość odświeżania, np. poprzez zmniejszenie prescalera. Dopiero przy ok....
Timer liczy w gore od 0 do 65535! Zaladuj Timer 65535-6000=59535 i powinno grac. Enable Interrupts Enable Int0 Enable Timer1 Config Int0 = Falling Config Timer1 = Timer , Prescale = 1 On Int0 Przerwanie On Timer1 Opoznienie Load Timer1 59535 Do Loop : End Przerwanie: Start Timer1 Return Opoznienie: Load Timer1 59535 Stop Timer1 Portb.1 = 1 Waitus 40...
A skąd tam Ci się 39 wzięło ??? :!: Sprawdź to: [syntax=basic4gl]regfile "m88def.dat" $crystal = 16000000 '---------------------------------------... Config Timer0 = Timer , Prescale = 64 On Timer0 Ti_prog Const Przerwanie = 231 '16000000/64/(256-25)=10kHz (100us) Counter0 = Przerwanie Enable Timer0 Enable Interrupts Do ' ' Loop End '--------------------------------------....
1. BASCOM 2.0.7.5 2. [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 8000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portd.7 , Rs = Portb.0 Config Timer0 = Timer , Prescale = 256 Enable Timer0 , On Timer0 Przerwanie Stop Timer0 Config Portb.5 = Output : Set Portb.5 'podświetlenie...
Komenda RC5Send jest napisana na podstawie tej noty aplikacyjnej [url=http://www.mcselec.com/index.php?op... #105 - Sending RC5 and SONY IR codes . Timer jest skonfigurowany chyba jako CTC, jeżeli procek posiada drugi kanał dla timera1 to mógłbyś wykorzystać przerwanie TIMER1_COMPB. Można też próbować zmodyfikować...
JacekCz Dzięki ale tam piszą o skomplikowanych rzeczach... A tu prościej już sie nie da: w przerwaniu tylko ładuję timer, zmieniam stan portu i nic więcej... Wygląda na to że ktoś mi tu skraca timer bez mojej zgody? Dodano po 5 (at)niveasoft sparwdzam Twój kod, ale Compare_a i Compare_b są niezrozumiałe dla kompilatora... Dodano po 7 (at)niveasoft...
Chodzi o dowolne przerwanie. Ale najlepiej oczywiście wykorzystać przerwanie od jakiegoś Timera.
Mam taki otóż problem ; Mam pewien program, który działał w urządzeniu na Atmedze 8 P 16. Teraz przerobiłem sobie (znaczy zrobiłem drugie...) z użyciem AT90PWM3B - oczywiście pinologicznie tak samo, żeby nie przerabiać programu. No i właśnie zmieniłem w Bascomie chip na ten AT90PWM3B, chcę skompilować, a ten mi tutaj wywala pretensje przy ustawianiu...
Można również ustawić sobie taktowanie na 8MHz, następnie Timer0 ustawić z prescalerem 8 i generować przerwanie co 58us (Load Timer0, 58). Dzięki temu przy zliczaniu czasu trwania echa powrotnego mamy od razu wynik w centymetrach (58us = 1 przerwanie = 1cm). Pozostaje teraz tylko zliczać ilość przerwań timera0. I to chyba najprostsze rozwiązanie tam...
Tylko dlaczego /128 ? Bo 32768kHz/128=256, co powoduje że impuls będzie generowany 256 razy na sekundę, a co tyle przepełnia się ośmiobitowy timer, więc przerwanie zostanie uruchomione co równą sekundę :) Co do przebiegów - też pewnie wina programu, timer nie został prawidłowo skonfigurowany i nie uruchamia kwarcu Dodano po 3 Jeszcze po "Enable Interrupts"...
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...
Małe sprostowanie obliczenia były dla zegara 8MHz. Do autora tematu: nie ma możliwości abyś uzyskał przerwanie co 180s ! Chyba że użyjesz kwarcu 32.768kHz co jednak znacznie spowolni procka. Proponuję abyś zrobił tak jak radzi kolega Wojtek75.
Po to jest właśnie timer i przerwanie by w stałych odstępach czasu wykonać jakąś czynność. Co niby ma kwarc do przerwań? No a te stałe odstępy czasu trzeba by jakos mierzyć i zdawało mi sie, że do tego jest potrzeby m.in kwarc, ale to jeszcze musze się poduczyć ;). Te wyświetlacze są wolne, a BASCOM czeka na odebranie każdego znaku. Bacom chyba bardziej...
A ja z kolei znalazłem gdzieś taki programik: Enable Interrupts Config Timer0 = Timer , Prescale = 64 On Timer0 Tim Enable Timer0 Dim M As Byte Do Loop End Tim: Timer0 = 6 Incr M Return Jeśli dobrze licze, to przy kwarcu 4MHz przerwanie będzie wywołane co 4ms, zgadza się? Jak to wszystko przeliczać na Hz? Pozdrawiam
Liczenie impulsów samo w sobie jest bezsensowne.. jak już to liczy sie impulsy przez określony czas albo podczas jakiegoś warunku itp, możliwości jest tak dużo że bascom niezostał w to wyposażony (bynajmniej ja tyle wiem). impulsy najłatwiej można zliczać za pomocą zewnętrznego przerwania, przez czas działania timera, timer uruhomić, uruhomić przerwanie,...
Po pierwsze, możesz jak najbardziej korzystać z timera (a właściwie to powinieneś, jeżeli chcesz pomniejszyć koszta o zakup zewnętrznego RTC). Po drugie - możesz kalibrować, możesz to robić długo i bezskutecznie. Po drugie i ćwierć - Wewnętrzny oscylator nie za bardzo nadaje się do tego celu. "Nieco" mu się zmienia częstotliwość wraz z temperaturą i...
Dim Licznik As Byte Enable Interrupts 'Przerwania odblokowane '---------------------------------KONFIG... TIMER 0---------------------------------------... Config Timer1 = Timer , Prescale = 1 Counter1 = 59536 'Wywołąnie co 1ms Enable Timer1 'Odblokowane przerwanie TIMER 1 On Timer1 Procedura_w_przerwaniu_timer1 Procedura_w_przerwaniu_timer1:...
Wyjątkowo zbałaganiony program. Nie wiem czy Bascom poradzi sobie z tym gosub Przerwanie. Traktujesz to jako procedurę obsługi przerwania, więc na końcu w asm będzie reti, a jednocześnie w programie potraktowałeś to jako zwykły podprogram. Wiele kompilatorów tego nie pozwoli zrobić. Popraw to - przecież zamiast tego Gosub przerwanie wystarczy wpisać...
Witam Mam pewien problem.Potrzebuję podczas odliczania Timera0 wykorzystać przerwanie Int0. Sprawa wygląda tak, rozpoczynam odliczanie timera0 do momentu pojawienia się sygnału narastającego na wejściu Int0 i w tym momencie muszę przerwać Timer0 i odczytać jego wartość. No i właśnie tu pojawia się problem. Zamieszczę moje wypociny: Config Timer0 = Timer...
Dzień dobry, Znalazłem kod źródłowy sterownika pieca C.O. w internecie i chciałbym zrozumieć ideę działania TIMERA0 w Bascomie na podstawie poniższego kodu. Czy ktoś z Was może mi wytłumaczyć jak to liczyć? Jak dopasowywać obliczenia do innych rezonatorów kwarcowych. Czytam helpa i nadal nie mogę tego pojąć. Proszę o wyrozumiałość. Na początek zapytam...
Witajcie ! Mam taką zamotaną sytuację. Na początek kod, albo raczej jego istotne fragmenty: [syntax=basic4gl] $regfile = "m32def.dat" $crystal = 16000000 $hwstack = 128 $swstack = 128 $framesize = 128 Config Timer1 = Timer , Prescale = 8 , Clear Timer = 1 , Compare A = Toggle Enable Interrupts Start Timer1 On Oc1a Timer1_isr Enable Timer1 Ocr1a = 50...
Witajcie. Robię malutkie projekty korzystając z Bascoma. Do tej pory wyłącznie na 2313 i jakoś sobie radziłem. W nowym projekcie postanowiłem zastosować Atmega8535 i od razu natrafiłem na problem. Mianowicie po włączeniu przerwań od Timer0 nic nie działa jak powinno. Pomimo tego że procedura obsługi wyświetlacza jest wołana z obsługi przerwania na wyświetlaczu...
Dzięki wielkie !! Pomogło , aczkolwiek nie rozumiem dlaczego bez tego też czasem działało zależnie od kolejności wpisów ? Teraz działa OK bez względu na kolejność wpisów, i reszty (czyli początku programu w którym pewnie jest mnóstwo innych błędów :-) ) [syntax=vbnet] $regfile = "m2560def.dat" ' specify the used micro $crystal = 16000000 ' used crystal...
Nadal nie rozumiem kwestii konfigurowania timera tak aby zliczał tyle ile chcę. Poczytałem parę wątków i nadal nie wychodzi. Aktulanie na Atmega16 z taktowaniem 4MHz staram sie uzyskać przerwanie co 100ms. Dla testów wyświetlam zmiany na LCD [syntax=basic4gl] $regfile = "m16def.dat" $lib "I2C.LBX" '$lib "mcsbyte.lbx" $lib "Ds1307clock.lib" $crystal...
Witam Mam zegarek/budzik z wyświetlaczem LED ( dwukolorowy ). Zegarek generalnie działa. Ale mam problem z sterowaniem jasnością. Wiadomo, że robi się to tak, że jasność zależy od częstotliwości odświeżania. Tutaj o jasności wyświetlania ma decydować zmienna jasnosc. . jasnosc : [syntax=vbnet] '************ Timer0 1000 = 1 sekunda, 10000 = 10 sekund,...
nie znam bascoma, ale sprobuj tak: Przeint0: If Flaga_int0 = 1 Then Start Timer1 Flaga_int0 = 0 'Timer1 = 0 Else Stop Timer1 Wynikczas = Timer1 Timer1 = 0 Flaga_int0 = 1 End If Może kawałek kodu z C coś ci pomoże: // timer tryb cnt, przerwanie co 50us ASSR=0x00; TCCR2=0x0a; TCNT2=0x00; OCR2=0x31; interrupt [TIM2_COMP] void timer2_comp_isr(void) { ++czas;...
po czy wnioskujesz że przerwanie nie występuje. jeśli nie dostajesz sygnału do kompa przez rs-a to może masz problem z rs'em a nie z timerem. spróbój jeszcze coś takiego $crystal = 16000000 Config Timer0 = Timer , Prescale = 8 Config pinb.0 = Output Timer0 = 5 On Timer0 Przerwa Dim G As Integer Enable Timer0 Enable Interrupts print "Hello"...
Poczekam aż umieścisz jakiś kod bo już jeden post wywaliłem do kosza bo zamieściłeś ten drugi kod. Usuń tę linię z dyrektywą $prog bo oznacza zewnętrzny sygnał zegarowy i włączony JTAG a to na pewno nie to na czym Ci zależy ;) Enable Timer1 oznacza "włącz przerwanie od przepełnienia się Timer1" a nigdzie nie obsługujesz tego przerwania. Do niczego Ci...
W pseudokodzie: 1. Ustaw timer na częstotliwość powiedzmy ok. 100 kHz, przypisz do niego przerwanie i aktywuj przerwania 2. Stwórz dla każdego kanału zmienną typu PWM_CHn W przerwaniu od timera 1. Zmienna COUNTER = COUNTER + 1 2. dla każdego kanału 0...n: Jeśli COUNTER < PWM_CHn to zapal diodę, w przeciwnym razie zgaś 3. Ewentualnie jeśli chcesz...
Chcę uzyskać w timerze0 przerwanie co 4 ms mam oscylator 4 Mhz na attiny2313, programuje w bascomie. Robie to tak Config Portb = &B11111111 Portb = &B11111111 Config Portd = &B1111100 Portd = &B0111111 Config Timer0 = Timer , Prescale = 64 Enable Interrupts Enable Timer0 On Timer0 Przerwanie Dim Liczy As Bit Dim 100ms As Byte Dim Dziesek As Byte Dim...
Ten timer 0 jest raczej nie potrzebny. Za bardzo komplikujesz sprawę. Zrób tak: $crystal = 12000000 Config Timer1 = Timer Gate = Internal Mode = 2 Config Timer0 = Tiemr Gate = Internal Mode = 2 Enable Timer1 Enable Timer0 Enable Interrupts Dim P1 As Byte Dim P2 As Byte pwm: // to sie robi jak przerwanie z timera przychodzi inc P1 // inkrementacja...
Witam, Z racji ograniczonej ilości portów, zostałem zmuszony do multipleksowania dwóch wyświetlaczy LED 7 segmentowych poprzez rejestr 74HC595. Na początku dla testów napisałem krótki programik. Program działa, lecz ......... Myślę sobie: poczekam parę milisekund po każdej cyfrze. Wstawiłem w pętli głównej waitms 1 i jakie jest moje zdziwienie że po...
Poruszę tylko 2 sprawy: 1)Jeżeli do odmierzania 1 s użyłeś Timer2 "napędzany" kwarcem 32768Hz , to po kiego grzyba procedurę odliczania sekund podkładasz pod przerwanie INT0 :?: On Int0 1s Zamiast włączać przerwania INT0 , włącz przerwania Timer2. On Timer2 1s Config Timer2 = Timer , Async = On , Prescale = 128 Enable Time2 '... 2)Myślałem, że już widziałem...
witam mógłyś się wyrazić nieco jaśniej :D "w każdym z nich przerwanie od timer0"... licznik po przepełnieniu wygeneruje przerwanie bezwzględu na to gdzie w danej chwili jest główny program (jeśli jest odpowiednio skonfigurowany) opisz dokładnie co chcesz zrobić :) pozdrawiam Dodano po 1 hmmm chyba załapałem o co chodzi :D pomyślmy... Dodano po 24 Bascom...
Witam, Mam problem z pomiarem czasu trwania impulsu. Próbowałem różnych sposobów, siedzę już nad tym 3 dzień i nic mi nie wychodzi. Na wejście INT0 atmegi32 podaję sygnał np. 30Hz i wypełnieniu 15%. Sygnał jest stabilny więc tutaj problem odpada. Potrzebuję zmierzyć czas trwania stanu wysokiego. W programie który stworzyłem na wyświetlaczu wyświetla...
Witam Chciałem do kuchni wstawić czujnik PIR, ale z dodatkową zaletą, czyli stopniowym zwiększaniem i zmniejszaniem PWM, dodatkowo jeśli podczas zmniejszania PWM nadejdzie przerwanie INT1 od czujnika PIR, to program ma przestać zmniejszać, tylko zacząć zwiększać i to nie od zera, ale od wartości na której "zastało" go przerwanie INT1 od PIR. W sumie...
Z przerwaniem INT0 sobie poradziłem bez problemu (zlicza i to nawet szybko:), ale przykład z Timerem a'la Counter'em wogóle nie gada. Nie wiem dlaczego. Timer ustawiłem na Internal. Impulsy podawałem na P3.2 i P3.4 ale nic nie dało. próbowałem też włączać i wyłączać przerwanie INT0 razem z Timer0 ale nic się nie zmieniło. Może to już nie istotne, bo...
Zastosuj przerwanie od Timer'a. ps. Nie ma czegoś takiego jak ATTiny16. Chodzi Ci o 15 czy 26 ? Tak na szybko (sprawdź): $regfile = "attiny13.dat" $crystal = 1000000 'częstotliwość taktowania $hwstack = 20 $swstack = 10 $framesize = 10 Const Div_t0 = 125 '1 ms Config Timer0 = Timer , Prescale = 8 On Timer0 Int_t0 Enable Timer0 Enable Interrupts...
Kamyczek w tym kraju się już nikomu nic nie opłaca :D Wiem że można kupić gotowe, ale ... Po pierwsze, primo - wypełniam sobie wolne chwile Po drugie, primo - mogę poćwiczyć programowanie i ile się przy tym nauczę to moje Po trzecie, primo - satysfakcja że zrobiło się to praktycznie samemu ( z drobną pomocą kolegów z elektrody ) jest bezcenna ... i...
Sprawdzając stan tego pinu w przerwaniu, niestety z wykorzystaniem timera. Tylko po co skoro Pin Change jest dostępny w każdym trybie uśpienia a timer praktycznie w żadnym. :arrow: seradam, uruchamiasz przerwanie od Pin Change - poprzez wpis do PCICR =&B00000111 usypiasz układ i czekasz na zgłoszenie przerwania od PCIFR. Bardzo ciekawe :) A czy przerwanie...
Chodzi o te zaznaczone ustawienia z obrazka. Są wstawiane jako domyślne jeśli się ich nie wpisze do kodu. Chodzi o to, że kiedy Bascom skacze do jakiegoś Sub to odkłada na stos te wcześniej omawiane dwa Bajty. W takim Sub już może tego nie widać, ale tez skacze np. do procedury odczytu czujników 1Wire. To już np. cztery bajty a w tym momencie nadchodzi...
Parę uwag: Disable Urxc - zbędne, po co? If Kod_znaku <> 13 Then Enter = 0 If Kod_znaku = 13 Then Enter = 1 Po co dwa sprawdzenia? Bascom jest okrutnie wolny i bez tego. Ale tak naprawdę to chodzi o to: Waitms 20 Co 3 dni piszę tutaj to samo zdanie: "żadnego oczekiwania w obsłudze przerwania!" Skoro specjalnie blokujesz przerwanie na 20 ms, to...
Proponuję wsadzić odświeżanie zegarka w przerwanie od timera. Cykanie przekaźnika może być w pętli głównej. Można uznać że timer to będzie twój drugi wątek (w dużym uproszczeniu). Oczywiście trzeba po eksperymentować z częstotliwością przerwań timera (odsyłam do helpa) tak żeby się nie gryzło. Myślę że 3-5 odświeżeń zegara na sekundę wystarczy. No chyba...
W przerwaniu robisz Enable Interrupts zanim włączysz Timer0, co może powodować problemy. Poza tym procka taktujesz 12MHz. A Timer0 z preskalera 1024. Czyli Timer0 dostaje 11718.75Hz. W przerwaniu zliczasz do 15000. I to Ci daje okres jak mówisz około 4 sekundy. Czyli na sekundę jest 3750 przerwań. Co oznacza że pomiędzy przerwaniami Timer0 zlicza do...
Witam, nie mogę sobie proradzić z obsługą timer0 w przerwaniu. Zamiast wł/wył port po początkowym opóźnieniu co 0,5s ustawia się w stan wysoki i tak sobie świeci w nieskończoność. Co jest nie tak? Kod poniżej: $prog &HFF , &H73 , &HFF , &H00 $regfile = "ATtiny13.DAT" $crystal = 128000 Wyj Alias Pinb.1 'wyjście Config Wyj = Output 'ustawienie...
Dzieki JollyRoger! Zrobilem to w ten sposob: Dim A As Byte 'Zmienna pomocnicza do wypelnienia Dim Wyp1 As Byte 'Wypelnienie kanalu 1 0..100% Dim Wyp2 As Byte 'Wypelnienie kanalu 2 0..100% Config Timer0 = Timer , Gate = Internal , Mode = 2 'zdefiniowanie timera jako 8-bitowego timera z przepelnieniem On Timer0 Pwm Load Timer0 , 70 'Gdy Timer osiagnie...
Witam potrzebuje zrobic program ktory bedzie w odpowiednich odstepach czasu wywolywal przerwanie i w tym przerwaniu bede sobie mogl wykonywac dalsze funkcje problem w tym ze nie dizala mi taki najbardziej podstawowy program Symuluje to w proteusie i nie chce zapalac pinub.1 chodzi mi o taki test powinna sie pojawic 1 na pb.1 przy wywolaniu przerwania...
Dzięki zbig_wwl. Pokombinuje z tym stosem. A co do PWM to faktycznie nie używam go bo i po co:) Pilot ma następujące zadanie: Po uruchomieniu włączone zostaje przerwanie int0. Po wciśnięciu przycisku zewnętrznego (dodane obwody eliminujące drgania styków) program wyłącza przerwanie int0, generuje zmienne na podstawie zawartości timera0. Następnie odblokowywane...
bascom przerwanie timer przerwanie bascom bascom przerwanie
volvo silnika historia połączenie yihua nadmuch
ECOSTIM ultradźwięki – ciągły sygnał dźwiękowy, alarm, brak sprzężenia, diagnostyka Mercedes Sprintshift samoczynnie przełącza na manual – diagnostyka, typowe usterki, naprawa