Może się pomyliłem, ale chyba przerywasz sobie odbiór co 2ms. Dlaczego nie użyjesz wyższego preskalera? Np. 1024? Możesz nawet po ustawieniu Flagi wyłączyc Timer i po odbiorze włączyć ;) Timery można dowolnie konfigurować podczas pracy programu. Druga sprawa ustaw sobie odbiór do bufora w tle (Config Serialin = Buffered, Size..)
Przedstawię Ci kolego przykład zastosowania Pulsein żebyś miał jaśniej. Myślę że będzie "rzeczowiej". To przykład dla dekodowania transmisji pilotów podczerwieni. Sygnał podłaczony jest do zewnetrznego przerwania INTx i w momencie zmiany na pinie program skacze do tej procedury. Mierzy impuls i poddaje rozwadze jego długość. [syntax=basic4gl]Int_1isr:...
Mówisz masz na timerze. $regfile = "m16def.dat" $crystal = 1000000 $hwstack = 32 $swstack = 8 $framesize = 16 Config Timer1 = Timer , Prescale = 1024 Enable Interrupts Enable Timer1 Start Timer1 On Timer1 Odmierz_czas Const T = 6942 Config Portb.1 = Output : Portb.1 = 1 : Led Alias Portb.1 Config Portb.2 = Input : Portb.2 = 1 :...
A tak to by to zadziałało ?? Nie zadziała. Przynajmniej tak, jak tego oczekujesz. Przy kwarcu 2,4576MHz i prescalerze 64 Timer0 przekręca się co ok. 6,7ms a Timer1 co ok. 1,7s. jak ustawić timer żeby odliczał np 1 sec i wtedy coś się działo 1. Zdefiniować co się ma wykonać w przerwaniu 2. Włączyć przerwania od timera 3. Włączyć globalne zezwolenie...
Dopiero od wersji 1.12.x.x masz taką możliwość. We wcześniejszych wersjach wartość opóźnienia musi być stałą. Użyj lepiej przerwania od TIMER'a.
Nie wiem na które pcb patrzysz , to ostatnie do pełnej wersji z pomiarem prądu i napięcia ,patrzę i widzę że jest OK . pin40 i pin39 są podpięte do dzielnika kondensator żeby nie pływał pomiar zbytnio. nie widzę tego o czym piszesz . Wieczorem sprawdzę jeszcze raz i podam zaktualizowane . Ok jest wieczór więc zamieściłem na 2 str. schemat i pcb w eagle...
Witam. W pewnym sofcie dla Atmega16 wykorzystałem już: - Timer1 (16 bit) do odliczania 0,0001s odcinków czasu - Timer2 (8 bit) jest wykorzystywany przez odbiornik podczerwieni (instrukcja getrc5) Timer 0 niby jest wolny, ale nie wiem / nie jestem pewien czy nie jest on wykorzystywany przez jakieś używane przeze mnie instrukcje (np. print dla sprzętowego...
Nie prościej generować przerwanie co np 1s od timera?
Mam prosty program licznika oparty na wyświetlaczu led. Program nie dokonuje przerwań z timerów. Czy może ktoś jest w stanie rozjaśnić co jest nie tak? Czy jest możliwość, że fuse bit'y od przerwań są źle ustawione? Ten sam program wgrywając do M16 za pomocą STK500 działa sprawnie tylko wtedy, gdy w bascomie ustawie zamiast M16-90S2313 (oczywiście należy...
Mikrokontroler MEGA8535 ma wsobie rejestry, bodajże nazywają się compareA i compareB. Niemoge sobie z nimi poradzić i prośba czy mógł byś mi napisać prosty program w BASCOM AVR który je wykorzystuje, chodzi mi dokładnie o taką sytuacje: Mikrokontroler cały czas porównuje zawartość jednego z tych rejestrów compare z zawartością Timera1 i kiedy wystąpi...
Witam! Od niedawna zacząłem przygode z bascomem i jak dotąd wszystko szło gładko i przyjemnie dopóki nie zabrałem sie za obsługe timera. Korzystają z helpa napisałem najprostszy chyba program liczący od 0 w góre co 1s. W symulatorze wszystko działa jak należy ale w realu już nie. Mógłby mi ktoś podpowiedzieć co robie nie tak? Może Atmega8 ma inną składnie...
Witam Jakoś dziwnie to napisane. Przede wszystkim jak piszę TIMER to nie używam potem OVF1. Jakoś mi to brzydko wygląda choć działać powinno. Skoro chcesz mieć jeden odczyt na dwie sekundy to zrób to zupełnie inaczej. Np. w programie głównym zrób sobie licznik i dla wartości powiedzmy jeden niech wyśle rozkaz do DSa ażeby przetwarzał temperaturę. następnie...
OK dziękuję wszystkim za pomoc, rozumiem że Timer będzie liczył czas non stop aż nie nadejdzie zbocze narastające i nie dojdzie do komendy stop timer1? Chodzi mi o to że włączam go w przerwaniu a potem się ono kończy i czy timer wtedy nie zakończy zliczania?
Witam Napisałem prosty program używający timera1 i timera 2 do zliczania częstotliwości, Chciałbym użyć dodatkowo serwa do mojego projektu ale używając intrukcji Servo coś nie tak dzieje się z serwem . Po włączeniu zasilania ciągle pracuje i próbuje przekręcić się o 360 stopni "ciągle pracuje". Kiedy w kodzie spełniony jest warunek i uruchamia się komenda...
Witam Od paru dni bawie się w programowanie atmega16 w oparci o bascom college tyle ze tam przykłady są napisane na Bascom 8051 a ja musze używać (chyba) bascom avr. I z reguły bez większych problemów mi się to udawało do czasu zabawy z taimerami. Czy kos może mi przerobić poniższy kod na bascoma avr (chodzi o podobny efekt)? A może da się pisac w ascom...
Tak, lecz jest to sytuacja, którą opisałem w poście #3. Z drugiej strony, ja bym przedstawiony przez ciebie problem rozwiązał inaczej - w dwóch przerwaniach. W przedstawionej sytuacji wysyłkę można zrobić całkowicie w oparciu o przerwania USART, a timer niech robi to do czego służy :) A jakieś inne różnice?
W przypadku Bascoma jest najgorsza sytuacja Nie do końca. CONFIG RC5 = PINx.y Koledze najwyraźniej sprzętu brakło, a na to nie poradzi nawet asembler.
No wlasnie, tylko czemu zmiana na wyswietlaczu nastepuje co 1 sekunde?. Jak nie ustawiam load timer to czas miedzy zmianami jest ten sam. Rozumiem ze timer1 jest 16bitowy zlicza do 65536. Ile nie ustawie load timer1 = 250 czy 65100 to zmiany nastepuja w podobnych odstepach czasu. A ja potrzebuje uzyskac rowno 100ms na przerwaniu
ogólnie żecz biorąc oznaczenia pwm'a same mówią co i jak OC - OUTPUT COMPARE czy li wyjście porównania 1 - liczba oznaczająca z któego timera kożysta ten PWM następnie występuje litera lub jej brak jeśli dla daneg otimera jest tylko jeden PWM czyli OC1A i OC1B to PWM'y timera1 i ich zmienne nazywają się PWM1A i PWM1B OC0 to PWM timera0 zmienna to chyba...
z tym ładowaniem timera to jest tak że timer startuje od wartości 0 i liczy sobie w górę, aż doliczy do 255 wtedy jest zerowany i zostaje wywołane przerwanie, natomiast instrukcja load timer0, x wpisuje do timera wartość wg wzoru: 256 - x dzięki czemu timer musi zliczyć tylko x impulsów żeby nastąpiło przepełnienie(oraz w tym wypadku przerwanie), tylko...
Witam. Pytanie odnośnie kompilatora Bascom AVR. Załóżmy, że w programie wykorzystuję dwa przerwania. Pierwsze pochodzi od nóżki Int0, drugie od przepełenienia Timer 1. Czy (i kiedy) w procedurze przerwania powinienem stosować wyłączanie przerwania na czas jego obsługi? Niby Bascom udostępnia gotowe disable interrupts (wyłącza cały system przerwań) oraz...
Po pierwsze to ze zgrozą patrzę na to co się dzieje w Bascomie z tymi błędami o których pisał ZbeeGin. Dawno temu korzystałem z Bascoma i chwaliłem go sobie ale jakoś zawsze gdy potrzebowałem coś robić ze sprzętowymi PWM'ami to przypadkiem robiłem to za pomocą bezpośredniego ustawiania odpowiednich rejestrów bądź jako wstawki asm. Teraz programując...
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...
Witam :) Po kilku dniach zabawy udało mi się zbudować układ składający się z ATMEGA16 (kwarc zewnętrzny 8 MHZ, rs232) i: - czujnika podającego na pin A1 napięcie 0.2-4.7V - czujinka podającego częstotliwość 4-40kHz na pin PBO. Po przestudiowaniu podstaw BASCOMu i lekturze forum udało mi się napisać oddzielne programy do obsługi tych czujników. Jednak...
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...
Nie wiem czy kod w Bascom na coś Ci się przyda ale właśnie na takiej zasadzie jak w tym programie zrobiony mam pomiar prędkości wiatru w moim pozycjonerze. Troszkę inaczej wykorzystuję tu timery niż założyłeś ale... Zostawiłem Ci tylko fragment odpowiedzialny za liczenie impulsów i dodałem obsługę wyświetlacza. Program jest na tyle prosty, że z interpretacją...
Witam serdecznie. Konstruuje coś co może kiedyś będzie centralką alarmu i mam problem z obsłużeniem czujników ultradźwiękowych. Zakupiłem jedne z najtanśzych para odbrionik nadajnik. Wszystko podłączone wg. schematu. http://obrazki.elektroda.pl/2395810000_1... Ponizej kod programu: $regfile = "m16def.dat" $crystal = 8000000...
Czy fuse bity można ustawiać bezpośrednio w kodzie programu bo PonyProg mi nie działa z moim programatorem Jeżeli programujesz w Bascom to dyrektywa na początku programu: $PROG LB, FB , FBH , FBX służy do ustawienia fusebitów processora, gdzie: LB - Lockbit settings FB - Fusebit settings FBH - Fusebit High settings FBX - Extended Fusebit settings Nie...
Może najpierw zacznę od tego co muszę zrobić. Potrzebuję generatora impulsów PWM, ma mieć kilka częstotliwości do wyboru z góry zdefiniowanych, po wybraniu jednej częstotliwości i naciśnięciu startu wypełnienie ma się zmieniać powiedzmy co 5 sekund o 5%. No to czeka cię zabawa z opcjami Prescaler i Pwm . Bo będzie to najprostszy sposób dla Ciebie....
Jeszcze jedno pytanko: Config Timer0 = Timer , Prescale = 64 Powyzsza linijka generuje mi nastepujacy blad: Error : 96 Line : 33 Prescale value must be 1,8,64,256 or 1024 $regfile = "m16def.dat" 'dyrektywa dla mikrokontrolera ATmega16 $crystal = 8000000 'częstotliwość taktowania 8 MHz Ddra = &B11110000 'PA.7-4 wyjscia wybierajace wyswietlacz,...
Witajcie Buduje zasilacz (schemat w załączniku) , obecnie jestem na etapie programowania. Oto program: http://obrazki.elektroda.pl/1824166400_1...
No i Bascom kolejny raz poległ ;) prawie identyczny program w Fastavr daje przerwanie co 1,3 us ;) czyli mam juz przebieg o czestotliwosci 380kHz, nie wspominając już o różnicach w objętości programu ;) plik ASM generowany przez fastavr ;FastAVR Basic Compiler, ver.4.0.1, by MicroDesign ;Created 11:07:00, 05-12-2005 ; .include"C:\FastAVR\inc\m16def....
Mam Taki zegarek na LCD oparty o Timer1: $regfile = "m16def.dat" $crystal = 16000000 Config Portb = Output Config Lcdbus = 4 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Pb.2 , Db5 = Pb.3 , Db6 = Pb.4 , Db7 = Pb.5 , E = Pb.1 , Rs = Pb.0 Cursor Off Cls Config Timer1 = Timer , Prescale = 256 Declare Sub Wysw_czas On Timer1 Odmierz_1s Dim...
Witam! Mam problem z oprogramowaniem (które piszę sam w BASCOM) do sterownika na atmega16. Sterownik steruje na podstawie timera1 oraz ds18b20 pięcioma wyjściami 220V (za pomocą przekaźników) oraz 4 12v za pomoca bc546b. Przy ustawienu czasu, godziny włączenia, zakresu temperatur sterownik zaczyna prawidłowo pracowac ( bez obciążenia urządzeniami na...
No znalazłem wreszcie chwilkę w pracy i dla relaksu zrobiłem chyba nieco prostszą wersję w Bascom efekt o, który Ci chodziło. Opóźnienia są na wait'ach, bo wydaje mi się, że w tym przypadku nie są potrzebne idealne czasy, a po za tym zawsze możesz sobie to przerobić na jakiś timer (np. dla relaksu :D ). Myślę, że w tym przykładzie zbędne jest też badanie...
co napisaliscie jako swoj pierwszy program na dany uC w danym jezyku (rozbudowy sie licza, byle by wciaz byla to ta sama baza) n. n. - literka, cyferke z przodu dodam sam. zachowujcie chronologie w swoich dokonaniach na roznych platformach jezykowych i sprzetowych, tak aby to mialo sens! ____________________ 0x1-a. Freddie Chopin - migacz diodkami o...
Witam. Może spróbuj tak po wywołaniu przerwania ( u Ciebie co sekunda) Odczytaj termometr DS. A następnie wydaj rozkaz pomiaru temperatury. W następnym przerwaniu odczytasz go o tak w kółko.
W przerwaniu Int0 inkrementuj zmienną. Ustaw timer na jakąś jednostkę czasu i w przerwaniu od tego timera obliczaj cześtotliwość i zeruj zmienną
Skróć czykl zliczania Timera.
No właśnie- przerwanie od Timera co 16.384 ms a w przerwaniu tylko inkrementacja jakiejś zmiennej. No ale to Bascom- odkładanie na stos i zdejmowanie zajmie jeszcze kilkadziesiąt instrukcji po 0.0625us przy zegarze 16MHz. Ale nawet wtedy to będzie poniżej 6us. Wystarczy aby obsługa przerwania INT0 była krótsza od 16ms. Zwłaszcza że przerwanie zewnętrzne...
A nie lepiej tak ? Przykładowa konfiguracja timera1 w trybie CTC i przebiegiem na OC1a [syntax=basic4gl]Config Timer1 = timer, Prescale = 256, CLEAR TIMER = 1, Compare A = toggle, Compare B = disconnect [/syntax] Potem tylko zmieniać wartość rejestru Compare1a jakimiś przyciskami, pilotem, enkoderem etc. ps. Jak nie zadziała to poustawiać bity w rejestrach...
No tak wiem o tym, że timer0 jest 8 bitowy, a timer1 16 bitowy. Tak chodzi mi o zegarek czasu rzeczywistego. A pwm da się zrobic na innych timerach timer2 timer3?
Ja używam takich kodów do odblokowania tych pinów, zaraz po instrukcji konfiguracji zegara programowego: 'odblokowanie pinów PC6 i 7 dla procesorów atmega16/32: Tccr2 = 0 Assr = 0 Timsk = 0 Tifr = 0 Oczywiście wszelkie dalsze konfiguracje innych timerów powinny znaleźć się po tym kawałku kodu.
Tak, będziesz mógł. Jeśli chcesz liczyć w czasie (a nie chcesz) to mierzony przebieg doprowadzasz do wejścia zegarowego timera, w efekcie każdy impuls powoduje zwiększenie wartości licznika o jeden. Skoro chcesz mierzyć szerokość impulsu to wykorzystujesz wejście ICP timera - timer taktujesz z maksymalną częstotliwością, z kolei impulsy z obrotomierza...
Dokładnie tak jak masz napisane, z tym, że konfigurujesz jeden z timerów do dliczania czasu. Przykładów w Bascomie z obsługą timera znajdziesz bez liku.
hmmm no ja to robiłem wtedy w Bascomie mniej więcej tak: ustawiałem sobie tak któryś Timer, żeby przerwanie wykonywało się powiedzmy 64 albo 128 czy ze 200 razy w ciągu czasu trwania jednej połówki czyli w trakcie ok 10ms tak? Gdy pojawiło się przerwanie INTx to odpalałem ten Timer, który zaczynał tykać i wykonywać przerwanie tyle razy ile ustalonych...
Jeśli potrzebujesz sekundę to prócz kwarcu 16MHz podłącz kwarc zegarkowy 32768Hz i puść Timer2 asynchronicznie. Timer0 się zwolni. [syntax=basic4gl]Config Timer2 = Timer , Async = 1 , Prescale = 128[/syntax]
Ma być: [...] If Pina.6 = 1 Then [...] Mieniłem tak jak napisałeś, faktycznie ruszył dalej wykonuje pomiar ale dzieje się to samoczynnie bez pojawienia sie na pinie 6 stanu wysokiego, chociaż w kodzie jest zaznaczone żeby robił pomiar dopiero gdy pojawi się '1' na pinie 6. Owszem, ja też przeczytałem że zmieniłes, ale nie jest wiadomo...
Coś w tym rodzaju, z tymże niedokońca. A jak obliczyć prędkość timera takżeby prędkośc wysyłanych danych była odpowiednikiem 9600 budów. Oczywiscie zakładam że mój pomysł z wysyłaniem bitów z taktem timera.
Możliwe, że będzie trzeba rejestry jakoś inaczej poinicjalizować (jakieś timery/przerwania/etc).
Jak już odzyska kolega władzę w krainie ATMega16, to zainteresuj się trybem CTC pracy tego licznika. Jest do tego odpowiedni parametr: CONFIG TIMER0 = TIMER, PRESCALE = 256, CLEAR TIMER = 1 Tylko pamiętaj aby skorzystać z przerwania porównania a nie z przerwania przepełnienia.
ElKuba, a czy atmega8 i AtMega16 masz fabrycznie nowe, czy od kogoś ? Może ktoś wpisał fuse Dodano po 5 nie zauważyłeś w w ATMega16 pd7 ma też drugą funkcję OC2 (Timer/Counter2 Output Compare Match Output)
A stan Timera0 się zmienia? Ja też mam problemy z tym. Ale pod pojęciem "tym" kryje się nie Timer, lecz BASCOM. W BASCOMie niektóre rzeczy nie działają z niektórymi procesorami (np. Timery w ATMEBA88 nie działają, w ATMEGA8 już tak. BASCOM ma źle przypisane adresy rejestrów IO).
atmega16 timer timer atmega16 atmega16 bascom
obciążenie impulsowe przetwornica silnik strzykawka energetyk matura
maszyny lucznik najlepsze maszyny lucznik najlepsze
Menu serwisowe 4Swiss Sienna 7 – kombinacje wejścia, diagnostyka, kody błędów Windows 10 nie uruchamia się – pojawia się EFI Shell zamiast systemu, naprawa bootowania UEFI