Wrzuć wszystko do programu głównego tzn. przyciski ( ustawianie czasu załączania/wyłączania pompy), sprawdzanie Adc (poziom wody) przeliczanie wartości dla wyświetlacza , a samo wyświetlanie w podprogramie odświezanym co jedną sekundę za pomocą Timer0 . Timer0 dalej dla wyznaczania 1 sekundy. Buzer zrealizuj za pomocą zwykłej zmiennej licznikowej zwiększanej...
Wpisać magiczne "volatile" volatile int sekunda=0;
Absolutnie żadne Start Timer0 nie jest tu potrzebne. Wystarczy, że tak będzie skonfigurowane przerwanie: [syntax=basic4gl]Config Timer0 = Timer , Prescale = 256 On Timer0 Sekunda Const Przerwanie = 131 Counter0=Przerwanie Enable Timer0 Enable Interrupts . . . end Sekunda: Counter0=Counter0+131 . . . Return [/syntax] ...i unikaj jak ognia "drukowania"...
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...
Zmienna licznik powinna być przy inicjalizacji poprzedzona słowem: volatile .
ten poprawiony też nie działa ?? jeszcze zapomniałem aktywować przerwania compare1a ja dodasz Enable compare1a to powinno działać co do twpjego programu to on nieliczył do 15625 tylko do (65536 - 15625)=49911 czyli 3,19 razy dłużej niz powinien czyli jakieś6 z groszem sekund
W trybie 1 jest 16-bitowy, liczy od zadanej mu wartości do 65536, następuje przerwanie od przepełnienia licznika, coś wtedy może zrobić w obsłudze tego przerwania i ponownie zaczyna zliczać od zadanej mu wartości lub od zera jak mu nie zadasz.
zapewne to wina wewnętrznego kwarcu i liczenia zmiennoprzecinkowego. A propos ta obsługa przerwania jest zdecydowanie za długa. I zmiennoprzecinkowe po co? PS. taką metodą RTC nie wyjdzie najlepszej jakości. Timer 2 asynchronicznie z kwarcem 32,786.
timer2 w ciągu 10 minut późni się o jakieś 12 sekund, a timer0 zdaje się nie reagować na wartość początkową wpisaną do rejestru TCNT0 Z zegarem wewnętrznym 12/600 = 2% porównaj z DS. A timer 0 reaguje, tylko Ty nie dostrzegasz różnicy 131 cykli na 10 minut -) Tą wartość to jakby nie tylko raz trzeba było wpisać. Albert
Zastosowałem się do instrukcji i dalej nic mi nie wychodzi.Przepraszam ,że zawracam głowe ale ja dopiero się uczę i to moje pierwsze pisanie. Dodano po 7 Teraz wygląda to tak: $regfile = "2313def.dat" $crystal = 800000 Config Pind.0 = Output Config Pind.1 = Output Config Timer0 = Timer , Prescale = 256 On Timer0 Odmierz_1s Dim Licz_8ms As...
teraz musze jescze przerobić układ aby odliczał mi sekundę Config Timer0 = Timer , Prescale = 64 On Timer0 Sekunda Sekunda: Load Timer0 = 250 Incr Jednostki_czasu If Jednostki_czasu = 250 Then 'mam sekunde Jednostki_czasu = 0 End If tak chyba będzie dobrze?
Witam. Mam pytanie. Jak odmierzyć 1 sekundę przez Timer0 dla określonego kwarcu (np. 18,432 MHz)? Znalazłem pewien temat na elektrodzie ale tam jest opisane odmierzanie 1 sekundy dla Timera1 a o Timer0 jest tylko wspomniane i nic z tego nie rozumiem. Oto ten temat: http://www.elektroda.pl/rtvforum/topic14... Byłbym wdzięczny za pomoc jak to się...
A nie łatwiej jest policzyć DO ilu ma liczyć a nie OD ilu? :) i robić przerwania COMP a nie OVF? Ja tak robię i na kwarcu 4MHz timer1 odlicza sekundy bardzo ładnie. Ale u Ciebie timer1 wydaje się mieć dobrze ustawianą wartość. Przy prescalerze 256 musisz mieć 15625 taktów zegara, aby osiągnąć sekundę. W drugim coś mi nie gra. Odliczasz od 0x0F czyli...
Load Timer 250 pojawił się 2 razy bo pierwszy jest wykonyawny przed wejściem do pętli a następny w pętli. W tym programie jest dodatkowa zmienna Licz_8ms bo Timer0 nie może odmierzyć całej sekundy w jednym przebiegu. Przy użyciu Timer1 i odpowiedniego kwarcu można osiągnąć przerwania co 1 s. Jest to korzystne bo odmierzanie czasu jest nieco dokładniejsze....
Pewnie że nie będzie działać, ustawiłeś Preskaler =256 a więc przy zegarze 16MHz przerwanie od Timer0 będzie pojawiać się z częstotliwością 62500 razy na sekundę. (16000000/256 = 62500). Zalałeś modem zapytaniami o CSQ i biedny nie ma czasu na odpowiedź.
Może dlatego, że Twój program po prostu się kończy w ułamku sekundy? Wiesz co robi procesor gdy skończy się funkcja main()? Albert
To zmienia moją koncepcję :( obecnie mam ustawione tak: Timer1=Timer (odlicza mi jedną sekundę) Timer0=Counter (zlicza mi impulsy). Chciałem dodać do tego programu zegar z datą, ale wydaje mi się że sekunda z Timera1 na kwarcu 4Mhz nie jest zbytnio dokładna. Może jakaś podpowiedź jak najprościej przerobić program żeby mieć ten zegarek? (chciałbym użyć...
Program ma być wykonany jednorazowo po włączeniu zasilania, da sie prościej? [syntax=basic4gl]$regfile = "attiny13.dat" $crystal = 1200000 $hwstack = 16 $swstack = 8 $framesize = 8 Config Pinb.1 = Output 'ST2 Config Pinb.2 = Output 'ST1 Config Pinb.3 = Output 'LED ST1 Config Pinb.4 = Output 'LED ST2 Portb.1 = 0 Portb.2 = 1 Portb.3 = 0 Portb.4 = 1 Config...
Witam. Kolego źle wpisałeś dane to znaczy odwrotnie. A ma być tak: Load Timer0,144 (7372800 / 256) = 28800 28800 / 144 = 200Hz = 5ms 5ms * 200 = 1sek [syntax=basic4gl]Odmierz_1s: Load Timer0 , 144 Incr Licz_5ms If Licz_5ms = 200 Then Licz_5ms = 0 end if[/syntax]
Nie wiem czy dobrze kombinuję: $regfile = "ATtiny2313.DAT" $crystal = 8000000 Config Timer0 = Timer , Prescale = 256 On Timer0 Sekunda Enable Interrupts Enable Timer0 Dim Scnt As Integer Sekunda: Incr Scnt Return Czego tu jeszcze brakuje? Bo w symulatorze nie działa, tzn nie zwiększa zmiennej scnt.
Jak napisac funkcje w AVR dla ATMEGA32 w jezyku C, aby mozliwe było przechwycenie przerwania spowodowanego impulsem zewnetrznym w liczniku TIMER0?? Gdyż dla TIMER 1 ustawia sie bit TICIE1 w rejestrze TIMSK, a dla TIMER0 nie ma tam żadnego takiego bitu?? Jak to zrobić?? A drugie pytanko, czy jest mozliwość uzyskania 1 sekundy na TIMER0??? Dzieki za pomoc!!
Witam W jaki sposób mogę skonfigurowac atmegę 8 aby odbiór rc5 zrealizować na timerze1.Ta timerze 0 mam odliczanie sekund oczywiście wprzerwaniu.Mam skonfigurowane tak: Config Int1 = Low Level , [timer = 1] Config Rc5 = Pind.3 [timer = 1] Enable Int1 Enable Interrupts On Int1 Rc5 Config Timer0 = Timer , Prescale = 1024 Enable Interrupts...
Może źle to ująłem, nic nie robi poza wysyłaniem na UART Brak DS co około sekundę.
Może dlatego, że częstotliwość kwarcu lub generatora wewnętrznego (nie wiem co używasz, sądzę że to drugie) jest niedokładna: http://mikrokontrolery.blogspot.com/2011... Programu nie sprawdziłem, bo z Bascom się nie lubimy :)
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...
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...
Co do przerwań... to chodzi mnie o podawanie sygnału na INT0, czy należy: wybrać typ sygnału zgłaszającego przerwanie (ustawiłem na narastające) aktywowac bit I w rejestrze SREG i ustawić odpowiednią maskę w rekestrze GIMSK, co wszystko zrobiłem. Coś przeoczyłęm? Chyba niepotrzebnie generowałem w rejstr PCMSK... Natomiast co do Timera...to przerwania...
Pozmieniałem troche program ale nie działa prawidłowo prędkość strasznie skacze od 0 do 240 km/h -bo nie zerujesz co 1 sec. licznika impulsów (Timer0), ponadto ,masz zbyt duży błąd zaniżając zakrses zmienmnej "Licz" - as byte Porównaj: $regfile = "2313def.dat" $crystal = 8000000 Config Lcdbus = 4 Config Lcd = 16 * 2 Config Lcdpin = Pin ,...
czytalem ze ponoc na Timer0 pwm-a nie idzie ustawic tak latwo jak na Timer1 - ok a jakbym użył pwm na Timer1 a na Timer0 odliczanie sekund? pojdzie? :D
stmx ...Problem nie polega na odbieraniu danych bo je odbieram bez problemu i wyświetlam na lcd....ale chodzi o to ze po komendzie w nadajniku -Spiout aa, 2 czyli wysłaniu jest komenda WAIT i np niech trwa 10 sekund i te 10 sekund w odbiorniku timer0 nie będzie chodził ...mnie interesuje co to ma ze sobą wspólnego i jak to zniwelować
W sobotę o tej porze mogę się mylić :P W tabelce pisze chyba wyraźnie, że dla tego trybu CTC który ustawiłeś to okres ustala się w OCR1 A i raczej powinieneś wtedy uruchomic przerwanie od OCIE1 A i oczywiście wskazać adekwatny wektor przerwania. https://obrazki.elektroda.pl/2405063000_... Sprawa 1 sekundy jest prosta. (8MHz/256)-1=...
najłatwiej przy T=36 (tzn 4*9) i taki warunek stopu zastosować.. tzn: If T = 36 Then stop timer0 End If p.s. jedno mi niepasuje :) jak na wyświetlaczu może sie pokazać 99 minut i 99 sekund :) przecież minuta ma 60 sekund a nie 100.. łatwiej by było to przeliczyć na sekundy (mój wcześniejszy post) i zatrzymać jeśli T = 5999 (99 minut i 59 sekund)...
Witam Jakiś mały przykład: $regfile = "m8def.dat" $crystal = 32768 Config Timer0 = Timer , Prescale = 1024 Load Timer0 , 32 On Timer0 1_sekunda Config Pind.7 = Input : Set_godz Alias Pind.7 Config Pind.6 = Input : Set_min Alias Pind.6 Dim Sekundy As Byte Dim Minuty As Byte Dim Godziny As Byte Enable Timer0 Enable Interrupts Godziny...
Po pierwsze, timer liczy od 0 do 255, ale to oznacza 256 impulsów pomiędzy przepełnieniami, czyli powinno być 256, a nie 255 * 128us. Po drugie zaokrągliłeś wynik z 32.64 do 32 przed dzieleniem, co w efekcie dało niedokładny wynik ilości przepełnień. W rzeczywistości częstotliwość przerwań można obliczyć dużo prościej: ( 8000000 / 1024 ) / 256 = ok. 30,5176.....
Witam. Możesz zrobić tak: Config Timer0 = Timer , Prescale = 64 Timer0=6 Enable Interrupts Enable Timer0 Start Timer0 On Timer0 zegar Przy takim ustawieniu przerwanie będzie wywoływane dokładnie co 4ms. Zmienną Js zdeklaruj jako Word. A w podprogramie Zegar zrób tak: Zegar: Timer0 = 6 Incr Js If Js = 15000 Then Js = 0 Toggle Portb.0 Toggle Portb.1...
Wspominałeś o książkach, więc w książce Pana Wiązani "Programowanie mikrokontrolerów AVR w j.BASCOM" na str.159 jest przykład odmierzania 1 sekundy.
ach... tak ze sklepu nowy.. dzięki, spróbuję..
Jeśli nachodziłyby na siebie przerwania, to nic byśmy nie mogli odczytać na wyświetlaczu, bo dane byłyby cały czas zapisywane do driver'ów i nie dochodziłoby do końca funkcji, gdzie dane są zatrzaskiwane. Według moich obliczeń, to tak wygląda: mamy kwarc (albo oscylator wewn.) 8MHz, to mamy 8 000 000 cykli zegarowych na sekundę. Przy preskalerze /64...
No to obydwa kontaktrony podepnij do pinów INTx, a później rób takie coś: 1)wyzeruj zmienną x i y odpowiedzialną za aktualny stan zliczonych impulsów z wejśc INT0 i INT1 (obydwa kontaktrony), wyzeruj timer0 2)załącz timer 0 aby odmierzał czas 10 sekund 3)poczekaj aż timer odmierzy czas, w międzyczasie są zliczane impulsy z wejść INTx 4)po odmierzeniu...
Zmieniłem na Prescale = 64 dlaczego teraz sekunda trwa jakieś ~2 sekundy?
zmniejsz tą wartość Load Timer0 = 250
Witam! Z tego co zauważyłem, a to: '-------------------------obsługa przerwań--------------------------------... '''''''''''''''''''''''sekunda - przerwanie od zegara'''''''''''''''''''''''''' Calasekunda: Cala_sekunda = 1 Stop Timer0 Impp = Tcnt0 Tcnt0 = 0 Start Timer0 Liczba_taktow = Capture1 Capture1 = 0 Return wg. mnie powinno być: '-------------------------obsługa...
Podepnę się pod wątek, bo temat pasuje :D atmega8 na wewnętrznym oscylatorze 8MHz i przerwanie zliczające sekundy: Config Timer0 = Timer , Prescale = 8 Load Timer0 = 100 'przerwanie co 0,1ms On Timer0 Odmierz_ms do loop end odmierz_ms: Load Timer0 = 100 Incr Licz_ms If Licz_ms = 10000 Then '10000*0,1ms=1s Licz_ms = 0 end if incr sekundy return Wszystko...
Mam problem z działaniem poniższego programu. Części programu odpowiedzialne za multipleksowanie i wyświetlanie znaków na 7-segmentowych wyświetlaczach led działają prawidłowo. Problem pojawia się podczas pomiaru częstotliwości. Tuż po włączeniu, na wyświetlaczu przez chwilę ukazuje się prawidłowy wynik; sytuacja powtarza się mniej więcej co 1 sekundę...
chyba masz podpiąć impulsy do PD.4. Bo zliczający impulsy masz ustawiony Timer0. Ja to mówię dla ATmegi8 bo nie podałes jaki procek masz u siebie założony. Dodano po 55 tylko nie zapomnij dać w $regfile="m8def.dat" bo kompilator nie wie dla jakiego procka pisałeś.
Co do szybkości - Flaga jest ustawiana co 3,21 sekundy [syntax=basic4gl] Czas: Timer0 = Timer0 + 112 ' ( 100 = 1 sekunda ) Incr Licznik_ds If Licznik_ds = 321 Then ' 3,21 sekundy Flaga_ds = 1 Licznik_ds = 0 End If Return [/syntax] czyli pierwsza flaga to wywołanie DS18B20, później znowu 3,21 sekundy i flaga, wtedy konwersja i obliczenia. Zastanawiam...
Najprościej to chyba tak: [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> #define TIMERSTART 6 volatile uint8_t FLAGA_50 = 0; volatile uint8_t FLAGA_1000 = 0; // funkcja obslugi przerwania TIMER0_OVF 8MHz / 64 * 250 wychodzi co 2ms // dla innego taktowania nalezy ustawic inny preskaler i/lub inne liczniki stawiania flag ISR(TIMER0_OVF_vect)...
Źle mu podpowiadasz. Uzależniłeś odczyt temperatury od flagi B=0 (!) Nie byłoby w tym nic złego, bo stan flagi '0' lub '1' może być umowny, ale ten aktualny stan w tym przypadku zerowy będzie sie utrzymywał przez dośc długi czas (prawdopodobnie blisko 1sec. bo coś może trwać pod "jakieś instrukcje") co pozwoli na wielokrotne 'przewijanie" pętli a w...
Witam - mam nie lada problem Atmega8, kwarc 4 MHz i przekaźniczki podłączone do pinów Atmega zlicza sobie czasy poszczególnych trybów pracy - wylicza wskaźnik OEE oraz Wykorzystania (maszyny) i wyswietla za pomocą pwm na woltomierzach. Wszystko "gra i buczy" ale chciałbym aby pokazywała mi wskaźniki tylko z ostatniej godziny a nie jak teraz "na żywo"...
1. W jakim języku piszesz? 2. Kalkuluje się to tak: Masz kwarc 16 000 000 Hz (16 MHz) i dajesz sobie jeden z dopuszczonych prescalerów, np. 64 i wtedy timer zlicza Ci impulsy z częstotliwością 16 000 000 / 64 = 250 000 Hz, czyli jeden impuls timera to 4*10^-6 s lub inaczej aby odmierzyć 1s musisz zliczyć 250 000 impulsów, Jako, że Timer0 jest 8 bitowy...
Witam kolegów, głowię się już ładnych parę dni nad taką kwestią w procku: zrobiłem na Atmedze8 zegarek. Zewnętrzny kwarc 4MHz. Timer1 zajmuje się odliczaniem równych sekund, Timer0 osługą wyświetlania itp. Na czym polega problem? Zegarek spóźnia się, wg moich obliczeń na symulatorze w AVR Studio, o 0,345s na dobę. Nie jest to szok ani porażka, raptem...
Zakładam, że problem jest w obsłudze przerwania od Timera0. Spróbuj troche zmodyfikowanej wersji, po prostu podmień podprogramy i daj znac. Ponizej podprogram: Sekunda: [syntax=basic4gl]stop Timer0 TCNT0 = 131 Gosub Wyswietl Incr Wys '*****Liczymy 1 sekunde**** Incr 2ms If Wys = 8 Then Wys = 0 End If If 2ms = 501 Then 2ms = 0 Sekundyj = Sekundyj - 1...
Witam Mam oto taki problem jak ww w temacie. Napisałem program na odmierzanie czasu przerwanie co 1 sekundę i ogólnie po wgraniu programu wszystko działa czas leci i jest wszystko OK. Lecz po chwili a dokładnie 9-14 sekundach wyłącza mi się lcd. Nie wiem w czym jest problem:( A o to program $regfile = "m8def.dat" $crystal = 8000000 '$sim Config...
Zapala najpierw jedną diodę, później drugą. Nie ma robić nic konkretnego oprócz pokazania tego, że instrukcje po delay przestają być wykonywane. Jeżeli wyłączę przerwania to nawet jeśli będzie tu _delay_ms(10000); zapali się pierwsza dioda, a po 10 sekundach druga.
Czyli najlepiej jest zastosować jakiś układ dallas do precyzyjnego odmierznia czasu? WIdzialem takie coś w różnych projektach na lampach nixie. Narazie jeszcze nie wiem jak tego używac ale sie dowiem :) Teraz przez 10 h pracy mój stoper późni sie o 3 sekundy z zegarem z komputera.
Co do wyłączenie światła po 30 sek. Dodaj dodatkową zmienną bit która będzie ustawiana np: na 1 po wyłączenia światła przez timer po 30 sekundach a dzięki niej nie będzie ponownie włączane światło przez wciąż otwarte drzwi (stan niski na wejściu uC). Dopiero zamkniecie drzwi ( stan wysoki na wejściu uC) spowoduje zmianę tej zmiennej na 0 dim 30SEK as...
Żeby nie zapomnieć na końcu to już tutaj napiszę, że liczy się to w programach bo one się rzadziej mylą, ale zrozumienie tematu jest oczywiście ważne. Jest kilka, a w pełni darmowych, kalkulatorów do tego. Timer jest urządzeniem sprzętowym wbudowanym w mikrokontroler. Najczęsciej taktowany jest w taki sposób, że sygnał zegarowy taktujący mikrokontroler...
Wielkie dzięki Witajcie a jak zrobić żeby można wyświetlać oba liczniki naraz??? coś rzem mi nie idą osobno tak liczniki co 1 sekunde $crystal = 8000000 Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portb.5 , Rs = Portb.6 Config Lcd = 24 * 2 'configure lcd screen Config Timer0 = Timer , Prescale = 64 Config...
a jak ustawić ten timer bo tu mowa chyba o timer0
Witam. Wybacz ale chce mi się rozpisywać. Ustawianie 1 sekundy dla zegara 16MHz [syntax=c] OCR1A = 0x3D08; TCCR1B |= (1 << WGM12); // Mode 4, CTC on OCR1A TIMSK1 |= (1 << OCIE1A); //Set interrupt on compare match TCCR1B |= (1 << CS12) | (1 << CS10); // set prescaler to 1024 and start the timer[/syntax] to co wychodzi z prescalera...
Tak to kiedyś zrobiłem dla attiny2313 [syntax=c] #include "defines.h" #include <avr\interrupt.h> //#include <stdbool.h> //#include <stdint.h> //#include <stdio.h> #include <avr/io.h> //#include "hd44780.h" #include "hd44780.c" unsigned char sign1[16]; unsigned char i,keys,kdelay,krepeat=20,menu,filter_dly... unsigned char...
czesc w bascomie moze byc? jak tak to: :) Config Timer0 = Timer , Gate = Internal , Mode = 1 ' Configuracja timera Config Lcd = 16 * 2 ' ..wyswietlacza, przykladowa Dim Temp As Byte 'zmienne Dim Temp_2 As Byte Dim Temp_3 As Byte Dim Sekundy As Byte Dim Silna As Single Dim N As Byte Enable Interrupts 'wlaczenie przerwan Enable Timer0 Enable Int0 Enable...
Cześć, Przedstawiam problem: w poniższym programie, gdy nastąpi 2razy przerwanie INT0, to zmienna limit bedzie wynosić 400. Jeżeli zmienna minuty dojdzie do 400 powinno się zatrzymać. Jednak zmienna Minuty dochodzi tylko do 255 tak jakby była zadeklarowana jako Byte, a nie jako Long. Dlaczego? Zmienna Sekundy jeżeli się przestawi z 2 na mp 400 liczy...
Return[syntax=vbnet] 'prosty wyłącznik czasowy $regfile = "attiny13.dat" $Crystal=4000000 $hwstack = 8 $swstack = 8 $framesize = 8 Config Pinb.0 = Input 'wejście dla switcha Config Pinb.1 = Output 'wyjście elementu wykonawczego Config Pinb.2 = Output 'buzzer Config Timer0 = Timer , Prescale = 64 'timer jako czasomierz Declare Sub 60_sekund ' podprogram...
Wielokrotnie wałkowane. W przerwaniu wrzuciłeś transmisje I2C, CLS, obsługę LCD i inne bzdety. Wydłub to i wstaw do pętli głównej programu. W przerwaniu ustaw tylko sobie jakiś bajt/flagę że coś się stało. Teraz obsługa przerwania zajmuje dłużej niż czas pomiędzy przerwaniami. To się musi sypać. Z PCFa możesz też wyciągnąć sygnał zegarowy (skonfiguruj...
a możesz jakiś najprostszy przykład podać odmierzenia za pomocą timera np. 1 sekundy, próbuje odmierzyć 1 sekundę ale nie bardzo umiem posłużyć się timerem ustawiłem timer0 tak: Config Timer0 = Timer , Prescale = 256 ale dalej nic nie wymyśliłem
do avr sprzedają takie specjalne kwarce (np 4.194304MHz). prescale 1024 i tajmer 1 8 bitowy generuje ci idealnie 16 przerwań na sekundę. W przerwaniu ovf timer0 inkrementujesz sobie zmienną (albo jeden wybrany rejestr tylko do tego) i jak większy to zero i zwiększasz sobie zmienną sekundową. Nie potrzeba żadnych auto przeładowań, konfig, odpalasz i...
Zobacz tutaj If Flaga_przygotowanie_odczytu = 1 Then Incr Liczniczek_przygotowanie_odczytu [...] -----Breakpoint;)------- Flaga_przygotowanie_odczytu = 0 End If No i tak, powiedzmy że w miejscu które pokazałem program siedzi 2 sekundy. Przerwań było od groma, a Tobie zmienna tylko raz się podniosła. Dlatego takie rozwiązanie jest złe. Musisz...
Napisałem sobie taki prosty programik, dodam, że to jeden z moich pierwszych z użyciem timera i niby wszystko ok to jednak zegarek przestaje wyświetlać po ok 4 minutach poprawnej pracy. $regfile = "m8def.dat" $crystal = 8000000 Config Lcd = 20 * 2 Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portd.5 , Db7 = Portd.6 , E = Portd.7...
Witam, Wybaczcie dłuższą nieobecność. Program działa jak użyje PORT.X Mam inny problem. Otóż potrzebuje Timer1 do PWM i chciałbym zegarek zrealizować na Timer0. Znalazłem w sieci program, który wykorzystuje Timer0 do odliczenia 1 sekundy. Działa. Po zmodyfikowaniu programu który do odliczania czasu wykorzystuje Timer0 niby też działa, tylko problem...
No jest w planie kwarc 8MHz bo odcinki są po kawałku nawet do 12 godzin (pomiędzy odszranianiem) ale tu mi chodziło raczej o krótszy czas około 3 min pozwalający sprężarce na wyrównanie ciśnienia, zrobiłem coś takiego podobnego tyle że na timer0 ale za cholere nie mogę dobrać preskalera i ilości impulsów. Zegar wew atmega8 1MHz poza tym nie zauważyłem...
witam pcf8583 jest rzeczywiście nie potrzebny nie wiem w jakim języku ma być kod, ale podsyłam coś w bascomie, może się przyda ;) $regfile = "2313def.dat" $crystal = 4000000 'będzie dobrze liczył z kwarcem 4MHz Set Ddrb.0 'impulsy będą dostępne na nóżkach portb.0 Set Ddrb.1 '... i portb.1 Config Timer0 = Timer , Prescale = 256 Timer0 = 131...
Witam. Napisałeś, iż pomiar odbywa się co sekundę. Z programu wynika, że co dwie skundy. Load Timer0 = 250 zły zapis Load Timer0,125 125 * 8 = 1000ms
Mozesz uzyc timera 8 bitowego , ale dla czestotliwoci 1 sek lepiej uzyc tego wiekszego Timera 1 16 biowego, a do tego ustawiasz sobie wysoki preskaler np na 1024 i jak dobrze poobliczasz przepelnienie to ustawisz przepelnienia na co 1 sek.
Witam W Atmega 644 mam: EQU not found, probably using functions that are not supported by the selected chip Według noty Timer0 i Timer2 są 8-bitowe, więc można je "zamieniać" i mają oddzielne preskalery.
Witam! Od niedawna męczę się z odebraniem kodu Rc5 w tle działania innego programu. W moim wypadku jest to zegar z budzikiem na LCD który działa bez problemu lecz jak tylko dorzucę do programu procedurę odbierania Ir to wtedy przestaje mi liczyć czas mój zegar. Niżej zamieszczam przykładowy program z odliczaniem 1 sekundy przez Timer0 i dodanym do tego...
Witam. Założenie jest takie, aby dioda podłączona do wyjścia timera0 zapalała się i gasła na 1s. Wpisuje więc do rejestru TCCR0 1 i mam preskaler 1 co daje pojedyńczy kwant czasu = 125ns (1/8000000 = 125n) czyli żeby odmierzyć 1s potrzebuje zliczyć to 8000000 razy :P, ale że TCNT0 ma pojemność 256 bitów zastosujemy dodatkowy licznik. czyli zliczymy...
Oczywiście, że się da jeśli chodzi o sekundy . Teoretycznie ;). Wystarczy wziąć "nierówny" kwarc. Jego wartość powinna dzielić się odpowiednio przez dwa podniesione do odpowiedniej potęgi. Tak aby np. przerwanie przepełnienia od licznika było wywoływane dokładnie co 1 sekundę, albo inną jej część (zdatną do przeprowadzania obliczeń). Dla przykładu kwarc...
Moim celem było aby mikrokontroler odliczał w górę co sekundę i wynik pokazywał na wyświetlaczu - pierwsze podejście do timer0. Początkowo sam obliczyłem wartości preskalera dla 8MHz, jednak na wyświetlaczu liczby pojawiały się ok 100 razy za szybko. Zastąpiłem swoje obliczenia tymi z tej strony: http://www.robotyka.net.pl/mikrokontrole...
źle postawione pytanie. Problemem jest odliczenie jednej sekundy a nie użycie na siłę timera 0. :)
Może ktoś mi pomoże : Mam taki program, który ma sterować fazowo triak regulujący moc(przyciski -moc i + moc), ale to nie działa, gdzieś jest błąd , może któryś z kolegów zna się na BASKOMIE i to poprawi. Oto kod : dim licznik as word dim faza as word dim cfaza as word dim stan as bit const time1=1 'czas trwania impulsu na wyjsciu "triak" (czas w mili...
Nie pracuje bez rezonatora, 1MHz. Czy mógłbyś mi napisać prosty program, bo po prostu nic nie rozumiem :) Dodano po 45 Czy TIMER0 to przerwanie?? Dodano po 10 Aha. Już rozumiem!! :) Dzięki!!
Dodano po 40 Czemu bledne podejscie?? sam sie ucze i nie wiem do konca pewnych rzeczy
Skoro 122 wywołuje zmianę stanu diody co sekundę, to gdy doliczysz do 0.244 to będziesz miał przerwanie co 2ms :D Pojedyncze przerwanie jest wołane co 8 milisekund. Albo zmień preskaler albo użyj innego timera i po ludzki włącz ctc
Do drasmen: jeżeli chcesz aby układ zadziałał musisz przestawić fuse bity na wew. generator np. 8MHz a do pinów gdzie podłączasz kwarc musisz wpiąć kwarc zegarkowy 32.768kHz. Program dla autora tematu: 'Program wykorzystujący przerwanie od timera0(8 bitowego) generowane co 8ms 'jeżeli przerwanie zostanie wywołane 125 razy, otrzymamy 1 sekundę...
delay zrobic jako pętelkę (np. 1ms * 500) która będzie obsługiwała wyświetlacz led.... tzn. delay po prostu zatrzymuje program a 500ms to pół sekundy - czyli dla procesora WIECZNOŚĆ!
Avr i timer0 to bym polecił proste przyjemne i tanie.
Przy kwarcu 12MHz dźwiek minutnika z buzera jest bardzo niskotonowy, parametry polecenia sound też nie regulują częstotliwości, przy 11,59200MHz jest oki. Dodano po 1 Proszę o sugestie/pomoc... Dodano po 4 Konfiguracja timer0: Config Timer0 = Timer , Gate = Internal , Mode = 2 Load Timer0 , 39150 Enable Timer0 Enable Interrupts Reset Odliczanie On Timer0...
... Jak komuś uda się wykalibrować sek to prosze o podanie wartości Witam. W/g symulatora(Avr Studio) inkrementuje sekundy co 8000000 cykli zegara :wink: $crystal = 8000000 $regfile = "2313def.dat" Config Timer0 = Timer , Prescale = 256 On Timer0 Zegar Dim Czas As Byte Dim Godz As Byte Dim Minut As Byte Dim Sek As Byte Enable Timer0 Enable...
Możliwe że niektóre komendy wykorzystywane przy obsłudze karty SD zmieniają parametry konfiguracyjne RFM12b. Obsługa dla SPI w przykładzie który podałem wcześniej jest programowa. Więc jeśli masz wolne wyprowadzenia możesz przerzucić się na inne piny. Tzn. kartę SD zostawić na HARD SPI, a RFM puścić na SOFT SPI ? Zauważyłem też problem z timerem w...
Widzę,że nie ma zainteresowania tematem. A mnie na razie udało się stworzyć układ na Attiny2313. Config Portb.0 = 1 ' ustawienie całego Portu B0 jako wyjścia Portb.0 = 1 ' stan spoczynkowy Portu B0 ustawiony na 1 Config Portb.1 = 1 ' ustawienie całego Portu B1 jako wyjścia Portb.1 = 1 ' stan spoczynkowy Portu B1 ustawiony na 1 Config Timer0 = Counter...
Aby ten program, który napisałem zadziałał, trzeba urchomić dwa Timery. Timer0 do odliczania 100 milisekund a Timer1 do odliczania 1 sekundy. Czy można użyć Timera1 czy planujesz jego użycie do czegoś innego?
Mam już użyty timer0 do odświeżania wyświetlacza LCD. Przepełnia sie około 15 razy na sekundę. Mam zaprząc kolejny timer, czy kombinować z timer0? Nie bardzo wiem, jak się za to zabrać... Nie proszę o gotowy kod, ale o jakieś wskazówki, schemat blokowy, czy cos w tym stylu. Jakaś zasada w punktach też będzie dobra. Dodano po 4 Na dodatek nie wiem, czy...
Teoretycznie sam uC wystarczy. Podajesz sygnał na timer0, timer0 ustawiasz jako licznik impulsów, timer1 będzie służył jako odmierzacz czasu. Liczysz liczbę "1" w czasie trwania np. 1 sek. Timer0/timer1=Hz Poszukaj programu na obrotomierz. Możesz podawać sygnały przez dzielnik rezystorowy tak by na uC trafiało 5V bądź podawać sygnał np przez ULN2003...
Odkomentuj, czyli zdejmij ten pierwszy apostrof z tej linii : 'Set Tccr0b.0 (W IDE Bascom linia 57) To włącza taktowanie Timera0 z preskalerem 1 czyli z prędkością CPU. Bez tego Timer po prostu stoi w miejscu. Nie wiem tylko czy Timer pozwoli wyłaczyć te LED`y tym poleceniem po "Stop Timer0" bo to tylko zdejmuje taktowanie a konfiguracja do PWM raczej...
Mimo że nie mam dalej mega8 poprawiłem kod źródłowy. Liczenie mAh rozwiązałem przy użyciu Timer0 co sekundę w przerwaniu prąd dziele przez 3600000 (1/3600 bo sekunda to 1/3600 godziny i jeszcze przez 1000 żeby było w mili..) a później dodaje do ogólnej liczby, myśle że to dobry sposób. Zamieszczę kod jak by ktoś chciał zobaczyć rozwiązanie Dim Mah As...
Witam, potrzebuje prostego programu który zliczy ile razy na sekundę wciskany jest przycisk. Np na jednym z portów pojawi się 0 kiedy przycisk zostanie wciśnięty, program ma zliczyć ilość impulsów przez sekundę i zwrócić daną do zmiennej. Proszę o pomoc lub podpowiedź. Niestety jestem początkujący i niezbyt rozumiem Liczniki-Czasomierze Timer0 i Timer1....
Znalazłem w swoim archiwum , taki oto program zegarka.Przerobiłem go troszkę , by pasował do Twojego schematu. $regfile = "89c2051.dat" Const Xtal = 11059200 'z takim kwarcem jest "dość" dokładny ;) $crystal = Xtal Const Sysclock = Xtal / 12 Const Timer0value = 65536 -(sysclock / 200) '200 przerwań od T0 na sekundę Seg...
Zastosowałem kwarc 16 MHz oraz zasilanie uP +5V . Według poniższych wzorów odliczany czas powinien wynosić 1 sekundę , a niestety w przypadku b) i c) tak NIE JEST i w programie wynosi odpowiednio: około 2 i około 10 sekund . Tylko dla konfiguracji z pkt. a) jest okey. Gdzie jest problem? O co tu chodzi? Proszę o pomoc! Oto tożsame wzory, z których obliczany...
Powrócę jeszcze do tematu. Timery programowe to objaśnił Mirekk36 w swojej książce oraz artykułach i wideo poradnikach, bardzo dobrze je się stosuje. Jest to proste, wystarczy ustawić jakiś timer w tryb CTC i wywoływać przerwanie co jakiś zamierzony czas (stosuje około 10ms). F_CPU/Prescaler/100 Zaokrągloną wartość wpisujemy do rejestru OCRx. W przerwaniu...
setne sekundy timer sekundy atmega32 sekundy
astra tylne hamulce czarny ekran lenovo laptop kolumny aktywne wesela
Zabezpieczenia płytkowe we wzmacniaczu Unitra WS432: funkcje i wpływ na dźwięk Krups nie wykrywa kawy - przyczyny i rozwiązania