tak jesli timer1 jest tylko do odliczania tej jednej sekundy i do niczego innego go nie potrzebujesz
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...
Racja - jeżeli pierwszy timer masz ustawiony na odliczanie jakiejś podwielokrotności sekundy to wtedy wszystko zrobisz na tym samym timerze.
takie pytanie dodatkowe jeszcze mam, jaka najnizsza czestotliwosc mozna ustawic (na wew zegarze) ? W opisie rejestru OSCCAL (nota od ATmega8) jest napisane, ze można zjechać do 50% wartości nominalnej, czyli teoretycznie ok. 500 kHz.W niektórych nowszych AVR można i 128kHz.
Jeśli wyeliminujesz drgania przycisku, to najprościej to zrealizować podając wyjście przycisku na wejście zegarowe jednego timera (bedzie on zliczał ilość wciśnięć), a drugi timer wykorzystać do odmierzania czasów 1s - dokładnie co 1 s należy kasować licznik pierwszego timera. Ot i wszystko.
Setne sekund , timery z sekundami są i to dużo ale z setnymi sekundy nie ma nigdzie Dodano po 31 Tak trudno się domyślić że to są setne sekundy, gratuluję
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...
Możesz zastosować ten sam algorytm, który napisałem wcześniej. Nie napiszę za Ciebie programu, ponieważ było by to dla Ciebie szkodliwe. Spróbuj wykorzystać ten pseudo kod: 1.1. Na etapie inicjalizacji układu: - konfigurujesz wejścia !INT0 oraz !INT1 jako wejścia generujące przerwania w reakcji na zbocze opadające, - timer T1 konfigurujesz do trybu...
Prawda (dokładnie 2^15 Hz). Tylko podłączasz go do TOSC2 i TOSC2 a preskaler nastawiasz na /128 co daje ci przerwanie co 1 sekundę.
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"...
Przy takim trybie pracy timera (zamiast sugerowanego przez piotrva CTC) Twój zegarek będie się zawsze późnił, bo od zgłoszenia przerwania do przeładowania timera zawsze upłynie pewien czas, w dodatku nie zawsze taki sam. To nie jest dobry sposób na dokładne odmierzanie czasu.
$regfile "m8515.dat" $crystal = 8000000 Enable Timer1 Config Timer1 = Timer , Prescale = 256 On Timer1 Sekunda Timer1 = 34286 dim sek as byte do loop Sekunda: Timer1 = 34286 Incr Sek Return Powinna byc rowna sekunda (wyliczone przez kalkulator avr) Ps. Timer startuje w momencie jego konfiguracji wiec jesli nie chcesz go uzywac odrazu,...
Ja wolę przerwania: Dim Sekunda as byte Config Timer1 = Timer , Prescale = 256 On Timer1 Odmierz_1s Enable Interrupts Enable Timer1 do loop end Odmierz_1s: Counter1 = Counter1 + 34286 Incr Sekunda Return Podałem ci "szkielet" programu do odmierzania 1 sekundy za pomocą timera1. Pamiętaj że procek musi go posiadać i musi być taktowany przez oscylator...
Witam, Zbudowałem swojego czasu timer odliczający sekundy na Atmega8 ale zauważyłem, że jak zatrzymuje go przyciskiem kilk razy i włączam, to sekunda jest niepełna. Zapewne jest to spowodowane zapisem jego wartości w jakimś rejestrze i chciałbym móc go kasować do końca... mój kod jest dostępny tutaj: http://mikrokontrolery.blogspot.com/2011...
Wstawiłem rezystorek 640. Bez zmian. A czy jeśli zastosuję debounce, to nie będzie to koligowało z przerwaniami timera? Bo jeśli np przy jednym impulsie na sekundę debounce będzie czekał 25ms, to by znaczyło, że timer będzie liczył sekundę o czasie 1,025s
No dobra. Sądzę, że z tym sobie poradzę jakoś. Jeszcze jedno pytanko. W aplikacjach tego TDA jest napisane, że transmisja odbywa się z prędkością 1200 bod/s, w tabelkach dokumentacji AVR-ów najniższa prędkość transmisji widnieje jako 2400 bod/s. Jak mniemam skoro układ TDA daje radę z prędkością 1200bod/sekundę, to nie wolno mi transmitować do niego...
Ściągnij sobie z tej strony program kalkulator avr http://www.elportal.pl/index.php?module=... [syntax=basic4gl] $crystal = 1000000 $hwstack = 80 Config Timer1 = Timer , Prescale = 64 Dim Sek As Byte 's Enable Timer1 Enable Ovf1 On Ovf1 Czas Stop Timer1 Enable Interrupts Sek = 0 Do If pinc.0 = 0 then Load Timer1 , 49911...
Dzieki wielkie.
Widzę mały błąd - ustawiłeś 20 sekund, a po kliknięciu odliczania od razu przeskoczyło na 19 - nie powinno czekać tej jednej sekundy ?
U ciebie "sekunda" mija po 31251 cyklach - timer liczy od 0.
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.
Widzę, że moje programy znajdują uznanie i dobrze. Co do podawania impulsów na uC to nie można zmieniać dowolnie końcówek bo timery mają wejścia przypisane do konkretnych wyprowadzeń. Dla M8 są to T1 - 11, T0 - 6. Trzeba to brać pod uwagę przy projektowaniu układu. Dotyczy to końcówek używanych jako alternatywne. Po przeróbce czas odmierza T0 (8bit)...
Timer + przerwania + funkcja obsługi przerwania ISR(), a nie sprawdzanie jego flagi. Zobacz przykład: http://mikrokontrolery.blogspot.com/2011... A ode mnie w prezencie 25pkt, bo masz zero, ale używasz języka C :)
To może mi ktoś łopatologicznie wytłumaczyć jak podłączyć ten przekaźnik, bo nigdy nie robiłem projektów, w których były przekaźniki. Mam zamiar zrobić na atmega8 timer, który na pół minuty będzie załączać przekaźnik aby załączac świetlówki a po 30 sekundach powinien wyłączyć.
zacznijmy od tego, ze kod umieszczamy w klamrach Dodano po 10 to jest kod na jedna sekunde $regfile = "m8def.dat" $crystal = 8000000 Config Pind.7 = Output Portd.7 = 0 Przekaznik Alias Portd.7 Config Timer1 = Timer , Prescale = 256 On Timer1 Sekunda Enable Interrupts Enable Timer1 Load Timer1 = 31250 Do Loop End Sekunda: Load Timer1 =...
W przerwaniu od Timera musisz zatrzymywać Timer. TCCR1B = 0; 14745600 taktów / 28799 = 512 takty 512 / Prskaler = 0,5 takta. Jak nic 2 sekundy. Do OCR1A wpisuj liczbę 57598 to wtedy będziesz miał 4 sekundy.
Moja kolejna pomyłka chciałem tryb z OCR1A. zmieniłem na tryb 4 ale dalej timer nie ruszył ;(
Kolega emarcus ma rację, przesadziłem ze skrótem myślowym i wyszła mi nieprawda. W zależności od częstotliwości kwarcu pojemność Timera 1 starcza na kilka do kilkudziesięciu sekund.
Zły pomysł, zły kod. Użyj jednego timera w trybie zliczania impulsów zewnętrznych i podłącz wyjście wentylatora do jego wejścia. Drugi timer zaprogramuj na zgłaszanie przerwań co 1 sekundę (timer 0 tego nie potrafi), w procedurze przerwania odczytaj wartość licznika, wyzeruj licznik i wyświetl wartość. Nie jest to idealne rozwiązanie, ale o niebo lepsze...
Sprawdzałem Twój kod inicjalizacji timera + przerwanie -> wszystko jest ok. Musisz mieć błąd w zliczaniu sekund lub w wyświetlaniu. Tak na marginesie to po co ustawiasz bit OCF2 w TIFR? Nie korzystasz z porównania (compare match), więc nie potrzebnie robisz to ustawienie. Wystarczy TIFR=(1 << TOV2);
Zastosuj dostępny kwarc zegarowy 4194304Hz. Config Timer1 = Timer , Prescale = 64 Timer przepełni się co 1 s bez wartości początkowej! Włączasz go i zapominasz, że istnieje. W przerwaniu tylko Incr sekunda. Mam zegar na ATMEGA8 z budzikiem ustawiany z pilota RC5. Chodzi ok.
źle postawione pytanie. Problemem jest odliczenie jednej sekundy a nie użycie na siłę timera 0. :)
(at)Maryush Przede wszystkim użyj nowszego AVRa, ma to kilka zalet, m.in.: - mniejszy pobór prądu w stanie cuzwania i uśpienia, - możliwość wybudzenia procesora przez watch doga, w efekcie znika potrzeba stosowania timera w trybie asynchronicznym, zewnętrznych kwarców, itd.
Kolego, przy tym kwarcu strasznie będzie Ci się to wolno rysowało. Nie lepiej podłączyć 16MHz i w przerwaniu od Timera wyliczyć sekundę? Wyświetlacz będzie trochę sprawniej chodził.
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...
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...
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
Przy uruchamianiu timera zapal bit COM1A0 w rejestrze TCCR1A
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...
Tutorial do avr taki znalazłem: http://avr.elektroda.eu/?q=node/8 Jak byś czegoś w sieci szukał, to raczej unikaj tutoriala z patron.net, uczy złych nawyków i jest nieco nie na czasie. Pomiar częstotliwośći na AVR realizuje się w miarę łatwo, przy wykorzystaniu timerów, jeden timer pracuje jako licznik impulsów z zewnątrz, a drugi odmierza czas, mozna...
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
Masz ATmega8, czyli masz ADC i masz timer połączony z pinami I/O, czyli za pomocą timera możesz generować przebiegi na wyjściu. Rzecz wręcz banalna. Za pomocą ADC wykonujesz pomiar napięcia. przeliczasz go na okres, albo odrazu częstotliwość, nie wiem jak to w bascomie wyglada. W każdym razie częsottliwość ustala się przez zapisanie w odpowiednim rejestrze...
Przede wszystkim musisz zacząć kolego od poznania timerów. Do odmierzenia czasu używamy timerów ponieważ zlicza nam czas w tle działania procesora. Używając polecenia wait zatrzymujesz kompletnie uC na ten czas. Konfiguracja dla AtMega8 8Mhz u mnie wygląda tak: Config Timer1 = Timer , Prescale = 256 ''''konfiguracja timera On Timer1 1s ''''przy przerwaniu...
Czyli po pierwszej sekundzie na wyswietlaczu masz 17, po drugiej 34 itd?
Układ nie będzie czekał 62 sekundy a 6 sekund i 2 dziesiąte sekundy. Czy aby na pewno? Policz jeszcze raz. Faktycznie mój błąd. Przepraszam za zamieszanie. 62 sekundy to prawidłowy wynik.
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....
Bardzo dziękuję za informację. Mam jeszcze jedno pytanie, związane z tym tematem. Dla większej jasności zamieszczam fragment kodu (tylko ta część, które jest tut istotna). Czy można w jakiś sposób oszacować czas potrzebny na wykonanie pozostałych instrukcji, abym mógł dobrać odpowiednią przerwę po instrukcji timer++? Mikrosterownik jest taktowany zegarem...
No dobra , tylko jak powinien wyglądać timer "gotowy do użycia" ? timer,ładujemy początkową wartość ,on zlicza do niej i mamy 1sekundę, wtedy Incr Zmienna(sekunda) - jak ja mam to napisać?? Nie mam pojęcia o Timer'ach! Kubbaz napisał coś o tym ale słabo czaję...
Witam, chciałbym przy użyciu Atmega8 i zewnętrznego kwarcu odmierzać i zliczać setne części sekund, sekundę mogę łatwo wyłapać z timera1 według przykładowych obliczeń 4000000MHz / 256 = 15625 65536 - 15625 = 49911 lub 8000000Mhz / 256 = 31250 65536 - 31250 = 34286 Nie mam jednak pomysłu jak....... Z góry dziękuję za pomocne wypowiedzi. Aby odmierzac...
Wyłącz JTAGa oraz debugowanie. Wydaje mi się, że masz problem z odbieraniem odpowiedzi z telefonu przez USART. Ustaw low FF i high EF Aha i musisz jeszcze dostosować odliczanie sekundy na timerze1 zmieniając wartość początkową ładowaną do timera
Całkiem źle. Timer ma działać ciągle i odliczać stałe odcinki czasu, coś rzędu 1/1000..1/500 sekundy.
a jeszcze prościej ,ustawic atmege na kwracu wewnętrzym a pod piny tosc1/2 podłączyć kwarc 32.768khz skonfigurować timerze do pracy 2 w trybie asynchronicznym
teedd -> nie zapytałeś nawet w jaki języku pisze pys1986, a zamieszczasz od razu kod. Poza tym nie wiem dlaczego chcesz zrealizować odmierzanie czasu na przerwaniu INT1 zamiast wykorzystać wbudowany timer? Jest to niepotrzebne komplikowanie zadania i dodawanie uC niepotrzebnej roboty. Na stronce jaką zamieściłem jest przykładowy zegar z kalendarzem...
ten timer włączyłeś? W bascomie uzyles pewnie config clock=soft Więc jesli z punktu widzenia konfiguracji timera i procesora jest wszystko ok, to przyczyna moze byc jedna: kwarc nie oscyluje. Spróbuj podotykać np. pęsetą (trzymając ją mocno w ręku) pinów kwarca. Jesli zaczną przeskakiwać sekundy to błąd jest w kwarcu == wymień kwarc. Ta sytuacja tez...
1. Poczytaj ogólnie o timerach. 2. Poczytaj o trybach timerów, Tobie radziłbym CTC. 3. Poczytaj o przerwaniach. 4. Z Timera co sekundę będziesz wysyłać przerwanie. 5. Ustaw pin z przełącznikiem jako wejście. 6. Podciągnij wewnętrzny rezystor do pinu albo daj jakiś rezystor po drodze - nie zwieraj bezpośrednio do masy. 7. Ustaw port z diodą jako wyjście....
Czy wszystko będzie ok. trudno wyczuć. Zależy jaki zastosowałeś układ wykrywania przejścia przez zero. Jeżeli stan niski utrzymuje się przez większą część przebiegu i tylko w okolicach zera jest wysoki to dopóki jest stan niski to jest zgłaszane przerwanie. Jeżeli dodać do tego że przerwanie int0 ma najwyższy priorytet poza reset to przerwanie od timera...
Cześć, po zabawie z timerem 0 przyszedł czas na timer 1. Mam Atmegę 8 z kwarcem 12MHz, chciałem tak jak poprzednio odmierzyć dokładnie jedną sekundę. Napisałem program: [syntax=cpp]//Nauka obsługi timera //Atmega8 12MHz #include <avr/io.h> #include <avr/interrupt.h> void main(void) { DDRB = 0x0F; PORTB = 0x0F; OCR1A = 46874; //OCR1A - po...
Z pierwszej pętli while (1) nigdy nie wyjdziesz, więc druga nie ma szans zadziałać. Poprawka: no fakt, wyjdziesz, tylko sposób sformatowania kodu wskazywał na coś innego. Pisanie programu zacznij od oswojenia przerwania timera, zgłaszanego np. 100 razy na sekundę.
Napisałem pierwszy program z pomocą tego bloga o którym pisał kolega w poście #2 Mruganie diody, mikroprocesor realizuje to polecenie :) Jednak są w języku C jakieś takie timery jak w ASM ? Żeby odmierzać czas? Chodzi mi o to żeby zrobić to odliczanie jak to jest w przypadku timera w mikrofalówce Żeby po sekundzie zmniejszał wartość jakiejś zmiennej.
Ja się zawsze zastanawiam skąd się biorą u tylu ludzi , początkujących te schematy bez podłączonego AVCC i AGND ??? przecież - trąbi się o tym nie tylko w nocie PDF ale i na forum - no wszędzie. Wprawdzie ATmega8 ma zwarcie wewnątrz pomiędzy VCC i AVCC ale nie podłączanie jeszcze niefrasobliwie drugiej nogo GND to już - proszenie się na własne życzenie...
Dla początkującego dobrym zwyczajem jest rozrysowanie algorytmu na kartce lub rozpisanie go w punktach. Na jego podstawie od razu widać jak program napisać. Na pewno będziesz potrzebował jakąś zmienną, która przechowa informację ile razy klaśnięto w czasie ostatnich ... np. 3 sekund. Do odmierzania czasu warto byłoby zaprzęgnąć timer.
Czy takie coś będzie liczyć czas w miarę poprawnie? - taktowanie układu kwarcem 4MHz (1 takt = 0,00000025s) - preskaler /128 (po przeskalowaniu będzie 1 takt = 0,000032s) - inicjalizacja timera od 34286 (65536 - 31250), 31250*0,000032=1s Nie ma preskalera 128. Masz do wyboru 1|8|64|256|1024 A u mnie tak właśnie liczy na kwarcu 8Mhz/256 tyle, że w CTC...
Łoo wlasnie policzylem ze jezeli z tych przerwan co 1ms chcesz odmierzyc minute to przy 150 taktach na obsluge przerwania (okolo 67 zajmuje samo wwolanie bez obliczen w C) to opoznienie masz okolo 9 sekund. Musisz koniecznie zwiekszyc prescaller albo liczyc na timerze 1.
wykonałem zegar na atmega8 lcg 1*16, z uzyciem timera1 dalem kwarc 8MHz, aby odliczać czas co 1s zrobilem tak Config Timer1=timer, prescale=256 następnie dałem counter1=counter1+34286 8MHz/256/(65536-34286)=1s - powinno mi dac dokładnie 1 sekundę a z pomiarów sekundnik zmienia sie mniej wiecej co 8 sekund, czy ma ktos moze pomysł dlaczeo tak sie dzieje?...
Nie możesz odczytywać kilka razy pod rząd ADC, bo w trybie konwersji ciągłej może się zdarzyć, że wartość zmieni się w trakcie Twojej zamiany. Jeśli np. zmieni się z 99 na 100, to wyświetlisz 199. % 1000 % 100 to też to samo, co %100. Nie ma też sensu zmieniać wartości wyświetlanej aż tak często - do odczytu przez człowieka max. kilka razy na sekundę....
Z tego co wnioskuje to muszę zliczać ilość przepełnień Timera bo inaczej będzie mi się on nadpisywał tak? Czas chciałbym liczyć np do 5 sekund z dokładnością np 0,1s
Witajcie koledzy, mam problem z przesiadką z Atmega8 na Atmega168. Ślęczę nad datasheetami jednej i drugiej i już nie ogarniam. Fragment mojego kodu z Atmega8 odpowiedzialny za przerwania: [syntax=c] TCCR1B=(1 << CS10 |1 << CS11 | 1<< WGM12); TCCR2=(1 << WGM21 | 1 << CS22); OCR2=50; OCR1A=15625; SREG=(1 << 7); TIMSK=(1...
W jaki sposób objawia się problem? Tak poza tym, to mam kilka uwag: 1) program nie będzie zbyt dokładnie odmierzał czasu, może gubić całe 100 milisekundowe odcinki czasu, 2) sekundy, minuty, godziny będą trwać o jedną "mniejszą" jednostkę za krótko, tzn. np. minuta będzie trwać 59 sekund zamiast 60 sekund, 3) definicję częstotliwości kwarcu powinno...
To nie zadziała dla dużych częstotliwości. Użyj 16-bitowego timera w trybie licznika zliczającego impulsy. Drugiego timera użyj do odmierzenia 1/10 sekundy. Ponieważ nie masz już dhyba drugiego timera 16-bitowego, możesz zaprogramować 8-bitowy np. na 1/100 sekundy i odliczyć do 10 w przerwaniu z tego timera.
Hej! Czy ktoś wie jak wykorzystać timer atmegi 8, który w danym momencie programu zacznie odmierzać czas powiedzmy 3minuty (bez wpływu na program główny) i po upływie tego czasu skoczy do jakiegoś podprogramu? Szukam i szukam w necie i próbuję i nic z tego. Wydaje mi się, że można wykorzystać w Bascomie polecenie ON TIMER (liczba sekund) GOSUB (procedura...
272 to taka nieciekawa wartość do mnożenia. Ja zrobiłem tak: Przerwania z TIM0 i TIM1 TIM0 zlicza impulsy z wejścia zliczającego, i gdy się przepełni jest króciutkie przerwanie inkrementujące parę 3 rejestrów. TIM1 zgłasza przerwanie równiutko co pół sekundy. Na samym początku obsługi przerwania jest odczytywana wartość impulsów z TIM0, i jest on resetowany....
Wszystko zależy od tego jaką dokładność pomiaru potrzebujesz. Jeśli plus minus sekunda, to stoper i ręka wystarczy. Szukasz gotowego urządzenia, czy jesteś wstanie sobie sam zrobić i zaprogramować proste funkcje Timera popularnego mikrokontrolera np. Atmega8, a wynik wyrzucać na LCD albo poprzez UART do terminala komputera?
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
Mam wrazenie, ze fuse bity mam ustawione dobrze: # uisp -dprog=dapa -dlpt=0x378 --rd_fuses Atmel AVR ATmega8 is found. Fuse Low Byte = 0x9f Fuse High Byte = 0xc9 Fuse Extended Byte = 0xff Calibration Byte = 0xb9 -- Read Only Lock Bits = 0xff BLB12 -> 1 BLB11 -> 1 BLB02 -> 1 BLB01 -> 1 LB2 -> 1 LB1 -> 1 Przemawia za tym dodatkowo fakt,...
Ciekawe, jak Ci ten ADC "szczytuje"... ;) Przerwanie z ADC nie przychodzi "jak się coś zmieni", więC jednak trzeba to zrobić na timerze. zastanów się, jak często chciałbyś rejestrować zmiany położenie potencjometrów - wydaje mi się, że 10..100 razy na sekundę. Odpalaj konwersję obu kanałów na przemian w przerwaniu timera, a w następnym przerwaniu odczytuj...
Myślę, że nie jest to niemożliwe, ale trudne. Bez specjalnych trików się nie obędzie. Preskaler timera na 64 i porównywanie wartości dodatkowego licznika programowego z tabelą wartości. Najoptymalniejsze tu będą wstawki w asemblerze.
Sorry, Wiesz ja to sie z tym bawie tylko i program pisze w bascomie metoda prob i bledow. Nie ma większego znaczenia w jakim środowisku programujesz (Basic albo C). Istotny jest koncept projektu i sposób rachunkowy, reszta to tylko inna forma zapisu programu. Wybrałeś za narzędzia: Timer1 i jeden z interruptów zewnętrznych. Zatem jest tez bez znaczenia...
Według LED przy 50 sekundach (stoper), LED ma już 51 mignięć. Możliwe że się tak faktycznie rozbiega, no cóż... Więcej na temat dokładności tutaj
mikro = 0.001 [mili] mikro = 1 / 1000 [mili] czyli jedna milisekunda(ms) ma tysiąc mikrosekund(us). Mam pytanie: czy to działa z metodą wysyłania kwadratowej fali? Bo ja chcę zrobić pilot który będzie wysyłał parę komend, ale nie wiedziałem jak zmodulować sygnał. bardzo bym prosił o potwierdzenie tego sposobu. A co do wysyłania tylko przez określony...
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...
hunterhouse niestety poprawki w moim programie, które wprowadziłeś nic nie zmieniły bo dalej stan portu ''przeskakuje'' co ok. 8 sekund. Może komuś uda się znaleźć błąd. Ponieważ wersja hunterhouse'a działa bez problemów, chciałbym przejść o krok dalej i zrobić coś takiego: Włącza się czasomierz Timer1 na załóżmy 5 sekund. W ciągu tych 5 sekund zliczane...
Podobny temat był ostatnio tylko dotyczył takiej zabawki do roweru. Z obliczeń wyszło, że pomiar impulsów na sekundę jest mało dokładny. Wypada liczyć ilość ms jednego obrotu. Przy motocyklu będzie tylko wyższa prędkość maksymalna.
No właśnie już do tego doszedłem że źle umieściłem fragmenty kodu. Po zamianie ruszyło jak trzeba i mój pierwszy timer uruchomiony :):) Teraz tylko muszę coś przećwiczyć żeby wynik wychodził mi też w częściach sekundy a nie tylko sekundach. Bo pomiar mi potrzebny to np 1 s i 200 ms a nie tylko 1 sekunda. No i jeszcze jedno, czy teraz ten timer nie będzie...
Dopiero uczę się pisać w bscomie, a o tym ponownym ładowaniu timera pisało w pomocy. Timer przeładowuje się 125 razy na sekundę. Dodaje przeładowania timera i kiedy mam 125 dodaje 1 sekunde. To że wewnętrzny oscylator jest niedokładny wiem, ale aż takie przekłamania chyba nie powinny wystąpić.
... ale niestety mądrala nie przytoczył jak powinno się to zapisywać... ) Oj, uważaj bo ktoś może poczuć się urażony i raportować post :) Na temat F_CPU w sieci można znaleźć wiele: F_CPU – gdzie definiować? Chciałbym dowiedzieć się co znaczą te TCCR2, OCR2, TIMSK, jak liczyć te przerwania i dlaczego timer po skopiowaniu tego kodu nie liczy faktycznie...
Dokładne odmierzanie czasu realizuje się przy wykorzystaniu timera2 z kwarcem zegarkowym na przynależnych mu wejściach... Jak nie chcesz się bawić z takim kwarcem to jest jesze możliwość odmierzania sekundy na timerze 16-bitowym... Przy ustawieniach... 1MHz... prescal 64... wartość początkowa 49911... Pozdrawiam Rafał...
Czy takie podłączenie klawiszy a'la Fredy jest poprawne? Tak. Można można to zrobić także korzystając z Timera, który w przerwaniu będzie skanował przyciski np. 20 razy na sekundę. Wtedy diody są niepotrzebne a wejście INT będzie wolne.
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ę...
Poi pierwsze. Do BASCOM-a jest pomoc - także po polsku, której to zresztą jestem autorem. Wersję on-line (beta) znajdziesz na mojej stronie WWW. Jak one działają? Zliczają impusy. Albo z prescalera, albo z zewnątrz. Patrz nota katalogowa. W którą stronę zliczają? Zwykle liczą w górę. W trybach PWM liczą też w obie strony. Patrz nota katalogowa. Jak...
Spróbuj na razie: [syntax=c] char tekst[10]; sprintf(tekst,"%d", sekunda)[/syntax]
zrób to mniej więcej tak: .INCLUDE "m8def.inc" .cseg ; początek segmentu pamięci programu .org 0 rjmp RESET ; wektor ZEROWY (po resecie) .org OVF0addr ; wektor przerwania od przepełnienia Timera0 rjmp Przerwanie_T0 ; i tu właśnie skok do obsługi tego przerwania RESET: LDI R16, HIGH( RAMEND) OUT SPH, R16 LDI R16, LOW( RAMEND) OUT SPL, R16 ; porządek...
Config Serialin = Buffered , Size = 80 Enable Interrupts Dim _Flaga_1s as Bit _Flaga_1s = 0 Config Timer1 = Timer , Prescale = 64 Enable Timer1 : On Timer1 Co1s Cls Do If Ischarwaiting() = 1 Then Znak = Inkey() Print Chr(znak) ; End If if _Flaga_1s = 1 then ' ------> a tutaj wyświetlaj już sobie spokojnie co chcesz co...
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...
Ustawiłem sobie w kodzie W=128 i sygnał wygląda tak: http://obrazki.elektroda.pl/3128156700_1... Nie wiem czy wiesz jak działa Phase Correct. Timer liczy aż napotka wartosć OCR i zmienia stan pinu. Jedzie jednak dalej i jak dojedzie do końca licznika to tego pinu nie wyłącza tylko zawija się i zaczyna liczyć w dół. Kiedy znów napotka...
Wielkie dzięki ;) Rezystor całkowicie rozwiązał problem. Moze i rozwiazal jeden z problemow i to nie calkowicie. Popatrz na swoj kod: Licz: Incr Przerw0 If Przerw0 = 3125 Then Incr Setne Czy na pewno beda to setne sekundy? Druga sprawa to jest bledem umieszczenie startu STOPERA w "Do ... loop, uzaleznione od stanu pinu. Od momentu nacisniecia przycisku...
jest to dieselek więc zakłócenia raczej mniejsze.. jak to zrobić? jakiś ogólny szkic programu w bascomie? bo licznik chciałem zrobić na timerze jako counter z pomiarem co sekundę, ale skoro nie zrobiłem jeszcze nic poza programem to koncepcję mogę zmienić. pfff. to jak mam to podłączyć w końcu?
mam odblokowane zobaczy wyżej w kodzie. Winą był Timer1 który generował przerwania. Zastosowałem do skanowania klawiatury zamiast Timera i przerwań pętle Doo i Loop oraz Inkey() jesli Inkey >0 to Input itd. Teraz działa jednak nadal jestem zmartwiony bo drugie urządzenie które buduje musi korzystać z Timera gdyż odlicza w sekundach czas 5 trybów w których...
Witam. Chciałem w celach edukacyjnych zrobić częstotliwościomierz. Ponieważ nie mam za bardzo skąd wziąć zewnętrznych impulsów postanowiłem, że jeden pin procka będzie je generował, a przerwanie int0 będzie liczyć ile tych impulsów było. Do odmierzenia czasu posłużył timer1, który ma odliczyć sekundę (więc wynik od razu w Hz). Po upływie sekundy ma...
mozna tę aplikacje rozwijać, ale to chyba wyczerpuje Twoje oczekiwania $regfile = "m8def.dat" ' procesor ATmega8 $crystal = 8000000 ' Kwarc 8MHz Config Portb = Output Speaker Alias Portb.2 Portb = &B00000000 Portb = &B00000100 'załaczy przekaznik Wait 30 ' czeka 30 sekund Sound Speaker , 248 , 675 ' dzwiek do słuchawki 300ohm Portb = &B00000000...
Przerwanie od przepełnienia (co 1 sek.) Jeśli masz taką potrzebę możesz co 1 sekundę, ale jeśli nie musisz, to wykorzystaj timer do końca i wybudzaj co 8 sekund :) Czy poza Atmegą8 i Atmegą32 jest jeszcze jakiś inny AVR mający taką fajną funkcję jak możliwość podpięcia kwarcu zegarkowego oraz to aby pracował na nim w trybie asynchronicznym ? ... nie...
timer atmega8 atmega sekunda timer atmega8 bascom timer
sterownik lm339 strumienica zamiast katalizatora pralka blokada polar
galmet wyswietlacz galmet wyswietlacz
Formatowanie i wgrywanie systemu na Huawei AGS2-W09 przez fastboot Jak rozkręcić SBS i dozownik SUP021Y - instrukcja