Dzięki wszystkim za zainteresowanie , najbardziej pomógł kalkulator do którego dostałem linka. Poza tym naprawde to było jakieś małe nieporozumienie pomiędzy mną a bascomem. Myślałem że to policzy jak trzeba. rozwiązanie timer0 z preskalerem 64 wywołuje przerwanie raz na 0,016384 sek więc liczymy 61 razy i mamy sekunde nawet dokładnie do 3 min wystarczy...
Witam Mam sygnał z pinu PCF8583 (INT), który zmienia swój stan na przeciwny co sekundę. Chciałem napisać program, który zacznie liczyć impulsy (stan niski) doprowadzony z wyjścia PCF8583 do nogi procesora, jak policzy np. 5 takich impulsów, to zaświeci led. Pierwotnie miało to służyć do opóźnienia włączenia podświetlenia w LCD, ale użyłem Waitms i osiągnąłem...
Czy np do prędkościomierza zastosowanie wait wystarczy?wolałbym dokładniej, co będzie jeśli będe chciał cos w tym czasie obliczać. Wystarczy, jak dasz Wait1 przykładowo, to w czasie 1 sekundy licznik policzy ci ilość impulsów z czujnika, a dla dokładności jak pisałem wcześniej, trzeba sobie z generatora puścić daną częstotliwość, aby sprawdzić poprawność...
No wiec tak NOJMI... Wszystko dziala mi OK - no moze prawie OK! Program po przerobkach (nie wiem niestety czy nie walnalem w nim jakiejs glupoty - ale jesli tak to wybacz - to moje poczatki...) wyglada tak: $sim Dim Kod As Byte , Wysw As Byte Kod = 0 Wysw = 0 P1 = 191 Przekaznik Alias P3.5 Dioda Alias P3.4 Reset Przekaznik Reset Dioda $crystal 12000000...
Mam to za pomocą fototranzysotra. Po wykryciu przerwania od fototranzysotra (na INT1) odczytuję wartość z rejestru TCNT0 i mnoże razy 128us, co daje mi czas pełnego borotu następnie kasuję wartość TCNT0 ,aby znów mierzył od początku,,, Ale tak jak pisałem, ja to już mam zrobione, tylko jeśli licznik doliczy do np 176, to jeśli podzielę te wartość przez...
Timer zawsze odmierza do końca swojego zakresu. Timer0 oraz Timer2 są 8-bitowe, czyli liczą do 256, natomiast Timer1 jest 16-bitowy i liczy do 65536. Czyli jak takiemu Timerowi1 ustawisz wartość początkową 5536, to on policzy 60 000 taktów (do 65536) i potem wygeneruje przerwanie, czyli skoczy do odpowiedniego fragmentu kodu który mu zadasz (kod obsługi...
Witam. Przeszukałem już forum, ale nie rozwiązałem problemu. Chcę zrobić komputer spalania do samochodu. Najpierw zaczynam od pomiaru prędkości, bo bez tego nie policzy się spalania. Od razu trafiłem na problemy. Kod: $regfile = "m8def.dat" $crystal = 4000000 ''''''''''''''''''''''''''konfiguracja portów'''''''''''''''''''''''''''''''''' Config...
Witam wszystkich majsterkowiczów :D Oto mój jeden z pierwszy programów napisanych na ATMEGE 8. Dotychczas programowanie mikrokontrolerów traktowałem jako zabawę, używając do tego BASCOMA i zestawu Treningowego. Obecnie stoję przed zamiarem budowy pewnego urządzenia ale przed rozpoczęciem prac chciałbym mieć pewność że część programowa będzie ok. Sam...
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...
Z tym "dodawaniem" korzystając z ORL to bym uważał. Tak naprawdę ma to sens tylko gdy młodsze bity wartości wpisywanej do TL0 są wyzerowane. Żeby mieć dokładne odliczanie czasu możesz policzyć ilość cykli od momentu przepełnienia licznika do jego programowego odświeżenia (będzie to stała wartość o ile inne przerwania nie mają wyższego priorytetu) i...
Nie czaję ;) Dodano po 10 A próbowałeś wszystko wrzucić do przerwania od Timera0? #pragma vector=TIMER0_A1_VECTOR __interrupt void Timer0_A1(void) { switch(TA0IV) { case 0x0A : // TA0OVF przepełnienie Timer0_state++; if (Timer0_state >= 12) { Timer0_state = 0; if(play_sample == 1) { one_byte...
Witam. Możesz zrobić tak: Config Timer0 = Timer , Prescale = 64 Timer0=6 Enable Interrupts Enable Timer0 Start Timer0 On Timer0 zegar Przy takim ustawieniu przerwanie będzie wywoływane dokładnie co 4ms. Zmienną Js zdeklaruj jako Word. A w podprogramie Zegar zrób tak: Zegar: Timer0 = 6 Incr Js If Js = 15000 Then Js = 0 Toggle Portb.0 Toggle Portb.1...
Mam taki przykładowy program. Chciałem zapytać kiedy program wchodzi do przerwania - wtedy kiedy wystawiona jest flaga przepełnienia licznika TF0 ?? CT0EQU 0 M0EQU 1 G0EQU 0 T0SEQU M0 + 4*CT0 + 8*G0 CT1EQU 0 M1EQU 0 G1EQU 0 T1SEQU M1 + 4*CT1 + 8*G1 TMSEQU T0S + 16*T1S THSEQU 256-180 LJMP START ORG 0BH CLR TF0 MOV TL0, #0 MOV TH0, #THS DJNZ R2, NEXT...
Dzień dobry, Trenuję programowanie i natrafiłem na mały lecz bardzo irytujący problem. Po krótce ma działać tak: ustawiony jest Timer0 na generowanie przerwania co 1ms (kwarc 8Mhz, preskaler 64, TCNT0=131), z tym jest wszystko okej. W przerwaniu dodany jest kod który zlicza 20 tyknięć timera i ustawia flagę: FLAGA_CZAS , która ma odblokować kod znajdujący...
witam. 2 pytanka. 1. po przepelnieniu timer0 flaga TF0 zostaje ustawiona na 1 a licznik dalej sobie liczy, ale jej nie zmienia i trzeba wyzerowywac ja "recznie". 2. zeby timer0 zliczal na podstawie wewnetrznych impulsow musi byc ustawiony w tryb timer. gdy ustawie w tryb counter musi byc zmiana stanu z "zewnatrz" pomimo tego ze ustawiam go na tryb pracy...
Mam taki program ale za wiele z niego nie czaję. Może mógłby to ktoś dokładnie opisać, albo rzucić jakieś linki do opisów itp.? Najbardziej chodzi o linikjki z gwiazdkami: ;LICZNIK CT0EQU 0 M0EQU 1 G0EQU 0 T0SEQU M0 + 4*CT0 + 8*G0 CT1EQU 0 M1EQU 0 G1EQU 0 T1SEQU M1 + 4*CT1 + 8*G1 TMSEQU T0S + 16*T1S ;* THSEQU 256-1 ;* LJMP START ORG 100H START: MOV...
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...
Napisałem program bez użycia LPC175x_6x CMSIS-Compliant Standard Peripheral Firmware Driver Library, który co 1 s ma zmieniać stan P3.25 na przeciwny. Do pinu P3.25 podpięta jest dioda dzięki czemu mogłem zaobserwować zmiany i zmierzyć czas. Jednak moje obliczenia nie pokrywają się z wynikiem wykonywanego programu: [syntax=c] #ifdef __USE_CMSIS #include...
W przerwaniu od timera masz tylko ładować na zmianę do TH0 czasy trwania stanu L i H w zależności od stanu wyjścia. Jeśli nie pomyliłem się w mnemonikach 8051 to kod ma tak wyglądać. Wartości czasów TIM_L i TIM_H musisz sobie policzyć taka by spełniały założenia. ORG 0 ; wektor zerowania JMP MAIN ; bezwarunkowo skocz poza obszar wektorów przerwań ORG...
Może spróbuj w ten sposób : $crystal = 4000000 Config Pind.5 = Output 'ustawienie wyjścia na pinie który standardowo sygnalizuje przepełnienie timer-a Config Timer0 = Timer , Prescale = 1 'ustawienie timer1 dzielnik 1 On Timer0 Przerwanie_timer1 'wywołanie przerwania po przepełnieniu timera Timer0 = 145 'wartość początkowa od której timer bedzie zliczł...
W pdf jest napisane wszystko . Może napiszesz czego oczekujesz a co wychodzi . Pewnie w obliczeniach zapomniałeś o samym liczniku i wychodzi 256 razy mniej . Wielu początkujących robi taki błąd , ze zapomina o tym ze aby licznik się przepełnił musi policzyć tyle impulsów ile ma jego pojemność a w niektórych trybach ta wartość się jeszcze zmienia . Napisz...
100Hz Sinus? to ja bym dał 24MHz kwarc jak dokładny ma być ten sinus? ile bit? ile próbek? wystarczy 8 bit/512 próbek ? (1024 to raczej za dużo, trzeba by dokładnie policzyć)
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...
Troche sie zamotałem i nie wiem jak wybrnąć... Jak zliczyc przerwania on timer0, innymi słowy jak policzyc ile 1ms wystąpiła przy podczas przerwania wtrysku... [syntax=basic4gl] $regfile = "m128def.dat" $crystal = 16000000 $hwstack = 32 $swstack = 32 $framesize = 32 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6...
Przedstaw proszę obliczenia czasowe vs preskalery, czyli jak policzyłeś takie, a nie inne ustawienia timerów i algorytmu programu.
Na nie możesz policzyć? Chyba że nie wiesz jak :D Masz 8MHz. A przerwanie przychodzi z częstotliwością 125Hz (dlatego trzeba 125 razy odliczyć aby wyszła 1 sekunda). Preskaler Timera 256. 8000000/256/125 = 250. I dlatego jest Load Timer0 = 250 Teraz chcesz kwarca 7372800. Więc musisz tak kombinować aby uzyskać jakąś sensowną liczbę przerwań i sensowny...
Nie namieszałeś tylko nie dopisałeś. Po pierwsze nie Load timer0 = 250 tylko Load timer0, 6 Po drugie , brak deklaacji do podprogramu np. On Timer0 licz_1s po trzecie trzeba napisać co ma się wykonywać w podprogramie, czyli dokładnie policzyć ile razy musi się przepełnić licznik od timera 0 by uzyskać sekundę.
Ciapa ze mnie :) A jaka wersja tej ATmega8? Standard, czy A, a może L? Podaj więcej danych do bilansu czasu pracy lub podaj od razu policzony według Ciebie bilans.
1000000 dzieli się przez 64: 1000000/64=15625 Masz więc gotowe ustawienia preskalera (64) oraz licznika 16-bitowego T1 (15625). Tylko co z tym dalej zrobić żeby sekunde policzyć? Mam dwie książki, ale nie jest w nich jasno wytłumaczone to zagadnienie, dlatego pytam Was.
Chciałbym odmierzyć czas za pomocą Timera0 w moim AVRku - chodzi dokładnie o 1sec. Policzyłem to sobie następująco: Kwarc 7372800 / Preskaler 256 / Load Timer0 = 144. Wynik = 200, więc liczę przerwania do 200 i inkrementuję licznik sekund. Problem w tym że trwa to trochę dłużej niż 1s. Coś źle liczę czy to inny problem?
Witam. Przy obliczeniach nie bierzesz chyba pod uwagę prescalera. Raczej pojemności Timera0. Kolego marcin-k . Aby policzyć ilość impulsów podaną na wejście T0, powinieneś wykonać następujące obliczenie: Czestotliwosc*256+timer0 . PS "Czestotliwosc", to oczywiście nazwa Twojej zmiennej :)
Spróbuj zwiększyć czas multipleksu wyświetlacza.Teraz jak dobrze policzyłem masz około 2ms na cyfrę. Zrób około 4m/cyfrę. Ja nie używam Load Timer0 , 20 Spróbuj bezpośrednio załadować Timer0=195 (około 4ms) P.S. Pod który pin masz podłączony segment G?
A tak w ogóle to nie powinieneś ładować 200 ? Tmer liczy do góry więc 255 - 55 = 200 lub coś koło tego Nie. Load timer0 = np. 50 Każe Timerowi 0 policzyć 50 impulsów i wywołać przerwanie. Próbowałem działanie z funkcją RC5Send ale to nie możliwe. Pozatykałem diodę papierkami, a ty i tak TSOP odbiera komendy. Może mi ktoś powiedzieć jak wykonać czujnik...
Witam ponownie....Najpierw ustawiłem wewn etrznego pull-up -a, a dopiero później bawiąc się układem i nie mogąc znaleźć przyczyny dałem zewnętrzny. Rozumiem, że programowe rozwiązanie eliminuje zastosowanie timer0 ??....z różnymi filtrami RC już się bawiłem. Najbardziej denerwuje mnie to, że nie mam do czynienia z dużymi częstotliwościami ....a nie...
Gwarantuje ci że działa tyle tylko że timer przepełnia ci sie po około 0,1ms policz sobie jaka to częstotliwość. Nie ma najmniejszych szans żebyś gołym okiem zauważył jak miga dioda na PD0.
policz sobie 8e6 / 1024 i jeszcze / 256 to dostaniesz czestotliwosc. Zrób sobie licznik (zmienna) zliczajaca do góry, jak osiagnie jakas wartosc to wtedy przełaczaj diode i zeruj licznik
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...
Użyj jakiegoś timera i przerwania, powiedzmy TIMER0. Policzmy trochę. Zakładam zegar 8Mhz. Jezeli uzyjemy preskalera 256 to czas co jaki zostanie wywołane to przerwanie to 256*256/8000000=0,008. Ilość taktów co jakie zostanie wywołane przerwanie to 256*256=65536 (pierwsze 256 wynika z tego, ze licznik jest 8 bitowy drugie to preskaler) Żeby odliczyć...
E marcus, dziękuję za pomoc. Tak, chciałem policzyć czas grupy impulsów i z tego częstotliwość. Dla przykładu: Timer0 liczy impulsy sygnału o częst. około 500 Hz, wiec 50 impulsów to około 0,1 sek, 450 impulsów to około 0,9 sek. Dlatego Timer1 miał się przeładowywać co 50 i stąd moje nieudolne próby wpisania w niego 206 :cry: Jestem świadomy, że znaczna...
Szukałem odpowiedzi na to pytanie, lecz nie znalazłem, wiec postanowiłem rozpocząć nowy temat. Otóż mam problem z liczeniem kanałów DMX, a dokładnie z timerem0 którego używam w tym celu. Mikrokontroler to jak w temacie ATmega8, częstotliwość taktowania 8 MHz, ustawienia sprzętowego UART 250 000 baud. Według specyfikacji DMX najpewniej rozpoznać nowy...
cały kod aktualnie wygląda tak. Docelowo w pętli głównej będą inne rzeczy jeszcze. [syntax=basic4gl]$regfile = "m32def.dat" $crystal = 16000000 $hwstack = 128 $swstack = 128 $framesize = 128 Config Portc.0 = Output Config Portc.1 = Output Config Pind.0 = Input Config Pind.6 = Input Config Pind.5 = Input Config Pind.7 = Output Config Timer0 = Timer ,...
Skąd te obliczenia? Poniżej masz kalkulator do timerów. Policz i się nie dziw. Load timer = ... nie jest równy Timer = ... http://www.elektroda.pl/rtvforum/viewtop...
Witam! Zbudowałem prosty układ i chciałbym na nim nauczyć się dobrze obsługiwać i synchronizować przerwania. Jego głównym założeniem będzie liczenie co jedną sekundę do 99 na dwóch wyświetlaczach siedmiosegmentowych(obsługa "multipleksacją") z dodatkowymi opcjami(odebrać coś z komputera itp). Pisałem w C a z assemblerem dopiero zaczynam dlatego proszę...
No to rozwiałeś moje wątpliwości. Tak myślałem, ale chciałem się upewnić. A ta częstotliwość, którą policzyłeś to rzeczywiście tak doświadczalnie wychodzi:) Dlatego zrobiłem wcześniej jeszcze jedna wersję. Zliczam impulsy na wejściu T0. #include <avr/io.h> #include <avr/interrupt.h> #define Timer0_Start TCCR0 = (1 << CS02)...
No ja tez tak robiłem wcześniej i nawet sekundnik nie chce ruszyć, w momencie kiedy przerzucam ten kawałek do pętli główne a przeciez powinno działać, wrzucam to w do ... loop i kicha: If Zlicz_przep = 125 Then Zlicz_przep = 0 Incr Sekunda End If A jak myślisz, dobrze policzyłem 1s na tym timerze? PS. Wiem, że tak nie powinno być to napisane jak niżej...
Zgodnie z zaleceniami podłączyłem jeden kanał oscyloskopu do detekcji 0V, a drugi do sterowania optotriaka. Połówki sinusa łatwo można było sobie wyobrazić ;) Okazało się że wszystko było rozjechane aż miło. Trochę policzyłem, pozmieniałem logikę i obecnie wygląda to tak: https://obrazki.elektroda.pl/3917843300_... https://obrazki.elektroda.pl/7128216700_...
Czyli tak: wyłączamy przerwania- wystawiamy bit- włączamy przerwania. Po 120us albo więcej- wyłączamy przerwania- wystawiamy 0- włączamy przerwania. Po bodaj 15us- jak mnie pamięć nie myli- wyłączamy przerwania i wystawiamy itd... Czyli musimy mieć jakiś licznik do liczenia us. Czy tak? Przerwanie od UART-a może być w takiej sytuacji źle obsłużone przy...
Witam, piszę program do układu wykorzystującego żyroskopowy czujnik przyspieszenia (Adis 16355). Mam problem z niestartowaniem programu- mikrokontroler rozpoczyna pracę, jednak po wykonaniu sei(); resetuje się i rozpoczyna pracę od początku. Dzieje się tak jednak tylko wtedy, gdy przed sei(); wykonuję zerowanie(); . Jeśli zablokuję zerowanie() . wszystko...
Procesor mam taktowany oscylatorem wewnętrznym 8MHz, z preskalerem ustawionym na podział przez 8 W obsłudze przerwania mam tyle co poniżej Policzy mi ktoś, co ile to przerwanie występuje i ile trwa? [syntax=c]ISR(TIMER0_OVF_vect) { static uint8_t LEDNO; PORTB|=0xff; //Wyłącz wszystkie wyświetlacze LEDNO=(LEDNO+1)%LEDDISPNO; ShowOnLED(LEDDIGITS[LEDNO]);...
Jeżeli byłby ktoś w stanie wyjaśnić mi dlaczego realizując wyświetlanie multipleksowane w poniższy sposób uzyskuję wyświetlanie czterech zer ? ................ Config Timer0 = Timer , Prescale = 32 Enable Timer0 On Timer0 Wyswietlanie Timer0 oraz Timer1 nie maja prescalera=32 Zatem ta Dyrectywa jest pomijana i twoj prescaler defacto jest =1; - co daje...
O to mi właśnie chodziło w poprzednim poście. Jak wyrzucisz wszystko z przerwania i wpiszesz tam prosty program kontrolny to upewnisz się że nie masz problemów ze sprzętem a przerwanie jest dobrze policzone. Na oko już widać że podprogram obsługi przerwania będzie wykonywał się dłużej niż 0.25s. W tym czasie mikrokontroler zignoruje kolejne przerwania...
I wszystko działa ok. Problem pojawia sie dopiero gdy timerem chcę obsłużyć sonar: Wg. mnie to takie umieszczanie delay'a w przerwaniu Timera jest ryzykowne. Czy oby na pewno w czasie tych 40 ms nie nastąpi ponowne żądanie przerwania? Trzeba by policzyć czasy i nie mieszać Timera z delay.
No nie- to nie musi być wykonywane tak jak dotychczas. nie na przerwaniu ADC. W pętli głównej- jedna próbka i policzenie średniej. W natępnym przebiegu- następna itd. Potem zmiana kanału. Timer0 wywalamy. ISR(ADC_vect) wykonuje się max 3.8us. W zasadzie funkcja wewnątrz przerwania tyle się wykonuje. To jakby dołożyć flagę w przerwaniu Timer2 po obsłudze...
W celach edukacyjnych to korzysta sie z jednego przerwania co do 2 to jak zle cos pracuje to przewaznie wynika ze ktos pozostawia jakis timer samemu sobie a on potrafi narobic bigosu co do obsługi przerwań bywaja dwie szkoły jedni piszą spore procedury w przerwaniu inni w głównej pętli programu moje zdanie jest takie piszczie jak chcecie byle program...
RTC (SOP 20) + kondensator filtrujący to nie 10 elementów, każdy ma swoje zdanie. Jeżeli jednak oprócz tego odliczania czasu jako zegar procek ma robić coś jeszcze równie absorbującego np. przekazywać przez RS, streować jakąś matrycą itp. to RTC jest jak najbardziej pożądanym. Po drugie Samuraj: jeżeli chcemy mieć pełną kontolę nad liczbą cykli maszynowych...
policzy transformator policzy reaktancja obwody policzy
wybuch palnika baofeng nadawa wymiana grzałki
bateria parkside styki interfejs lexia
Olej w kolektorze wydechowym Volvo FH13 - przyczyny i diagnoza Zwiększenie obrotów wirowania w pralkach Candy