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...
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 Testując kod Kolegi pusiek1974 do odbioru czasu i daty NTP, chciałem go rozbudować i dostosować do swoich potrzeb. Na początek jako, że kod używa Wait'ów, których chciałem się pozbyć, chciałem dodać wywołanie przez flagę od Timer'a. [syntax=vbnet]$regfile = "m16def.dat" $crystal = 8000000 $hwstack = 64 $swstack = 64 $framesize = 64 Baud = 19200...
Witam, chciałbym przy użyciu Atmega8 i zewnętrznego kwarcu odmierzać i zliczać setne części sekund, sekundę mogę łatwo wyłapać z timera1 według przykładowych obliczeń 4000000MHz / 256 = 15625 65536 - 15625 = 49911 lub 8000000Mhz / 256 = 31250 65536 - 31250 = 34286 Nie mam jednak pomysłu jak....... Z góry dziękuję za pomocne wypowiedzi. Aby odmierzac...
Najprościej to chyba tak: [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> #define TIMERSTART 6 volatile uint8_t FLAGA_50 = 0; volatile uint8_t FLAGA_1000 = 0; // funkcja obslugi przerwania TIMER0_OVF 8MHz / 64 * 250 wychodzi co 2ms // dla innego taktowania nalezy ustawic inny preskaler i/lub inne liczniki stawiania flag ISR(TIMER0_OVF_vect)...
Witam! Napisałem sobie obsługę klawiatury matrycowej 3x4 w bascomie. Nie używam umieszczonej tam funkcji getkb(), ponieważ podłączona jest do różnych portów. Sprawdzanie wciśniętych przycisków chcę przeprowadzić w przerwaniu od wewnętrznego zegara TIMER0. Na ATmega32 wszystko bez problemu działa. Płytka, pod którą to robię działa niestety na ATmega8515....
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: jednak nie rozwiązało to problemu. Próbowałem linijkę...
Witam, mam następujący problem. Chciałem przetestować timer0 w Atmega8-16PU, aby gasił i zapalał diodkę co jedną sekundę. Obliczyłem, że przy kwarcu 8MHz i ustawieniu preskalera na CK/8 program w C powinien wyglądać następująco: #include <avr/io.h> #include <avr/sfr_defs.h> int main(void) { DDRB = 255; PORTB = 0; TCCR0 = 2;...
Działa, działa!!! Daj znać jak Ci mam przekazać browara za to bo bez Ciebie chyba bym do tego nigdy nie doszedl! :D Dodano po 11 Jeszscze tylko jedno - w jaki sposób dołożyć zatrzymanie timer0 w trakcie wykonywania podprogramu. Przy takiej konfiguracji jak teraz jesli impulsy będą podawane w trakcie wykonywania pętli w podprogramie nigdy nie nastąpi...
Mam taki problem: chcę w programie wykorzystywać przerwania od przepełnienia dwóch timerów (0 i 1). W timer0 mam obsługę wyśw. LED i opóźnienie dla klawiatury a w timer1, z założenia wywoływanym co 100ms, coś jakby zegar z minutami i sekundami, choć nie jest to najważniejsze bo to program testowy. Problem w tym, że przerwanie od timer1 wcale się nie...
Koledzy potrzebuję pomocy, siedzę cały dzień nad programem i nie mogę sobie poradzić. Chodzi o to aby program działał tak jak ten który napisałem, tylko potrzebuję dopisać do niego procedurę kodowania zmiennych A i B. Konkretnie chodzi mi o to aby np po wciśnięciu przycisku SW i SW1 przez około 5 sekund, żeby program skoczył do podprogramu np PROGRAMUJ,...
Ogólnie przerwania chodzą, ale problem pewnie w tym, że w obsłudze przerwania od timera chce wyświetlić tekst na lcd (hd44780). LCD używam bez wykorzystania linii busy, więc wszystkie komendy idą na delayach zrealizowanych przez timer. [syntax=c] volatile int flag=0; void timer0_inr() { flag++; //set software flag T0IR = 1; //clear interrupt flag VICVectAddr...
Witam. Chciałem otrzymać przerwanie od przepełnienia generowane przez timer0 procesor pracuje na 16mhz jednak mam dziwny problem. Mianowicie zamiast planowego 1us mam 2-4 x większe wartości. Napisałem taki program testowy który ma zobrazować efekt czyli co sekundę instrumentować zmienną. [syntax=c]#include <avr/io.h> #include "lcd.h" #include...
Witam! Chcąc dodać zegar do mojego projektu musiałem wygenerować przerwanie, które dodawałoby 1 do zmiennej co 1s. napisałem programik jak poniżej, lecz niestety zliczając późni się o około 1/1,5s na minute... ktos wie gdzie robię błąd? gdzieś się pomyliłem? Preskaler ustawiony na 64, czyli 1000000/64 = 15625 TCNT0 zaczynam od 131, czyli zostaje mi...
LCD był tylko dla debugowania. A wywalenie tego w main spowoduje to że będę musiał kilkanaście flag mieć... Ile razy na sekundę wykonuje się ustaw_timer()? Co jest funkcjach przelicz() oraz nadaj(), których nie pokazałeś? Jak często wywoływane jest ISR(TIMER0_COMP_vect)?
Witam, mam problem z uruchomieniem programu do zliczania impulsów na T1 przez 1 sekundę. Wyświetla mi ciągle zero. Co źle ustawiłem z Timerami ?? Atmega 32 [syntax=c] #define F_CPU 1000000UL #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <hd44780.h> volatile unsigned char licznik = 0; //liczba...
Witam. Uczę się obsługi Timera 0 w Atmega16. Napisałem sobie prosty kod który ma co ~ 2µs zmieniać stan piny na porcie D. Zegar przyjąłem 14,7456MHz. Oczywiście wszystko robię symulacyjnie w Proteus 7.8. Więc tak, preskaler ustawiłem na 0 i do rejestru TCNT0 wpisuję liczbę 225. A wzięła mi się ona stąd że: 14 745 600 : 30 = 491520 czyli prawie...
Nie wiem jak zrobić czy na Deley, czy na millis. Nie mam pomysłu jak ułożyć kod. Może ktoś pomoże?? Dziękuje za pomoc Czas odliczany przez funkcję delay() jest dość dokładny, bo odcinki czasowe 1-milisekundowe są formowane przez wbudowany w procesor Timer0. Arduino automatycznie (bez twojej wiedzy) konfiguruje go do tej funkcji. Jednak zliczaniem tych...
Nie bardzo widzę sens stosowania przerwania dopisz Debounce Portd.2 , 0 , Pr_Stop i masz to co chciałeś timer raczej wykorzystuje się do wykonywania procedury w jednakowych odstępach czasu np. licznik sekund itp. ewentualnie do wymuszenia testowania wejścia (wejść) częściej niż czas obiegu głównej pętli programu. Przerwanie może być wykonywane kilka...
Bity 7-4 sterują diodami, 3-0 tranzystorami npn. 0b00101000 oznacza że ma się zapalić pierwszy segment czyli dziesiątki godzin, i druga dioda znacząca "2". Godzina z jaką zaczyna zegar to 23:28. Warunek sprawdza czy dodana właśnie sekunda zmieniła godzinę na 24, jeśli tak to zmienia godzinę na 00. Po kompilacji z "-Os" przerwanie jest w tablicy przerwań...
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, Próbuję uruchomić zegarek na procku ATtiny2313. Problem w tym że zegarek (stoper) działa za wolno - nie chodzi tu o precyzyjne odmierzanie czasu ale dziesiątki sekund zmieniają sie z prędkością sekund. Program jest z mikroprocesorowej oślej łączki z edw. Tam użyty był at90s2313, ale jeżeli dobrze wyczytałem w nocie katalogowej to timer0 w obu...
Jestem początkujący, studiuje Oślą Łączkę z EdW, zainstalowałem najnowszą wersie Bascoma Demo. Kupiłem płytkę AVT3500, złożyłem ją i wszystko działa poprawnie aż do tematu liczniki i niebogę załadować programu przykładowego, bo nie chce się wykonać funkcja ON TIMER0, gdy ją skasuje to program się ładuje, ale bez niej nie zadziała, a jeśli ona jest to...
witam. potrzebuję odmierzyć równo 1 sekundę, przykład wziąłem z kodu :
Witam. Mam problem z dziwnym zachowaniem lcd podczas realizacji programu. Program pisałem już dość dawno, kiedy uczyłem się jeszcze podstawowej obsługi timerów. Ale, że problem się zaczął pojawiać również w innym moim programie, postanowiłem napisać na forum, bo nie wiem co robię źle. Posiadam płytkę ewaluacyjną do atmegi32 i atmegi8 oraz kilka wyświetlaczy...
Może dlatego, że Twój program po prostu się kończy w ułamku sekundy? Wiesz co robi procesor gdy skończy się funkcja main()? Albert
Jestem świadomy ze kiedyś będę żałował, być może już żałuje bo jakoś nie potrafię nawet zacząć pisać w C. Napisałem cześć programu w Bascom działa mi funkcja sekund (zegar powinien pracować po podłączeniu mostka H) tylko mam problem z minutami. Rozumiem ze muszę tak przeliczyć częstotliwość aby możliwe było przemnożenie dla 1 s jak i 60 s. Kombinuje...
Tym razem podam wędkę :P Łatwo wyliczyć dla jakiego rezonatora są te ustawienia mimo iż go nie zapisałeś. Timer0 potrafi liczyć do 255, ale w przerwaniu programista ładuje już timer wartością 5 więc do odliczenia zostaje mu tylko 250... Timer ma włączony preskaler 256 czyli taktów musi być 250x256=64000 Procesory mają podane taktowanie w Hertz`ach czyli...
Próbuję zrozumieć zasadę działania timera0 w normalnym trybie pracy, ale niestety mój kod i sposób rozumowania najprawdopodobniej jest zły, ponieważ dioda nie miga. W związku z tym chciałbym poprosić kogoś o weryfikację kodu oraz mojego rozumowania, bo może coś robię źle. W kodzie zamieściłem stosowne komentarze więc nie będę ich dublował. Częstotliwość...
Witam Znalazlem taki program dla procesora AT89S8252. Jest on napisany dla kwarcu 11 Mhz a ja mam 16 Mhz, jak wyliczyc wartosci dla mojego kwarcu ?? byc moze sa w nim jakies bledy jakby ktos mial chwile czasu zeby zerknac to z gory wielkie dzieki :) Oto on: $crystal = 11059200 '$default Xram $large Dim Cyfra(12) As Byte Dim Jedn_sekund As Byte...
Witam! Starałem się zrozumieć o co wam chodzi, bo to co dla Was oczywiste dla mnie pozostaje czarną magią ;) No ale dobrze, wydaje mi się, że zrozumiałem ;) Od strony "mechanicznej" wyglądać ma to mniej więcej tak: Dobrze myślę? A od programowej (i tutaj zapewne strzeliłem "babola") tak: $regfile = "m8def.dat" $crystal = 8000000 Config Timer0...
Witam mam taki programik w bascom który odlicza mi od 0 do 99 chciałbym zrobić to na trzy cyfry a nawet więcej oto on $regfile = "attiny2313.dat" 'najpierw określamy typ proca $crystal = 1000000 'definiujemy z jakim taktowaniem będzie pracował 'definiujemy z jakim taktowaniem będzie pracował Dim Jedn As Byte , Dzies As Byte Dim Ktorywys As...
A może wyłumaczyć mi ktoś tak jaśniej niż whelpie bascoma ;) co to jest ten prescaler i co on dzieli. Może tak po kolei jak twój program widnieje: 1. Jeżeli PORTB jest przeznaczony do obsługi LCD to nie konfiguruj go w ogóle w stylu jaki podałeś w pierwszym poście. Config Portb = &B11111111 : Portb = &B11111111 ===> źle!!! Może to powodowac zakłócenia...
Jak napisac funkcje w AVR dla ATMEGA32 w jezyku C, aby mozliwe było przechwycenie przerwania spowodowanego impulsem zewnetrznym w liczniku TIMER0?? Gdyż dla TIMER 1 ustawia sie bit TICIE1 w rejestrze TIMSK, a dla TIMER0 nie ma tam żadnego takiego bitu?? Jak to zrobić?? A drugie pytanko, czy jest mozliwość uzyskania 1 sekundy na TIMER0??? Dzieki za pomoc!!
Timer 8-bitowy przepełnia się po zliczeniu do 256 a preskaler dzieli maksymalnie przez 1024 więc z prostego mnożenia wynika, że częstotliwość zegara, która spowoduje przepełnienie timera po 1 sekundzie to 1024x256=262144 Hz. Jeśli taktujesz mikrokontroler wyższą częstotliwością to na tym timerze nie zrobisz przerwania co 1 sekundę. Oczywiście timer...
16MHz A mam 3 razy bo nie wiem w kt orym miesjcu mam blad Przy 16 MHz i prescaler ustawiony na 1024 nie jestes w stanie odmierzyc czasu 1 sekundy uzywajacTimera0 bez zliczania odpowiedniej ilosci przepelnien nawet bez preload czyli na 'pelny zegar'. Maxymalny czas jaki jestes w stanie odmierzyc to ok 16 ms (dokladnie 16.384 ms). Druga sprawa; to jak...
Mam taki otóż problem ; Mam pewien program, który działał w urządzeniu na Atmedze 8 P 16. Teraz przerobiłem sobie (znaczy zrobiłem drugie...) z użyciem AT90PWM3B - oczywiście pinologicznie tak samo, żeby nie przerabiać programu. No i właśnie zmieniłem w Bascomie chip na ten AT90PWM3B, chcę skompilować, a ten mi tutaj wywala pretensje przy ustawianiu...
O co mi dokładnie chodzi: W helpie Bascom jest napisane, że w przypadku kości 8535 mam do dyspozycji preskalery 1, 8, 32, 64, 128, 256, 1024, a dla kości M103 1, 8, 32, 64, 256, 1024. Ja zaś posiadam kość M32 i w PDF, który dotyczy tego mikrokontrolera jest tabelka na 127 stronie, która zawiera w sobie jakby wykaz dostepnych częstotliwości, ktorymi...
Witam, mam problem z kompilacją kodu sprzed 10-ciu lat, najnowszy bascom. problem jest z rejestrami: Ocr0b = &H80 Ocr0a = &H80 proszę o wskazanie przyczyny. [code][syntax=vbnet] $projecttime = 0 $regfile = "m32def.dat" $crystal = 16000000 ' gdy Baro_idle=0 nie widzi adresu 238 ($EE) ' gdy Baro_idle=1 widzi adres 238 ($EE) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!....
Szanowni koledzy czy ktoś z was może mi powiedzieć jaką mogę osiągnąć precyzję przy odmierzaniu czasu przy wykorzystaniu układu ATmega16 z zewnętrznym zegarem 8.000 MHZ(rezonator kwarcowy)? Morduje to już drugi dzień i nie mogę zrobić tego w sposób precyzyjny - na każde odmierzone 10 minut atmege spieszy o ok 20s - taka zwłoka jest dla mnie niedopuszczalna...
Dobrze że nie tylko ja jestem laikiem. uP nigdzie nie będzie szukał obsługi przerwania. To Ty mu pozwalasz na obsługę danego przerwania- ustawiając rejestr TIMSK. Oczywiście jak mu zezwolisz to będzie się starał to obsłużyć. Jak nie będzie niczego to będzie bad isr vector i się zawiesi. Musi byc chociaż puste: ISR(TIMER0_......) { }...
Więc Twój zegar ma 8MHz = 8000khz = 8000000 Hz. Ustawiłeś prescaler na 256, więc timer0 jest taktowany zegarem 31250Hz. Oznacza to, że tyle naliczy w ciągu sekundy. Ponieważ Twój timer jest 8 bitowy, jego max wynosi 255. To znaczy, że w ciągu sekundy będziesz miał 122 przerwania. Możesz do tylu inkrementować zmienną, po czym zmieniać stan na PORTD (póki...
Faktycznie odrobinę szybciej i odbrobinę krótszy kod. Dzięki. :) Oszczędność: 1 takt co sekundę i dodatkowo jeden co minutę. Kod krótszy o 2 instrukcje. Zaoszczędzone miejsce użyłem żeby zoptymalizować (wyeliminować) 1 skok. Kod dłuższy o 2 instrukcje. Oszczędność: 122 takty co sekundę. Smacznego. [syntax=c] /* Iteracja 2 */ #include <avr/io.h>...
Zbudowałem układ, który mierzy temp. z trzech ds18b20 i wyświetla na lcd. Problem zaczyna się gdy włączę przerwania od timera0 (który tylko w tle odmierza sobie odcinki czasu po 8ms), a mianowicie mierzona temperatura jest nie prawidłowa a później zaczyna się krzaczyć lcd. Ma to być sterownik pieca CO więc potrzebuję odliczać krótkie odcinki czasu na...
1. W jakim języku piszesz? 2. Kalkuluje się to tak: Masz kwarc 16 000 000 Hz (16 MHz) i dajesz sobie jeden z dopuszczonych prescalerów, np. 64 i wtedy timer zlicza Ci impulsy z częstotliwością 16 000 000 / 64 = 250 000 Hz, czyli jeden impuls timera to 4*10^-6 s lub inaczej aby odmierzyć 1s musisz zliczyć 250 000 impulsów, Jako, że Timer0 jest 8 bitowy...
Witam Napisałem program który ma sterować 7 segmentowym wyświetlaczem LED. Co sekundę ma następować zmiana cyfry. [syntax=cpp] #define F_CPU 1000000L #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> int liczba[10]={0x82, 0xEE, 0XC1, 0XC8, 0XAC, 0X98, 0X90, 0XCE, 0X80, 0X88}; //konfiguracja led int licznik=0; //licznik...
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"...
Nie nie rób się kaczką albo sie prześpij ahahahahahaha :D OCIE1B zamieniasz na OCIE1A OCR1B zamieniasz na OCR1A zamieniasz wektor TIMER1_COMPB_vect na TIMER1_COMPA_vect kasujesz wszędzie to TCNT1=0 bo nie ma sensu Dla Timer0, w przerwaniu, pod linijką "dot ++ ; " dopisz TCNT0 = 6; To też można na palcach policzyć: 8MHz to jest na sekundę a sekunda ma...
Postanowiłem spróbować programowania PIC'ow. Postanowilem pisac w Basic'u poniewaz ten jezyk byl mi blizszy poprzez znajomosc go w stopniu srednim podczas programowania na PC. Sciagnalem sobie PicBasic'a i postanowilem zaprogramowac PIC'a. Na pocztku zaczalem od prostych programow typu: 1 na RB0 -> zapal LED na RA0, czy miganie ledow. :) Chcialem sprobowac...
najłatwiej przy T=36 (tzn 4*9) i taki warunek stopu zastosować.. tzn: If T = 36 Then stop timer0 End If p.s. jedno mi niepasuje :) jak na wyświetlaczu może sie pokazać 99 minut i 99 sekund :) przecież minuta ma 60 sekund a nie 100.. łatwiej by było to przeliczyć na sekundy (mój wcześniejszy post) i zatrzymać jeśli T = 5999 (99 minut i 59 sekund)...
A czy w BASCOMie komenda 'wait 1' przy dyrektywie $crystal=<fosc> nie załatwi wszystkiego ?? Oczywiście że tak, jak się używa Bascoma to po to te instrukcje są już gotowe żeby nie kombinować. Biorąc się za budowę jakiegoś urządzenia, trzeba i tak chcący coś dokładnie zrobić użyć miernika częstotliwości i generatora funkcyjnego, a wtedy wyliczymy...
te instrukcje zerują bit w rejestrze Jeśli masz na myśli zerowanie bitu ICF1 w TIFR, to jest to tylko Twoje pobożne życzenie.Te 3 instrukcej , wzerują wszystkie ustawione bity w TIFR , prócz tego o który Ci chodzi , czyli ICF1. Ot taki "kaprys" Atmela :D ... ale mam teraz pytanie (problem)?-brak weny twórczej to kilka wskazówek - chce mierzyć wypełnienie...
Jak masz zegar 8MHz to oznacza, że w ciągu jednej sekundy masz 8000000 taktów. Jeśli masz preskaler, to częstotliwość jest dzielona przez 256. Czyli daje to 31250 taktów na wejściu timera na sekundę. A Twoje przypuszczenie co do preskalera 64 jest całkiem słuszne. :) Trzeba tylko pamiętać, że licznik 16-bitowy ma pojemność 65535, a 8-bitowy 256.
Witam. Założenie jest takie, aby dioda podłączona do wyjścia timera0 zapalała się i gasła na 1s. Wpisuje więc do rejestru TCCR0 1 i mam preskaler 1 co daje pojedyńczy kwant czasu = 125ns (1/8000000 = 125n) czyli żeby odmierzyć 1s potrzebuje zliczyć to 8000000 razy :P, ale że TCNT0 ma pojemność 256 bitów zastosujemy dodatkowy licznik. czyli zliczymy...
Witam Właśnie przeczytałem rozdział manuala M8 dot. pracy T/C0 i rejestrów odpowiadających za timer, tylko nie wiem jak zrobić, aby timer odmierzał wartość 1 sekundy .... ;| Otóż policzyłem, że wg tego co mam to: F-CPU = 8MHz Prescaler = 64 MAX_VAL = 256 (bo 8-mio bitowy) więc: TOV ck = (F_CPU/Prescaler)/MAX_VAL = 488 czyli wynika że w ciągu jednej...
proszę bardzo :) : (kod jest w wersji roboczej więc nie wygląda podiecająco ;P) // deklaracja bibliotek wbudowanych w WinAVR #include <avr/io.h> #include <avr/interrupt.h> // deklaracja bibliotek prywatnych #include "lcd_driver.h"// biblioteka z driverami do wyswietlacza alfanumerycznego LCD 2x24; biblioteka z opóźnieniami #include...
Load timer = ... nie jest równy Timer = ... ... no to akurat jest oczywiste :-) Problem dotyczy zupełnie czegoś innego - poczytaj powyżej, ale dokładniej ;-) Skąd te obliczenia? Poniżej masz kalkulator do timerów. Policz i się nie dziw. ... no jakoś się nie dziwię, bo kalkulator (swoją drogą całkiem fajny - szczególnie przydatny dla tych, który nie...
Witam ,napisałem sobie następujący program który ma pełnić funkcję prowizorycznego zegarka. W obsłudze przerwania timer inkrementuję sobie sekundy , ale gdy chce wyświetlić je w main ciągle wyświetla zero na led. Natomiast gdy ostatnią linijkę kodu zamieszczę w obsłudze przerwania działa ok . W związku z tym moje pytanie jak zrobić, żeby przekazywać...
Program nie tyle idzie w krzaki, ale po prostu warunek nie ma szans się spełnić. Bez całości kodu trudno coś powiedzieć, bo z tych fragmentów wynika, że warunek (ms==1) może być spełniony raz na ok. 4 miliony sekund (zmienna miliSekundy nie jest nigdy zerowana, a tyle czasu zajmie przepełnienie zmiennej typu long int). Ogólnie: Do sterowania aktywnością...
Dowolnie długie przerwanie? Czemu nie, to przecież tylko procek. Jeśli zechcę mieć przerwanie trwające pół sekundy, to powinienem to móc zrobić. Zablokować co trzeba, a reszta niech się dzieje w tle. A o wyjątkach poczytałem, co znalazłem. Niestety, tak jak Freddie Chopin powiedział, czasami prowadzi to na manowce. Jeżeli w R14-8 mam wartość wskazującą...
Czy ktoś mógłby mi łopatologicznie wytłumaczyć o co w tym chodzi? Napisałem prosty program do odliczania 1 sekundy i albo się spieszy, albo spóźnia ok 3 sek na 5min. Próbowałem już wielu ustawień tccr0 dla ctc i z identycznym skutkiem... Procek to Atmega16, kwarc zewnętrzny 8MHz, prescaler 64, odliczam 125 lub 124 i ciągle wariacje. Jak powinienem poustawiać...
The extreme values for the OCR0A Register represents special cases when generating a PWM waveform output in the fast PWM mode. If the OCR0A is set equal to BOTTOM, the output will be a narrow spike for each MAX+1 timer clock cycle. Setting the OCR0A equal to MAX will result in a constantly high or low output (depending on the polarity of the output...
Pisałem w poście nr 3, mógłbyś trochę jaśniej pisać ? Nie rozumiem za bardzo Twojego sposobu wypowiedzi. stanleys, czy to naprawdę ma sens ? Wejdzie w przerwanie, w ułamku sekundy zmieni stan portu i poleci dalej, czego nawet nie zauważysz...
Zapala najpierw jedną diodę, później drugą. Nie ma robić nic konkretnego oprócz pokazania tego, że instrukcje po delay przestają być wykonywane. Jeżeli wyłączę przerwania to nawet jeśli będzie tu _delay_ms(10000); zapali się pierwsza dioda, a po 10 sekundach druga.
Ustaw okres PWM na timerze 1 tak, żeby był podwielokrotnością sekundy, czyli n * okres = 1 sekunda W przerwaniu timera odliczaj od n do 0, a jak odliczysz - wywołaj procedurę, który ma być uruchamiana raz na sekundę i przeładuj licznik na n. Aha, no właśnie ktoś coś podobnego napisał powyżej, tylko ja proponuję zostawić timer 1, który pędzi PWM.
. Zrobiłem na wzór tego kodu, który mi podałeś i też nie działa: Nie musiałeś nic przerabiac ani dodawac. To był cały poprawny code na twjój wymóg " Toggle Portd.0 " co 10 sec. Wystarczyło go przecopiowac do Bascom, dokonac compilacji i wpisac plik *.hex do processora. Pewnie błąd zrobiłem w tym kawałku po timer1_isr: ale tak to właśnie zrozumiałem...
Dziękuje za odpowiedź ale generalnie nie moge zgodzić się z Tobą .Zrobiłem program który sprawdza i wyświetla freq na wyświetlaczu . Kiedy miało odpowiednią wartość to serwo zaczynało coś robić ale robiło to nieskładnie . Więc nie chodzi o wartość tego parametru . Moge się zgodzić że to nie będzie za każdym razem taka sama sekunda . Ale nie musze dokonywac...
Więc tak. Odcinek 1 sekundy ma być bardzo dokładny, czy nie musi? Jeżeli procek będzie pędzony z wewnętrznego oscylatora, to czas 1 sekunda nie będzie bardzo dokładny. Musisz zmienić fusebity, aby procek był taktowany z 4MHz, bo teraz jak sam widzisz pracuje na 1MHz.
Zakładam że obrót będzie trwał najdłużej 20ms, czyli od 50 obrotów na sekundę. Czyli timer1 może doliczyć do 1250 (bo preskaler 256). W wtedy dzielę te 1250 na 48 częsci i wychodzi 26. To ma być 26 do przerwań przepełnienia dla timera0 dla preskalera 256 ale jest preskaler 64 więc powinno być 104. I wtedy zapasam diodę na czas 4 lub 3 przerwań.
Mam jeszcze pytanie o maskowanie bitów Będę odczytywał dane z PCF8563, a on wymaga maskowania bitów po odczycie. Jako, że na aktualnie używanej płytce nie mam RTC PCF8563, na razie na "sucho" wymyśliłem coś takiego: [syntax=c] void Czas(){ // definiujemy sobie dla polepszenia czytelności programu typ wyliczeniowy // wskazujący nam później na odpowiednie...
Witam. Wybacz ale chce mi się rozpisywać. Ustawianie 1 sekundy dla zegara 16MHz [syntax=c] OCR1A = 0x3D08; TCCR1B |= (1 << WGM12); // Mode 4, CTC on OCR1A TIMSK1 |= (1 << OCIE1A); //Set interrupt on compare match TCCR1B |= (1 << CS12) | (1 << CS10); // set prescaler to 1024 and start the timer[/syntax] to co wychodzi z prescalera...
Lepsza stabilnosc uzyskasz....... Bzdura. Ten uc nie ma nawet Timera2. Tak jak już wspomniał kolega korzystasz z wew. oscylatora domyślnie ustawionego na 1MHz. Niestety ten oscylator jest niedokładny ale jest na to rada. Istnieje specjalny rejestr dzięki któremu można owy oscylator skalibrować a nazywa się on OSCCAL. Wpisanie odpowiedniej wartości...
Spróbuj mojego rozwiązania to cały blok testowy z większej całości. Możesz pozbyć się całkowicie obsługi LCD choć do testów i analizy w sumie może Ci się przydać :) Działa w 100%. Pozdrawiam [syntax=basic4gl]'----------------------... ' Pozycjoner V1.3 - częstotliwościomierz ' ' SylwekK ' 2011.10.xx ' ' 'kwarc 8MHz '--------------------------------------....
Witam, popełniłem takowy program do sterowania ogrzewaniem i zapętliłem się nieco na funkcji start/stop odliczania pozostałego czasu do wyłączenia urządzenia. Poniżej fragment kodu: [syntax=basic4gl]'----------------------... GLOWNA----------------------------------... Do If Flaga_4ms = 1 Then 'co 4ms Flaga_4ms = 0 End If If Flaga_100ms =...
Wykonaj proste doświadczenie. W kodzie który masz w pierwszym poście zrób sobie zapis który sygnalizuje jako błędny najpierw tak jak masz: [syntax=basic4gl]Load Timer0 = 250[/syntax] i zmien na: [syntax=basic4gl]Load Timer0 = 50[/syntax] nie będzie żadnej różnicy jak popatrzysz na częstotliwość migania diody. a następnie zmień na: [syntax=basic4gl]Load...
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]
a ja chce po 10 sekund w pętli wilgotnosc i temperaturę) Jeżeli nie chcesz aby salut powitalny na LCD był ciągle wyświetlany i odświerzany, - umieśc go w części programu wykonywanego jednokrotnie, tylko podczas startu i tak pozostaw, pózniej zadbasz o jego nadpisanie w odpowiednim momencie: [syntax=c] Void setup() { // najpierw formatowanie pozycji...
a jak ustawić ten timer bo tu mowa chyba o timer0
Witam, Dochodzę do szału ponieważ nie mogę odliczyć 1 sekundy w BASCOM-AVR $regfile = "attiny2313.dat" $crystal = 4000000 Config Portb = Output Config Portd = Output Config Timer0 = Timer , Prescale = 1 Dim Tim As Byte Dim Sek As Byte Dim Przerw0 As Word On Timer0 Odmierz Enable Interrupts Enable Timer0 Timer0 = 0 Do If Sek = 10 Then Sek =...
Witam Mam dziwny problem z konfiguracją timer1 w atmedze644pa w trybie CTC. Kod jest następujący: [syntax=c] #define TIMER1_OCR 10801//10799//10800 // 1 sekunda void timer_init(void) { TCCR0A=(1<<WGM01); TCCR0B=(1<<CS02)|(1<<CS00); OCR0A=TIMER0_OCR; TIMSK0=(1<<OCIE0A); TCCR1B=(1<<CS12)|(1<<CS10)|(...
Avr i timer0 to bym polecił proste przyjemne i tanie.
Cześć, uczę się wykorzystania timerów w mikrokontrolerze Atmega8A. Chcę aby dioda migała co sekundę. Wykorzystuję do tego 8 bityowy timer0. Taktowanie ustawione mam na 8000000Hz, a preskaler na 1024. Chcę, żeby przepełnienie występowało co sekundę czyli żeby dioda migała co sekundę, ale tak się nie dzieje. Zmieniam wartość TCNT0 na 30, bo taka wychodzi...
Przepraszam za takie proste i dla niektórych oczywiste pytania ale pierwszy raz uczę się obsługiwać Timer'y Obsługa jest bardzo skomplikowana. Timer0 posiada tylko konfigurację preskalera + ewentualne włączenie przerwania od przepełnienia. Cała reszta nie ma nic z nim wspólnego. Aby odliczyć 1s to trzeba naliczyć 18432000 taktów zegara (przy preskalerze...
Trochę sobie zaoszczędzisz kodowania jak popatrzysz jak wygląda korekcja BCD przy dodawaniu binarnym. Te wszystkie ify nie są potrzebne - poczytaj o BCD. Po wykonaniu standardowej operacji nad liczbami w kodzie BCD należy sprawdzić i w razie potrzeby skorygować wynik. Dla dodawania i odejmowania korekcja będzie potrzebna wtedy, gdy dana grupa bitów...
Witam, Wybaczcie dłuższą nieobecność. Program działa jak użyje PORT.X Mam inny problem. Otóż potrzebuje Timer1 do PWM i chciałbym zegarek zrealizować na Timer0. Znalazłem w sieci program, który wykorzystuje Timer0 do odliczenia 1 sekundy. Działa. Po zmodyfikowaniu programu który do odliczania czasu wykorzystuje Timer0 niby też działa, tylko problem...
Witam Porwałem się na robienie własnego sterownika co i stanąłem w martwym punkcie. Mianowicie sterownik składa się z 2 płytek na których są Atmegi 16 taktowane zewnętrznym kwarcem 11.059200 + kwarc zegarkowy jeden układ odpowiedzialny za odczyt temperatur regulację fazową wentylatora oraz sterowanie elektrozaworami a drugi obsługa wyświetlacza graficznego...
Hej, Próbuję zrobić menu ustawień swojego sterownika i kompletnie mi to nie wychodzi :( Menu ma być sterowane pilotem NEC (pilot działa poprawnie) Jak ja to sobie wymyśliłem: 1. ekran główny (tu jest OK) - przycisk strzałka w lewo przełącza ekran na zegar "MAXI" - przycisk strzałka w prawo przełącza na ekran główny - przycisk strzałka w górę blokuje...
Witam, drogich forumowiczów. Mam problem z komunikacją kilku urządzeń w sieci rs485. A tak prawdę mówiąc to z komunikacją pomiedzy dwoma, jednym "master" i jednym "slave". Normalnie staram się zadawać pytania w ostateczności na forum Elektroda, ale po prawie 3 tygodniach siedzenia przy problemie, przeglądaniu masy poradników i postów związanych z rs485...
Mam jeszcze jedno pytania. Chciałbym wyniki pomiarów odczytywac na ekranie komputera z szybkością 240 próbek na sekundę. Wykorzystuje do tego Timer0. I teraz jak to zrobić, aby 240 razy na sekundę (co ok 4,1666666666...ms) program przeskoczył do etykiety i wykonał pomiar. Czy przetwornik zdąży dokonać pomiaru jeśli będzie ustawiony ten sam czas na przeskok...
Witam. Mam problrm ze skompilowaniem programu. Program jest idealnie przepisany z gazety Nowego Elekronika (kwiecień/maj 2009). Załączam listing. Proszę o pomoc. Pozdrawiam Adrian. $large $crystal = 12000000 $regfile = "89C52.DAT" Config Lcd = 16 * 2 Config Lcdpin = Pin , Db7 = P1.3 , Db6 = P1.4 , Db5 = P1.5 , Db4 = P1.6 , E = P1.7 , Rs =...
Przy kwarcu 12MHz dźwiek minutnika z buzera jest bardzo niskotonowy, parametry polecenia sound też nie regulują częstotliwości, przy 11,59200MHz jest oki. Dodano po 1 Proszę o sugestie/pomoc... Dodano po 4 Konfiguracja timer0: Config Timer0 = Timer , Gate = Internal , Mode = 2 Load Timer0 , 39150 Enable Timer0 Enable Interrupts Reset Odliczanie On Timer0...
Ty to jesteś krejzolka Aldoro wiesz hahahahaha Podłączył byś wyjście transoptora do wejścia INTx albo ustawił Timer jako Counter a wyzwalanie jako, na przykład Falling, Co sekundę sprawdzał byś ile impulsów nabiło przez sekundę. I to wszystko. Bez obsługi przepelnienia Timera osmiobitowego zmieścił byś 255 impulsów na sekunde. Miłego dnia. Mogłeś wcześniej...
z ta kalibracjo to ciekawy temat ,ale jak podepne czujnik do termometru zrobionego na rs232 to temperature pokazuje idealnie,a ten kwarc to faktycznie 12.902400 ,tylko zmieniłem go na 11,059 oczywiscie tez zmieniając w kompilatorze. Wybacz kolego , ale Cię troszkę "obsztorcuje" :D 1)Twierdzisz , że używasz DS1820 (9-bit) , a temperaturę obliczasz jak...
$regfile = "m8def.dat" $crystal = 8000000 Config Timer0 = Timer , Prescale = 1024 On Timer0 Timer0_pelny Config Pinb.0 = Output Led Alias Portb.0 Dim A As Byte Enable Timer0 Enable Interrupts Do Loop Timer0_pelny: Incr A If A = 152 Then A = 0 Toggle Led End If Return Powinno działać. Warto ściągnąć program do obliczania co ile będzie...
Cześć ! Dziś chciałbym zaprezentować swój najnowszy projekt, którym jest świąteczna choinka LED. Jako, że według świątecznego zwyczaju swoich bliskich obdarowujemy prezentami ów ozdoba została wykonana dla moje dziewczyny, która bardzo lubi klimat świąt i wszystkie ozdoby z nimi związane. Ale do rzeczy! Tak to wszystko było... BUDOWA Sam pomysł narodził...
Witam Mam taki program w symulatorze działa tak jak bym chciał czyli po nacisnięciu przycisku dioda sie zapala i po kilku sekundach gasnie ale po wgraniu do atmegi 8 niedziała prawidłowo czyli diode można zgasic i zapalić ale już nie gasnie po kilku sekundach.Czy ktoś wie czemu??? $regfile = "m8def.dat" $crystal = 1000000 Config Portb = &B11111111...
Witam! To mój pierwszy post, więc proszę o wyrozumiałość. Skonstruowałem licznik impulsów - częstościomierz, w oparciu o projekt AVT5025 (Mikroprocesorowy wykrywacz metali). Sonda wykrywacza umieszczona będzie przy bramie wjazdowej na parking i jeśli pojawi się nad nią samochód to na danym pinie mikrokontrolera pojawi się stan wysoki. Układ ma po prostu...
Witam, ostatnio zabrałęm się za projekt prostego zegara. Układ wyświetla godzinę na 4 cyfrach wyświetlacza LED wspólna anoda. Oto wyniki mojej pracy: schemat: Do mikrokontrolera Atmega8A podłączony jest kwarc 8MHz. A to program [syntax=c]/* * zegar.c *F_CPU 8000000UL zewnetrzny kwarc częstotliwość odświeżania 300hz * Created: 2014-02-16 01:11:51 * Author:...
czesc w bascomie moze byc? jak tak to: :) Config Timer0 = Timer , Gate = Internal , Mode = 1 ' Configuracja timera Config Lcd = 16 * 2 ' ..wyswietlacza, przykladowa Dim Temp As Byte 'zmienne Dim Temp_2 As Byte Dim Temp_3 As Byte Dim Sekundy As Byte Dim Silna As Single Dim N As Byte Enable Interrupts 'wlaczenie przerwan Enable Timer0 Enable Int0 Enable...
Mam problem z działaniem poniższego programu. Części programu odpowiedzialne za multipleksowanie i wyświetlanie znaków na 7-segmentowych wyświetlaczach led działają prawidłowo. Problem pojawia się podczas pomiaru częstotliwości. Tuż po włączeniu, na wyświetlaczu przez chwilę ukazuje się prawidłowy wynik; sytuacja powtarza się mniej więcej co 1 sekundę...