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ć)
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...
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...
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...
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...
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...
Przedstaw proszę obliczenia czasowe vs preskalery, czyli jak policzyłeś takie, a nie inne ustawienia timerów i algorytmu programu.
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...
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...
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...
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?
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.
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ę.
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...
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.
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?
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 :)
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.
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ć...
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...
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
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...
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...
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...
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...
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...
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...
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...
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...
Witam. Chciałem w celach edukacyjnych zrobić częstotliwościomierz. Ponieważ nie mam za bardzo skąd wziąć zewnętrznych impulsów postanowiłem, że jeden pin procka będzie je generował, a przerwanie int0 będzie liczyć ile tych impulsów było. Do odmierzenia czasu posłużył timer1, który ma odliczyć sekundę (więc wynik od razu w Hz). Po upływie sekundy ma...
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_...
OK, dzięki za wynik i poświęcony eksperymentowi czas. Moja wiedza również się powiększyła. ;) wynikowy okres podany w liczbie zliczonych impulsów będzie wartością dość "niewygodną" bo nam zależy na częstotliwości, która to jest liniowo proporcjonalna do intensywności światła. W takim razie wystarczy policzyć impulsy w ciągu stałego czasu. Przykładowo...
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...
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ść...
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 ,...
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...
Udało mi się skonfigurować tak jak chciałem, Więc zostawiam kod dla innych: void Init_Timer(){ count=1;//Reset ounter TCNT0 = 0;// Reset timer TCCR0 |= (1<<CS02) | (1<<CS00) | (1<<WGM01);// Set prescaler 1024, Set CTC Mode TIMSK |= (1<<OCIE0);// Enable Compare interrupt OCR0=100; //Set...
Temat obszedłem, ustawiając w przerwaniu tylko flagi sterujące elementami umieszczonymi w pętli głównej. Nie mogę jednak pogodzić się z tym, że nie mogę na LPC pisać przerwań z dowolnie długą ich zawartością, a jednocześnie nie potrafiłem wydebugować co tak naprawdę powodowało te wyjątki (bo oprócz prefetch, to pojawiało się i data abort i undefined...
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]);...
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...
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...
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...
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...
Tylko czy w ten sposób mierzony będzie prawidłowy czas otwarcia wtrysku? Wtrysk jest otwierany przez chwilę dłuższym sygnałem, a potem podtrzymywany przez krótkie szpilki. A i jak zmierzyć czas ten za pomocą ICP bo za bardzo nie rozumiem. Rozumiem rozwiązanie z użyciem dwóch wejść przerwać, które reagują na przeciwne zbocza. Dlatego napisałem że warto...
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...
Policz instrukcje prologu i epilogu wejścia w przerwanie. Zwróć uwagę ktore z nich są wykonywane w jednym cyklu zegarowym a które w kilku cyklach. Nawet jak w przerwaniu nic nie będziesz robił to wejście i wyjście z przerwania zajmie jakiś czas.
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.
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...
Witam, Mam taki kod: (dokładnie on jest użytkownika manekinen) $regfile = "attiny2313.dat" $crystal = 8000000 Config Lcd = 16 * 2 Config Portd.6 = Output Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portd.1 , Rs = Portd.0 Config Timer0 = Timer , Prescale = 1 Enable Timer0 On Timer0 Software_pwm...
Jestem początkującym w dziedzinie uC, również nigdy wcześniej nie miałem styczności z programowaniem na taką skale (troszkę Pascala i html ale nic pozatym). Dużo czas, z kilkanaście godzin spędziłem na szukaniu w internecie wyjaśnienia jak działaja timery , czegoś dla zupełnego laika. Znalazłem dopiero na tej stronie angielsku, ale podołałem http://voltsandbytes.com/8051-tutorial-4...
Ręce mi już opadają... Zacząłem się bawić ADC, ale nagle coś mi się stało z wyświetlaniem. Mam teraz taką obsługę przerwania: [syntax=c]ISR(TIMER0_COMP_vect) { //static uint8_t dzialanie=0; static uint8_t licznik=1; static int j=10000; WYS_PORT = ~licznik; int temp=liczba%j; if(j==10000)cy1=(temp/1000); if(j==1000) cy2=(temp/100); if(j==100) cy3=(temp/10);...
Timer0 i Timer1 mają wspólny preskaler, Timer2 ma osobny preskaler. Poczytaj o resetowaniu preskalera w dokumentacji. U Ciebie jest inny błąd, w przerwaniu OC2 zmieniasz TCCR1B zamiast TCCR2. Co do zaokrąglania, to 1/76000 jest obliczane wg. zasad arytmetyki liczb całkowitych, a więc wynikiem operacji jest 0. Najprościej policzyć to tak: OCR0 = (1000000+76000/2)/76000;...
No to jeszcze raz (o co Wam chodzi?) nie pisze w Bascom ale procedura obsługi przerwania chyba wygląda mniej więcej tak PrzerwanieT0: /początek procedury Counter0=4096; /wartość początkowa T0 xxxxxx xxxxxx xxxxxx xxxxxx koniec: /powrót z przerwania chodzi o czas od wystąpienia przerwania tzn. T0=0 do Counter0 mniej więcej - ponieważ znajomość Bascoma...
Sygnał z czujnika to sygnał z hallotronu, który odbiera sygnał co 1/6 obwodu koła (czyli 0.25m). Reszta przedstawia program. Jeżeli faktycznie masz hallotron a nie kontaktron (Reed SW) to masz z niego 'czysty' cyfrowy sygnał, który możesz podać bezpośrednio na wejście z dowolnym interruptem (INT0 lub (INT1). Wystarczy odpowiednio skonfigurować Timer0...
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...
Na przyszłość proponuję abyś pisał bardziej czytelnie :] MEM_START: EQU 0x20 MEM_END: EQU 0x30 ; Od 20h Do 30h znaczy bez 30h TIMER_VALUE: EQU 0xFF - 100; O tyle należy zapełnic licznik ; aby liczył do 100. Zrobimy to w ; trybie 2 aby nie mawić się przeładowaniem ; Timera TIMER_MODE: EQU 0x20 ; Timer1 w trybie 2 RS_MODE: EQU 01000000b...
Zgadza się, aby policzyć ile czasu zajmie wykonanie kodu potrzeba kodu maszynowego (napisałem to w pierwszym poście). Ja będę pisał w C i tylko zobaczę sobie na listing programu gdzie jest to przetłumaczone na assemblera i wprowadzę odpowiednią poprawkę (zmiana wartości timera) do kodu w c. Chce precyzyjnie odmierzać czas do próbkowania wejścia z modułu...
Witam serdecznie. Rozpocząłem jakiś czas temu zabawę z mikrokontrolerem ATmega. Posiadam model ATmega32-16PU. Buduję zegar czasu rzeczywistego. Chciałem do tego wykorzystać przerwania z wbudowanego timera (przepełnienie). Po wielu nieudanych próbach synchronizacji ATmegi z rzeczywistym czasem postanowiłem policzyć taktowanie swojego mikrokontrolera....
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ę...
LCD multipleksowo? nie bardzo rozumiem ponieważ multipleksowo sterowana jest sama matryca a za to odpowiada sterownik wyswietlacza(take czarne coś na płytce wyświetacza:)) a co do przepełniania licznika to możesz sobie policzyć częstotliwość występowania przerwania ze wzoru: częstotliwość= crystal/prescaler/x gdzie crystal to częstotliwość oscylatora,...
Dzisiaj troszkę posiedziałem nad tymi stosami, zapoznałem się nieco z tym opracowaniem. Próbowałem również rozgryźć tabelkę "SRAM" w symulatorze bascom. Z opracowania i zachowania symulatora wydedukowałem że obszar w sram na $hwstack jest na najwyższych dostępnych adresach pamięci sram i zwiększa się on do dołu(niższych adresów), więc na początku metodą...
...Ale przenieś choć część swoich Sub do przerwania Timer2, lub 1 i zobacz jaka jest różnica w działaniu programu. Tylko, że ja kompletnie nie widzę takiej potrzeby. Skoro wszystko działa jak należy, program pisany jest modułowo, działanie oparte na programowych timerach, które spokojnie dają radę, przerwania robią to co powinny i jeszcze mam trochę...
Dobry wieczór. Przepraszam za tak dużą zwłokę, ale ostatnio miałem zakuwanie na egzaminy szkoleniowe do pracy i nie miałem kompletnie czasu by myśleć o tym:( Musiałbyś pokazać przykład swojego programu. Najpewinej efekty o któych piszesz wynikają z tego, że nie korzystasz z peryferii mikrokontrolera - m.in. timerów, przerwać itd. A na siłę starasz się...
Poniżej masz zdekompilowany fragment kodu 'bascomowego' do obsługi przerwania: etykietaprzerwania: portb7 = not portb.7 timer0 = 200 return Widać że odkłada wszystkie rejestry jak leci - 80% z tych instrukcji możnaby wywalić, a każda z nich bierze cykle zegara - możesz sobie policzyć ile dokładnie. +0000002C: E084 LDI R24,0x04 Load immediate +0000002D:...
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...
Cześć, właśnie próbuję opanować Timera0 w Atmedze8. Chciałem odmierzyć dokładnie jedną sekundę. Napiszę jak ja to widzę. Mikrokontroler pracuje na 12MHz. Użyłem preskalera 256, i mam 46875. A, że to duża liczba to podzieliłem przez 125, i dostaję 375. Czyli licznik musi 375 razy odliczyć 125 żebym dostał jedną sekundę. No to napisałem program: [syntax=cpp]#include...
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...
Zaletą Discovery jest gotowy układ razem z programatorem/debugerem. Do Xmegi musisz to wszystko dokupić za pieniądze większe niż cała płytka discovery. Dlatego wolałbym jak narazie unikać XMeg, bo STM32 są chyba bardziel popularne no i jak narazie mam programator do tego :) Wystarczy ci Atmega48/88/168 faktycznie, nawet Timer0 ma dwa wyjścia PWM, czego...
odświeżę mojego kotleta, ponieważ problem znów powrócił urządzenie które skonstruował znajomy przestało działać, czujnik w skrzyni generuje impulsy prądowe 7mA i 14mA przez wysokie i niskie zbocze na wieńcu wałka zdawczego. Chce zwiększyć częstotliwość tych impulsów dokładnie o 1,12 w stosunku we/wy dodam jeszcze wsad z atmegi8 użytej do tego urządzenia...
mam prośbę o wskazanie błędu który on zawiera. Błedem jest kolejne nadpisywanie dwóch różnych zmiennych do tej samej zmiennej ‘onTime’, oraz stosujesz błędny algorytm. Najpierw musisz zrozumiec koncept pomiaru czasu stosując w arduino metodę z ‘millis()’. Przydatne będzie przeanalizowanie przykładu dołączonego do Arduino IDE:...
Pierwsze stosuję procki które maja oporniki . Stosuję zasadę minimalnego połączenia , żeby była zachowana . Zasilanie musi pochodzić ze wspólnego źródła ale zawsze procesor musi mieć oddzielny stabilizator . Napięcie referencyjne robię tak jak zaleca to producent procka (chyba wie co produkuje) Zawsze stosuję 7805 bo wiem że jest OK i mam zawsze 5.02V(byle...
Oto reszta kodu. Jak policzyłeś dokładność? Tzn. jak uzasadnić to, że dla 4 impulsów mam 25% dokładności? Rozumiem, że 4 impulsy to w sumie 100%, ale nie rozumiem źródła tej niepewności. Gwoli wyjaśnienia - kilku zmiennych nie używam, to pozostałości po starych kodach (wiem, że powinienem je skasować :) ) a przetwornik ADC jest po to, że uruchamiam...
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)...
http://obrazki.elektroda.net/10_12344015... Ach jo!! Wszystkim Dzisiaj chciałbym zaprezentować wam analizator widma (chyba tak to się pisze ) sterowany cyfrowo z komputera. Projekt powstał na zaliczenie zajęć z "Języki Programowania - projekt" WEMiF na PWr. Płytkę zrobiłem dla swojej dziewczyny Kasi : ) którą pozdrawiam. Szybko napisałem program...
Witam Pisze program którego struktura jest oparta o zdarzenia generowane flagami z przerwania. Mam 3 zdarzenia: - co 10ms - co 500ms - co 1s Nic by w tym nie było dziwnego, ale zauważyłem że coś nie tak z programem się dzieje. Zacząłem wycinać roboczo kod z programu aby sprawdzić co może być przyczyną. Wycinałem i wycinałem, aż doszedłem do samego szkieletu...
Ok posiedziałem ciut, poczytałem w necie jak się używa te Timery i ich przepełnienia . Powstał taki oto kod .Proszę wyświetlacz traktować jako pomoc pokazującą mi ile już wystąpiło przepełnień, zresztą bardzo fajnie to pokazuje. Ramowa zasada jest taka - programik ma zliczać przepełnienia do 2108 i się zatrzymać po osiągnięciu tej sumy(wstępnie ta wartość...
Tak właśnie myślałem że używanie przerwań i poleceń wait nie jest dobrym rozwiązaniem. Dzięki za odpowiedź. To nie ma nic wspólnego. Po to są przerwania żeby w ten sposób z nich korzystać. Natomiast twój problem bierze się z całkowicie czegoś innego. Po prostu tak napisałeś przerwanie i tak często je wykonujesz, że u ciebie w tym konkretnym przypadku...
https://obrazki.elektroda.pl/2568884200_... Witajcie moi drodzy Zapraszam na kolejną część mojego tutoriala PIC18F2550 i kompilatora SDCC . W tej części zademonstruję jak używać wyświetlacza 7-segmentowego z PIC18F2550 . Kod obsługi wyświetlacza będzie oczywiście napisany w oparciu o przerwania i timery . Cały proces powstawania układu...
sekundy licze z kwarcu 16MHz czyli policze je z Timer0 a na Timer1 dam pwn tak? z gory dziekuje!
Miałem cichą nadzieję, że w kilku linijkach da się zestawić pracę jakiegoś timera Przecież Init_Timer0 () zawiera takie zestawienie. Można wywalić wszystkie define i wrzucić odpowiednie wartości do rejestrów policzone na piechotę, tylko będzie to z kolei rodziło pytania, skąd taka a nie inna wartość. W nocie katalogowej wystarczy przejść do sekcji"...
https://obrazki.elektroda.pl/4950580000_... Witajcie moi drodzy W tym temacie poznamy podstawy przerwań i timerów w PIC18F2550 . Na początek będzie krótki wstęp teoretyczny, a potem wszystko przerobimy dokładnie na praktycznych przykładach. Do lektury tematu przyda się ogólna wiedza na temat przerwań i programowania w C, choćby taka...
Witam, Moje pierwsze starcie z asemblerem na ARM i przerwaniami ... Mam taki kawałek kodu tmr0_irq stmdb r13!, {r0-r4, r12, r14} ldr r0, =TMR0_BASE ldr r1, =TMR0_RST str r1, [r0, #TMR0_TCR_OFS] ; Reset timer0. ldr r0, =FIO_BASE ldr r1, [r0, #FIO2SET_OFS] ; Read content of set register. ldr r2, =LED mov r3, #&1000000 cmp r1,...
policzy transformator policzy reaktancja policzy silnik
instrukcja navigon toyota radio zasilać czarny ekran włączyć myszka
wypadanie zapłonu fotowoltaika zakłóca
Brak prądu w piecu Buderus - jak zdiagnozować? Micro SD nie wchodzi do końca w dekoderze - co robić?