To wyświetl wartość podzieloną przez 10, przecinek i resztę z dzielenia przez 10. :)
Sciagnij, z jego pomoca powinienes zrozumiec o co chodzi kalkulator avr: http://www.edw.com.pl/ftp/kalkavr.zip
Sugestia jest jedna, cóż to za silniki, że potrzebujesz aż 3 timerów ??? Jeśli chodzi ci o to aby wykorzystać je do sprzętowych PWM - to wystarczy zrobić sobie programowe wyjścia PWM w oparciu o tylko jeden timer a dwa pozostaną wolne do twojej dyspozycji. Zatem w oparciu o kolejny Timer zrobisz sobie RC5 a jeszcze jeden zostanie ci wolny.
Najśmieszniejsze jest to, że zapis: [syntax=c]unsigned int odleglosc=0,05; //odleglosc miedzy fotokomorkami 0,05m[/syntax] Jest w języku C całkiem poprawny, ale jego znaczenie jest zupełnie inne, niż to sobie wyobrażasz. Podpowiedź: operator "przecinek". ;)
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.
Może się pomyliłem, ale chyba przerywasz sobie odbiór co 2ms. Dlaczego nie użyjesz wyższego preskalera? Np. 1024? Możesz nawet po ustawieniu Flagi wyłączyc Timer i po odbiorze włączyć ;) Timery można dowolnie konfigurować podczas pracy programu. Druga sprawa ustaw sobie odbiór do bufora w tle (Config Serialin = Buffered, Size..)
Tak jak myślałem. Za pierwszym razem ładujesz 65536-wartość jaką Timer ma zliczyć. A za drugim razem wartość jaką Timer ma zliczyć. W pierwszym przypadku wpisz: Load Timer1 = 49911 I będzie dobrze.
Witam, Chcę zrobić prosty licznik impulsów na mikrokontrolerze Atmega16 i wyświetlać ilość impulsów na wyświetlaczu LCD. Impulsy prostokątne będą doprowadzone z zewnątrz z generatora zbudowanego np: na kostce NE555... Pozdrawiam, Rafał Czy masz jakiś specjalny powód budowy zewnętrznego generatora impulsów na 555 mając do dyspozycji 3 timery (T0,T2...
Z jaką częstotliwością rezonatora pracujesz? Wszystko co dotyczy konfiguracji liczników masz w help'ie (również w b. dobrym polskim tłumaczeniu autorstwa Zbigniewa Gibka) przykład: CONFIG TIMER0=TIMER, PRESCALE=64 'ustaw timer/licznik0 jako timer z podziałem częstotliwości zegara /64 (...) ON TIMER0 wyswietl 'po przepełnieniu licznika skocz...
Oj, przejrzałem pobieżnie kod - uwierz mi - skasuj go. W C jest coś takiego jak funkcje - wykorzystaj to, kod, który masz jest kompletnie nieczytelny. Każdy normalny promotor by to coś uwalił chociażby za to. Co do szybkości działania - pokaż kod funkcji odpowiedzialnych za komunikację z czujnikami. Z kodu, który masz: - funkcjie piszące do LCD są zapewne...
Podłączyłem go do pinów portu B (t1, t0) To podłącz go do PC6, PC7. [syntax=basic4gl]Config Timer2 = Timer , Async = 1 , Prescale = 128 On Timer2 Myisr Enable Interrupts Enable Timer2 Do Loop Myisr: 'procesor będzie tu "wskakiwać" co sekundę przy kwarcu 32768Hz Return[/syntax] Można to znaleźć w helpie.
Przedstawię Ci kolego przykład zastosowania Pulsein żebyś miał jaśniej. Myślę że będzie "rzeczowiej". To przykład dla dekodowania transmisji pilotów podczerwieni. Sygnał podłaczony jest do zewnetrznego przerwania INTx i w momencie zmiany na pinie program skacze do tej procedury. Mierzy impuls i poddaje rozwadze jego długość. [syntax=basic4gl]Int_1isr:...
Wiesz, mam książkę Baranowskiego 'ATmega w praktyce'. A to co było??? oczywiście mi pomylił się autor ale tytuł ten sam ;) więc ją masz Co do wydajności prądowej to chyba też dostałeś już odpowiedzi różne, albo drivery ULN albo zwykłe tranzystory żeby ją zwiększyć i po ptakach Żeby nie robić na jednej nodze jednej diody nawet przez te tranzystory to...
Najprościej odpalić timer i w przerwaniu wystawiać dane i przełączać segmenty przykład: ISR(TIMER1_COMPA_vect) { switch(wysw) { case 0: PORTD = 0b1111110; PORTB=cyfra[jednosci]; wysw++; break; case 1: PORTD = 0b1111101; PORTB = cyfra[dziesiatki]; wysw++; break; case 2: PORTD = 0b1111011; PORTB =...
I wcale nie trzeba go zaraz fusami wyłączać bo po co? ... Wyłączyć go po prostu trzeba programowo. W takim razie nie bardzo rozumiem treści tabelki ze strony 53 Safety Level 2 In this mode, the Watchdog Timer is always enabled, and the WDE bit will always read as one. A timed sequence is needed when changing the Watchdog Time-out period. Ja to rozumiem...
Mówisz masz na timerze. $regfile = "m16def.dat" $crystal = 1000000 $hwstack = 32 $swstack = 8 $framesize = 16 Config Timer1 = Timer , Prescale = 1024 Enable Interrupts Enable Timer1 Start Timer1 On Timer1 Odmierz_czas Const T = 6942 Config Portb.1 = Output : Portb.1 = 1 : Led Alias Portb.1 Config Portb.2 = Input : Portb.2 = 1 :...
--> kolejne PWMy znajdują się z tego co pamiętam na PD7 i PB3. Proszę o odzew i dziękuję za ew. pomoc. Podobnie jak te na T1 tylko dotyczą odpowiednio T2 i T0 A to przykładowe inicjacje /******************************** Init timer T2 */ void InitT2 (void) { TCCR2 = (0<<FOC2) | //forsowanie (0<<WGM21)|(1<<W...
To może się okazać bardziej skomplikowane, niż się wydaje. Wszystko zależy od tego, jaki jest algorytm wyświetlania w tym częstościomierzu. W każdym razie, w najprostszym przypadku można próbować coś w tym rodzaju: 1. utworzyć tablicę na 7 cyfr wyświetlacza. 2. ustawić timer na generowanie przerwań z prędkością > 100 razy na sekundę. Lepiej nawet rzędu...
Różnica będzie taka że w trybie 14 nie uzyskasz zerowego wypełnienia, a w trybie 15 nie uzyskasz maksymalnego wypełnienia. Jakiś czas temu sam się na to naciąłem The procedure for updating ICR1 differs from updating OCR1A when used for defining the TOP value. The ICR1 Register is not double buffered. This means that if ICR1 is changed to a low value...
a jesli powiem ze tak tez próbowałem tylko ze odczyt z kodów z rc5 trwa z przerwą 600ms która musi byc pomiedzy odczytem a konwersją temperatury z ds1820 :( Jakoś nie widzę problemu. Przecież Int0 ma wyższy priorytet niż DS. Jerśli istnieją jakieś konflikty to należy zablokować przerwanie Int0 na czas inicjacji DS'a i odczytu temperatury. W trakcie...
Witam! Chcę ustawić TIMER1 w atmedze 16 tak aby generował przerwania mniej więcej co sekundę w trybie CTC (dodam, że nie zależy mi na aptekarskiej precyzji). W tym celu ustawiłem następujące rejestry: TCCR1A |= (1<<WGM12); //tryb ctc , timer1 TCCR1B |= (1<<CS12)|(1<<CS10); //prescaler 1024 / OCR1A = 7813; // 8MHz/1024 TIMSK |= (1<<OCIE1A);...
#include <avr/io.h> // dostęp do rejestrów #include <avr/interrupt.h> // funkcje sei(), cli() #include <avr/delay.h> ISR(TIMER1_OVF_vect) { TCNT1=50; } ISR(TIMER2_OVF_vect) { TCNT2=0x50; } int main() { // Ustawienie licznika 2 TCCR2=_BV(CS20); // Ustawienie licznika...
http://obrazki.elektroda.pl/7114210100_1... Witam wszystkich serdecznie ! Z racji tego, że zbliżają się święta postanowiłem podzielić się z wami projektem elektronicznego drzewka szczęścia. Urządzenie powstało prawie rok temu i było prezentem urodzinowym dla mojej dziewczyny którą serdecznie pozdrawiam !!! :D Założenia do projektu:...
Witam Ucze sie programować mikrokontrolery, używam Vmlab'a i Winavr. Mikrokontroler to atmega16. Napotkałem następujący błąd: Program teoretycznie powinien dodawać do wyświetlacza co 300ms nowy znak. Wszystko jest ok dopóki nie włącze Timera. Jeżeli go uruchomię to znaki zamiast się dodawać zaczynają się nadpisywać (pojawia się tylko jeden znak na 1...
Ja doskonale rozumiem, że Atmegi moga pracować na kwarcu zegarkowym, tylko chciałbym wiedzieć na jakiego rzędu dokładność mogę liczyć na zwykłym kwarcu w porównaniu do kwarcu zegarkowego. -- pozdrawiam, demeus Taka sama!.... Wszystkie resonatory kwarcowe maja dokladnosc rzedu +/- 20ppm. Rezonatory zegarkowe jest o wiele wygodniej stosowac do odmierzania...
tylko z tym wklejaniem jest tak że mi strasznie miga na ekranie a zrobiłem wyświetlanie od flagi TOV1 poniżej wrzucam kod programu [syntax=cpp] int main(void) { TCCR0 |=(1<<CS00)|(1<<CS01)|(1<... //ustawienie timera 0 na zliczanie impulsów zewnętrznych TCCR1B |=(1<<CS12); //ustawienie źródła zegara timera 1 z preskalerem...
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...
Poszedłem w ślady kolegi xtream007 i zakupiłem moduł odbiornika GPS wraz z aktywną anteną. Testuje układ już od dwóch dni i zauważyłem, że odbiornik łapie fixa, zegar się synchronizuje i po chwili jakby odbiornik gubi kontakt z satelitą - co skutkuje mryganiem neonówek. Takie mruganie trwa niekiedy nawet 30-45 min, zanim złapie znowu fixa. Antenę przyczepiłem...
Jedyne ostrzeżenie to W Lini 98 /uart.c:98:10: warning: variable 'status' set but not used volatile int timestamp =0; void Timer0_init() { TCCR0 = 0x03; // = 64 TCNT0 = 256 - 115; // 1ms TIMSK |= _BV(TOIE0); } ISR (TIMER0_OVF_vect) { TCNT0 = 256 - 115; // 1ms timestamp++; }
Taki prosty multiplekser można zrobić na dowolnych bramkach logicznych, wyjdą 2*3, na sygnał, więc np. 2x74xxx00, lub 4 jeśli zastosujesz bramki z wyjściem OC i zrobisz wired and.
Po pierwsze OCR0 nie jest 16b tylko 8b ... zapisując 499 do rejestru trafia 243... Reszte sprawdzam... //Dla porównania czyścisz wyjście, więc zakładam, że pamiętałeś o włączeniu podciągania na tym pinie. ////Nie konfigurując bitów WGM00 i WGM01 timer zlicza do 255, a przy 243 czyści wyjście ... to nie jest 50% duty(wypełnienia). //////PS. Twój miernik...
TCCR1B |= ((1 << CS10) | (1 << CS11) | (1 << CS12)); /* ustawia timer na pracę z zew. kwarcem */ Nie z zewnętrznym kwarcem, a z zewnętrznym źródłem sygnału. Timer1 o ogóle nie może pracować z rezonatorem kwarcowym. Gdzie w takim razie go w ogóle podłączyłeś (rezonator)?
a ten bufor na ktory wskazujesz to ma jakis rozmiar? <: to ze ci to dziala to tylko przypadek [; ciekawi mnie tez, dlaczego deklaracja w jakims tam stylu od razu odpada... 4\/3!!
Witam Mam następujący problem: Mój program ma robić coś takiego. T0 zlicza impulsy z zewnątrz, T1 mierzy czas, w przypadku przepełnienia T0 przepisujemy wartość T1 do tablicy #include <avr/io.h> #include <compat/deprecated.h> #include <util/delay.h> #include "lcd.h" #include <avr/io.h> #include <stdlib.h> #include...
Nie wiem na które pcb patrzysz , to ostatnie do pełnej wersji z pomiarem prądu i napięcia ,patrzę i widzę że jest OK . pin40 i pin39 są podpięte do dzielnika kondensator żeby nie pływał pomiar zbytnio. nie widzę tego o czym piszesz . Wieczorem sprawdzę jeszcze raz i podam zaktualizowane . Ok jest wieczór więc zamieściłem na 2 str. schemat i pcb w eagle...
Jeżeli Ci PCF niepotrzebny/oszczędzasz na płytce to zerknij do DSa zamiast do poradników. Tam jest to logicznie wszystko wytłumaczone. Ja podpowiem, że możesz uruchomić timer w trybie CTC z preskalerem np 8, który będzie generował przerwania gdy doliczy do 10 000. To da odcinek czasu 10ms. W przerwaniu możesz inkrementować zmienną odpowiedzialną za...
A te pozostałe peryferia śmigają na przerwaniach?? Minimalny czas przerwania powinien być tak dobrany aby zanim przepełni się Timer zdążyło się wykonać jego przerwanie. U mnie tylko działał UART podczas pracy z serwami więc żadnych problemów nie było.
nie jestem pewien bo dawno porzuciłem bascoma ale aby coś wygenerować timer musi być chyba skonfigurowany jako pwm a nie timer pozdrawiam
Po wykryciu obecności obu sygnałów startujesz (lub zerujesz) timer po odczekaniu 3 sec w przerwaniu ponownie sprawdzasz stan wejść i wykonujesz odpowiednią akcję, ewentualnie ustawiasz flagę i w pętli głównej realizujesz obsługę zdarzenia
Kwarc 1,8432MHz, prescaler 1024, timer w trybie CTC na 180 taktów. Kwarc 2,4576MHz, prescaler 1024, timer w trybie CTC na 240 taktów.
Jak sprawdzasz, czy Timer działa/niedziała? I czy masz kwarc 1 MHz?
gdyby ten wątek czytał ktoś kto akurat przypadkiem nie ma właściwej książki ;) to przykłady zastosowania input capture na atmedze można często znaleźć w projektach gdzie odbierane są sygnały z pilota na podczerwień bo tam właśnie mierzy się czasy impulsów i przerw między nimi hm, właściwie to odpowiedzi są banalne: 1. tak 2. no przecież to proste skoro...
Zbudowałem sobie taki oto układ termometru i zegara oparty na atmega16 i wyświetlaczu lcd. I wszystko działa jak należy ale nie do końca. Temperatura wyświetlana na lcd strasznie skacze po różnych wartościach w przeciągu paru sekund tzn. jak np. w pokoju jest 20 stopni to on wskazuje raz właśnie te 20 raz 19 czasami 21 albo 14 15 czy 16 stopni celcjusza....
ewentualnie na jakims innym mikrokontrolerze? W atmegach robisz to bardzo prosto. Podłączasz kwarc zegarkowy do wejść timera asynchronicznego - TOSC1, TOSC2. Np. w atmega16 ustawiasz preskaler timera2 na 128. Timer jest 8-bitowy więc przepełniać się będzie co 1s ;)
Witam :) Mam problem, zegarek na Timer0 nie chodzi poprawnie natomiast na Timer 1 pracuje poprawnie. Pwm działa tylko na Timer1. Co zrobić aby zegarek pracował na Timer1 a Pwm na Timer0? Config Timer1 = Timer , Prescale = 64 Enable Interrupts Enable Timer1 On Timer1 Mierzymy Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down ,...
W nowszych Megach EEPROM ma własny timer niezależny od zegara systemowego. Pzdr. N.
Witam. Każdy timer ma swój prescaler. [syntax=c] OCR1A = 0x0000; OCR1B = 0xFFFF; TCCR1A |= (1 << COM1A1)|(1 << COM1B1); TCCR1A |= (1 << WGM11); TCCR1B |= (1 << WGM12)|(1 << WGM13); TCCR1B |= (1 << CS10); [/syntax]
W takim razie będę musiał gdzieś wcisnąć kwarc na płytc Na piny TOSC1/TOSC2 może 32768Hz? Tyle, że wtedy gubisz 2 piny w port c (iirc) i korzystasz z timer 2 (znów - o ile mnie pamięć nie myli).
Witam Od paru dni bawie się w programowanie atmega16 w oparci o bascom college tyle ze tam przykłady są napisane na Bascom 8051 a ja musze używać (chyba) bascom avr. I z reguły bez większych problemów mi się to udawało do czasu zabawy z taimerami. Czy kos może mi przerobić poniższy kod na bascoma avr (chodzi o podobny efekt)? A może da się pisac w ascom...
Strona 29 noty katalogowej ATmega16 ( Timer/Counter Oscillator ) : For AVR microcontrollers with Timer/Counter Oscillator pins (TOSC1 and TOSC2), the crystal is connected directly between the pins. No external capacitors are needed. The Oscillator is optimized for use with a 32.768 kHz watch crystal. Applying an external clock source to TOSC1 is not...
Jako że prosty przykład, wiele tu informacji nie trzeba wiedzieć. Jedynie przerwaniu od INT0, oraz ustawienie timerta0 w tryb CTC (do stworzenia timera programowego). Reszta to tylko pętla główna w której jest sprawdzany warunek co około jedną sekundę zgodnie z założeniem:[syntax=c]#include <avr/io.h> #include <avr/interrupt.h> // Atmega16...
timer atmega16 timer atmega16 bascom atmega16 eeprom
wymiana grzałki napiąć stroić głowica podłączyć ogrzewać fotel
Mercedes Vito 109 CDI – lokalizacja i diagnostyka przekaźnika świec żarowych W639 BERU HELLA Ford Focus Mk2 1.6 16V – funkcje małej manetki pod kierownicą, pilot radia VOL/SEEK/MODE