(at)seba_x:A co to za bzdura?:> • Peripheral Features – Two 8-bit Timer/Counters with Separate Prescaler, one Compare Mode – One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode A co do pytania autora, nie, zliczanie umożliwiają tylko dwa pierwsze timery. Trzeciego można używać jako wewnętrznego. Nie tylko...
To zależy. Z opisu autora (nie analizowałem kodu) wynika, że timer jest zatrzymany, stąd kolejność nie ma znaczenia. Przy okazji mała poprawka, bo zamiast TCNT0 podałem TCCR0. Zerując TCCR0 zatrzymamy timer ponieważ w tym mikrokontrolerze są tam tylko bity preskalera.
Użyj Timer'a 2 i wszystko będzie cacy. Pzdr. A piny to się konfiguruje tak: Config Pinb.1 = 1 a nie Portb.1. Przydaje się też wrzucenie linijki z def'em procka: $regfile = "M8DEF.dat", zresztą: $crystal = 8000000 $regfile = "M8DEF.dat" Config Timer2 = Timer , Prescale = 256 On Timer2 Przerwanie Dim A As Byte , B As Byte Config Lcd = 16 * 2 Cursor Off...
Ja bym zrobił na przerwaniu + timer.
Racja - jeżeli pierwszy timer masz ustawiony na odliczanie jakiejś podwielokrotności sekundy to wtedy wszystko zrobisz na tym samym timerze.
Zacznij od tego: funkcja wait i pokrewne PRZESTAŁY ISTNIEĆ. Do opóźnień i odmierzania czasu użyj timera i ogólnie poczytaj o timerach.
To co sugerowal Tajwoj - źle ustawiłeś preskaler, powinno być: TCCR0 = 0b00000101;
http://obrazki.elektroda.net/77_12591386... Witam! Chciałem Wam przedstawić jeszcze nieskończony timer kuchenny autorstwa Mirosława Firleja. Ta zabawka powstała jako prezent świąteczny dla mamy. W wakacje postarałem się zrobić taki, ale coś nie chciało działać. Segmenty cyfr się źle wyświetlały, buzzer cały czas dzwonił, jednym słowem porażka....
Dlatego, że nie używasz AS masz problem z ustaleniem przyczyny. Wystarczy uruchomić symulator, by zobaczyć, że Twój program wpada w zabezpieczenie dodawane przez kompilator polegające na wyłączeniu przerwań globalnych i zapętleniu się w specjalnie dodanej pętli. Symulator na początku zabawy z mikrokontrolerami, to podstawowe i bezpłatne narzędzie -...
Najpierw próbowałem z przetwornikiem a/c ale nie dawało to żadnych odczytów i teraz spróbowałem z komparatorem a/c i timerem. Do atmegi podłączyłem nadajnik ultradźwiękowy przeciwsobnie. Jeśli przetwornik podłączyłeś bezpośrednio do pinów mikro-kontrolera to nic dziwnego. Po pierwsze nadajnik ma wtedy bardzo małą sprawność, jak budowałem swój miernik...
no i ok, ja mowilem o dodatkowym podziale czestotliwosci na 2, 4 i 8 (domyslnie 8 ) . no i czas sciagnac nowe wersje, bo we wszystkich jakie mam logo jest niebieskie 4\/3!! No własnie. Domyslnie jest 8. Ustwiasz 8MHz, a to chodzi na 1MHz. I zdziwka. Ja też kiedyś miałem z tym problemy. A jak kolega Robgie programuje? Z BASCOMa? no i ok, ja mowilem...
Klasa TwoWire (której obiektem jest Wire) też używa przerwań. Po wejściu do ISR przerwania są blokowane. Jeżeli chcesz, aby dane ISR nie blokowało innych przerwań można użyć ISR_NOBLOCK:[syntax=c]ISR(TIMER2_OVF_vec... ISR_NOBLOCK) { ... }[/syntax]Byłbym jednak z tym bardzo ostrożny, ponieważ może przydarzyć się przepełnienie stosu. https://www.nongnu.org/avr-libc/user-man...
Witaj, Pobieżnie patrząc na program, wygląda prawidłowo. Może podłącz do jakiegoś pinu LED i zmień: [syntax=c]ISR(TIMER1_COMPA_vect) { PORTTESTOWY ^= (1<<pin_testowy); //zmień stan LED na przeciwny }[/syntax] i sprawdź czy co 1sek się zmienia. Oczywiście ustaw pin jako wyjście.
Wpisz większą wartość do OCR1A, przerwanie wtedy musi wywoływać się rzadziej albo zrób tak jak czasami robię kiedy procek działa za szybko a potrzebuję mieć przerwanie rzadziej; zadeklaruj zmienną globalną, np: uint8_t licz = 0; SIGNAL(TIMER2_COMPA_vect) { licz++; if(licz >= 10) //liczba przykładowa, zależy jak często chcesz...
Jakoś nie widzę żebyś tu korzystał z przerwania od Timera... Bo nie musisz ;p mogłbyś pokazać jakiś przykład obsługi przycisku w przerwaniu timera ? Nawet jakiś URL do innego projektu. Więc chyba oczywistym jest że ten fragment kodu należy umieścić w przerwaniu od Timera.
Obsługa przerwania nie ma być "jak najkrótsza", tylko "nie za długa". Odświeżanie wyświetlacza zawsze robi się w przerwaniu, gdyż zajmuje to czasu tyle co nic, a nie zrobienie tego w przerwaniu powodowałoby złe działanie wyświetlacza - nierówną jasność cyfr, zmiany jasności, migotanie, przygasanie itp. To ma być działać ze stałą częstotliwością, a do...
Przyznam się, że nie próbowałem pomijać reti skacząc do pętli głównej z ISR, ale już podmieniałem adres powrotu w projekcie minidds. Ale zakładam, że AVR ma to gdzieś i nie obchodzi go, czy ISR jest zapętlone, czy nie. Zresztą gdzieś w nocie pisało, że SEI w obsłudze przerwania może spowodować nadpisanie całego RAMu, jeżeli kod będzie wolny, więc raczej...
TCCR1B |= (1<WGM12) tu ma być (1<<WGM12) (dwie strzałki)
Do przeładowania Timer'a1 używaj: Int_timer1: Load Timer1 , 62500 [...] Return Mam jeszcze jedną regułę z przeszłości aby nie używać obsługi pamięci EEPROM w obsłudze przerwań (starsze wersje BASCOM'a przy rozbudowanych programach powodowały błędne działanie programu). Stosuję to do dziś dnia i nie mam zamiaru sprawdzać to w nowszych wersjach...
Nie chodzi mi o dokładnosc oby jakoś działał Więc weź timer bez setnych sekund i dodaj licznik pokazujący na setnych cyferki od 99 do 0. Efekt osiągniesz, dwie cyfry losowe. Tak jak w stoperze liczącym setne sekundy uruchamianym i zatrzymywanym ręcznie. Czas reakcji człowieka to ok 100ms. Co wiec pokaże ostatnia cyferka (setne sekundy)?
Należało by jeszcze dodać iż nie wszystkie Timery są np 16 bitowe np. ATmega8535 ma 2 8 bitowe i jeden 16 bitowy. O tym ile i jakie Timery wyczytasz z noty katalogowej danego mikrokontrolera.
1. Zaprogramuj timer w tryb CTC, np. na częstotliwość 100 Hz. W przerwaniu timera: - sprawdź, czy przycisk naciśnięty; jeśli tak - zapal diodę i załaduj wartość 1000 do zmeinnej - "timera programowego". - jeśli zmienna timera ma wartość różną od zera, zdekrementuj ją, a jeśli zdekrementowała się do 0 - zgaś diodę. Razem daje to 5 linii kodu w przerwaniu...
Jaka częstotliwość taktowania uK? Od tego zależy jak ustawić Timer. Jaki język?
Debouncing można wykonywać na wiele sposobów. Twój sposób jest jak najbardziej poprawny. Ta bezsensowność jest tylko z pozoru bezsensowna :) - jakoś trzeba poinformować main(). Taka technika jest powszechnie stosowana nie tylko do debouncingu. Pamiętaj także, że zawsze możesz na końcu while() w main() uśpić mikrokontroler do następnego przerwania -...
Posiadam aparaturę zdalnego sterowania, w której podczas maksymalnych wychyleń drążka w lewo i prawo na nadajniku, na odbiorniku na wyjściu sygnałowym napięcia przykładowo 0.26-0.42V. Chciałbym podłączyć ten sygnał do wejścia uC. Czy można programowo odróżnić te wartości napięcia, aby w skrajnych przypadkach podawać napięcie na różne wyjścia uC? Można...
a) Dlaczego nie na przerwaniach? b) Timer wcale nie musi liczyć od zera. c) Da się ustalić górną granicę (CTC). d) Przeczytaj sobie: http://www.avrfreaks.net/index.php?name=... http://maxembedded.com/2011/07/14/avr-ti...
Bo jak ma działać? Widać kolega nie do końca rozumie mechanizm przerwań, skoro czeka na przerwanie INT0, a włącza przerwanie przepełnienia Timera0. Adresem przerwania przepełnienia Timera0 jest OVF0addr, a nie INT0addr. Przerwanie od INT0 wyzwalane jest ZEWNĘTRZNIE zboczem lub stanem na fizycznym wejściu INT0 mikrokontrolera, a nie Timerem. Skąd ten...
Wklep na początku przerwania : Enable Interrupts Wywnioskowałem to z pomocy bascoma (polecenie on Interrupt)
Witam Szukam odpowiedzi i nie mogę znaleźć na pytanie jak w temacie. Bawię się od tygodnia z AVR dokładniej z Atmega8 i zrobiłem sobie do samochodu taki mini komputer pokładowy, który narazie podaje temp w 3 punktach na DS1820 i wyświetla to na wyświetlaczu LCD 2 * 16 (który używam do kontroli wyników) bo drugim wyświetlaczem jest HDLX1414, to 4 segmentowa...
A jak wygląda wyświetlacz 3-segmentowy? Nigdy jeszcze takiego nie widziałem... Program napisz od nowa - ten nie ma prawa działać. Zacznij od przerwania timera. Odliczania czasu NIE DA się zrobić bez timera.
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.
zobacz tu: http://mikrokontrolery.net/avr_c_06.htm
Musisz też załadować nową wartość do licznika timera.
Przedstawiam timer oparty na ATmega8 i podwójnym multipleksowanym wyświetlaczu 7 segmentowym LED. Układ stworzony do uruchamiania syreny co pewien ustalony czas. Maksymalny czas załączenia to 99 sekund a maksymalny czas zwłoki to 99 minut. Układ zasilany bezpośrednio z sieci 230. Wrzucam schemat układu oraz płytkę układu i wyświetlacza który łączy się...
Ten program robi chyba coś innego, niż Ci się wydaje ;) Licznik nr 1 generuje PWM o współczynniku wypełnienia zależnym od OCR1B. Licznik nr 0 generuje przerwania zegarowe (TIMER0_OVF_vect). Program nie jest kompletny - brakuje definicji zmiennej "kierunek". Załóżmy że na starcie kierunek=1: - OCR1B ma wartość 800 - pojawia się przerwanie od TIMER0 -...
Program wyświetla to co chcesz ale w symulatorze to trwa bardzo bardzo długo. i Teraz ja licznik odlicza 100 impulsów to musisz pozmieniać obliczenia. Podczas symulacji w warunkach wpisz mniejsze wartości to się szybciej doczekasz tego wyświetlenia na lcd albo zwiększ zmienne ręcznie podczas symulacji. sygnał 125khz do generowania PWM 1,25khz. Nie rozumiem?...
Nie wiem jakiej wersji używasz. Poniższy kompiluje się na pewno w 2075 - specjalnie sprawdziłem :D [syntax=vbnet]$regfile = "m8def.dat" $crystal = 1000000 $hwstack = 40 $swstack = 16 $framesize = 32 '********* TUTAJ SOBIE USTAW JAK CI PASUJE ********** Pin_wyjsciowy Alias Portc.5 Przycisk Alias Pind.2 : Set Portd.2 Const 1_ilosc_minut_do_odliczenia...
Nienawidzę czytać datasheetów... Ooojo joj ... to będzie bolesna droga przez mękę ta nauka programowania :( W książce mam napisane że do TCCR1B jest przypisany OCR1B, ale jak widać niezbyt to działa... No to hmmm książek też nienawidzisz czytać ? tak by wynikało skoro piszesz, że ktoś tak napisał w książce. Coś chyba mało uważnie czytałeś. Nikt tak...
Moje pytanie brzmi czy mogę pogodzić precyzyjny odczyt z ADC (z uśpieniem) i dokładny timer czy muszę wybrać albo precyzyjne ADC i niedokładny timer albo standardowy odczyt z ADC i dokładny timer? Timer1 jest taktowany przez prescaler z CLK_I/O, a podczas 'ADC Noise Reduction' , ten zegar jest nieaktywny/ wyłączony. Patrz tabela14 w datasheet; w której...
Hmmm, ... Możesz wkleić aktualny kod łącznie z zerowaniem preskalera? Czy wcześniej używasz Timera do innych celów?
Jeśli chodzi o mechanizm przerwań, to wszystko masz ładnie opisane w formacie pdf na stronie Atmela . Wywoływanie przerwania w procedurze obsługi jeszcze innego to porażka. Przerwania są kolejkowane i po powrocie z jednego jest wywoływane drugie, dlatego procedury obsługi powinny być jak najkrótsze (polecam asm ;)). W procedurze timera możesz sobie...
Potrzebuje ale w momencie gdy jest ustawiony do pracy w trybie asynchronicznym.
ad. 1. To znaczy, że jak spojrzysz do noty procka, do opisu wyprowadzeń OCx timera to się okaże, że timer może sterować tym pinem prowadząc do zmiany jego stanu. W efekcie wcale nie musisz tego robić programowo. Ustawiasz w timerze opóźnienie, wyzwalasz go w przerwaniu zera i tyle. ad. 2. Musisz wtedy pamiętać, że wartość tuż po zmianie MUX będzie dotyczyła...
Ja zawsze wpisuję Timer1 = var i to jest wartość początkowa licznika , a wpisując instrukcję load , podajesz ilość impulsów do zliczenia , a nie wartość początkową timera, kompilator sam wylicza wartość początkową.( chyba ). Timery zliczają w górę.
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...
Kolega czytał opis w helpie o Config RC5 ? jest tam napisane, że GETRC5 korzysta z Timera 0 , a tego samego timera używasz do multipleksowania.
Przeglądając Twój program mam takie małe spostrzeżenie, a mianowicie w pętli głównej masz wywołaną procedurę Gettime - ' Call Gettime' - która działa na I2C. Co się stanie gdy podczas wykonywania procedury Gettime zostanie zgłoszone przerwanie od Timer'a?? Program przerywa wykonywanie procedury Gettime i skacze do obsługi Timera a tam jest wywoływana...
Witam Widzę, że temat z Timerem / Counterem w uC-ach ATMELa był wałkowany przynajmniej kilkadziesiąd razy,przeczytałem kilkanaście tematów - aczkolwiek nie znalazłem nigdzie uporządkowanej i miarodajnej odpowiedzi na kilka z moich pytań dot. Timera / Countera. Otóż chciałbym się dowiedzieć 1. jakie możliwości (czytaj: "co ten timer / counter potrafi...
Na bascomie się nie znam ale w którym miejscu masz obsługę wektora przerwań od timera ?
Hmm. Nie będziemy się teraz przekonywać do swoich racji, ale z doświadczenia wiem, że wszystkie przewodowe liczniki Sigmy (od 506, do 1606, nie wiem jak jest w DTSach i STSach), wszystkie ATECH, wszystkie wynalazki typu SHARK, przewodowe CATEYE mają kontaktrony. Co do sposobu pomiaru myślę, że najlepszy byłby pomiar czasu pomiędzy impulsami. Pytanie,...
To nie są przerwania na PB1, 2, 3, a sprzętowe wyjścia timerów. NA ATmega8 masz trzy wyjścia PWM - dwa z T1 i jedno z T2. Nie wiem, ilu w końcu potrzebujesz. Jednego powinieneś użyć do generowania 36 kHz, kolejnego (a może dwóch) do sterowania silnikiem. Czemu mają służyć te zabawy z przerwaniem timera i programowym machaniem nogą uC?
Pomysł jest straszny. Poczytaj o timerach.
Co to za bełkot!? 1. Timer do odmierzania czasu skonfigurowany jako licznik impulsów z zewnątrz! 2. Podprogram obliczania czasu nigdy nie będzie wywołany z pętli głównej! 3. Wyświetlana ma być wartość licznika. Podaj kolego na koncówkę 11 impulsy z zewnątrz to je zacznie zliczać i wyświetlać. Bedziesz miał przynajmniej licznik impulsów. Program do zegara...
A może na zakończenie przerwania załadować wartość do timera???
A nie możesz wykorzystać zwykłego timera?
Ja bym napisał tak, jak w załaczeniu. Zmieniając wartość dla zmiennej Czas_led , można zmieniać czas świecenia ledki.
Witam, próbuje wykonać prosty odtwarzacz midi w oparciu o mikrokontroler atmega8535. Bazując na przykładach z internetu udało mi się temat jakoś wstępnie ogarnąć. Niestety na atmedze nie uruchamia mi się zegar o który oparte mają być programy. Wszystko jakby "wisi". Dodam że programuję w C w środowisku Code Vision AVR. W celu zlokalizowania problemu...
Zamiast delay wykorzystaj inny timer.
ATmwga 8 ma 3 timery... 2x 8-bit i 1x 16bit... Timer2 może pracować z kwarcem zegarkowym... Timer1 jako PWM... A timer0 jako licznik...
Drodzy urzytkownicy, To moje początki w programowaniu contollerów. Chciałbym zaprogramować timer na ATmega8. Proste logiczne programy udało mi się już napisać. Moim następnym zadaniem jest zaprogramowanie timera z licznikiem, niestety na początek mam problemy nie wiem jak zaprogramować timer. Czy ktoś mógłby mi w tym pomóc. Algorytm mojego programu...
Włączyłeś przerwanie od "Timer Compare" (OCIE1A) które nie jest obsłużone.
Możesz to zrobić na dwa sposoby. 1. W przerwaniu zmienisz stan tego portu. 2. Przerwanie ustawia ci pewną flagę że nastąpiło odmierzenie 1 sekundy a w pętli głównej programu testujesz tą flagę i jak wystąpi to zmienisz ten port a flagę kasujesz I cała filozofia. Czy to jest jasne ?
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.
Jeśli masz detekcję otwarcia/zamknięcia migawki to nie ma najmniejszego problemu z pomiarem. Nawet ATMega8 ma timer z możliwością pomiaru czasu - tryb capture. Podajesz sygnał na wjście timera i potem odczytujesz rejestr zawierający timestamp zdarzenia. Parę linii kodu. Ale jak wykryć otwarcie/zamknięcie migawki? Laserek i mierzenie odbicia od migawki?
Ale w tym drugim wariancie nie korzystam z przerwań tylko z timera.
Wewnętrzny oscylator RC jest mocno niedokładny. Z pewnościa musisz kupić zewnętrzny kwarc, ale na ATmedze8 32mhz raczej nie pociągniesz :P Bardziej zalecane jest jednak kupienie kwarcu zegarkowego 32.768 kHz i podłączenie pod piny TOSC1 i TOSC2 które wykorzystuje specjalnie dostosowany pod to Timer2 w trybie asynchronicznym. Wtedy uC można taktować...
To zależy od konstrukcji reszty programu. Nie ma jedynie słusznych i najlepszych rozwiązań. Ja być timer włączał i wyłączał po prostu w kodzie. Rozwiązanie z flaga też jest ok, tylko wtedy nie do końca wykorzystujesz sprzęt - po co inkrementować zmienną skoro masz licznik timera.
64 takty to o połowę krócej. :) W każdym razie, rzeczywiście obsługa tego przerwania w asemblerze powinna się spokojnie zmieścić poniżej 2us. Ewentualnie można jeszcze dodać bramkę AND sterowaną z drugiego timera i załatwić to sprzętowo.
Metoda ta sama odnośnie pomijania niektórych próbek .. ale jak mniemam uzyskujesz częstotliwości mniejsze - ze względu na czas potrzebny na obsługę timera.
wykorzystaj wolny timer w uC , wprowadź zmienną licznikową i np. co określoną ilość przepełnień timer ,skok do prodprogramu ;)
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
Witam serdecznie, chcę taktować timer Atmega8 zewnętrznym kwarcem zegarkowym, a sam uC taktować wewnętrznym oscylatorem RC. Tylko nie wiem jak mam skonfigurowac Atmega8 abz to osiagnac, pewnie trzeba cos w fusebitach zmienic, ale nie wiem co.. Prosze o pomoc. Pozdrawiam!
Tyle że jak z bascoma jestem noga bo programuję pół roku i nie umiem skalibrować timera
Zasada jest taka, że podczas wykonywania przerwania, wszystkie inne przerwania są zablokowane (chyba, że się jawnie ponownie załączy przerwania, ale to wymaga kilku drobnych operacji aby nie przeładować stosu). Jeśli w pętli głównej jest wywoływane "rc5decode", to przerwanie ustawiające "timer_flag" będzie się wykonywać. Natomiast załączenie rc5decode...
Okej racja,w zasadzie to nie ma znaczenia gdzie są przyciski podpięte, działanie zależy od stanu początkowego w programie. Układ już gotowy, teraz męczę się z tymi timerami: [syntax=cpp] #define F_CPU 16000000uL #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <stdlib.h> #include "HD44780.h" //Wyświetlacz:...
Nie jestem pewien, ale może się rozchodzić o różną częstotliwość względem napięcia zasilania. Mam na myśli że jak ustawisz 8MHz to w zależności od Vcc i temperatury możesz mieć np: 3% mniej czyli ~7,75MHz, zaznaczone jest to w dokumentacji na wykresach od strony ~275. Mogło by to powodować kilka sekund różnicy na minucie. Deklaracja to tylko ta linijka:...
........, a podpowiedzcie mi jak mogę obsłuzyc Rc5,serwo i pwm? Pozdraiwam Dla obsługi RC5 i kontroli serva użyłeś w sumie 2-ch timerów... ATMega8 posiada wbudowane 3 timery , zastosuj więc ten trzeci do 'produkcji' PWM''. Jeżeli ten ostatni (dotychczas wolny) jest Timer1, to ma on dwa kanały dla PWM, na których możesz generowac praktycznie dwie różne...
Timer 0 w atmedze8 nie ma pwm. Powinieneś użyć Timera 2, czyli rejestrów TCCR2 i OCR2.
Na razie masz impulsy o długości 920us co 2.46ms. A powinny być 1-2ms co 20ms. Poza tym te impulsy są niestabilne. Znierzone oscyloskopem- widzisz jakie długie mam sondy... A teraz masz 142us co 2.64ms. Dalej źle. No tak-oba timery ustawiają PORTB.0.
ad 1. Dla timer 0 nie jest źle, bo masz preskaler i licznik jest 16-bitowy, więc wystarczy odpowiednio to skonfigurować i te 5 Hz uzyskasz. Timer 2 ijest tylko 8-bitowy, więc 5 Hz nie uzyskasz (chyba, że zwolnisz taktowanie MCU). ad 2. Zainteresuj się bitami COM, które definiują zachowanie wyjścia timera.
Niestety nic się nie da zrobić (poza extrzemalnym skróceniu czasu wykonywania się przerwania od Timera1 albo zrobieniem generowania dźwięku na Timerze).
Doszedłem, że funkcja Getrtctime() resetuje mi układ. Wcześniej działała. Jaki może mieć związek z deklaracją timera?
A jak masz ustawiony Timer? Może pokaż ten fragment kodu :P
Przecież już mówiliśmy o tym. ATmega8 -> 1,4V (zbocze opadające) i 1,9V (zbocze narastające) przy Vcc=5V. Te napięcia dotyczą wszystkiego. Niezależnie czy używasz pinu jako zwykłego IO, jako wejścia przerwania, czy jako wejścia Timera.
Witam, w tych wszystkich kodach przydałaby się jeszcze nieskończona pętla główna, np.: [syntax=c]while(1) { }[/syntax] po konfiguracji TIMERa.
Ten sposób już kiedyś sprawdzałem i działał. Pamiętam, że kod zwiększający/zmniejszający musiał być w podprogramach. Liczyłem, że da się to zrobić na flagach od Timer.
Free run i ręczny stan konwersji - coś się Koledze pomyliło. Będę nudny - zacznij od przerwania timera.
Stosując polecenie Waitms nie moge uzyskać czasu opóźnienia mniejszego niz ok 10ms Więc go nie stosuj. Do tego są Timery.
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.
Nic sobie nie robi z naciskania guzika bo właśnie obsługuje przerwanie. Ja bym to zrobił w ten sposób. Przerwanie od czujki uruchamia jakiś timer i kończy się obsługa przerwania. Timer odmierza czas i po jego upłynięciu sprawdza jakąś zmienną i w zależności od niej uruchamia alarm bądź nie. I tak jeśli przed przyjściem przerwania z tego timera naciśnięty...
3 us* 69800 = 209,4ms wiec jest to znacząca różnica. Jak za pomocą timera rozumiem poprzez porównanie tego czasu z aktualną zawartością liczka timera?
Timer0 w Atmega8 może pracować tylko w trybie OVERFLOW (przepełnienia).
Problem leży wyłącznie w złym oprogramowaniu. Zrób to, co pisałem. Zegar 8MHz w zupełności wystarczy. Zacznij od przerwania timera.
Ok, SPL <> SPH... i podłącz AVcc, skoro uzywasz PORTC. Tak w ogóle to poczytaj notę katalogową (oczywiście nie staraj się zapamiętać wszystkiego, raczej gdzie co jest omówione), bez tego to jak bez mapy na nieznanej drodze...
ten link z przykładami pomoże Ci ;-) [url=http://www.elektroda.pl/rtvforum/to...
Przykładów w necie jest od groma. Z częstotliwością co najmniej 50Hz musisz przełączać wyświetlacz i wartość podawana na niego. Najlepiej wykorzystać do tego przerwanie timera.
No, to jak ustawić ten timer?
Pierwsze pytanie - czy w inny sposób udaje ci się coś wyświetlić na LCD? I drugie - tam jest funkcja dodająca transakcje, która przy okazji włącza timer. Poprawiłeś ją? Chodzi o tą: [syntax=c] bool LCD_PutText_B(uint8_t x, uint8_t y, char *txt, LCD_trans *buf, bool autodel) { buf->cmd=LCD_Text; buf->Ready=false; buf->SelfDel=autodel; //Czy zwolnić pamięć...
Nie pokazałeś całości, a problem może właśnie tkwić w rzeczach, których nie pokazałeś. Ale kilka uwag - po pierwsze przyciski drgają, w efekcie nie dostajesz jednego przerwania tylko dziesiątki. Twoja procedura obsługi to eliminuje, bo jest strasznie długa, ale i tak co najmniej 2 razy zostanie wywołana. Przyciski jak rozumiem masz podciągnięte rezystorem?...
Witam. Mam pytanie dotyczące umieszczenia obsługi przycisków w kodzie, a konkretnie - nie wiem czy zrobić obsługę zegara w timerze, a obsługę przycisków w pętli głównej czy też odwrotnie, a może to i to w timerze.
atmega8 bascom timer schemat timer atmega8 atmega8 przerwać timer
sprzęgła touran kolumna labiryntowy zepsuć monitor
Dwa routery w jednym pomieszczeniu: konfiguracja i porady Zębatka do pilarki Metabo KGS 255 - Wybór i wymiana