Twój problem nie wynika z priorytetu przerwań tylko braku umiejętności prawidłowego ich wykorzystania i zastosowania biblioteki która jest źle napisana . Zazwyczaj dzieje się tak gdy użytkownik w przerwaniu umieszcza całą procedurę obsługi bufora , wyświetlacza lub innych peryferii lub po prostu timer odmierza krótszy czas niż trwa obsługa przerwania...
Jeśli chodzi o soft, to powstał szkielet programu. Na razie odmierza to czas, i powinno obsługiwać pilot RC5. W polach „A:” – powinien wyświetlić się adres pilota, „C:” – numer przycisku z pilota. W symulacji programowej poszło, ale na razie nie mogę przeprowadzić prób z braku modelu. Ale żeby stworzyć wersje BETA...
Czyli procek dość dokładnie odmierza czas??
Witam dopiero zaczynam przygodę z programowaniem mikrokontrolerów i mam pytanie odnośnie odmierzania czasu na uc atmega 16. Odmierzam czas przy pomocy timera1 kwarc 16MHz. Z obliczeń wynika, że przy preskalerze 1024 muszę odliczyć 15625 impulsów więc ładuję do timera wartość 49911 i wtedy uc odmierza mi około 4 sekund zamiast 1, natomiast gdy prescaler...
Witam dopiero zaczynam przygodę z programowaniem mikrokontrolerów i mam pytanie odnośnie odmierzania czasu na uc atmega 16. Odmierzam czas przy pomocy timera1 kwarc 16MHz. Z obliczeń wynika, że przy preskalerze 1024 muszę odliczyć 15625 impulsów więc ładuję do timera wartość 49911 i wtedy uc odmierza mi około 4 sekund zamiast 1, natomiast gdy prescaler...
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...
Licznik 2 odmierza 2.5ms (czas jednego z osmiu cykli). licznik pierwszy odmierza ile ma trwac stan wysoki na linii 1-2ms w twoim przypadku
Witam Napisalem prosty programik do sterowania jednym serwem lecz serwo przesuwa sie powolutku w jedna strone tylko. Serwo to mini serwo z Conrada ES-05 .include "m16def.inc" .org 0x00 rjmp reset .org OC2addr rjmp KrotkiCykl .org OC1Aaddr rjmp DlugiCykl DlugiCykl: ldi r16,0xFF out PORTA,r16 ldi r16,0x00 out TCNT2,r16 in r16,TCCR2 sbr r16,7...
Pozwolę sobie jeszcze raz nadużyć Waszej uprzejmości i znowu zwracam się z prośbą o pomoc Sprawa dotyczy sterownika do serwonapędu (na razie jednego, później rozbuduje do 8). Taktowanie 8MHz. Oto kod programu: [syntax=c]#include<avr/io.h> #include<avr/interrupt.h> #include<HD44780.c> #include<util/delay.h> #include<stdlib.h>...
Witam Chodzi o to, że jest ATMEGA z wbudowanym zegarem RTC. Po odpowiednej konfiguracji i uruchomie wszystko jest OK, zegar pracuje. Jednak zegar ten ma być wykorzystywany do pomiaru krótkich odcinków czasu. Czyli odmierza ustawiony czas i jest blokowany poprzez STOP TIMER2 (w Bascomie). Po naciśnięciu klawisza start układ wg założeń powinien uruchomić...
Witam ponownie! Otóż zmodyfikowałem program i teraz wygląda tak... [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 8000000 '$baud = 4800 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portb.0 Config Sda = Portb.2 Config Scl = Portb.3 Config Portb.4 = Input Const Ds1307w...
Witam ponownie Ten czujnik temperatury jest czescia wiekszego projektu. Urzadzenie oparte na Atmega 8535 ma za zadanie zmierzyc i wyswietlic na czterocyfrowym wyswietlaczu LED cisnienie powietrza atmosferycznego, wilgotnosci tego powietrza i jego temperature. Do tego odmierza i wyswietla aktualny czas z funkcja budzika. Czujniki podlaczone sa do trzech...
Witam! Na podstawie informacji zawartych w książce "Programowanie mikrokontrolerów w języku Bascom" napisałem program: Problem: Problem polega na tym, że program nie działa poprawnie. Po pierwsze procesor zamiast 1 sekundy odmierza ok. 8s. Jest to dla mnie nie zrozumiałe, ponieważ kodu zawierającego instrukcje tyczące się timer0 nie zmieniałem. To samo...
Ten temat przewinął się już ze 100 razy ale i tak nie mogę doczytać się odpowiedzi. Napisałem taki program ale zegarek ten nie odmierza dokładnie sekundy. Czy może ktoś to zgrabnie uzupełnić o obsługe timerka i podpiętego kwarca 32,768kHz ? A może jeszce jakiś mały zrzut ekranu jak ustawić wówczas fusebity w Bascomie na ten zewnętrzny kwarc. $regfile...
Każdy zapis ma wymagany czas. Chyba że urzywasz trybu stronicowego to tylko raz odmierzasz ten czas na stronę.
Jeśli by to nie przeszkadzało to możesz podpiąć kwarc zegarkowy, wtedy na 8 bitowych licznikach na pewno zliczysz sekundę:)
Uruchomi się - tak jak pisał kol. (at)dondu na wejściu masz układy Schmitta, czyli po przekroczeniu poziomu progowego nastąpi zmiana stanu. Problem w tym, że dla różnych egzemplarzy ATMega, czy różnych warunków, ten próg będzie nieco dryfował. Więc średnio to się nadaje np. do tego, aby odmierzać czas stałej RC.
Oczywiście po ustawieniu czasu powinieneś to usunąć by nie ustawiał go po każdym resecie Atmegi, a sam DS1307 powinien mieć baterię do podtrzymania pracy.
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]
... ale wtedy musisz mieć pewność, że obsłużysz to przed pojawieniem się kolejnej sytuacji ustawienia flagi przerwania. Oczywiście TIFR to tylko przykład, bo flagi są także w innych rejestrach, np. TXC w UCSRA.
Mozesz zrobić dodatkową zmienna w if-ach ustawianą na wartość w sekunach i dekrementowaną razem z x++ , gdy nie jest zerowa to włączasz diode a po dojsciu do zera dajesz opoznienie pomiedzy świeceniem po którym robisz nowy pomiar. Gdy ma być podtrzymywane to nie blokujesz pomiarów. [syntax=c] if (sekunda) { if (czas_swiecenia) { czas_swiecenia--; wlacz...
Na jakiej czestotliwosci dziala procek? 1 MHz. Dzięki. spróbuję przez CTC.
Zobacz sbie mój temat. Tam zrobiłem odmierzanie na timerku działa bardzo fajnie tyle że dla 8 mhz. Pomnozysz sobie razy 2 te czasy i elegancko bedzie... Funkcja dl. i pamietaj iż mozesz zadeklarować wartości mieszczące się w char. [url=http://www.elektroda.pl/rtvforum/vi... MÓJ POST O DS Pozdrawiam domel.fm
Jeżeli w programie występuje konieczność odmierzania czasu ATmega musi mieć swój "zegarek" na którym będzie ten czas odmierzał. Tym zegarkiem jest Timer, natomiast funkcje typu delay() wstrzymują tylko wykonywanie programu.
Async=1 zmień na Async=On.
Ale skąd mam wiedzieć że licznik dobrze zlicza tzn co 1 mikrosekundę? Skąd mam wiedzieć że udało mi się na podstawie taktowania procesora wyliczyć dokładnie jedną mikrosekundę? Zaletą mikrokontrolerów jest to, że wystarczy być pewnym ustawień rejestrów i zegara, i musi odliczać prawidłowo. Pokaż program. Oczywiście kontrola jest wskazana :)
Pamiętaj że sama transmisja też swoje trwa :) a poza tym nie pokazałeś funkcji printf (może ona bawi się w _delay_ms() ?) Zauważ również że przerwanie występuje niezależnie od transmisji, może dochodzić do takiej sytuacji ze raz przerwanie zmienić Ci wartość zmiennej tuż przed transmisją a raz tuż po niej i to spowoduje Twoje opóźnienia. Spróbuj blokować...
tak jesli timer1 jest tylko do odliczania tej jednej sekundy i do niczego innego go nie potrzebujesz
Lepiej zainwestujesz swój czas przepisując program tak, żeby 90% pracy wykonywał w main, później "szedł spać", a budziły go tylko odpowiednie przerwania. W różnych ISR ustawiasz odpowiednie zmienne globalne, a w main() je odczytujesz i reagujesz odpowiednio. I nagle się okaże, że nie potrzeba zagnieżdżania przerwań, system jest prostszy i da się ładnie...
Przeczytaj sobie w datasheecie czy dzielisz zegar przez 8 czy przez 4 ;) Nie wiem co koledzy z tym fuse bitem ckdiv8, atmega8 nie ma takiego ;) Vectra96 sciagnij tez sobie program avrcalc i tam szybko bedziesz mogl wyznaczyc konfiguracje timerow :)
Nie wiem, czy dobrze zrozumiałem, ale wydaje mi się to proste. 4000000/64=62500 62500/625=100 Chyba że atmega8 nie ma preskalera przez 64, lub musi on być ustawiony na 256.
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
Najprostsze do przeróbki, ale można link niżej co podałem. Taniej się nie da. 150 zł za robociznę i poprowadzenie projektu (zamówienie części, projekt schematu i PCB, przesłanie firmie projektu PCB, oprogramowanie zwykłego ATMEGA)- znikome koszty. Na częściach można nieco ugrać- najdroższy będzie i tak wyświetlacz. Na upartego można by zjechać do 400...
Dla kwarcu 4MHz jest to prescaler 64 i początkowa wartość licznika: 193 Dla kwarcu 8MHz prescaler to: 64 i początkowa wartość licznika: 131 To pokazuje kalkulator. Chciałoby się zakrzyknąć : a nie mówiłem :-P Aby wpisać do Timer2 początkową wartość, to używamy poleceń: TCNT2=początkowa_wartosc Timer2= początkowa_wartosc Counter2=początkowa_wartosc...
...Proszę o jakieś podpowiedzi bądź kawałek kodu co ma być dalej, żeby generować te nieszczęsne 40kHz ... To już wszystko :) Na pinie PB1 masz przecudne 40kHz , jeśli faktycznie procek jest popędzany 8MHz. W ramach testu , możesz w pętli głównej napisać: Do Set Tccr1a.com1a0 'dołącz oc1a do pinu Wait 5 'przez 5 sekund fala 40kHz Reset Tccr1a.com1a0...
Co rozumiesz pod pojęciem impuls, bo może to przybliżyłoby nam, co chcesz osiągnąć ? Najprawdopodobniej będziesz potrzebował obsługiwać przerwania OnCompare1A , w których raz włączysz pin, drugi raz go wyłączysz i ustawisz inne odmierzanie czasu.
Która atmega? W atmega8 możesz użyć: Timer0 - odmierzanie czasu Timer1 - zliczanie impulsów Timer2 - PWM
A w jaki sposób ustawiłeś częstotliwość? Kto i skąd o tym wie?
Jakie chcesz odmierzać odcinki tego czasu? Jeśli długie np 1h to atmega bez kwarcu będzie dość niedokładna, jeśli odcinki czasu mają być bardzo długie(12h) i ma je odmierzać bardzo dokładnie będziesz niestety musiał użyć jakiegoś RTC.
Witam, Chciałbym dowiedzieć się jak mogę łatwo przeliczyć preskaler i czas przerwać, tak abym mógł odmierzać czas na ATMEGA_32 16Mh Timerem1 oraz Timerem0. Z góry dzięki za pomoc. ----------------------------------------... (PS. Jestem początkującym użytkownikiem tego forum mimo, że od roku czasu jestem na nim zarejestrowany....
Hehe, tekstu przesuwać nie próbowałem, bo nie takie jest przeznaczenie tego wyświetlacza (zresztą widać po jego kształtach :P ), jest to prezent dla dziewczyny (dlatego nawet matryca była ręcznie robiona ;) ). Ale to niebyłby problem, wystarczy zaprzęgnąć do pracy timer'a, właśnie nad tym pracuje :P ATMege8 można by dać, ale trzeba by modyfikować schemat,...
Mam problem. Procek atmega 32 + dolaczony zewnetrzny kwarc 16MHz (kondensatory po 22 pF). Znalazlem w necie funkcje do odmierzania dokladnego czasu (np. 1s). Plik w zalaczniku zawiera te funkcje. Jednak u mnie zarowno funkcja nop_1s() jak i czekaj() trwaja ok. 12s, a nop_100ms trwa ok. 3s. Wydaje mi sie, ze wina moze lezec po stronie programowej. W...
Kwarc podczas programowania nie musi być podłączony o ile uC korzysta z WEWNĘTRZNEGO generatora ("fusy"dla ATMEGA 8 i podobnych = 0001 lub 0010 lub 0011 lub 0100), Jeżeli przełączono "fusy" na generator ZEWNETRZNY czyli kwarc lub generator podający z zewnątrz gotowy sygnał taktujący to podczas programowania generator/kwarc musi być podłączony. Na kwarcu...
Zastanawiałem się też nad zegarem RTC, mam scalaka PCF8583, którego można by zatrudnić. Tylko zastanawiam się w jakim trybie musiał by on pracować ? Timer ? Alarm ? Dajmy na to wybiorę PCF'a nie wiem za bardzo jak on miałby odmierzać mi zadane godziny - musiałbym za każdym razem gdy włączam sterownik ustawiać od nowa czas i dopiero względem niego odmierzać...
To teraz troszkę mi namieszałeś, ATmega 16 ma ICP1 przy nóżce Timera 1, ja odmierzam impulsy 2-ch sygnałów... Co do sposobu zliczania impulsów za pomocą T0/T1 to po co używać 3 timer do odmierzania okresu czasu. Przecież okres jest odmierzany na przemian. Gdy T1 zlicza impulsy obrotomierza to T0 odlicza okres, po tym okresie T0 zaczyna zliczać impulsy...
To może zacznij od wyszukania analogii w swoim kodzie. Na pierwszy rzut oka ciągle powtarza się zapis/odczyt rejestru układu. Wydziel to do oddzielnej funkcji. Co chwilę odmierzasz timeout transferu TWI. To również można wydzielić do tych funkcji. Na chwilę obecną trudno zrozumieć flow Twojego programu bo co chwilę powtarza się sekwencja zapisu/odczytu...
Twoje obliczenia są (z grubsza) OK, jednak w mikrokontrolerze ATmega328 rejestr TCCR0A nie posiada bitów CS00 oraz CS02. Bity te znajdują się w rejestrze TCCR0B. Notabene, bitów WGM0n nie musisz zerować. W trakcie Power on Reset zostają one ustawione na wartość 0. Zerowanie może być konieczne tylko wtedy, kiedy wcześniej sam ustawisz je na wartość...
Połykanie półokresów wprowadzi składową stałą. Trzeba sterować poprzez wycinanie okresów. Ponieważ okres przy 50 HZ to 20 milisekund trzeba liczyć okresy ( w bardziej zaawansowanych układach). Myślę, że w mniej skomplikowanych wystarczy zmieniać czas załączenia poprzez odmierzanie Timerem wielokrotności 20 milisekund.
Popatrz na MCP3202. To przetwornik 12-bitowy 2 kanałowy. [url=http://cubloc.com/download/etc/MCP3... Kiedyś robiłem projekt na MCP3201 (wersja jednokanałowa w/w przetwornika). Współpracowało to z ATtiny2313. Zegar był generowany "na piechotę" poprzez zmianę stanu na nodze kontrolera, odstępy czasowe odmierzane NOP'ami - i to działało bez...
Potrzebuję czterech PWM i dwóch wejść odmierzających długość impulsu o zakresie od 1 do 2 ms. Pytanie czy atmega 8 się wyrobi czy muszę brać 16 . I jak rozumiem z wszystkich postów muszę pwm zrobić programowo bo potrzebuję pozostałych timerów do pomiaru impulsów. I pytanie o oscylator wewnętrzny czy mogę go użyć czy lepiej kwarc bo zależy mi na wielkości...
A proszę bardzo wersję: Compiler version: 2.0.2.1 Compiler build: 2.0.2.1.0 IDE version: 2.0.2.0 Windows OS: Windows 7 Proffesional SP1 Oryginał legalny nie ma się czego wstydzić. Timera używam tylko jednego z odmierzaniem około 5 sekund. 'konfigurujemy timer wywoływany co jakiś czas (patrz procedura) Config Timer0 = Counter , Prescale = 1024...
Wszystko zależy jak rozwiązano w danym przypadku sposób liczenia interwałów taktowania zegara, ale typowo w elektronicznych układach odmierzających czas są montowane te typowe kwarce 32768 kHz w cylindrycznej oprawce. Owe kwarce znajdziesz w zegarkach czy to wskazówkowych kwarcowych z budzikiem czy też w płytach głównych PC :) Jeżeli przycisk masz na...
Instrukcja WAIT Przeznaczenie: Przerywa działanie programu na określony czas. Składnia: WAIT il_sekund Opis: Instrukcja wstrzymuje działanie programu na podaną ilość sekund. Odmierzany czas jest wartością przybliżoną, więc nie należy stosować tej instrukcji do dokładnego odmierzania czasu. Używanie przerwań, może znacznie wydłużyć działanie instrukcji....
W skrócie zajrzałem do noty katalogowej i dowiedziałam się, że do MEGA 16 można podłączyć 2 kwarce. Końcówki to XTAL1 i 2 oraz TOSC1 i 2. Należy pamiętać, że z końcówek TOSC1 i 2, do których można podłączyć kwarc zegarkowy można sterować asynchroniczny timer2, który należy zatrudnić do odmierzania czasu. Do XTAL1 i 2 podłaczysz sobie kwarc o wysokiej...
Kolego, chyba nie chcesz powiedzieć, że czas odmierzasz przez programowe opóźnienia? To jakiś koszmar. Szczególnie w procesorze, w którym masz do tego celu dedykowane timery. Co do 1-wire - po co programowo odmierzać czas, skoro ATMega, podobnie jak każdy procesor wyposażony w UART ma semi-sprzętową obsługę 1-wire? No i przydałoby się dodać jakieś podtrzymanie...
To chyba zły pomysł. Po pierwsze, taki potencjometr pracuje dla napięć 3/5 V, i nie nadaje się do pracy w układzie z U2008. Jeśli regulacja PWM nie działa jak należy, po trzeba ją po prostu poprawić i zrobić dobrze, zamiast wymyślać takie kombinacje. Jeśli żarówka sterowana PWM miga, to najprawdopodobniej jest problem albo z wykrywanie przejścia zasilania...
Nie podoba mi się twoje rozwiązanie. Ja bym to zrobił tak - timer odmierzający takty w rytm podstawowego okresu PWM (czyli przerwania np. 1kHz). Teraz zamiast tych porównań z licznikami, wrzuć wartość licznika do rejestru compare register. Dzięki temu masz przerwanie po przepełnieniu timera (nowy okres) - w tym przerwaniu inicjujesz wysyłkę danych po...
oraz "the frequency depends on supply voltage, temperature and batch variations" WD nie służy do precyzyjnego odmierzania czasu. Zobacz w nocie jak zależy od podanych parametrów, a okaże się, że to raczej nie ma większego znaczenia. Zewnętrzny WD często oferuje znacznie szerszy zakres wartości limitów czasu. Ma to znaczenie w szczególności w aplikacjach...
Witam:) mam pytanie do forumowiczów w sprawie pomiaru częstotliwości, sprawa przedstawia się następująco: chciałbym zrealizować pomiar częstotliwości .............. wiem ze należy postąpić w poniższy sposób: 1. zatrzymanie zliczania impulsow z T0 2. zatrzymanie odmierzania czasu bramkowania T1 3. przepisanie zliczonych impulsów do rejestru głównego...
Witam, co do Bascoma to ci nie pomogę znaleźć błędu bo nie piszę w tym softu ale skoro masz tak ogromny rozrzut 1min - 7min to przeanalizuj dokładnie program, gdzieś czai się wielki błąd ;) ... tylko że nie pokazałeś schemtau i nie wiem czy zrobiłeś sobie ten zegarek tylko w oparciu o Atmegę i jej (właśnie kwarc zewn czy oscylator wewnętrzny) czy też...
Nie piszesz jakiego kwarcu używasz. Jak kilka MHz to możliwe że masz źle ustawione fusebity. Wtedy µC może chodzić np. na wewnętrznym generatorze 1MHz. Kwarc zewnętrzny nie działa i stąd efekty sporej różnicy w odmierzaniu czasu.
To jest po prostu stała obliczana ze wzoru OCR1A = (t*F_CPU/preskaler) gdzie: t= pi/3 = 3.(3)ms F_CPU = 14745600 stąd OCR1_DEF = 6144 a tu definicja ;) [syntax=c]#define OCR1A_DEF 6144[/syntax]
http://obrazki.elektroda.pl/7208083000_1... Witam Od dawna przymierzałem się do zbudowania zegara nixie na sześciu lampach. W internecie jest sporo takich projektów, jednak większość z nich nie odpowiadała moim założeniom. Postanowiłem więc zaprojektować i wykonać zegar od podstaw wykorzystując podzespoły, które miałem pod ręką. Założenia...
Wybacz ale nie znam dokładnie twojego mikrokontrolera, ale w Atmega zdecydowanie lepiej jest ustawić taki preskaler aby czasy jak w one-wire po prostu do niego ładować i stan nóżki z termometrem zmieniać programowo w przerwaniu - w końcu po co robić programowo licznik skoro masz sprzętowy, który nie zajmuje procesora z tak błahego powodu jak inkrementacja...
Witam. Proponuję wszystkie operacje przeprowadzić na przerwaniach. Czyli na przykład Przerwanie od Timer 1 steruje wyświetlaniem znaków co określony czas wyświetlasz kolejny znak czas dobierasz na tyle krótki żeby nie widzieć migotania, Przerwaniem od Timer 0 odmierzasz czas dla odczytu temperatury. Pozdrawiam
To jest przyklad tego jak mozna obsluzyc DS1820 przez mega 8 ale jest tam tez obsluga wyswietlacza w C.Moze sie pryda.Sam to dostalem od jednego kolegi z forum:-) wiec mam nadzieje ze sie nie obrazi...mnie interesowal DS. Pozdrawiam Maciek! #include <avr/io.h> #include <avr/pgmspace.h> #include <stdlib.h> #include <ctype.h> #include...
Ogólnie kwarce o wysokich częstotliwościach są niezbyt dokładne - zwykle +-100ppm w dobrym układzie. Na pewno jednak kwarc jest lepszy niż wewnętrzny RC. Robiłem kiedyś testy i na kwarcu 16MHz bez kalibracji udało się osiągnąć dokładność o ile pamiętam 1-2s na godzinę. Ale jak napisał Ci (może nie do końca) przedmówca (at)Milek7: Najlepiej wtedy w przypadku...
To chyba mi nie pomoże. Jesem początkujący w bascomie 01ale z tego co wiem procesor wyjść INT ma 2 lub 3. A ja mam w planach zrobienie 4 odbiorników więc to chyba wyklucza taki sposób. Chyba że każde wyjście da się ustawić jako int? Przy jednym tylko wejściu wystarczyłoby podłączenie wejścia pod interrupt i w jego subrutynie zablokowanie tego interruptu...
Czyli w moim przypadku , raczej opcja pierwsza prawda ? Możnaby przekombinować , odmierzać 16-bitowym i wykorzystać dwa PWM'y dwóch timerów no ale ...
Kod wydaje sie ok, przy czym moje walki z odmierzaniem czasu mowia ze trzeba brac poprawke na Bascoma /i to duuuza/. Sprawdzilem pod symulatorem (Bascom) i program dziala, w realnym procku pewnie czasy sie rozjada.
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.
Witam, 1) Do projektu potrzebuję 2 liczników - jeden do odmierzania czasu, drugi do sterowania wyświetlaczami. Czy to dobra koncepcja?? Odmierzanie czasu - jasna sprawa. Wyświetlacze - po co co Ci licznik do sterowania wyświetlaczami (jakimi, siedmio-segmentowymi?). Nie wiem zresztą jak ocenić Twoją koncepcję gdyż jej praktycznie (szczegółowo) nie przedstawiłeś....
To nie pytania kontrolne tylko naprowadzające :) 80% wypełnienia to 80 % stanu "high" w danym okresie, czyli jeśli okres trwa sekundę to przez 800 ms będzie przepływał prąd przez dany pin. po czym zatrzyma się na 200ms i cała operacja się powtórzy. Zgadza się ? I właśnie do odmierzania tych czasów służą liczniki (timery). Wybrany timer z funkcją PWM,...
Możesz poszukać w urządzeniach które posiadają opcję zegarka. Standardowo taki kwarc jest używany właśnie z układami które odmierzają czas. Dodatkowym utrudnieniem może być to o czym mowa tutaj: https://www.elektroda.pl/rtvforum/topic8... Częstotliwosć sygnału SCK musi być co najmniej 4x mniejsza od częstotliwości pracy mikrokontrolera. Czyli...
Tak się objawiają uszkodzone czujniki. Sprawdź go jeszcze raz w bascomie. Pozatym masz jakieś dziwne te delay'e czemu używasz funkcji owire_delay przecież masz _delay_ms? Trochę wróżąc z kodu wnioskuje że funkcja delay odmierza 0,25us * przekazany argument. Piszesz w komenarzach że niby ta pętla for + funkcja poniżej jej trwa 470ms. Jak nie przestawiałeś...
Dzięki za pomoc. działa. Grzegorz.
Dokładnie tak jak masz napisane, z tym, że konfigurujesz jeden z timerów do dliczania czasu. Przykładów w Bascomie z obsługą timera znajdziesz bez liku.
No to fakt, dlatego dopoki nie bedziemy wiedziec ile kolega kasaidolar chce odmierzyc czasu nie bedziemy w stanie mu pomoc;)
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 serdecznie potrzebuję zrobić odmierzanie czasu 1250us i drugie zależne od zmiennej. Chodzi mi o to, że w moim programie odwoływał bym się do przerwania które odmierzało by 1250us i po tym czasie nastąpił by powrót i wykonanie dalszych instrukcji, w drugim odwoływał bym się z parametrem ile ms ma zostać zliczone i też nastąpił by powrót po tym...
witam! Musze dosc precyzyjnie odmierzac czas (1ms) dysponuje ATmega 32 z zewnetrznym kwarcem 8Mhz... ustawilem sobie preskaler timmera na 8 ( czyli stuka sobie z f= 1Mhz) teoretycznie powinno byc dobrze... ale w praktyce pomiar spoznia mi sie o 3sec. na minute ( ???!!!) juz nie wiem co robie nie tak... jesli ktos moze spojrzec bylbym wdzieczny... #include...
Mirekk36 a jaką dać częstotliwość taktowania bo dla twojej funkcji mi dioda miga co około 72s Najpierw sprawdź czy jak dasz _delay_ms(1000) to czy miga ci co sekundę - jeśli nie to napisz/powiedz/sprawdź czy masz dobrze przede wszystkim Fusebity ustawione ? Na pewno sama funkcja i while nie robi takiego narzutu żeby zamiast 60s było 72s ;) - jak już...
Oscylator może mieć +-3% dla 1MHz i 25stopni zgodnie z notą katalogową (ATMEGA16, str. 27), więc do dokładnego odmierzania czasu zaleca się używanie zewnętrznego kwarca. Podobno może uzyskać +-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...
1. Poszukaj coś o słowie kluczowym volatile. Zastanów się gdzie w Twoim programie go brakuje. 2. Odmierzasz 0.1 s i w tym czasie liczysz impulsy. Ale zanim zaczniesz liczyć to wcześniej wykonujesz w przerwaniu obsługę LCD. Więc właściwie liczysz w czasie 0.1s - czas obsługi LCD. Jesteś pewien, że jest on stały? Uwzględniasz to w obliczeniach? Albert
To jest proste jak świński ogon :D ahahahaha, ale napisz kawałek kodu. Czy masz tam jakiś LCD czy nie, czy masz tam jakiś Timer ustawiony do odmierzania sekundy czy Wait`ujesz :D Czy w dokumentacji czujnika pisze, że nadaje tez na końcu niewidoczne w terminalu znaki 13 lub 10? EDIT: aaa masz tu taki prosty. Napisałem przy śniadaniu więc błąd mógł się...
Sam widzisz, że musisz odmierzać czas. Każdy projekt z mikrokontrolerem zaczyna się od przerwania timera. Bez tego nie da się zrobić prawie nic.
Podczas odbioru danych z pinu PD2 ( funkcja zgłoszenie ) występuje błąd tylko wtedy gdy przerwanie z timera 0 jest aktywne. Gdy na czas odbioru danych zablokuję to przerwanie procesor ładnie odbiera wysyłane do niego dane. I moje pytanie brzmi: Co jest nie tak z przerwaniem? Konkretnie to, co wskazał albertb: ... jeśli masz włączone przerwanie to jego...
Twoje procedury obsługi przerwań są stosunkowo długie. Np. ISR(TIMER1_COMPA_vect) trwa ok. 670 taktów zegara. Z kolei odstęp między kolejnymi przerwaniami przy zmiennej okres1=127, jak sam napisałeś, wynosi 8*128=1024 taktów. Jeżeli zmienną okres1 zmniejszysz np. do 80 taktów, to przerwania będą częściej niż trwa ich obsługa, więc niektóre zostaną po...
Program działa i nawet licznik się zatrzymuje tylko jaką mam pewność że jest to 250ms? chodzi mi o to żeby uzyskać jak największą dokładność. Dzięki za ten przykład, spróbuję... Nie wiem dokładnie , do czego Ci to potrzebne ale przykład z przerwaniem , który podałem wcześniej działa z dokładnością do ~2 cykli zegara(500)ns.Czy to niezbyt dokładnie...
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.
http://obrazki.elektroda.pl/8592196000_1... Witam, Od zawsze marzył mi się zegar na lampach NIXIE. Jednak nie chciałem żywcem kopiować jakiegoś projektu, tylko samemu coś zbudować. Długo szukałem inspiracji, najbardziej martwiła mnie obudowa bo u mnie z tym zawsze najgorzej. Zainspirowała mnie obudowa zegarka od electoNIXclock więc...
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.
Użyj funkcji z delay.h do odmierzania czasu. Przynajmniej jedna niewiadoma zniknie. Inna sprawa, że twoje funkcje nie testują powrotu magistrali do 1 - używasz stałych opóźnień, które niekoniecznie są prawidłowe. I kolejna sprawa - zamiast czytać wtórne dokumentacje Atmela, nie lepiej zajrzeć do oryginalnych not Dallasa?
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....
Wątpliwa sprawa , atmega czy inny układ nie rozwiąże problemu złej koncepcji , braku powtarzalności odmierzania o którą pewnie koledze się rozchodziło. Z drugiej strony chyba nie ładnie pisać nieprawdę: - ma kolega problem z podstawowym układem elektronicznym( nawet jego fachowym określeniem), aż tu nagle wykonał kolega sterownik na mikroprocesorze...
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);...
tak inicjalizuje [syntax=c] /* C5-C4 - PCF SDA & SCL C3-C0 - LCD DATA B0-B3 - LCD I/O D0-D4 - BUTTONS D5 - LIGHT SWITCH OUTPUT D7 - STATUS DIODE */ #define F_CPU 1000000L #include <avr/io.h> #include <util/delay.h> #include "LCD.h" #include "i2c.h" #include "rtc.h" int main(void) { DDRD |= (1<<PD7);//Status DDRD &= ~(1<<PD0);//P0...
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...
Oczywiście że tak! A tyle razy czytałem pdf'a.... Drugi błąd tkwi w zapisie 10sek do adresu 15. Pamiętałem wszędzie o BCD zapominając, że powinno być nie 10 a 16 (B00010000). Czyli reasumując: zapis ustawień timera adres 0 <- 4 (ustawiony bit 3 włącza timer) adres 7 <- 0 (zerowanie na wszelki wypadek licznika - tu układ zlicza sobie impulsy) adres...
zegar odmierza odmierza przerwa bascom odmierza
kamera cofać nagrywać kamery hdcvi prostownik tyrystor triak
td612 instrukcja td612 instrukcja
Listwa progowa do drzwi balkonowych Roto - jak znaleźć? Wymiana pękniętego ekranu w telewizorze Manta LED 32LHN89T