Przy 6 kHz to można się pokusić o zliczanie programowe - czyli podajesz sygnał na wejścia mogące generować przerwania. Z drugiej strony, skoro stosujesz ATMega32, to może prościej wykorzystać ATXMEGA32, gdzie w zależności od wersji liczników masz nawet 8 (albo 16 8-bitowych) i sobie to ładnie sprzętowo rozwiążesz.
A czy na pewno sygnał wejściowy jest na porcie? Spróbuj odczytywać stan portu w programie i sprawdź, czy się zmienia. Moze coś jest nie tak ze sprzętem (może uwalony port...)
A nie łatwiej jest policzyć DO ilu ma liczyć a nie OD ilu? :) i robić przerwania COMP a nie OVF? Ja tak robię i na kwarcu 4MHz timer1 odlicza sekundy bardzo ładnie. Ale u Ciebie timer1 wydaje się mieć dobrze ustawianą wartość. Przy prescalerze 256 musisz mieć 15625 taktów zegara, aby osiągnąć sekundę. W drugim coś mi nie gra. Odliczasz od 0x0F czyli...
No jak za każdym razem do licznika wpisujesz zero to jakim cudem ma być spełniony ten warunek timer1= A?
Timer1 jest 16-bitowy. 2^16 = 65536.
Napisałeś Enable Timer1 . Licznik Timer1 ma nie tylko jedno przerwanie. Każde zdarzenie ma swoje źródło przerwań i trzeba je włączyć. :arrow: Help w temacie ENABLE.
Chodzi o to, że po pierwszym przerwaniu TCNT1 będzie miał wartość 0, czyli zliczy potem 65536 impulsów. Zaś do generowania, jak Ty chcesz, przerwań co określony odcinek czasu służy tryb CTC. Wtedy w rejestrze OCR ustawiasz ilość impulsów, które chcesz zliczyć, i wygenerować odpowiednie przerwanie.
Z jaką znowu biblioteką? RC5SEND jest w kompilatorze jako code template a nie w bibliotece i zmienić się jej nie da. RC5SEND korzysta z 16-bitowego licznika TIMER1, którego to ATtiny45 nie posiada . Ma tylko dwa 8 bitowe liczniki. Rozwiązanie jest i to na forum MCS Electronics. Poszukaj!
Musisz zaznaczyć cały tekst który chcesz pokazać jako kod, a następnie zaznaczyć napis Code $regfile = "attiny2313.dat" $crystal = 8000000 'kwarc 1MHz $prog &HFC , &HE4 , &H9F , &H00 ' generated. Take care that the chip supports all fuse bytes. Config Timer1 = Timer , Prescale = 64 'timer1 jako licznik 15536 Config Int0 = Rising 'detetor zera...
Błąd wyskakuje dlatego że Timer0 nie posiada funkcji PWN, natomiast liczniki timer1 (16 bitowy) i timer2 (8 bitowy) można zatrudnic do pracy w roli sprzętowego PWN. Poszukaj na forum a znajdziesz przykłady jak mozna programowo zrobić PWN. Pozdrawiam
Witam. Używam przerwania INT1i TIMERA1 do odmierzania czau trwania stanu wysokiego na wejściu INT1 przez zliczanie odcinków czasu 400us podczas trwania stanu wysokiego na wejściu INT1. '****timer1******** Config Timer1 = Timer , Prescale = 64 On Timer1 Pomiar_czasu Load Timer1 , 50 Enable Timer1 Stop Timer1 '*****wtrysk***** On Int1 Wtrysk Config Int1...
Tak się nie robi. Myślę że ten timer się parę razy przepełni zanim obsłuży LCD. Ustaw timer tak aby wywoływał przerwanie przy danej wartości i w tym przerwaniu dodawaj jakąś zmienną o 1 i czyść licznik.
Konfiguracja timera '51 jest inna : [syntax=basic4gl]Składnia: CONFIG TIMERx = COUNTER | TIMER , GATE = INTERNAL | EXTERNAL , MODE = 0 | 1 | 2 | 3 gdzie: x0 – TIMER0, 1 – TIMER1, Opis: TIMER0 i TIMER1 mogą pracować jako liczniki impulsów zewnętrznych gdy pierwszy parametr jest ustawiony jako COUNTER. Impulsy zliczane muszą być dostarczane...
Chyba, że połączysz dwa układy ATTiny2313 za pomocą SPI (szybka wymiana danych), CKOUT pierwszego <-> XTAL1 drugiego (praca z tą samą częstotliwością), skorzystasz z liczników Timer1 (dwa kanały 10bit PWM). I to byłoby jakieś tam rozwiązanie. A na dokładkę RS232.
odnosnie zegarka to ja bym to zrobil na timer1 - 16 bitowy licznik, i uzaleznil to od przepelnienia tylko nalezy ustawic preskaler na 256 wpisac poczatkowa counter=conter+34286 oczywiscie przy rezonatorze 8 MHz 8000000/256/(65536-34286) = 1 sekunda pozniej tylko zliczanie a i jeszcze jedna sprawa nalezalo by zmienic wartosc dwojkowa na kod BCD :)
Przerwanie miałbyś z częstotliwością 32000Hz(8000000/250), gdybyś tylko przeładowywał Timer w przerwaniu. [syntax=basic4gl] Prztimer1: Load Timer1, 250 '<----- w tym miejscu na przyklad Incr Licznik If Licznik > 100 Then Licznik = 0 End If[/syntax]
Ja zawsze wpisuję Timer1 = var i to jest wartość początkowa licznika , a wpisując instrukcję load , podajesz ilość impulsów do zliczenia , a nie wartość początkową timera, kompilator sam wylicza wartość początkową.( chyba ). Timery zliczają w górę.
Masz gotowca. Jestem ciekaw czy zadziała. On Timer1 Timer1_handler Dim Timer1_licznik As Byte Dim Buffer(512) As Byte Dim Write_position As Word Dim Read_position As Word Open S For Binary As #2 For Write_position = 1 to 512 Get #2 , Buffer(Write_position) Next Write_position Write_position = 0 Enable Timer1 Do If Write_position <>...
wynik końcowy faktycznie za każdym razem jest inny. (at) emarcus możesz podpowiedzieć jak powinien wyglądać serwis int1? Popatrzyłem troche bliżej na twoj kod. Z jakiego powodu potrzebujesz otrzymać wynik ("Czas_2") z dokładnocią aż do 9 miejsc decimal? Jeżeli jeden z czynników iloczynu (rozdzielczość timera) jest liczbą wymierną z dokładnościa do...
Witam wspólnotę chciałbym zaznaczyć że z wykształcenia jestem mechanikiem, a z programowaniem nie miałem wcześniej styczności. Przeczytałem książeczkę która mowiła o programowaniu w jezyku bascom, i stworzyłem taki o to kod programu. [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 8000000 Config Timer0 = Timer , Prescale = 256 'licznik do odmierzania...
ATmwga 8 ma 3 timery... 2x 8-bit i 1x 16bit... Timer2 może pracować z kwarcem zegarkowym... Timer1 jako PWM... A timer0 jako licznik...
Ogarnąłem temat mniej/więcej tak: timer1 nabija licznik impulsami (po 10ms) do 60, licznik gdy osiągnie 60 wyłącza timer1 i włącza zmianę kierunku zliczania, znacznik1 dołącza do licznika timer2, który podaje impuls co sekundę przez co mam odliczanie wstecz, znacznik1 gdy wyłączony odłącza timer2 i zmianę kierunku zliczania i dołącza timer1, timer1...
juz dziala cos nagle mu sie odmienilo i zadzialalo na procesorze a w bascomie symulator i tak nie dziala na atmega16.
Mam takie coś: $crystal = 4000000 $regfile "attiny2313.dat" Config Lcd = 16 * 2 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portb.4 LCD Db5 = Portb.5 , Db6 = Portb.6 Db7 = Portb.7 , E = Portb.3 Rs = Portb.2 Dim Wynik As Long Config Timer1 = Counter , Edge = Rising Cls : Lcd "Licznik" : Wait 1 Start Timer1 If Pind.1 Then Waitms 25 Timer1 = 0 Do Timer1...
Użyłeś tej wersji która obecnie jest widoczna powyżej? Bo na początku wkleiłem z błędem. Jeśli tak, to spróbuj jeszcze tej: [syntax=c]Zero: 'zresetuj licznik Timer1 = 0 Tccr1b = &B00000000 'ICNC1 ICES1 - WGM13 WGM12 CS12 CS11 CS10 Tccr1a = &B00100000 'COM1A1 COM1A0 COM1B1 COM1B0 FOC1A FOC1B WGM11 WGM10 Tccr1a = &B00100100 'COM1A1 COM1A0 COM1B1 COM1B0...
Sprobuj jeszcze od timera0 obsluge przerwania w petli glownej, a Krotki kod generujacy tego prostokata, mozesz zorbic: -przeliczajac ile z danym kwarcem wynosi okres danej czestotliwosci wpisac do licznika timera1 polowe tej wartosci, aby co pol okresu zmienial stan wyjscia na przeciwnym, przerwanie od Timera1 oczywsice ze wzgledu na prostote zrob w...
$crystal = 11059200 Dim Licznik As Long Dim Czestotliwosc As Single Config Int0 = Falling Config Timer1 = Timer , Noise Cancel = 1 , Prescale = 1 On Int0 Licz On Timer1 Przerwanie_co_1ms Enable Interrupts Enable Int0 Enable Timer1 Timer1 = 54477 Do Loop End Przerwanie_co_1ms: Timer1 = Timer1 + 54477 Licznik = Licznik + 1 Return Licz: Stop Timer1...
Przeznaczenie: Zatrzymuje działanie programu lub określone urządzenie. Składnia: STOP STOP urządzenie gdzie: urządzenienazwa symboliczna uruchamianego urządzenia. Opis: Pierwszy format instrukcji powoduje zatrzymanie działania programu. W tym celu jest wykonywana pusta pętla, podobnie jak w instrukcji END. Jednak przy instrukcji STOP nie są wyłączane...
To nie Bascom jest przyczyną tylko źle napisany program ;). 1. odczyt timera1 16bit odbywa się po przez rejestr pomocniczy TEMP, ten rejestr jest też używany przez inne procedury i funkcje i jeśli jest użyty to właśnie niszczona jest wartość High timer1 bo ona tam jest wpisana gdy używasz komendy. wpisując tak timer1 do tablicy możesz gubić High timer1....
czy tak trudno zerknąć do helpa PWM1A = wartość zmienna = PWM1Aalias rejestru Compare 1A licznika TIMER1 (Word) używany gdy licznik pracuje w trybie PWM PWM1B = wartość zmienna = PWM1Balias rejestru Compare 1B licznika TIMER1 (Word) używany gdy licznik pracuje w trybie PWM PWM2 = wartość zmienna = PWM2rejestr Compare 2 licznika TIMER2...
Po pierwsze to mega dziwnie ustawiasz ten oscyloskop, ale to detal. Po drugie, powiem szczerze, nie do końca rozumiem działanie trybu 15 TIMER1. W tym trybie licznik liczy do wartości ustawionej w OCR1A, ale kiedy następuje przełączenie wyjścia? Karta katalogowa podaje, że "Setting the OCR1x equal to TOP will result in a constant high or low output...
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...
tak, przepraszam za literowke, oczywiscie mam w programie napisane tak: config timer1=counter reszta jak wyzej
Witam, W zdarzeniu tick po instrukcji zmniejszającej wartość zmiennej time: [syntax=csharp]If (time==0) { timer1.Stop() }[/syntax] Pozdrawiam
Kosmo Timer1=34285 wyszło z prostej kalkulacj. przy zegarze 8000000 i preskalerze 256, timer uP'a zliczy 8000000/256= 31250 "impulsów". Czyli aby licznik sie przepelnil nalezy zaczasc zliczanie od 65535-31250=34285.
Mam ustawiony timer w Input Capture Ustawienie timera z przepełnieniem licznika IC_Timers 40000 (po prostu potrzebowałem równy czas też dla odmierzania zegarka i innych bajerów do odmierzania czasu ) przerwanie co 20ms. https://obrazki.elektroda.pl/6280175200_... Od lewej okres, czas stanu wysokiego, aktualny timer ICR1, poprzedni timer...
NIE NIE !! Przepraszam, mój błąd, źle napisałem. Oczywiście TIMER1 zwiększa licznik sekundy co 1s, a poleceniem waitus tylko go koryguję
Dokładnie tak samo jak w przypadku TIMER1: CONFIG TIMER3 = PWM , PWM = 8 | 9 | 10 , PRESCALE = 1 | 8 | 64 | 256 | 1024 , COMPARE A PWM NO_OUTPUT ] = CLEAR UP | CLEAR DOWN | DISCONNECT , COMPARE B PWM NO_OUTPUT ] = CLEAR UP | CLEAR DOWN | DISCONNECT Licznik TIMER3 jest dokładną kopią licznika TIMER1 zatem wszystkie opcje jak i nazwy rejestrów są takie...
Natrafiłem na kolejny problem w mojej walce z licznikami. Mój plan jest taki: - licz 18ms - uruchom przerwanie od OCR1A - zmień stan portu D na wysoki - ustaw teraz przerwanie od OCR1B - licz 512 razy po 62 takty (tak mi wyszło z obliczeń przy zegarze 16MHz bez preskalera) - ustaw PORT D na stan niski kiedy wartość licznika będzie się równała 255+polozenie...
[syntax=basic4gl] Config Timer1 = Timer , Prescale = 8 'Parametr Prescale może być równy:1, 8, 64, 256 lub 1024 [/syntax] Potem w programie możesz sobie odczytywać zawartość tego licznika w następujący sposób (np.): [syntax=basic4gl] Stan = Timer1 'Zmienna Stan typu Word [/syntax] robiw
Banalne zadanie. A więc włączasz licznik(lepiej TIMER1-większa pojemność), tak, aby odliczał ci te 10sekund. Dajesz zmienną którą zwiększasz np co 1sekunde (zmienna o nazwie sekundy). W czasie odliczania do 10s w pętli głównej zliczasz impulsy przycisku i zwiększasz je w innej zmiennej (np. impulsy). Po 10 sekundach w zmiennej sekundy będzie10s a w...
Ale odpowiedzi dla nouki? W Bascomie można wstawić wartości do rejestrów, niekoniecznie w asemlerze. Ja to robiłem tak: Set Tccr1b.cs10 'start timer1 Else 'a jak nie Czas = Timer1 'odczytaj czas (liczbę zliczonych impulsów) z timer1 Reset Tccr1b.cs10 'zatrzymaj licznik Timer1 = 0 'wyzeruj licznik(żeby po następnej zmianie wyjścia komparatora mógł liczyć...
Witam. Jestem poczatkujacym w C i powili uruchamiam sobie kolejne moduly proca atmega128, napotkalem niestety na problem w uruchomieniu timera1, wyglada na to ze wogole nie startuje bo nie wchodzi mi w obsluge przerwania przepelnienia licznika, ma to dzialac tak ze przy kwarcu 11.0592MHz po odpowiednim zaladowaniu licznika ma mi zapalac diode co ok...
Ok, dzięki Sugerowałem się takim samym programem z książki. Tam dokładnie było tak samo, no może wykonywały inne zadanie niż u mnie. Edit: Ale dałem ciała, patrzę w książkę i faktycznie jest jeszcze "pin", ehh Dzięki No więc z przyciskami już jest ok, ale wracając do kodu pokazującego wartość z licznika timer1, pokazują się bzdury. Po dodaniu kondensatora...
potrzebny jest mi generator fali PWM o zmiennej częstotliwości i wypełnieniu. Moim licznikiem jest timer1 pracujący w trybie CTC. Nie analizowałem kodu, bo przekombinowałeś. Jak chcesz mieć zmienne wypełnienie to użyj trybu FastPWM (tryb 15 z wartością TOP w OCR1A), a nie CTC. W trybie tym częstotliwość zmieniasz za pomocą rejestru OCR1A, wypełnienie...
Jesli rozumiem, to potrzebujesz mocy obliczeniowej tak ze 10x większej niz uK tworzacy te PWM. Niekoniecznie. Niektóre mikrokontrolery mają liczniki umożliwiające to sprzętowo ogarnąć. Np. STM8, czy STM32. A w przypadku AVR można skorzystać ze wspomagania przerwań licznikiem. Poleć jakąś literaturę, sporo jest różnych książek w necie. Temat mikrokontrolerów...
Zastanów się co będzie w rejestrze TIMSK po wykonaniu tych dwóch linii Twojego programu: [syntax=c]TIMSK = (1<<TOIE0); //przerwanie na przepełnienie ... TIMSK = (1<<TOIE1); //przerwanie na przepełnienie [/syntax] Nie definiuj F_CPU w kodzie z tych powodów: http://mikrokontrolery.blogspot.com/2011...
Spróbuj tak: $regfile = "m8def.dat" $crystal = 1000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Rs = Portb.1 , E = Portd.0 , Db7 = Portd.1 , Db6 = Portc.4 , Db5 = Portd.7 , Db4 = Portb.0 Cursor Off Dim licznik as word Config Timer1 = Timer , Prescale = 16 On timer1 przerwanie Enable Interrupts Enable Timer1 Do If Pind.5 = 1 Then Timer1 =...
Witam Przykład programowego PWMa. Program na ATMEGA8 z zegarem 16MHz. Zmienna Pwm ustawiona jest na 25%. Rozdzieczość PWMa od 0 do 100%. Częstotliwość PWMa około 260Hz. $regfile = "m8def.dat" $crystal = 16000000 Config Pinb.0 = Output : Wyjscie Alias Portb.0 Config Timer1 = Timer , Prescale = 1 Load Timer1 , 800 On Timer1 Przerwanie Dim...
Witam serdecznie Potrzebuję zmierzyć zewnętrznym licznikiem ile impulsów z timer1 mieści się w czasie kiedy portd.3=0. Kilka dni na googlach i nic , tak jakby to było niemożliwe. W pomocy bascom pisze 'Możesz odczytywać i zapisywać dane z licznika TIMER1, za pomocą 'specjalnej zmiennej systemowej: W = Timer1 Timer1 = W No i brak info gdzie to wpisać
Teoretycznie jak skorzystasz z ATTiny261 i jego możliwości sprzętowego generowania przebiegów PWM, włączając PLL co pozwoli na taktowanie licznika Timer1 częstotliwością 64MHz i skracając ten licznik do 80...
Skorzystaj z przerwań generowanych przez licznik TIMER1 (lub TIMER2 jeśli jest dostępny).
Oj, wardach, sam miał przeczytać specyfikację instrukcji random ;) Przy okazji - w Timerze jest zupełnie zbędny ProcessMEssage - to jest osobny wątek, więc nie ma wpływu taka instrukcja. a tak generalnie to trochę uprościć by zapis można było :) procedure TForm1.Timer1Timer(Sender: TObject); begin //randomize; - wynieść do sekcji inicjalizacyjnej,...
W rzeczy samej, liczy sobie dalej. W momencie przepełnienia jest ustawiana flaga przepełnienia a rejestr licznika jest zerowany ew. przepisywany zadaną wartością. Szczegóły - patrz dokumentacja.
Zdefiniuj zmienną Temp jako Word. Jak ci ma wyświetlić 600 jesli zmiena Byte może przyjąc max wartość 255. Właśnie powyżej tej wartości będą ci sie wyświetlać dziwne rzeczy. No to może wytłumaczę jak to zrobić na zmiennej typu Byte według wyżej wspomnianej ideii. $crystal = 4000000 $regfile "attiny2313.dat" Dim Pomiar As Single Dim Temp As...
Po co sprawdzać? Wartość ICR1 zmniejsza rozdzielczość licznika Timer1...co do drugiego to wydaje się, że jeśli dobrze dobraliśmy oba zegary to taka sytuacja jest niemożliwa bo wskazywałaby, że osiągamy prawie maksimum licznika Timer1...robiw Dodano po 1 ...ale może się zdarzyć... to trzeba będzie zerować...i powrócić do pierwszego sposobu nie z CTC...
Jeśli do tego włączysz przerwania, ustawisz licznik T1 w tryb porównywania z kasowaniem, to dokładnie co 1 sekundę wywoła się przerwanie przepełnienia licznika T1. Dalej to już tylko odpowiednia obsługa tego przerwania.
I właśnie trzeba użyć licznika TIMER1 bo Timer0 nie wystarczy do tego zadania.
if (!przerwa) {Czasomierz_ON; przerwa=1;} else if (przerwa){Czasomierz_OFF;INT0_OFF;odczyt... W 1 lini warunek daje TRUE bo przerwa=0 W 2 lini warunek daje TRUE bo przerwa=1 Odnośnie wyświetlania -jest zbyteczne. Chodzi tylko podgląd co się dzieje. BOOL OK. tak mi się napisało chociaż TRUE to i tak =1 Dlaczego w pętli głównej...
Skoro sygnał ma być podawany na INT1 (PD3) to chyba tu jest problem bo podłączony jest tu wyświetlacz No ale jak to? Mówisz tak ja by wyświetlacz podłączył tam się sam. A przecież to Ty go chyba podłączyłeś. Wina więc nie w wyświetlaczu a w tym kto go podłącza :D No i druga sprawa. Nie bardzo rozumiem dlaczego chcesz podłączać sygnał do INT1, skoro...
Jeszcze raz od nowa. Tym razem postaraj się bardziej. Ustaw wreszcie te przerwania INTx na jakieś zbocze, a nie poziom. Co z tego, że ustawiłeś Timer1 jako licznik jak nie ma to związku z resztą kodu. Timer sobie działa,a ja się pytam - i co z tego ? gdzie obsługa tego timera?
Czesc, Mam problem z wywołaniem przerwania od comparacji timera w ATmedze 168. Przerwanie jest zglaszane gdyz testuje flage w rejestrze TIFR1, jednak pomimo tego nie jest wykonywane. Ustawialem juz chyba wszystkie handlary ale nie ma efektu. Z gory dzieki za pomoc. Ponizej przedstawiam wazniejsze czesci programu. ISR(TIMER1_COMPA_vect) { TRIAK1_ON;...
Na AT90S8535 zrobiłem sobie licznik impulsów i elegancko zlicza. Zrbiłem to na dwa sposoby (poniższy kod) z wykorzystaniem jednego timera i bardziej dokładny z wykorzystaniem 2 Timerów. Najgorsze jest to że gdy wsadziłem ATmega8535 na lcd pojawia mi się zero tak jakby counter w ogóle nie zliczał impulsów. Zegar procków (7.372.800 Hz) ten sam. Co jest...
Do obsługi Timera1 są 4 wektory i nie wiem, które aktywować, co wpisać w procedurze odwołującej się, czy w ogóle jest taka potrzebna. Czy wystarczy tylko uruchomić te przerwanie i sygnał będzie generowany automatycznie ? Tabelka jest prosta: TIMER1 CAPT Timer/Counter1 Capture Event Zdarzenie z przechwycenia licznika (zwykle przez zmianę na pinie...
A nie możesz puścić licznika w normalnym trybie? wtedy mógłbyś wykorzystać i przerwanie od porównania i od przepełnienia
Jestem początkującym w programowaniu mikrokontrolerów , próbuje zrobic licznik obrotów/min wynik ma być wyświetlany na dwóch wyświetlaczach led7 seg. wyjście z portów steruje cd4543 a ten układ na darlingtony uln2003 z nich lcd. Dlaczego tak ? Ponieważ docelowo maja być duże wyświetlacze led. Problem polega na tym że w Bascomie nie wiem jak wyswietlić...
Witam. Problem leży w obsłudze Timera1. W Bascomie Timer1 jest uważany jako 16 bitowy. Natomiast układ ATiny25 posiada liczniki 8 bitowe. A więc nie możesz użyć Timera1 a jedynie Timera0 ( 8-bitowy ) i odpowiednio zmodyfikować program.
witam INT0przerwanie zewnętrzne końcówka INT0 INT1przerwanie zewnętrzne końcówka INT1 TIMER0przerwanie przepełnienia licznika TIMER0 TIMER1przerwanie przepełnienia licznika TIMER1 Gdy używane są przerwania INT0 lub INT1, można określić warunek zgłoszenia tego przerwania. Należy w tym celu użyć instrukcji SET / RESET i ustawić odpowiednie bity w rejestrze...
Wystarczy wpisać warunek w dodatku prosty If I = 100 then stop timer1 I=0 timer1= 0 start timer1 end if a tutaj Kasowanie: stop timer1 I=0 Timer1 = 0 start timer1 Return W ogóle nie bierzesz pod uwagę z jaką częstotliwością będzie liczył licznik chyba potrzebujesz jakiś konkretny czas...
Chciałbym się dowiedzieć czy dla timera2 w arduino UNO jest też gotowa biblioteka jak dla timera1, w której nie trzeba bawić się w ustawianie bitów rejestrów a jedynie użyć: [syntax=c]Timer1.initialize(czas); Timer1.attachInterrupt(licznik);[/syntax... dwóch linijek kodu. Nie znalazłem nic na temat biblioteki timera2, czy można ją skądś pobrać?
Jak poprawnie skonfigurujesz to zadziała. Oczywiście sam licznik to nie wszystko, trzeba jeszcze ustawić port jako wyjście.
a ustawiłeś Fuse Bity?? Bo jeśli nie masz ustawionych to ATmega pracuje z częstotliwością 1MHz. Musisz ustawić Fusy na albo 8MHz na wewnętrznym generatorze albo ustawić Fusy na zewnętrzny kwarc. i mniej więcej kod by tak wyglądał: $regfile = "m8def.dat" $crystal = 8000000 Cursor Off Dim Czestotliwosc As Long Const Licznik = 22336 Config Timer1...
Witam !!! 3. Co to są banki rejestrów jak je zmieniać. - w 8051 sa cztery banki rejestrow (po 8 rejestrow w kazdym banku) zmienia sie je (banki) poprzez odpowiednie ustawienie bitow RS1 i RS0 rejestru statusowego PSW. Bank rejestrow najprosciej mowiac to zbior wlasnie 8 rejestrow w ktorych mozemy przechowywac argumenty (dane ) dla wykonywanych instrukcji...
Zrobiłem jak mi proponowano, jednak bascom komunikował mi błędy. Dane te wpisałem w opcjach bascoma i nadal nic :/ Może ma ktoś jeszcze jakiś pomysł?
Wydaje mi się, że najpierw powinno być „uruchomione” odliczanie tych 0,1 sek, wyzwalane pierwszym pikiem z „paczki”. Potem trzeba odczekać te 0,1 sekundy na zanik „szumów” i zacząć zliczanie w czasie 0,9 sek. Ilość zliczonych pików podzielona przez czas da mi częstotliwość. Wynik ma się utrzymywać na wyświetlaczu...
witam. dziś także juz nerwa złapałem z tym timer0 i wierzyłem ze na elektrodzie będzie jakieś rozwiązanie, ale z tego co czytam nie tylko ja tak mam;/ .wracając do tematu: 1.próbowałeś zmienić port dla 1-wire? 2.jesli problemem jest już zamiana pinów to być może załączenie timer1 pomoże i na nim odliczanie sekundy,przykładowe uruchomienie: Config Timer1...
Wystarczy wpisać do rejestru licznika zero oraz wyzerować preskaler. Na przykład Timer0: 1. TCNT0 ustawiasz na zero 2. ustawiasz bit PSR10 w rejestrze SFIOR. Ale uwaga! W tym przypadku PSR10 zeruje także preskaler Timer1. Szczegóły w datasheet. Jak już poprawisz program to napisz proszę w komentarzu do artykułu. :)
TCCR0A |= (1<<WGM10)|(1<<COM0A1)|(1<... TCCR0B |= (1<<CS00); TCCR1B |= (1<<WGM12); A cóż to za "kwiatek"? Poczytaj sobie jakie bity występują w TCCR0A i TCCR1B i do czego służą. Oraz dlaczego nie powinno się ustawiać bitów w liczniku TIMER1 jak korzysta się z licznika TIMER0.
Witam chce użyć procesora AT90S2313 do sterowania szybkości silnika. I chyba najlepiej do tego będzie nadawał się licznik timer1 skonfigurowany, jako PWM. Czytałem o tym w pomocy, ale jakoś niewiele mi to gada:( z jakiego pinu będą wychodzić te impulsy??? Z T1(PD5) czy OC1(PB3) czy jeśli wpisze te „dosconnet” to wyjściem biedzie T1 a jeśli...
W tym momencie programu Timer1 = 0, wiec w rownaniu (po prawej stronie) wyrazenie "Timer1 +" jest bez znaczenia. W przypadku prostych programów o jednym tylko przerwaniu od Timera1 rzeczywiście jest to bez znaczenia. Natomiast gdy przerwania mogą "czekać w kolejce" wtedy gdy wykonuje się przerwanie Timer1 stan licznika może być większy od zera i wyrażenie...
Dobra: Zadam pytanie wprost: Jak wyświetlić wartość licznika timer1(PIC16f628), na wyświetlaczu lcd za pomocą funkcji której argumentem jest const char *__putstr . Proszę o jakąś odpowiedź :)
Witam mam taki o to dziwny problem mam oto obsługę przerwań na int0 i int1 i tu jest wszystko ok. W nich to przepisuje stan licznika timer1 do zmiennej i to też działa ale jeśli w przerwaniu na końcu chce wstawić timer1=0 aby wyzerować licznik i aby ten liczył od początku to zmienna do której wpisuję stan licznika zostaje znowu nadpisana . O co chodzi?...
Dodaje dodatkowo ilość impulsów które mogły się pojawić zanim wykonała się ta linijka a po zerowaniu licznika.
Tu masz program pod ATtiny2313, jeśli potrafisz programować, to też potrafisz przerobić program na ATMegę: [syntax=basic4gl]' Bardzo prosty zegar bez możliwości ustawiania Dim Sekjed As Byte , Sekdzies As Byte , Minjed As Byte , Mindzies As Byte Dim , Godzjed As Byte , Godzdzies As Byte , Mux As Byte , Migaj As Bit Config Portb = 255 : Portb = &B255...
twój program doskonale miga diodą zgodnie z zamierzeniem ale musisz poczekać nie sekundę a kilka minut bo z powodu niezerowania licznika count kolejne mrugnięcie zachodzi dopiero po przekręceniu inta :) (btw. w tej sytuacji volatile jest niepotrzebne)
Jeśli byłoby większe niż to co "spełnia " CTC to nie zdąży nastąpić, bo ctc zeruje przy zgodności licznik...
Witam, .......... Czy arduino uno posiada może wbudowany licznik który działa niezależnie od programu? Tak aby przerwaniem co sekunde mógłbym sprawdzać jaka jest wartość w liczniku który liczyłby impulsy? TAK! Arduino posiada ich trzy, funkcjonujące totalnie niezalenie od wykonywanego programu, z pewnymi jednak warunkami lub ograniczeniami. Są to :...
Const odlicz=65436 rem dla zegara 12MHz odliczy tylko 100 impulsow (100us) dim licznik as word dim koniec as bit Config Timer1 = Timer , Mode = 1 , Gate = Internal On Timer1 etykieta Counter1 = odlicz do start timer1 bitwait koniec,set reset koniec rem petla powtarza sie co 100 us loop etykieta: licznik = counter1 rem To ma eliminowac czas od momentu...
regfile = "2313def.DAT" $crystal = 11059200 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.2 , E = Portb.6 , Rs = Portb.7 'Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.1 , Db6 = Portb.0 , Db7 = Portd.6 , E = Portb.3 , Rs = Portb.4 Cursor Off Config Pind.6 = 1 Config Pind.0 = 0 Portd.0...
ok, idea wydaje się prosta, ale jak ją zrealizować?! Nie jest problemem wygenerowanie fali prostokątnej na jakimś wyprowadzeni o znanym i zadanym T, ale jak za pomocą licznika Timer1, obliczyć t1 i t2?
. Zamierzam zrobić tak by mogli wprowadzić korektę (jeśli będzie potrzebna) i zapisać w eeprom. czy to dobry pomysł? Jakoś tak; $Crystal=12000000 Config Timer1 = Timer , Prescale = 8 On Timer1 Inter_1mS Inter_1mS: Counter1 = Counter1 + Licznik (64036 - wychodzi z obliczeń, że da to 1ms) /tu odliczę sobie 103/ Błednie to rozumujesz, albo błednie podałeś...
Mam ustawiony timer na 4kHz [syntax=csharp]cli(); TCNT1 = 0; TCCR1 = 0; OCR1C = 249; // 4000 Hz (16000000/((249+1)*16)) OCR1A = OCR1C; TCCR1 |= (1 << CTC1); TCCR1 |= (1 << CS12) | (1 << CS10); TIMSK |= (1 << OCIE1A); sei();[/syntax] W przerwaniu timera machałem pinem [syntax=csharp]ISR(TIMER1_COMPA_vect) { //licznik timer1 przepełnienie...
Przecież pisze jak na tacy: 1. Licznik nie doliczy do 5000 w trybie CTC - zatem logicznie myśląc trzeba ten tryb wyłączyć . 2. Jeśli licznik ma pracować w trybie CTC to wartość z OCR1B musi być mniejsza niż OCR1A.
Poza brakiem volatile nie bardzo rozumiem sens kasowania flagi cron_chk poza warunkiem? Jeśli cron_chk się ustawi akurat wtedy gdy będzie procesor wykonywał inną funkcję niż ten warunek to skasujesz ją i nie wyśle ci nic na RSa. I jeszcze jedno - jaka jest pewność że terminal ci nie wprowadza opóźnień i błędów czasowych ? Zamiast takiego testu co 1...
hmm ultradźwiękowych nie da się poznaczyć dodatnich i ujemnych połówek fali ultradźwiękowych troszeczke nie rozumiem po co okreslac to czy to jest dodatnia czy ujemna mozna to zrobic przez rozroznienie czy to jest narastajaca zbocze czy opadajace czyli tak jakbysmy brali wszystko co sie znajduje nad osia OX i sprawdzali zbocza jesli wybierzemy naraztajace...
Witam. Próbuję napisać program odpowiedzialny za pomiar odcinków czasowych pomiędzy impulsami sygnału S1 i S2 (zgodnie z załącznikiem). Proszę o prześledzenie kodu, wszelkie uwagi i sugestie mile widziane. Nie mam pewności co do poprawności pobierania wartości licznika TIMER1 za pomocą TCNT1. 'program do pomiaru okresu sygnałów podpiętych do PD.2(INT0)...
Bo WGM12 jest w TCCR1B a nie w TCCR1A. W tym momencie Twój licznik pracuje w trybie Normal i liczy do 65536 i raz na taki cykl ustawia flagę od porównania czyli co 2,09 sekundy.
Może coś takiego $crystal = 11059200 Dim Czestotliwosc As Long 'w twoim przypadku może być Byte Const Licznik = 22336 ' aby Timer1 przepelniał sie co sekundę Config Timer1 = Timer , Prescale = 256 Config Timer0 = Counter , Edge = Falling On Timer1 Czas 'On Timer0 Zlicz Enable Interrupts Enable Timer1 'Enable Timer0 'Pomiar czasu Counter1 = Licznik Cls...
Przerobiłem licznik na timer: [syntax=c]while(1){ //---------------------- Krok 1 impuls światła ---------------------------------- licznik = 0; PORTD |= (1<<LED); _delay_ms(100); //mignięcie diody 50ms PORTD &= ~(1<<LED); //_delay_ms(22); //---------------------- Krok 2 pomiar czasu odpowiedzi ------------------------- if (!(PINB &...
Witam :) Źle inkrementujesz "Licznik" ... 'jest ... Skocz: Incr Licznik Toggle Portd.4 'CLK Timer1 = Timer1 + 65535 ... '... powinno być Skocz: Toggle Portd.4 'CLK If Portd.4=0 Incr Licznik End If Timer1 = Timer1 + 65535 Return ... 'Coś zeżarło przecinki Litera_a: Data 1 0 1 0 0 0 1 1 1 'Po wysłaniu 9 bitów trzeba zatrzymać Timer1 , by nie...
bascom licznik timer1 timer1 winavr timer1 odlicza
smród spalenizny numer administratora licznik energia zdalny
junkers czujnik temperatury junkers czujnik
Oporność między klemą a masą silnika - normy i pomiary Jak sprawdzić stan techniczny kolumn głośnikowych?