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]
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
Async=1 zmień na Async=On.
Może tym jeżeli masz port LPT1: http://tfla-01.berlios.de
Podejrzewałem, że coś zajmuje czas uC, myślałem, że to może printf, ale skoro ujawniłeś, że uC "robi mnóstwo innych rzeczy", to tam szukaj przyczyny. po prostu coś zajmuje mu te 200 ms.
Chyba nie mówisz, że nie masz zaimplementowanej obsługi watchdoga w systemie? Wyobraź sobie sytuację że program gdzieś pójdzie w maliny - jak zachowa się wtedy Twój alarm? Kopanie pieska musisz dobrze przemyśleć przy fazie projektowania programu - dodanie tego na samym końcu projektu może się już nie udać. Pozdrawiam, Krzysztof
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.
Wyłącz preskaler, bit CKDIV8
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...
tak jesli timer1 jest tylko do odliczania tej jednej sekundy i do niczego innego go nie potrzebujesz
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...
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.
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
... 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.
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....
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...
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...
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...
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...
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...
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...
zegar odmierza odmierza przerwa bascom odmierza
włożyć kasetę czujnik pralka kondensator mniejszy zasilacz
interfejs diagbox depollution system faulty peugeot
Dreambox – mrugająca czerwona dioda i wyłączanie po starcie, diagnostyka zasilania i bootloadera Mercedes-Benz Klasa A W169 brak ładowania – diagnostyka alternatora, regulatora, przewodów