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"...
$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...
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 =...
Pozwolę sobie umieścić post pod postem żeby wiadomość dotarła do zainteresowanego. Jeszcze lepszym wyjściem dla takiego zegara będzie zastosowanie dedykowanego rezonatorka 32768Hz (32,768KHz) Wartość 32768 to w zapisie binarnym dokładnie piętnaście bitów. Jeśli więc Timer będzie zliczał generowane impulsy to po 32768 uzna że mineła sekunda :D Bascom...
tak jesli timer1 jest tylko do odliczania tej jednej sekundy i do niczego innego go nie potrzebujesz
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.
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, 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...
Przeanalizuj sobie to. Dorób ustawianie zegara i gotowe. $regfile = "m8def.dat" $crystal = 4194304 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portb.7 , Db7 = Portb.6 , E = Portd.7 , Rs = Portb.0 Config Timer1 = Timer , Prescale = 64 'konfiguracja timer1 Dim Sekunda As Byte Dim Minuta As Byte Dim Godzina...
Proszę. Pisałeś kiedyś, że przy okazji chciałbyś się czegoś nauczyć, więc masz tu przykład który napisałem przy kawie. Trzy różne czujniki- DS18B20, LM35 i Termistor NTC 10k - podłączone jednocześnie do jednego mikrokontrolera. Dla czujników NTC wyznacza się ich "Betę" czego nie robiłem dlatego wskazywana przez niego temperatura różni się nieco od tych...
Kod od Kolegi matekogon nie działa. Cały czas świeci led. Ano dlatego że podobno się nie da zrobić dłuższego czasu na timer0 niż 1 sekunda. A mi nie potrzebna jest jedna sekunda tylko dłuższy czas. Zrobiłem na wzór tego kodu, który mi podałeś i też nie działa: [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 1000000 $hwstack=32 $swstack=32 $framesize=40...
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?...
Zadaniem programu ma być odmierzenie 1 sekundy (zmiana stanu na wy). Przerwanie od timera 2 przychodzi co 1ms. Kwarc zewnętrzny ~11MHz. Czy ktoś mógłby napisać dlaczego program nie działa? #include<avr/io.h> #include <avr/interrupt.h> int i=0; int main(void) { DDRC = 0b00001000; TCCR2=_BV(CS22); TIMSK = _BV(TOIE2);...
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...
Witam serdecznie zrobiłem zegar na w/w procesorze i wyświetlaczach 7 segmentowych led. Sekundę odmierzam z wykorzystaniem Timera 2 w trybie asynchronicznym z dodatkowym kwarcem 32,768Khz. Multipleksowanie wyświetlaczy realizowane jest za pomocą timera0. Do tej pory wszystko działa świetnie, Chciałbym jednak dodać jeszcze zliczanie setnych sekundy i...
Witam. Napisałem sobie prosty kod: /** * Timer - test */ #include <avr/io.h> #include <avr/interrupt.h> #define T0_INIT 0xFF //Wartość początkowa timera volatile uint32_t timer; //Odliczanie czasu przez timer /** * Przerwanie przepełnienia timera */ SIGNAL ( SIG_OVERFLOW0 ) { TCNT0 = T0_INIT; if ( timer > 0 ) timer--;...
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...
Witam Próbuję ustawić Timer0 oraz Timer1 aby zmniejszały zmienną co 1 sekundę. Rezonator 4Mhz. Czy możecie sprawdzić czy wszystko mam ustawione poprawnie ? // Inicjalizacja T0 TCCR0=0x03; TCNT0=0x0F; // Inicjalizacja T1 TCCR1A=0x00; TCCR1B=0x04; TCNT1H=0xC2; TCNT1L=0xF7; interrupt [TIM1_OVF] void timer1_ovf_isr(void) { TCNT1H=0xC2;...
Witam, mam problem z ustawieniem przerwania od timera0 na atmega8, jestem początkujący jeśli chodzi o assembler... Problem leży w tym że, uP jest taktowany z wewnętrznego zegara 1MHz, i jeśli mam ustawiony prescaler na 8 czyli rejestr TCCR0 na 2 to powinienem otrzymać obsługę przerwania co 8us a na oscyloskopie otrzymałem igiełkę co 2ms;/ nie wiem co...
Dzień dobry. Mam problem z ustawieniem odliczania czasu za pomocą timera w Atmega8. uC taktowane kwarcem 16MHz, preskaler 64, w kalkulatorze otrzymałem wartość 24999 jeżeli pożądane jest 100ms. if zaznaczony slashami odpowiada za odczyt ilości zliczonych impulsów i po przekroczeniu zadanej wartości dodać 1/10 sek (zmienna ssek), aż do otrzymania pełnej...
Witam, Piszę program do atmega8 i mam problem z ustawieniem Timer1. Dopiero zaczynam programować więc proszę o wyrozumiałość. Chciałbym ustawić tak timer1 aby zaczął liczyć czas od pojawienia się na portd.3 pierwszego impulsu do drugiego impulsu, zapisał wartość do zmiennej, wyzerował się i zaczął zliczać czas od drugiego do trzeciego impulsu zapisał...
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ę...
Witam Potrzebuje odmierzać czas(jak najdokladniej) od 0.01s do max 1s, w zależności od wartości którą otrzymam z zewnątrz. Problem polega na tym, ze timera 16bitowego nie moge wykorzystać bo jest juz uzywany. Program pisze w C pod Atmege8. F_CPU=8Mhz
Witam. Robię układ do pomiaru czasu. Potrzebuję dokładność do 1ms. Napisałem taki kod: Według zmiennej K - czas w sekundach | Według zmiennej VAL - czas w ms 1|1 2|2 3|4 4|6 5|8 6|10 7|12 8|14 9|16 10|18 11|20 12|22 13|24 14|26 15|28 Gdzie jest jakiś błąd? Bo nie mam pojęcia dlaczego to nie działa.
Witam Walczę od jakiegoś czasu z timerem, próbuję odmierzać czas, no i niestety zegar mi się delikatnie "rozjeżdża". Moglibyście Panowie podpowiedzieć mi, gdzie robię błąd. atmega8 z kwarcem 8Mhz. [syntax=c] #include <avr/io.h> #include "lcd_lib.c" #include <avr/interrupt.h> volatile char time_s=0; volatile char time_m=0; volatile char time_h=0;...
Witam Zrobiłem sobie zegarek na ATmega8. Ustawiłem wewnętrzny "kwarc" na 8Mhz ale sekunda trwa u mnie krócej o kilkanaście ms i po 1 minucie zegarek śpieszy kilka sekund :/ powiedzcie mi co tu jest źle. przecież preskaler jest dobrze ustawiony. #define cbi(add,bit) ((add) &=~(1<<bit)); #define sbi(add,bit)...
witam chce odmierzyć 1 s za pomocą timer0 w procku Atmega8, robię to tak: $regfile = "m8def.dat" $crystal = 8000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0 Config Timer0 = Timer , Prescale = 256 On Timer0 Sekunda Enable Interrupts Enable Timer0 Start Timer0...
witam. Mam problem dotyczący generowania równych odcinków czasu przez timer0 i timer1 osoby mogące udzielić mi pomocy proszę o kontakt. Dokładnie mój problem wygląda tak że każdy program który wykorzystuje timer0 i timer1 ne działa tak jak powinien,np program który zaświeca po kolei 10 diod w odstępach 1sekundy w rzeczywistości nie zaświeca ich po 1s...
Witam! Jestem początkującym programistą i chciałbym zrobić sobie zegarek na LCD. Napisałem kod w BASCOM z wykorzystaniem TIMERA1 i wewnętrznego oscylatora, ale on się śpieszy. Nie mogę wcale ustawić aby dokładnie odliczał jedną sekundę. Czytałem w internecie, że do tego trzeba wykorzystać TIMER2 i zewnętrzny kwarc zegarkowy 32,768kHz, ale ja mam problem...
Witam, chciałbym przerobić projekt z tego linku http://www.elektroda.pl/rtvforum/topic90... Mianowicie zostawić odliczanie czasu i wyświetlanie go a dodać do niego funkcję w której o wpisanej "na stałe" godzinie w funkcji załączy przekaźnik. Przekaźnik jest 4 modułowy więc potrzebuje 4 wolnych pinów. Kod, który zmodyfikowałem wygląda następująco...
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...
Witam serdecznie. Ostatni kod przepisałem żywcem z książki "Programowanie mikrokontrolerów w języku BASCOM" autorstwa Marcina Wiązania. Dioda miga ciut za wolno. Tu mi ręce opadają, dlatego zwracam się do Was o pomoc. Kod: Nie wierzę w to co napisałeś!!! Autor ksiązki nie zrobiłby takiego błędu... Podajesz błędne instrukcje, i oczekujesz poprawnej...
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...
potwierdzam, mam system rejestracji czasu pracy, w terminalach kwarc 32... na timer asynchr. opóźnienie do 6-ciu sekund na dobę, o północy synchronizuje 18 terminali i jest sekunda różnicy o 6-tej rano. 4 sekundy to dobry wynik. na zegarkowym bez korekty trymerkiem i chuchaniem/dmuchaniem (czyli stabilizacji temperatury) to sie musi rozjechać. nawet...
Witam! Wykonałem ten zegarek lecz mam kilka problemów. 1) Wsad drakerus'a zmodyfikowałem tak jak polecił kolega berq na 16MHz: $crystal = 16000000 i Config Timer1 = Timer , Prescale = 256, lecz zegarek 10 sekund zlicza w normalne 3 sekundy. Nie znam się na językach programowania ale zauważyłem że jak zmieniłem jeszcze w tym programie Timer1 = 3036 na...
Witam Mam banalny program, po włączaniu zasilania startuje licznik czasu, program prawie działa nie do końca dobrze. Atmega8 steruje wyświetlaczem LED (segmenty) z portu D, poszczególne cyfry od najbardziej znaczącej W4,W3,W2,W1 sterowane z portu B, z portu B jest też sterowanie jasnością wyświetlaczy (PWM) i buzerem. Ogólnie licznik liczy ale buzer...
Witam Mam płytkę z Atmega8 połączoną z czujnikiem PIR ( wejście INT1 przez transoptor ), do tego pomiar ADC ( od wartości adc zależy czas po jakim PWM będzie zmniejszone, opcjonalnie chcę też pod INT0 podpiąć przycisk, coby włączyć światło, gdybym nie znalazł się w zasięgu czujnika. Dodatkowym "bajerem" jest to, że światło ( listwa LED ) powoli się...
Witam Mam płytkę sterującą dwoma kanałami PWM - przez ULN oraz MOSFETY. Płytka ma dwa wejścia oraz wejście czujnika PIR - INT1. Ma przede wszystkim sterować włączaniem taśmy LED 12V z czujnika PIR ( oprócz tego z drugiego wejścia ). LED włączona przez PIR ma docelowo świecić określoną ilość czasu ( zależną od natężenia światła ) i się wyłączyć. Żeby...
Witam. Chciałem sobie zrobić prosty zegarek. Napisałem kod, podłączyłem wszystko na mojej płytce testowej i niby działa, ale ... Za szybko odmierza czas. 1 sekunda trwa tutaj dużo krócej. W ciągu 1 minuty w rzeczywistości, naliczy 170 sekund. ATmega ma ustawiony fusebit na wewnętrzny oscylator 8Mhz, do XTAL1 i XTAL2 mam podłączony kwarc zegarkowy. Kod...
$regfile = "ATtiny25.dat" $crystal = 8000000 Config Pinb.2 = Output ' pompa Config Pinb.1 = Output ' dioda Config Timer1 = Timer , Prescale = 256 On Timer1 Sekunda Dim Sekundy As Byte Dim Minuty As Byte Dim Milisekunda As Byte Enable Interrupts Enable Timer1 'Timer1 = 6 ldi R16, 6 !Out TCNT1, R16 Set Portb.2 Set Portb.1 Do If Minuty = 0 Then...
Posiadam książkę pt. "Programowanie mikrokontrolerów AVR w języku BASCOM" Marcina Wiązania i jest tam przykład zegarka z wykorzystaniem timera. Problem polega na tym że sekunda tak naprawdę trwa "wieki" prawie 8s prawdziwych. Połączyłem układ zgodnie ze schematem w książce i tak samo, odłączyłem rezonator nic się nie zmieniało, zmieniałem taktowanie...
Witam Chciałem dołożyć "atrakcję" do budzika w postaci odtwarzacza muzyczki ( oprócz tradycyjnego buzera. Mimo ograniczeń co do parametrów pliku oraz wielkości obsługiwanej karty SD ( 2Gb bez SDHC ) moduł WTV020 jest ciekawy. Do wyjścia BUSY podpiąłem przez rezystor diodę LED. Do wyjścia SP+ i SP- podpiąłem głośniczek 0,5W/8om Pliki AD4 pobrałem i internetu,...
Witam. Mam straszny problem z ATMEGA8 (zresztą podobne rzeczy działy się w ATMEGA16). Mianowicie, robię sobie prosty sterownik. Posiada on m.in. 4 przyciski, zrobione w ten sposób, że są one z jednej strony podłączone do wejść PIND.0 – PIND.3. Wejścia te podłączyłem również przez rezystory 4,7k do masy, oraz równolegle do tych rezystorów dałem...
No to temat troszke ruszam, korzystam oczywiscie z kawalkow gotowych kodów co by nie klepac od nowa. W zwiazku z tym iz czekam dopiero na plytki w ktorych bedzie i RTC i podtrzymanie zasilania bawie sie na tym co mam , czyli atmega8 i zegar obsluguje na nim. '8 MHz/256/31250 = 1 s $regfile = "m8def.dat" $crystal = 8000000 Config Pinb.3 = Input...
Witam ja dopiero zaczyna zabawe z avrami ale zegarek udało mi się zrobić może ci się przyda, tylko nie ma jeszcze ustawiania godziny, trzeba w programie ustwic aktualną i jest to na wewnętrznym kwarcu (mało dokładny ale do zabawy wystarczy) bo nie chciałem zepsuć sobie megi jak bym coś poplątał w fusbitach :D $regfile = "m8def.dat" $crystal...
Witam potrzebuje pomocy w zrobieniu programu który będzie działał na płytce która podałem w temacie, za bardzo nie znam się na bascomie( w nim muszę napisać program) i znalazłem tylko programik który działa na atmega8 ale z tego co się już dowiedziałem nie będzie działać na mojej płytce, i pytanie, szybciej się poprawi program który już został napisany...
Witam, zlozylem sobie ten uklad, edytowalem program tak aby wpisac swoje numery tel. i nie moge uruchomic tego ukladu, narazie bazuje na pierwszej wersji programu od Xury'iego i jego schemacie, moze ktos mi powiedziec czy ten program powinien wystartowac? Rem Projekt powiadomienia o alarmie by Xury '$sim 'dla symulacji $regfile = "m8def.dat"...
Udało mi się zejśc do Iśr= 1mA wyłączając na czas uśpienia przetwornik i zmniejszając częstotliwość oscylatora. Da się jeszcze niżej zejść kod [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 1000000 Config Portb = &B111111 Portb = &B111111 Config Portd = &B11111111 Portd = &B01111111 Config Portc = &B100000 Portc = &B011100 P_godz Alias Pinc.2 P_min...
Witam po raz sto pierwszy. Stali bywalcy elektrody pewnie mają już dosyć tych tematów (i mnie zapewne też :D), ale powróciłem do tego zagadnienia. Żeby nie było, poświęciłem dwa dni na szperaniu po elektrodzie w poszukiwaniu postów o tej tematyce; znalazło się troche (oj troche :)), ba...nawet znalazłem kod źródłowy w C/C++ który co prawda kompilował...
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.
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.
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.
kolejne preskalery wpływają na dokładność pomiaru. Do Waszych zastosowań wystarczy Tiny26 który z preskalerem *256 spokojnie może zliczyć nawet 5GHz. Piny zwykłych I/O pracują z połową częstotliwości systemowej z powodu bufora, a pin licznika na pewno bedzie pracować poprawnie z f mniejszym około 2krotnie od f timera czyli powiedzmy 20Msamples/s Pozdrawiam
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 :)
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ę
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...
Na forum timerów jest zapewne sporo - użyj wyszukiwarki. Podobnie w sieci. Pisząc "odlicznie czasu" masz na myśli zegar czasu rzeczywistego (sek, min, godz), czy jakąś inną jednostkę np. mikrosekundy, itp? WinAVR - jeśli możesz zainstaluj AVR Studio 4 i nie męcz się więcej.
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:...
1) Czas masz źle policzony, rzeczywiście wychodzi 2 sekundy :) Policz jeszcze raz, np: #define F_CPU 14745000ul #define TIMER_PRESCALE 1024 #define SECONDS(s) ((s)*(F_CPU)/(TI... 2) podpięcie przycisku pod przerwanie to pomyłka - poczytaj o eliminacji drgań styków 3) po wyłączeniu diody musisz zatrzymać...
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);
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...
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...
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....
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...
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 sekunda sekunda atmega8 timer atmega8
przekaźniki relpol odzysk ciepła elektroda bascom
nauka elektroniki nauka elektryki
Zwarcie L–N, faza na zerze w instalacji elektrycznej – diagnostyka, MCB, RCD, upalone zero Klonowanie CID karty SD, microSD, eMMC – techniczne możliwości, ograniczenia, narzędzia