Czegoś tu nie rozumiem, wszystko chodzi OK a ty drugi raz piszesz ten program w Bascomie ? Po jakie licho!
Konfigurujesz rejestry odpowiedzialne za działanie przerwań i obsługę przerwania w przypadku wystąpienia przepełnienia TIMER1. A gdzie masz zdefiniowaną funkcję obsługi tego przerwania?
Wyżej sam sobie odpowiedziałeś. Timer pracuje w trybie, w którym zapis "OCR1A = dzielnik" nie zapisuje wartości "dzielnik" do rejestru tylko do bufora, a wartość okrojona do ośmiu bitów zapisywana jest do OCR1A przy przepełnieniu timera.
Czyli co? Zegar systemowy Time$ działa przez przepełnienie Timer2?
ISR(TIMER1_OVF_vect) A wystąpi przepełnienie w trybie CTC?? Nie chciałeś przypadkiem włączyć innego przerwania : TIMSK|=(1<<OCIE1A); i później: ISR(TIMER1_COMPA_vect) { //... }
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....
Tak:) Zrobiłem:) Dzięki za pomoc!! Jeżeli TCNT1 doliczy się do OCR1 na skutek pracy CTC, to nie wywoła tego TCNT1, tylko rejestr OCR1 czyli przerwanie aktywowane bitem OCIE1A w rejestrze TIMSK (str. 112). Właśnie tam w przerwaniu z obsługi flagi OCF1A zostanie wygenerowane przerwanie, bo w końcu ustawiam WGM12 na taki tryb pracy timera. Gdyby był zwykły...
'Działa od 30rpm do 300000rpm $regfile = "m8def.dat" $crystal = 8000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Config Timer1 = Timer , Prescale = 64 Config Int0 = Rising Dim Flaga As Byte Dim Text As String * 10 Dim Wynik As Single Dim Zmienna As...
Włączasz przerwanie od przepełnienia timer1, nie mając procedury jego obsługi. Włączasz także przerwanie od porównania z OCR1B i także nie masz obsługi tego przerwania. Takie podejście = kłopoty.
W trybie CTC timer liczy tylko do wartości ICR (lub OCR) i się zeruje. Nie przepełni się. Skąd ma się wziąć przerwanie od przepełnienia?
Pętla ma być. gdy Timer1 się przepełni następuje skok do podprogramu. Ale czy to dobra częstotliwość??
Hmmm... zezwalam na wywołanie przerwania przy przepełnieniu Timer1. A obsługi przerwania nie ma. (Co się wtedy stanie?). Tylko, czy w przypadku NIEustawienia TIMSK TC1 będzie zliczał nadal? Zaraz sprawdzam, dziękuję za pierwszą wskazówkę.
Sorry że post pod postem, ale teraz to już sprawa życia (prace dyplomową muszę oddać do 30 III 05) Jak zrobić w BASCOM AVR żeby Timer1 kiedy osiągnie zadaną wartość wygenerował przerwanie (nie przez przepełnienie) PROSZĘ O POMOC!
Lepszym rozwiązaniem byłoby zastosowanie przerwania od timera w skutek porównania a nie przepełnienia i non stop zmieniając wartość TCNT
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.
Jeśli popatrzysz na swój kod dołączony do zadania, możesz zauważyć że nie tyle ty piszesz przerwanie dla przepełnienia timera, co podajesz funkcję, którą ma wywołać implementacja ISR z biblioteki, gdy przerwanie nastąpi . Oznacza to dla nas tyle że gdy korzystamy z tej biblioteki nie możemy napisać wektora przerwania u nas, bo doszło by do redeklaracji...
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...
Zapomniałem odnieść się do częstotliwości zegara którą podałeś. Czestotliwosc Przerwania Timer1 = \frac {1MHz} {8 * 65536 } \approx 1,9 Hz 8 - bo preskaler ustawiasz na 1:8 65536 - licznik timera (przepełnienie i dopiero przerwanie) Dlatego proponuję abyś preskaler zmienił na 1:4 by mieć około 4 Hz lub 1:2 by mieć około 8Hz. ... i dopiero pisząc ten...
A nie możesz puścić licznika w normalnym trybie? wtedy mógłbyś wykorzystać i przerwanie od porównania i od przepełnienia
Jeśli chodzi o resterty, to czy mogą one być spowodowane dużą ilością zmiennych zadeklarowanych, oraz to że wykożystuje przerwanie ( 42 zmienne i przerwanie na przepełnieniu TIMER1 co 0,2sek). Czytałem gdzieś że zmienne powinny być deklarowane w odpowiedniej kolejności. W symulatorze działa ok ( i tam się niezawiesza), chociaż działa bardzo wolno. Gdyby...
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.
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...
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.
Emarcus on liczy przepełnienia timera, który generuje przerwania, co 4ms i coś tam robi w przerwaniu. Ostatnia linijka postu, który cytujesz.
trochę się doczepię: Teraz jest ustawiony na pojawienie się przerwania od przepełnienia TIMER1 Nie da się ustawić wyzwalania przetwornika od pojawienia się przerwania. Przetwornik może być wyzwalany przepełnieniem się timera. Zamiast uruchamiać przerwania tegóż licznika i wpisywać pustą obsługę przerwania, lepiej w przerwaniu od przetwornika dopisać:...
Nie wiem czy mój poprzedni post był widoczny, więc się powtórzę: Nie rozumię kiedy ma się wydarzyć przepełnienie licznika, skoro jest zerowany w momencie dojścia do wartości OCR1A, i wtedy ew. następuje przerwanie "TIMER1 COMPA Timer/Counter1 Compare Match A". Chyba że źle rozumiem działanie trybu CTC, ale znalazłem taki wykres: http://obrazki.elektroda.pl/1147067000_1...
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...
Hmm... A może coś takiego: $asm sbic pinb, 1 $end Asm :?: --- edit --- A propos gotowca AVT 2749. Rozumie ktoś tą procedurę? Bo ja się gubię... $include "konfig.bas" $regfile = "8515def.dat" Dim Czas_wlaczenia_triaka As Byte Config Timer1 = Timer , Prescale = 1 Enable Interrupts Enable Timer1 On Timer1 Sterowanie_fazowe Do Waitms...
... i tej wersji będę się trzymał wysoki sądzie ;-) I bardzo dobrze :-P Zadeklarowałeś przerwanie od porównania, a włączyłeś od przepełnienia więc Ci nie działa. Włącz właściwe przerwanie i będzie git.
Po pierwsze jakie czasy chcesz obliczać i jakie przerwania po co ??? To jest bascom nie assembler, deklarujesz na wstępie programu prędkość kwarcu a kompilator troszczy się o resztę tj. dajesz deklarację $regfile = "m8def.dat" $crystal = 12000000 Po drugie, procedura obsługi wyświetlaczy LCD (mowa tu o alfanumerycznych HD44780) jest w BASCOM zaimplementowana...
No to chyba teraz zrozumiałem to o co pytałem. W programie musi być procedura obsługi przerwania TIMER1_OVF_vect czyli przerwanie od przepełnienia. Jeżeli TIMER1 osiągnie wartość 65535 to wtedy jest wywoływane to przerwanie w którym jest inkrementowana zmienna zliczająca przerwania. I mając wartość ICR1 i ilość przepełnień TIMERA1 łatwo już policzyć...
Czy mógłbyś napisać na czym polegał problem i jak go rozwiązałeś?
Moje pytanie brzmi czy "właściwy program" będzie wykonywany co 20ms?? Nie. Będzie wykonywany najszybciej jak się da. Wprawdzie ustawiłeś timer na jego przepełnienie co 20ms, ale nie korzystasz z niego do uruchamiania "właściwego programu". Aby to zrobić powinieneś: 0. zdefiniować zmienną globalną np.: volatile char WYKONAJ_PROGRAM; 1. włączyć przerwania...
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)...
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...
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ł...
Witam. Chciałbym zmierzyć czas pomiędzy dwoma impulsami (stanami wysokimi) występującymi na pinie ICP1. Używam do tego celu timera1 oraz kodu znalezionego w internecie, zmodyfikowanego na własne potrzeby: [syntax=c]#include <avr/io.h> #include <stdio.h> #include <avr/interrupt.h> #include <util/delay.h> #include "HD44780.h" volatile...
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...
. 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ś...
procesor pracuje z czestotliwościa 10Mhz czyli jeden okres trwa 1/10Mhz = 0,1us domyślam się ze jest on ustawiony z preskalerem równym 1 przepełnienie timera i wywołanie przerwania następuje gdy timer osiagnie 2^16=65536 czyli w tym przypadki 65536 - 64566 = 970 cykli 970 cykli * 0,1uS = 97us cała filozofia czas ten zalezy od czestotliwośći kwarcu,...
OPIS FUNKCJI LOAD Action Load specified TIMER with a reload value. . . . It will do the calculation. (256-value) So LOAD TIMER0, 10 will load the TIMER0 with a value of 246 so that it will overflow after 10 ticks. TIMER1 is a 16 bit counter so it will be loaded with the value of 65536-value. Czyli u ciebie ładuje 65536 - 65436 = 100 Przepełnienie właśnie...
Poczekam aż umieścisz jakiś kod bo już jeden post wywaliłem do kosza bo zamieściłeś ten drugi kod. Usuń tę linię z dyrektywą $prog bo oznacza zewnętrzny sygnał zegarowy i włączony JTAG a to na pewno nie to na czym Ci zależy ;) Enable Timer1 oznacza "włącz przerwanie od przepełnienia się Timer1" a nigdzie nie obsługujesz tego przerwania. Do niczego Ci...
Ustawiasz tryb Fast PWM mode 14, gdzie okres sygnału (TOP) wyznacza wartość rejestru ICR1. Włączasz przerwanie od porównania z rejestrem OCR1A, ale nie ustawiasz go więc jest on wyzerowany po resecie. W rezultacie dostajesz przerwanie na początku okresu timera, ale jeśli tak to chcesz wykorzystywać, to powinieneś dla porządku zastosować wektor TIMER1_OVF_vect...
a nie lepiej załączyć pierwszy timer1 na 1000ms.. jak sie przepełni to załączamy led oraz timer2 na 100ms.. jak ten sie przepełni to gasimy led. i wyłączamy timer2.
Co rozumiesz przez "impulsy Timer1"? Impulsy generowane po przepełnieniu, zawartość rejestru...? Napisz, czego dokładnie żądasz od programu.
1. Tak 2. falling-rising owszem ale jeżeli impuls jest większy i następuje przepełnienie licznika to ov_counter podaje liczbę tych przepełnień. edit: zmienna counts nie jest nigdzie zerowana. ale nie musi być zerowana skoro występuje tylko jedno równanie, przy kolejnych impulsach counts przyjmie ich wartość/długość. 0xFF * ov_counter faktycznie powinno...
Program w tej wersji działa dla ośmiu kanałów. No pewnie że dla innej ilości kanałów będzie źle. Albo dla portu dać maskę i wystawiać dla mniejszej ilości kanałów. Albo zmieniać zależności czasowe. A spróbuję połączyć te dwie funkcje. Ale z wylączeniem przerwania od ADC- to nie wiem. Żądanie pomiaru jest ustawione sprzętowo w rejestrze SFIOR- od przepełnienia...
Witam czy dany kod da się przebić robić tak żeby wynik wyświetlać na wyświetlaczu 7-segmentowym? [syntax=c] OBROTOMIERZ v.1 Obrotomierz przeznaczony do prostych pomiarów prędkości obrotowej. Pokazuje: - czas jednego obrotu, - liczbę obrotów na sekundę (rps), - liczbę obrotów na minutę (rpm). Szczegóły: http://mikrokontrolery.blogspot.com/2011...
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...
Przepraszam za dłuższą nieobecność. Nie mając nic nowego (i mądrego) nie pisałem. Ale w międzyczasie polutowałem zestaw startowy, a ostatnio napisałem inny program, który umożliwia (w zamyśle) liczenie dokładniej częstotliwości dla "paczki" impulsów, tym razem około 500 Hz. Wiem, że to dosyć skomplikowany tok myślenia, pewnie można to zrobić prościej,...
dzięki za odpowiedź, chcę uruchomić na początek timer2 i timer1 w trybie przepełnienia tylko że nie bardzo daję radę,
Chciałem Ci dać wędkę, ale wolisz rybę. $regfile = "m8def.dat" $crystal = 8000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Cls Config Timer1 = Timer , Prescale = 256 On Timer1 Odmierz_2s Dim Licz As Byte Enable Interrupts Enable Timer1 Start Timer1...
ZbeeGin, ale przepełnienie nie nastąpi, podobnie jak Compare nie (chyba, ze będzie wcześniej niż ctc)...
odwiedziłem ten link już wcześniej, nie mogłem sobie poradzić z "usunięciem" wyświetlacza:/ dobra poczytam, pokombinuje, nauczę się, spróbuje stworzyć i odezwę się w razie pytań a na tę chwile już dużo pomogliście:) :) czyli w tym kodzie wystarczy, że zrozumiem jak zamiast "wynik" zapalać odpowiednie sekwencje diodowe? nie mam pojęcia jak to ugryźć,...
Nie mam jak określić dokladnie częstotliwości, ale mniej więcej z przełożenia czujnika w skrzyni myślę że od 0 do 4000 impulsów na sekundę ( tak orientacyjnie), szerokość impulsu to 1/16 obrotu czujnika. Znalazlem dziś jedyny projekt, z którego mógłbym wziąć podstawę, ponieważ jest to obrotomierz czyli też zliczanie impulsów i podobno działa na takiej...
Witam, Zastanawiałem się, czy można zrobić RTC na uC takim jak Atmega8, ale wykorzystując do tego tylko i wyłącznie wbudowany oscylator. Na przykład mikrokontroler był by taktowany 8MHz. Wykorzystując przy tym przerwanie od przepełnienia np. timer1 oraz zapisywanie zadanej początkowej wartości do licznika (w przerwaniu), czy dało by się odmierzać równe...
Nie bardzo rozumiem , ale : Timer1 mam uruchomić z praskalerem x1 Więc przepełnienie TCNT1 będę miał po 4.096mS Wartość max TCNT1 to 65535 i dalej 4.096 / 65535 = ~ 6.25uS ? i dlaczego potem dzielić /2 ?
W trybie CTC wartość timera jest zerowana, gdy TCNTx jest równe OCRxA. Nie pojawia się tutaj sprawdzenie w relacji większy/równy. Tak więc jeśli w danym momencie OCRxA jest równe 100, TCNTx 98 i w tym momencie zostanie wpisane do OCRxA wartość 96 to nie zostanie spełniony warunek dla TOP, timer będzie się zwiększał aż do 65535 (długa przerwa) kiedy...
http://obrazki.elektroda.pl/2708019000_1... Taki będzie mniej więcej schemat, tyle że zamiast przełącznika kontaktron i obok diody LED tranzystor z przekaźnikiem na wyjściu. Dziękuję za zmianę tytułu dzięki temu naprawdę dużo jeszcze znalazłem w internecie :) pozdrawiam Edit: [syntax=text] /* OBROTOMIERZ v.1 Obrotomierz przeznaczony...
Nie wiem jakiej używasz "strategii" pomiaru ale na filmie widzę, że odczyt masz niezbyt stabilny. Sam przymierzam się do budowy takiego licznika i wymyśliłem taki algorytm: LICZNIK - sprzętowy licznik impulsów z lampy w uK TIMER - sprzętowy timer w uK wywołujący przerwanie co 5s (lub w/g RKSB-104 co 7s) Pseudokod: [syntax=c]byte Tab[8] = {0, 0, 0, 0,...
Nie ma znaczenia czy pętla główna jest pusta czy nie. Ja uczyłem się na programie właśnie tak skomponowanym. Cały program był wykonywany podczas przepełnienia licznika. Co do podziału to proszę ATMEGA 8 na zegarze 8MHz Config Timer1 = Timer , Prescale = 256 'konfiguracja timera On Timer1 Cykl 'realizacja podprogramu cykl po przepełnieniu Enable Interrupts...
Tak wiem że należy odpalić timer na początku i zatrzymać na końcu i odczytać jego wartość.. no nic. Dziękuję za wypowiedzi tak czy inaczej.. Odp. kol. Draco była troche sarkastyczna, bo na tak prostą procedurę nikt, kto ma choć troche rozeznania w tej dziedzinie chyba (!) nie szuka pomocy. Mopzesz to zrobić na kilka sposobów: 1. mierzyc czas metodą...
Witam. Potrzebuję W tym liczniku obrotów: [syntax=c]#include <avr/io.h> #include <stdio.h> #include <avr/interrupt.h> #include <util/delay.h> #include "HD44780.h" //tutaj ustaw własne zasady pomiaru #define POMIAR_ILOSC_IMPULSOW_NA_OBROT 4 //ilość inpulsów na jeden obrót #define POMIAR_ILOSC_OBROTOW 10 //ile obrotów ma trwać...
Witam ! Tworzę projekt stacji pogodowej za pomocą ATMEGI16 + LCD 2x16. Tworzę licznik impulsów który zliczałby mi czas pomiędzy zboczami impulsów (prędkość obrotowa wiatru) Znalazłem w sieci program który działa na Atmega8 + 16MHZ kwarc. [url=http://mikrokontrolery.blogspot.com... Chciałbym go przerobić na Atmega16 na...
Zastosuj dostępny kwarc zegarowy 4194304Hz. Config Timer1 = Timer , Prescale = 64 Timer przepełni się co 1 s bez wartości początkowej! Włączasz go i zapominasz, że istnieje. W przerwaniu tylko Incr sekunda. Mam zegar na ATMEGA8 z budzikiem ustawiany z pilota RC5. Chodzi ok.
Nikt nie czyta tych not do tego L293 czy jak ;) Można tam wyraźnie przeczytać na początku: This device is suitable for use in switching applications at frequencies up to 5 kHz. 5kHz to 5 tyś Hz a ile myślisz ma ten PWM jeśli prescaler wybierasz na 1? To tylko jeden z błędów. Gdybyś przedstawił schemat można by powiedzieć więcej, a tak to proponuję zmienić...
Witam, Projektuje sobie urządzenie które w zasadzie będzie zegarem, ale z kilkoma funkcjami. Chodzi mi o to że np. o godzinie 12 w południe chcę aby na jednym z pinów procesora pojawił się stan wysoki do np. godziny 13. Zegar programowo jest ok, odlicza czas, wszystko jest na LCD, nie wiem tylko jak zrealizować te ustawiane godziny. Prosiłbym żeby mnie...
Poszukuję wsadu do AtMega8 umożliwiającego stworzenie zegarka z datą na wyświetlaczu 2x16. Znalazłem kilka ale była też tam obsługa czujników temperatury (bądź pod wyświetlacz led), a ja odczytywać temperatury nie chcę. Czy któryś z forumowiczów dysponuje takim plikiem, lub potrafiłby zmienić ten, tak aby nie było obsługi czujników temperatury: '[syntax=basic4gl]Program...
Witam wszystkich, Tak jak w temacie: Poszukuje sprawnego programu aby zrobić zegar LCD na ATMEGA8. Program musi być w języku bascom. Znalazłem coś takiego ale nie działa :/ Opoźnienie sekundy wynois jakies 4s 'Program zegara wykorzystującego przerwania od Timer1 'Przerwanie przepełnienia Timer1 jest generowane co 1 s '8 MHz/256/31250 = 1 s 'Przycisk...
Witam pisałem program który miał po pewnym czasie zmuszać mikrokontroler do przejścia w stan uśpienia po czym wybudzanie miało następować w reakcji na zewnętrzne przerwanie na linii PD2. Mikrokontroler wchodzi w uśpienie po zadanym czasie jednak nie chce się potem wybudzić w reakcji na zewnętrzne przerwanie. Byłbym wdzięczny gdyby ktoś rzucił okiem...
ok. Pobrałem i co teraz? JAK obliczyć czas przepełnień i liczbę potrzebnych cykli...
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...
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...
Mam problem z połączeniem funkcji chodzi o to zeby wyswietlacz był aktualizowany w pętli while(1), jednak gdy umieszczę ten fragment kodu wynik=7654; LEDDIGITS Dodano po 4 Poniżej daje oryginalne kody obrotomierz: [syntax=c]/* OBROTOMIERZ v.1 Obrotomierz przeznaczony do prostych pomiarów prędkości obrotowej. Pokazuje: - czas jednego obrotu, - liczbę...
Witam Próbuje zrobić zegar z książki Marcina Wiązania "Programowanie mikro kontrolerów avr w języku Bascom" Przepisałem cały program z książki, podłączyłem według schematu http://obrazki.elektroda.pl/8287318100_1... , i niestety na lcd pojawiają się kwadraciki. Programator mam usbasp, i program mkAVRCalculator. W zakładce fusy uproszczone...
Tylko, że w trybie 15, tak jak to robisz generujesz przebieg PWM o wypełnieniu <0,1%, a jedyne co regulujesz to częstotliwość. Częstotliwość zawsze mierzy się tak samo, ale jak masz tak małe wypełnienie, to szerokość tej szpilki jest pomijalna/niemierzalna przy podstawie czasu pozwalającej zaobserwować pełny okres. W trybie 15 w OCR ustawiasz ile...
Nierozpoznanie takiego polecenia jak TCNT1. Zmieniłem natomiast Timer1 = Timer1 + 1 na Timer1 = 65450 i już bardzo pomogło bo udało się osiągnąć 11kHz. Zmieniałem też wartość Timer1 miedzy 65450 a 65535 ale nic to nie pomagało. Czy od tej wartości Timer1 liczy do przepełnienia czyli 65536 określona liczbę cykli i dopiero robi kolejny krok w programie?...
No przecież prosto. Konfigurujesz timer1 do pracy w normalnym ale nie robisz start timer. robisz przerwanie dzialajace na zbocze np. narastające-> Dalej : robisz zmienną flaga w przerwaniu robisz if flaga=1 then start timer1 flaga=0 else stop timer1 w rej od timera masz czas... kopiujesz gdzie Ci tam pasuje flaga=1 zerujesz licznik endif I tyle, oczywiście...
Zrób coś takiego: Do If Przycisk = 0 Then Gosub Sprawdzenie 'nacisnieto 1 raz Loop Sprawdzenie: Lcd "SUPER" Timer1 = 0 Start Timer1 do Loop Until Timer1 > 35000 Or Przycisk = 0 If Przycisk = 0 Then Waitms 100 Locate 2 , 1 Lcd "EXTRA" End If Return Loop Until Timer1 > 35000 Or Przycisk = 0 Wg. mnie ten warunek jest zły...
Moyshaa, dzięki za link. Ostatecznie pisze, że ten kod działa ale drażni mnie to, że nie rozumiem w jaki sposób tutaj mierzony jest okres(od rising do rising) może dlatego, że komentarzy mało :( Kod proszę umieścić w znacznikach code! Robak
Witam wszystkich. Już któryś raz siadam do tematu pomiaru prądu przez AVR. Udało mi się złożyć prosty układ na stykówce. Przekładnik, kilka rezystorów i kondensatorów i ładnie śmiga lecz mam problem z odczytem RMS urządzeń indukcyjnych np suszarka. Miernik pokazuje 2.6A a AVR 0.6A Przy innych pomiarach nie ma problemu np. Ładowarka do laptopa, czy obciążenia...
Hej, Tutaj masz opisaną dokładnie procedurę dekodującą kod Manchester z przykładem - wykorzystano wyłącznie Timer1 (przerwania od przechwycenia i przepełnienia)... prefix link: http://ep.com.pl/?sect=czytelnia&pg=czyt...
a jesli powiem ze tak tez próbowałem tylko ze odczyt z kodów z rc5 trwa z przerwą 600ms która musi byc pomiedzy odczytem a konwersją temperatury z ds1820 :( Jakoś nie widzę problemu. Przecież Int0 ma wyższy priorytet niż DS. Jerśli istnieją jakieś konflikty to należy zablokować przerwanie Int0 na czas inicjacji DS'a i odczytu temperatury. W trakcie...
bez konieczności zliczania przepełnień. Podobnie, odmierzanie czasu 1 sec. stosując Timer1 również nie wymagałoby zliczania przepełnień. Gdybym chciał jednak mierzyć załóżmy do 1kHz to wymaga aby zliczać przepełnienia? Dodano po 30 w złym obliczeniu 1 sek wartość wynosiła 61630, przy prawidłowym obliczeniu wynosi 34 286 uwzględniając czas 1sek, częstotliwość...
Nie znam za grosz bascoma... Ale ogólnie to tak... Pogonił bym go z wewnętrznej PLL (64MHz) na 16MHz... To samo z zegarem timera... Dzięki temu częstotliwość dla PWM będzie jako taka... W zasadzie to sprowadza się to do zrealizowania timera 12-bit... W C łatwiej mi pokazać o co chodzi niż pisać esej... ISR (TIM1_OVF_vect) { if(timer_compare==timer_counter)...
W twoim programie wg BASCOM-AVR są błędy: Error : 254 Line : 17 Variable expected Przepraszam za pomyłkę. W BASCOM-AVR, do przerwań od timera, powinniśmy użyć 'TIMER1_OVF' zamiast 'TIMER1 OVERFLOW'. Podobna sytuacja jest z przerwaniem od INT0, powinniśmy użyć 'INT0_ISR'. Najpierw musimy skonfigurować Timer1 i INT0, następnie włączyć przerwania. Kiedy...
nic panowie nie czytacie :P ładuje watrością nie 65000 tylko 55000 a to różnica :) Napisałem ze usiłuję uzyskać przerwanie 10ms przy kwarcu 8MHz w drugim poście. Jeśli chodzi o ustawiania portów itd to pomijam takie rzeczy żeby nie zaciemniać. Z tym że: Panowie na ten moment nie jest to problemem zupełnie ponieważ timer nie odpowiada nawet bez początkowego...
Witam, niestety ale chyba coś jest nie tak? Na wstępie należałoby wyjaśnić że nie ma czegoś takiego jak "automatyczne przeładowanie timera" (reload/load timer1 powiedzmy). Termin ten jest związany z procedurą konfiguracji timerów występującą tylko w trybie "Normal", gdzie każdorazowo początkowa wartość timera musi być wpisana przez processor. Taka...
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 wszystkich, projekt powstał na przełomie marca/kwietnia tego roku w wyniku zapotrzebowania na pompkę perystaltyczną potrzebną przy realizacji pracy magisterskiej. Nigdy wcześniej nie miałem do czynienia z elektroniką (nie licząc podłączania diod z rezystorem i prostych zasilaczy na LM7812) a tym bardziej z mikrokontrolerami. http://obrazki.elektroda.pl/2272591900_1...
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...
Czym ty sie martwisz M32 ma 2 kb ram to dasz na stos 1kB i w zyciu sie nie przepełni chyba że specjalnie napiszesz złe obsługi przerwania, ale to też trzeba umieć zrobic.
Hejka Podświetlanie już działa na zadany czas ;-) faktycznie znalazłem błąd w kodzie. Jednak teraz gdy załącze podświetlanie i program ma się wykonywać przez dany czas, to nie działa mi pomiar temp z DS18B20. Jak usunę pomiar, to program działa normalnie, wykonuje wszystkie podprogramy. Doszedłem do tego, że przerwanie powoduje, że komenda 1Wreset nie...
Witam jest dość początkującym w dziedzinie programowania i potrzeba mi połączyć tak aby na jednym wyświetlaczu pojawił sie zegar i licznik impulsów z halotrona jako obrotomierz zegar: $regfile = "m8def.dat" 'informuje kompilator o pliku 'dyrektyw mikrokontrolera $crystal = 8000000 'informuje kompilator 'o częstotliwości oscylatora 'taktującego...
Kilka kolokwium zaliczonych, więc mogę wrócić do tematu. Mam taki kod, ale to nie istotne bo i tak nie działa : $regfile = "m16def.dat" $crystal = 16000000 Config Pind.6 = Output Bramka Alias Portd.6 Config Int0 = Rising 'rising wyzwala zbocze narastające Config Timer1 = Timer , Prescale = 64 On Int0 Zero 'detekcja przejścia przez 0 On Timer1...
Witam Napisalem sobie program w Bascomie ktory liczy czas stanu niskiego na pinie INT0. Powiedzmy ze wszystko dziala wporzadku ale zastanawia mnie jedna rzecz. Ponizej przedstawiam kod programu. Atmege48 idzie na 8 MHz, czyli jeden takt zegara=125ns ?? Czas licze poprzez Timer1(16 bitowy), W przerwaniu od przepełnienia licznika Timer1 napisalem procedurke...
Jeszcze małe pytanie czy Timer1 w ICP można ustawić by ten zegar liczył od 0-60000 a nie jak mam do 65535?? Głównie chodzi mi o to by przepełnienie było np. co 30ms a nie jak mam 32,687ms Czy ustawienie OCR1A ma tu sens?
Spróbuj tak: 'czestotliwosc uprocesora w Hz $crystal = 11059200 Config Portb = Output Config Timer1 = Timer , Prescale = 256 On Ovf1 Timer1_tick Portb = 254 'ustawienie komparatora timera '65535 - 43200 = 22335 Timer1 = 22335 ' load timer1 nie działa prawidłowo w Bascomie Enable Timer1 Enable Interrupts Do 'program glowny Loop Timer1_tick: stop timer1...
Program jest dość obszerny więc postaram się przedstawić wszystko co jest potrzebne do przeanalizowania. Więc tak: PROGRAM GŁÓWNY: PRZERWANIA TIMERY [syntax=c] /*Definicja funkcji odnoszacych sie do Timera 1*/ #define Timer1_ON TCCR1B |= (1<<CS12) /*Preskaler = 256 */ #define Timer1_OFF TCCR1B &= ~(1<<CS12) void Timer1_Init(void) //Funkcja...
.org 0x0000 rjmp Reset ;wektor przerwan od resetu .org 0x0016 rjmp Timer0 ;wektor przerwań od przepełnienia T0 .org 0x0012 rjmp Timer1 ;wektor przerwań od przepełnienia T1 Reset: ldi Temp, LOW(RAMEND) out SPL, Temp ldi Temp, HIGH(RAMEND) out SPH, Temp Spójrz jeszcze raz na wyżej wybrany fragment - widzisz błąd? Przypatrz się dobrze......
przepełnienie zbiornika amica przepełnienie przepełnienie timera
passat kodować zestaw naprawczy pralki whirlpool efekt derby
Jak dopasować głowicę do wiertła i końcówki? Kompatybilność pilota RAVO GK-SS11 z innymi dekoderami