A po co włączasz przerwania skoro nie napisałeś procedur ich obsługi? I dlaczego najpierw ładujesz część młodszą do OCR a potem starszą, a nie na odwrót jak to zalecają? I dlaczego dziwisz się, że kod potem nie działa?
Dzięki za pomoc. działa. Grzegorz.
Po namyśle dochodzę do wniosku, że trochę trzeba zmienić koncepcję, a i tak nie wszystko się załatwi. Pomysł jest taki: 1) zegar i wszystkie sprawy jego bez zmian i cykl maszyny 1 us. 2) ponieważ impulsy mają być nie częściej niż co 1 ms to czasu trochę jest 3) do odmierzania okresu między impulsami użyj timera2 ustawionego jako licznik w trybie auto-reload...
Podejrzewałem, że coś zajmuje czas uC, myślałem, że to może printf, ale skoro ujawniłeś, że uC "robi mnóstwo innych rzeczy", to tam szukaj przyczyny. po prostu coś zajmuje mu te 200 ms.
Wykorzystaj zmienną w RAMie. A w programie zrób skok warunkowy uzalezniony od tej zmiennej do jednej lub drugiej procedury.
Za to mam problem z temperaturą. W pokoju mam 20, może 22 stopnie, a termometry pokazują 25, a przy niektórych włączeniach, nawet 29 stopni. Pomiędzy jednym a drugim 0.2, 0.3 stopnia różnicy. Rezystor podciągający użyłem 3.3K, zamiast 4.7K, ale to chyba nie jest wina tego. Wartośc rezystora podciągającego magistralę 1-wire nie jest krytyczna i to w...
Chodziło tylko o zamianę Timer1 na Timer0, ale ok mogę pokazać który nie działa... a właściwie który już działa... dobrałem wartości prescale i load całkowicie doświadczalnie... miałem nadzieje że ktoś wyjaśni co i jak z tym przy okazji ale ok... Przy taktowaniu 16 MHz; Versja 0 dla Timer1 masz zalozone: const Timer1Reload = 700 config timer1=timer,...
Która atmega? W atmega8 możesz użyć: Timer0 - odmierzanie czasu Timer1 - zliczanie impulsów Timer2 - PWM
Timer1 używam do odmierzania czasu po to by, ładować baterię telefonu. Aliasy mogę wstawić, choć ja nie przepadam za nimi.
Kod wydaje sie ok, przy czym moje walki z odmierzaniem czasu mowia ze trzeba brac poprawke na Bascoma /i to duuuza/. Sprawdzilem pod symulatorem (Bascom) i program dziala, w realnym procku pewnie czasy sie rozjada.
Witam, chciałbym przy użyciu Atmega8 i zewnętrznego kwarcu odmierzać i zliczać setne części sekund, sekundę mogę łatwo wyłapać z timera1 według przykładowych obliczeń 4000000MHz / 256 = 15625 65536 - 15625 = 49911 lub 8000000Mhz / 256 = 31250 65536 - 31250 = 34286 Nie mam jednak pomysłu jak....... Z góry dziękuję za pomocne wypowiedzi. Aby odmierzac...
Witam. Mam problem z przerwaniami w atmega8. Wcześniej nie potrzebowałem przerwań więc to zagadnienie mnie nie interesowało. Potrzebuję wywołać przerwanie zewnętrzne int0 które uruchomi timer1, a ten zacznie odmierzać czas. Proszę o pomoc. Pierwsza zasadnicza uwaga to nie zauważyłem w programie konfiguracji interruptu0- coś np. takiego: config INT0=...
Load Timer 250 pojawił się 2 razy bo pierwszy jest wykonyawny przed wejściem do pętli a następny w pętli. W tym programie jest dodatkowa zmienna Licz_8ms bo Timer0 nie może odmierzyć całej sekundy w jednym przebiegu. Przy użyciu Timer1 i odpowiedniego kwarcu można osiągnąć przerwania co 1 s. Jest to korzystne bo odmierzanie czasu jest nieco dokładniejsze....
Program działa i nawet licznik się zatrzymuje tylko jaką mam pewność że jest to 250ms? chodzi mi o to żeby uzyskać jak największą dokładność. Dzięki za ten przykład, spróbuję... Nie wiem dokładnie , do czego Ci to potrzebne ale przykład z przerwaniem , który podałem wcześniej działa z dokładnością do ~2 cykli zegara(500)ns.Czy to niezbyt dokładnie...
ale żeś mnie zjechał.. przyznaję się.. mój błąd.. dopiero zaczynam.. napisałem to pierwszego dnia zabawy z bascomem.. to jest mój program przez który się uczę obsługi pilota, wyświetlacza itd... z tąd moje podstawowe błędy.. do tej pory pisałem programy na PC z tąd moja niewiedza o tempie wykonywania instrukcji.. wiedziałem, że jest wolniejsza ale z...
(at)marco47 Nie rozumiem twojego pytania. (at)janbernat Timer1 służy do odmierzania 1 sek. Po tym czasie następuje przerwanie, w którym liczba zliczonych impulsów (przez timer0) przepisywana jest do zmiennej wynik.
Zegar na Timer0 ruszył, natomiast PWM jest zrobione na Timer1. Przyczyną nie działania Timer0 to procedura RC5(!!??) Teraz tylko pozostało wyregulować odmierzanie czasu..
Timer0 jest 8-bitowy czyli pomiesci liczbę z zakresu 0-255, Timer1 jest 16-bitowy czyli pomiesci liczbę z zakresu 0 - 65535. Zapewne autorowi chodziło o to aby zrobić to na timerze 8-bitowym, ale Twoje obliczenia tez są dobre tylko dla Licznika/Timera1
Napisałem taką procedurkę (bez użycia przerwań). Jeśli chcesz użyć do tego celu przerwanie to daj znać. W tym przykładzie 4000000/64/6250=10 Hz czyli 100 ms $crystal = 4000000 $regfile = "2313def.dat" Config Timer1 = Timer , Prescale = 64 Declare Sub Czekaj100 Czekaj100 End Sub Czekaj100 Timer1 = 0 Start Timer1 While Timer1 < 6250 Wend Stop Timer1...
Witam. Jestem początkujący i programuje w Bascom. Ogarniam już tematykę pomiaru prędkości obrotowych wałów i trochę już przećwiczyłem. Napisałem już działające programy mierzące prędkość obrotową wału przy pomocy pomiaru ilości impulsów w czasie, oraz metodą pomiaru okresu impulsów prostokątnych, generowanych przez czujniki indukcyjne, lub fotooptyczne....
Wyjaśniam: do odmierzania czasu nie używam trybu PWM. PWM został wykorzystany do sterowania silnikami dc (mam dwa silniki). Wybrałem kanały 0C1A i OC1B - Timer1. Do odmierzania czasu chciałem użyć timera0 - ustawiłem preskaler na 1024. Odmierza poprawnie. Problem w tym, że kiedy poprawnie działa odmierzanie czasu, to coś złego dzieje się z PWM generowanym...
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...
Hm... dobry pomysł, niestety wszystkie piny mam już zajęte. Cały czas planowałem wykorzystać timer1 do tego celu ale niestety tylko on mógł zapewnić odpowiednie generowanie sygnału dla silnika krokowego.
Wydaje mi się, że najpierw powinno być „uruchomione” odliczanie tych 0,1 sek, wyzwalane pierwszym pikiem z „paczki”. Potem trzeba odczekać te 0,1 sekundy na zanik „szumów” i zacząć zliczanie w czasie 0,9 sek. Ilość zliczonych pików podzielona przez czas da mi częstotliwość. Wynik ma się utrzymywać na wyświetlaczu...
Witam! Bawię się czujnikiem ultradźwiękowym mierzącym odległość, z którym komunikuje się za pomocą interfejsu I2C. Dane z czujnika za pośrednictwem amtegi8 (8MHz) wyrzucam na kompa za pomocą RS-232 (9600 baudrate). Problem polega na tym aby obliczyć czas jaki upływa pomiędzy kolejnymi pomiarami i wyświetlać go z resztą danych na komputerze. Trochę poczytałem...
Odbiór i pomiar podczerwieni zapnij na TIMER0 ale uruchamiane od przerwania by ciągle nie sprawdzać wejść. Podświetlanie LCD bez problemu na PWM TIMER2 i to w ogóle nie będzie zajmować Megi. Zostanie Ci jeszcze 16BIT TIMER1 na odmierzanie czasu.. Bootloader Arduino zajmuje 2kB więc zostaje jeszcze 30kB Nie mam takich zakus by oprogramowywac akwarium,...
aha to źle zrozumiałem. myślałem że jak pilot nadaje to zegar staje. no to w takim układzie podejrzewam że getrc5 używał właśnie do odbioru kodu timera0. Zmień w swoim programie odmierzanie czasu z timera 0 na timer1 i zacznie działać.
Kawałek kodu, który powinien Ci pomóc z odmierzaniem czasu: Odmierz_1s: Load Timer1 = 12500 Incr Licz_10ms If Licz_10ms = 10 Then Licz_10ms = 0 End If Return Zlicz: Incr Czestotliwosc Return Odmierza 1s, a potem zlicza ilość przerwań na timer0. Przerób na swój kwarc.
Ja dorzucę jeszcze jedno - jakby nie napisał ISR to odmierzanie przerw przez delay w pętli głównej już nigdy nie będzie działało prawidłowo - odliczany czas powiększy się o czas realizacji wszystkich przerwań. To można ominąć w prosty sposób wywalając te delaye i robiąc opóźnienia na timerze.
Witam, Szukam i znaleźć nie mogę. Muszę wysterować serwomechanizm. PWM 50Hz i sterowanie wypełnieniem. Problem w tym, że w ATmedze8 Timer1 mam już nieodwołalnie zajęty(odmierza czas, steruje grzałką) chciałbym użyc Timera0 lub Timera2. Przy kwarcu 16MHz i trybie CTC PWM do rejestru OCR2 wpisuję wartość 155 dostaję 50Hz. Teraz moje pytanie: jak wysterować...
A może wyłumaczyć mi ktoś tak jaśniej niż whelpie bascoma ;) co to jest ten prescaler i co on dzieli. Może tak po kolei jak twój program widnieje: 1. Jeżeli PORTB jest przeznaczony do obsługi LCD to nie konfiguruj go w ogóle w stylu jaki podałeś w pierwszym poście. Config Portb = &B11111111 : Portb = &B11111111 ===> źle!!! Może to powodowac zakłócenia...
Dzięki Marcin za odpowiedź. W sobotę kupiłem TowerPro SG-5010, bo tamte, faktycznie za delikatne były, jak mi sprzedawca w sklepie pokazał (prawdziwe mini) ;-) Uruchomiłem serwo bez problemów. Sterowanie sygnałem z regulatora PI zbudowanego na Atmega16. Jedynie problem mam tego typu, że przy korzystaniu z drugiego timera Timer1 (Timer0 wykorzystuje...
Dzięki za kalkulator i wyjaśnienie Napisałem kod z timer1 do odmierzania odcinków czasu po 10 sekund. 10 sekund świeci led i następne 10 sekund nie świeci i tak w kółko. Oto kod: [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 1000000 Config Pind.0 = Output Const Timer1 Reload = 9765 Config Timer1 = Timer , Prescale = 1024 Load Timer1 , Timer1 Reload...
Witam , dzięki za podpowiedź :) jeśli chodzi o datascheet, to przeglądałem, ale nie od razu trzeba pojąć to w mgnieniu oka :) . Propozycja ZbeeGin wydaje się dużo prostsza i przejrzysta. zrozumiałem zasadę działania takiej konstrukcji, Timer0 ma być generatorem PWM a Timet1 ma odmierzać odcinki czasu i przepełnienie wysyłać na końcówkę taktującą Timer0....
Robisz prosty błąd w składni. Poczytaj w helpie o Load. Nie tak: [syntax=basic4gl]Load Timer1 = jakas_wartosc[/syntax] tylko tak: [syntax=basic4gl]Load Timer1 , jakas_wartosc[/syntax] Z tego co pamiętam można również tak. przykładowo: [syntax=basic4gl]Timer0 = 249[/syntax] co jest równoważne: [syntax=basic4gl]Load Timer0 , 6[/syntax] Ale to sobie musisz...
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...
[quote="lukaskay"] a gdybym czas oczekiwania zwiększył do 15 s wtedy dokładność wzrosła by mi do 4 obr/min mogę użyć komendy: Wait 15 ?? ale wtedy chyba dojdzie do przepełnienia licznika?? quote] Przy twoich parametrach silnika el., oczywiscie ze dojdzie do przepelnienia licznika0. Ponadto uwazam ze stosowanie dyrektywy "Wait" w pomiarach nie jest najlepszym...
Sprawdź na symulatorze w którym momencie się rozjeżdżają wartości badanej zmiennej i timera1 Możliwe, że ta pętla się wykonuje więcej razy, bo warunek stopu przeskakuje. Timer jest zwiększany asynchronicznie w stosunku do programu i program może przeoczyć moment gdy Timer=konkretna wartość, bo sprawdza Timer1 w przypadkowych momentach a nie po każdej...
Tak, mają to być dwa równe odcinki czasu. Musi być to zrealizowane na dwóch timerach, ponieważ w czasie działania programu pojawi się czynnik zerujący jeden z timerów, a drugi nadal w tym samym czasie będzie musiał odmierzać te 800ms. Ponadto przerwania od timerów sterują dwoma niezależnymi od siebie operacjami. Więc skonfiguruj Timer1 w trybie CTC...
Tak jeszcze powrócę do tematu bo mam taki zapis jak usypiam [syntax=csharp] if(Sleep_ON){ //////////////////// wylacz WDT wdt_disable(); //////////////////// uspij mikrokontroler set_sleep_mode(SLEEP_MODE_PWR_DOWN); power_all_disable(); // wylacz wszystkie peryferia cli(); // wylacz przerywania sleep_enable(); CLKPR = bit (CLKPCE); // zmniejsz zegar...
Witam. Zbudowałem obrotomierz na Atmega8. Sprzętowo działa poprawnie by sie wydawało. Lecz odczyt obrotów samochodu jest z przedziału 6 - 30 obr/min. Wydaje mi się ze mam bład w samych obliczeniach wyniku. Mój obrotomierz działa następująco przy założeniu 1 impuls na obrot (w rzeczywistosci 1,5 imp/obr): impuls z cewki podawany jest na przerwanie int1....
Koledzy, mam mały problem, gdyż mój pomysł na zliczanie czasu otwarcia wtrysku nie bardzo się sprawdza. W tej chwili robię to tak, że w czasie 0,5s w pętli sprawdzam czy na pinie do którego jest podłączony sygnał wtrysku jest stan wysoki, jeżeli jest, to zwiększam zmienną "wtrysk". Działa to w miarę dobrze, ale jak np. wcisnę przycisk, co wiąże się...
ok, więc może być na konkretnym przykładzie: Mam płytkę AND-TECH.PL EvB 4.3 (mikroprocesor to: ATMEGA 32, 16 PU). Więc jak mogę sobie skonfigurować Timer1 i Timer0 na tym mikroprocesorze przy rezonatorze 16Mh by odmierzał mi czas (zegarek godziny:minuty:sekundy). Jak mogę dobrać preskaler i jak wygląda tok obliczeń. Informacje te są mi potrzebne na...
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ść...
Pierwsze przerwanie wywołuje sie po bardzo długim czasie, bo za pierwszym razem Timer musi doliczyć od 0 do 65535. Dopiero za drugim razem by zliczał od 63000 do 65535, ale też nie zliczy, bo w niewłaściwej kolejności zapisujesz dane do tcnt1. Odpowiedni czas będzie odmierzany dopiero od trzeciego przerwania. Powinno być: out tcnt1h,r17 out tcnt1l,r16...
Coś tu chyba nie pasuje ;) W opisie projektu autor napisał : "Na wspólną sondę dodatnią (poziomu i suchobiegu) podawane jest napięcie raz na ok. 1s przez ok. 100ms, o prądzie rzędu kilku mA. " ...a weź podziel 8MHz przez preskaler 64 i interwał timera 500 (Load Timer 500) to wyjdzie Tobie 250Hz... Zmienna typu Word sonda_Hz kręci się w kółko i przepełnia...
No to mogę napisać w czym rzecz :D Odbiornik potrafi rozpoznać tylko to ze coś jest nadawane na częstotliwości 433 Brak nadawania przez nadajnik jest widziany jako 1 w odbiorniku. Odebrany sygnał jest traktowany jako 0. Teraz kiedy chciałbyś nadać bajt o takiej przykładowej wartości 01010101 to po prostu włączasz i wyłaczasz nadajnik...tyle że .. pomyśl...
Mozemy pomoc w pisaniu, ale z helpem Bascoma powienienes dac rade, obslyga lcd ->gotwa funkcja -klawisze dasz rade, zmieniasz jedynie zmienne - odmierzanie czasu sporbuj na timer1 co np sekunde bedzie zwiekszal Ci zmienna Czas, w petli gl musisz kontrolowac by wartosc nie przekroczyla zakresu - prostym if'em sprawdzasz wartosc tej zmiennej Czas z czasem...
Wykonuje prace inżynierską "stanowisko szkoleniowe silnika krokowego", chciałbym wykonywać kilka rzeczy czasowo niezależnie bez używania delay, takich jak taktowanie częstotliwości na sterownik krokowca, odmierzanie czasu, cykliczne sprawdzanie stanów wejść. Z bibliotek znam Timer1.h jedynie. Mógłbym to zrobić w "C" chyba, bo kiedyś dużo bawiłem się...
Witam. Na początek napiszę że to ma być mój pierwszy program napisany w tym języku i pierwszy kontakt z mikrokontrolerami. Nie mam pomysłu jak się zabrać za uruchomienie jakiegoś "zegara". Wydaje mi się że wtrącenie w pytaniu „jakiegoś zegara” wprowadza ludzi w błąd. Z dalszej części wynika że raczej potrzebujesz obsługi TIMERA wbudowanego...
Chyba tak to miało by wyglądać: '*********************** Ustawienie TIMER1 **************************** Config Timer1 = Timer , Clear Timer = 1 Enable Interrupts Enable Timer1 ' ma być 50Hz - procedura przerwania i sterowania serwem co 20ms (z teorii sterowania serwomechnizmmem tak ma być) Ocr1ah = High(312) Ocr1al = Low(312)...
Witam Config Timer0=Timer, Prescale=64 Load Timer0, 173 On Timer1 przerwanie Enable Timer1 Enable Interrupts przerwanie: Load Timer0, 173 {rozkazy wykonane w przerwaniu} Return Do odmierzania tego czasu nie trzeba używać Timera 1 - licznika 16-to bitowego. Wystarczy timer 0 lub 2. Dla Timera 1 kod mógłby wyglądać następująco: Config Timer1=Timer,...
W jaki sposób objawia się problem? Tak poza tym, to mam kilka uwag: 1) program nie będzie zbyt dokładnie odmierzał czasu, może gubić całe 100 milisekundowe odcinki czasu, 2) sekundy, minuty, godziny będą trwać o jedną "mniejszą" jednostkę za krótko, tzn. np. minuta będzie trwać 59 sekund zamiast 60 sekund, 3) definicję częstotliwości kwarcu powinno...
Transformator małej mocy może wprowadzać przesunięcie fazy, ale będzie ono stałe więc to nie problem skompensować. Dodatnie czy ujemne ? Do twojego układu z tranzystorem dodaj rezystor od drugiego wyprowadzenia transformatora do bazy, będziesz miał detektor zera, a nie całej dodatniej połówki, choć oczywiście można sobie poradzić programowo. Zrobiłem...
Witam Chciałem zrealizować program do odmierzania czasu na kwarcu zegarowym. Podłączyłem go do pinów portu B (t1, t0). Program wyglada następująco: [syntax=basic4gl]$regfile = "m16def.dat" $crystal = 8000000 Config Timer1 = Timer 'Oscylator wewnętrzny Enable Interrupts Enable Timer1 Dim Czas As Byte 'On Timer1 Odmierz Do On Timer1 Odmierz Locate 1 ,...
Miałem wrzucić wczoraj moje bazgroły ale na symulatorze zatrzymywał się na pętli 1s dlatego wrzuciłem program w procek aby sprawdzić jak naprawdę to działa. Gdzieś coś namieszałem z komparatorem bo nie reaguje na zmianę oświetlenia. Teraz nie wiem czy to wina programu czy też elektroniki chociaż jak sprawdzałem napięcia to reakcja jest prawidłowa. Zmieniłem...
Witam. Mam znowu problem z odmierzaniem czasu. A właściwie z jego pomiarem za pomocą symulatora. Napisalem programik, gdzie przerwanie od timera0 ma być co 20ms. Timer1 steruje multipleksowo wyswietlaczami. Ustawiłem wstepnie timer0 aby zliczal te 20ms, poprawilem dzięki symulatorowi i było świetnie. Ale gdy program zaczął się wydłużać czas ten wzrósł...
szelus -> ja tak w uproszczeniu napisałem, że np: ICR = 1200us, ponieważ wyjaśniałem wcześniej iż: częstotliwość taktowania to 8MHz preskaler = 8 co powoduje, że każde zwiększenie wartości licznika o 1 odbywa się dokładnie co 1us i w związku z tym liczba jaka jest aktualnie w Timerze1 oraz ta zatrzaśnięta w ICR1 odzwierciedla od razu ile mikrosekund...
Witam serdecznie, mam pytanie odnośnie kwarcu, tworze coś na zasadzie stopera używam wewnętrznego kwarcu 8Mhz i Atmega8, niestety atmega coś spieszy o parę sekund na minutę, zauważyłem że wiele osób do tego typu projektów używa zewnętrznego kwarcu 32Mhz. Czy stosowanie zewnętrznego kwarcu w tego typu projektach jest konieczne? Czy da się w jakiś sposób...
Kurczę, przecież takie cztery kanały oraz sprawdzanie można zrobić na jednym procku AVR. Wystarczy zwykły programowy PWM 8-bitowy a jak się uprzesz to i 9 bitowy. Co za problem? A taki, że trzeba jeszcze sprawdzać ilość obrotów na minutę. Jak byś to rozwiązał? Przyjmując najgorszy przypadek (czyli BOXowy wiatrak Intela ;)) to mamy maks. jakieś 4500RPM....
poza tym dlaczego nie używasz sprzętowych timerów jako timerów tylko do generowania przerwań? Kolego może źle mnie zrozumiałeś ale do ustawiania flagi używam Timer0 i właśnie mnie dziwi dlaczego mi się te czasy nie zgadzają Jak do wyznaczenia czasu używam tego samego timera. Tak wygląda obsługa przerwania u mnie : Timer może zliczać czas wprost i w...
Witam Zastanawiam sie nad tym jak obliczyc blad zegaza ktory wykonalem na atmega8 miktokontroler jest taktowany rezonatorem 8 MHz sekunda jest odmierzana przez timer1, preskaler - 256 wartosc poczatkowa licznika 34286 .... 1sek: counter1=counter1+34286 incr sekundy set new if sekundy =60 then sekundy=0 incr minuty ' zezwolenie na wyswietlanie czasu...
Oczywiście że można umieścić ddscore w przerwaniu. Jeśli ktoś chce obsługiwać inne rzeczy poza samą syntezą, to należy ustawić timer na przerwanie np co 50 lub 100 cykli, i pozostaje czas wolny na obsługę programu, a dds sobie żyje "swoim życiem". Potem calosc zestroilbym dodajac nopy i ewentualnie korygujac minimalnie timer Jak czas odmierza timer,...
Może komuś się przyda (składnia Basica): Timer0 odmierza czas próbkowania, Timer1 liczy okres taktowany wewnętrznym sygnałem zegarowym 8Mhz, ICP wyzwalane zboczem rosnącym, przerwanie ICP aktywne tylko 1 raz na odstęp próbkowania): Dodano po 1 ...hmmm... z tym przeliczeniem 1/T nie będzie jednak tak prosto...robiw
Prosty przykład: on timer1 zwieksz enable timer1 start timer1 do ' przycisk 1 if pina.1=0 then reset portb.1 a=0 end if if a=10 then set portb.1 ' czas=timer1 x 10 ' przycisk 2 if pina.2=0 then reset portb.2 b=0 end if if b=20 then set portb.2 'czas=timer1 x 20 ' przycisk 3 if pina.3=0 then reset portb.3 c=0 end if if c=30 then set portb.3 'czas=timer1...
Problem polega na tym, aby pomierzyć ilość impulsów jaka upływa pomiędzy kolejnymi pomiarami czujnika. Chodzi o to żeby timer1 zliczający impulsy po wykonaniu pomiaru przez czujnika wyświetlał ich ilość, a następnie zliczał kolejne impulsy upływające do wykonania 2 pomiaru itd. Zamiast czasu podawać na monitor zliczone impulsy pomiędzy kolejnymi pomiarami....
Rozumiem a czy któs z WAS mógłby zerknąć i powiedzieć mi co mam tutaj zmienić. Dim Adress As Byte , Command As Byte Dim Odebrano As Bit , Flaga As Bit Dim X As Byte Config Pind.2 = Input : Portd.2 = 1 Config Timer1 = Timer , Prescale = 8 'co 2usek przy 4MHz Stop Timer1 On Timer1 Przer Config Int0 = Low Level On Int0 Rc Enable Int0 Enable Timer1...
Co sie stało jasne? Ja mam oscyloskop i nic nie jest jasne. Oscyloskop jest jasny ;) Jaki prąd opto? LEDa? Dostatecznie duży. Jak już pisałem, przebieg wyzwalania jest wzorowy - sygnał na bramce kończy się przed dojściem napięcia do kolejnego zera (triac ma ok 300-400us na zamknięcie - a nawet jeśli prąd nie zdąży wygasnąć po przejsciu przez kolejne...
Dobra. 24C64 to 8KB, czyli już całkiem rozsądna pojemność. Wypróbuj ten szkielet programu, czy działa pilot jak należy, i poświęć chwile czasu na to by sprawdzić czy czas jest odmierzany tak jak należy. Nie za bardzo mogę to sprawdzić w symulacji programowej. Zanim zacznę robić coś więcej chcę mieć pewność, że kręgosłup programu jest OK. $regfile =...
Kolego mirekk36, nie ma to jak zachęta ( zwłaszcza jak ktoś w wieku 38 lat zaczyna się tego uczyć ) . Wiem, że jesteś propagatorem C ( kupiłem nawet książkę, którą polecasz, ale jeszcze nie przyszła na nią pora ) i pewnie w C można to zrobić łatwiej, szybciej i krótszym kodem. Poświęciłem kilka wieczorów na tego PCF8583 i zarówno kopiując kod np. Kolegi...
Witam wiem post troszkę się zakopał ale muszę go troszkę odkopać. Mam problem z samym chyba kodzie, problem polega na tym że między 20 a 30 sekundą zegar nagle przyspiesz losowo. Oczywiście zaraz po upływie 59 sekundy wszystko wraca do normy, ale sam zegar został zrobiony w tym celu by bardzo dokładnie odmierzał czas i te sekundy są bardzo ważne. Ma...
Jak realizujesz pomiar czasu bo na schemacie nie widzę żadnego zegara RTC ani dołączonego do mikrokontrolera kwarcu zegarkowego a z doświadczenia wiem, iż użycie do budowy zegara oscylatora systemowego kończy się tym, że zegar chodzi nie dokładnie? Jak to jest u Ciebie? Sercem jest procesor Atmega8 taktowany 8MHz z zewnętrznego rezonatora kwarcowego,...
Tak jak myślałem. Za pierwszym razem ładujesz 65536-wartość jaką Timer ma zliczyć. A za drugim razem wartość jaką Timer ma zliczyć. W pierwszym przypadku wpisz: Load Timer1 = 49911 I będzie dobrze.
Ja założyłem że będzie chciał skorzystać z timera 8-bitowego, a tam te wartości są chyba najpoprawniejsze. Dla timera 16-bitowego rzeczywiście lepiej jest ustawić presc na 8 i naliczyć 10000 cykli. Pozdro To nie zupenie jest tak jak piszesz. W Mega8 timer0 nie ma możliwości ustawienia trybu CTC. Ponadto prescaler 8 jest "bezpieczny " w sensie dokladności...
Napisałem kod dla zegara cyfrowego w Bascom. Ogólnie działa jak należy. Mam tylko problem przede wszystkim z budzikiem. Chcę aby podczas alarmu naciśnięcie przycisku 1(PORTD.0) wyłączało alarm(chodzi o sam dźwięk). Program nie reaguje. Nie mam pojęcia czy jest to wina tego, że nie nadąża z wykonaniem polecenia (za długie przerwania?) 2) Aktywowanie...
Używasz INT0 i INT1 do zliczania impulsów na linii A impulsatorów, ustawiasz generację przerwań na opadające zbocze. W przerwaniu sprawdzasz linię B danego impulsatora, jeśli B jest w stanie wysokim, to masz impuls "w lewo", jeśli B jest w stanie niskim, to masz impuls "w prawo". Pozostaje jeszcze eliminacja drgań styków... ;) Timer1 wykorzystujesz...
$regfile = "m16def.dat" $crystal = 8000000 Config Pinb.0 = Input Config Pinb.2 = Input P1 Alias Pinb.0 P2 Alias Pinb.2 Set Portb.0 Set Portb.2 Config Timer1 = Timer , Prescale = 256 On Timer1 1_sekunda Enable Timer1 Enable Interrupts Counter1 = 34286 Declare Sub Alarm Declare Sub Sys_off Dim Sekundy As Byte Dim Flaga1 As Bit Dim Flaga2 As...
(1). Czy da się tak zrobić, żeby dioda migała niezależnie od wykonywanego programu w pętli? (2). Czy arduino po prostu wykonuje po kolei wiersze i nie ma możliwości wykonywania dwóch czynności jednocześnie? Ad(1) – krótka odpowiedź jest Tak, da się zrobic. Jak? – odpowiedź będzie niżej Ad(2) – na to pytanie odpowiedzią jest też –...
O wielkie dzieki! Fajnie to wyjaśniłeś teraz kumam :) Będę próbował na pewno się uda. P.S. używam kwarcu 4MHz Gdyby jednak nie udalo sie to popr. ten: $regfile = "m8def.dat" $crystal = 4000000 Config Portb = Output 'lcd display Const Timer1reload = 62500 ' tyle tikow zegara potrzeba dla 1 sec. Config Timer1 = Timer , Prescale = 64 Dim Czas...
Witam. W pewnie działającym u kolegi kodzie, podczas kompilacji wyrzucane są błędy. Oto fragment kodu i błędów:[syntax=vbnet]$regfile = 89c4051.dat $large $crystal = 11059200 'Konfigurujemy Timery: Timer0 jako liczący impulsy WEG a Timer1 jako odmierzający czas 1s Config Timer0 = Counter , Gate = Internal , Mode = 1 Config Timer1 = Timer , Gate = Internal...
Chciałem zrobić taką uniwersalną funckję, która będzie wstrzymywała program na określoną ilość us z wykorzystaniem timera. Projektując urządzenie wykorzystujesz jego zasoby (wewnętrzne moduły) w taki sposób, by spełniły wymagania jakie stawiasz przed urządzeniem. Tworzenie ogólnych (czytaj: do uniwersalnego zastosowania w różnych projektach) funkcji...
No dobra pal licho dokładność odmierzania czasu. Tu nie jest aż tak ważna. Ale timer1 nie jest skonfigurowany . Pomiar nie ma prawa się odbywać, bo przerwanie od timera1 nie jest wywoływane, a co za tym idzie cała procedura "co1s" , a także ten podprogram "Odczytaj" również nie. Nawiasem mówiąc po co on jest ? Nie lepiej zamiast gosub po prostu przenieść...
emarcus dzięki teraz już gra. Mam jeszcze takie pytanie bo tak jak wcześniej pisałem docelowo chcę zrobić miernik indukcyjności. Przejrzałem projekty mierników w necie i na elektrodzie i są oki tylko większość z nich opiera się na mikrokontrolerze PIC 16F84A. W sumie mam wsad do procka w asm ale kiepsko znam asemblera wiec postanowiłem napisać własny...
Czyli podsumowując mogę: A) podłączyć echo do pinu INT0 oraz ICP1, w przerwaniu INT0 zerować i startować timer1 a ICP ustawić na zbocze opadające i później w dowolnym momencie odczytywać z rejestru wartość ICR. B) Za pomocą wejścia ICP odmierzać czas między poszczególnymi zboczami opadającymi i przeliczać to sobie Jeśli znowu coś pokręciłem to będę...
Pozwolę sobie jeszcze raz nadużyć Waszej uprzejmości i znowu zwracam się z prośbą o pomoc Sprawa dotyczy sterownika do serwonapędu (na razie jednego, później rozbuduje do 8). Taktowanie 8MHz. Oto kod programu: [syntax=c]#include<avr/io.h> #include<avr/interrupt.h> #include<HD44780.c> #include<util/delay.h> #include<stdlib.h>...
Wlasnie zauwazylem temat i postanowilem, ze wrzuce swoje '3 grosze' ;). Niedawno tez pomyslalem, ze jako poczatek przygody z mikrokontrolerami zrobie sobie zegarek jakis na wyswietlaczu LCD (rowniez na wewnetrznym oscylatorze). I faktycznie, ku mojemu zdziwieniu, jego dokladnosc byla praktycznie zerowa :|. I tu mam pytanie: jak to jest mozliwe, zeby...
Nie tylko wywołanie ale procedura obsługi przerwania zajmuje troszkę czasu. Może zdarzyć się taki przypadek że procedura obsługi przerwania trwa zbyt długo. W tedy aktualne przerwanie blokuje obsługę samego siebie. Przykład Timer0 - liczysz czar 8us. Po obliczeniu 8us następuje procedura obsługi przerwania od timera0, która trwa około 15us. W trakcie...
atom1477 -> girder jednak odczytuje poprawnie dane z klawisza, nie jako krzaczki. W danych z pliku lirc -> volume up to kod: 0x40BF Girder pokazuje dokładnie to samo... Dołączam screeny z ocsyloskopu, sam początek się zgadza 9ms - 4,5ms... Ale dalej już nie wiem czy dobrze to interpretuję. (sygnał jest już odwrócony w OX) (plik .doc z screenami, jako...
Witam wspólnotę chciałbym zaznaczyć że z wykształcenia jestem mechanikiem, a z programowaniem nie miałem wcześniej styczności. Przeczytałem książeczkę która mowiła o programowaniu w jezyku bascom, i stworzyłem taki o to kod programu. [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 8000000 Config Timer0 = Timer , Prescale = 256 'licznik do odmierzania...
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...
chcialbym uzyc timer1 i czestotliwosc wewnetrznego kwarcu attiny2313, nie jestem pewien ale to chyba 4MHz. Czas jaki chcialbym uzyskac to cos ok 2sek, nie mysi byc dokladnie 2sek. Naprawde nie chce nikogo urazic na tym forum poniewaz duzo sie z niego ucze ale poprostu jeszcze tego nie umiem zrobic, kilkakrotnie probowalem wykorzystywac timery ale zawsze...
Na pewno nie wystarczy zmienić INT2 na ICP1. Czytałem jakiegoś manuala i zrozumiałem to tak. ICP służy do zapisu sygnałów wchodzących na procesor oraz odmierza ich czas trwania bądź momentu w którym wystąpiły. Działa to tak, że Timer1 (16 bitowy) liczy sobie z taką prędkością jaką zadaje mu preskaler. W chwili gdy na wejściu ICP pojawia się zbocze sygnału...
Witam. Fajny pomysł, trzymaj tak dalej! Nic tak nie daje satysfakcji konstruktorowi jak działające urządzenie będące jego własnym pomysłem. Nie wiem czy będziesz rozwijał projekt, ale pewnie tak bo "zawsze można coś poprawić i ulepszyć". Jeśli tak będzie to dobrze by było dodać na płytce złącze programatora aby programować mikrokontroler bezpośrednio...
Witam. Używam przerwania INT1i TIMERA1 do odmierzania czau trwania stanu wysokiego na wejściu INT1 przez zliczanie odcinków czasu 400us podczas trwania stanu wysokiego na wejściu INT1. '****timer1******** Config Timer1 = Timer , Prescale = 64 On Timer1 Pomiar_czasu Load Timer1 , 50 Enable Timer1 Stop Timer1 '*****wtrysk***** On Int1 Wtrysk Config Int1...
Witam! Pierwsze kroki z uC, czyli próba stworzenia zegara matki dla czasomierza podobnego do $regfile = "m8def.dat" $crystal = 2000000 Config Pind.0 = Output Config Pind.1 = Output Config Timer1 = Timer , Prescale = 64 Dim Licz_2s As Byte Dim Parz As Bit Enable Interrupts Enable Timer1 Load Timer1 , 62500 Licz_2s = 0 Parz = 0 Do Loop End Odmierz_1m:...
Witam, walczę już kilka dni i mam wrażenie, że brakuje mi jednego przecinka tylko nie wiem gdzie . Może ktoś widzi ten tragiczny błąd :( [syntax=vbnet] $regfile = "m88pdef.dat" $crystal = 1000000 $hwstack = 40 $swstack = 16 $framesize = 32 Cls Cursor Off Config Portd.0 = Output Config Timer1 = Timer , Prescale = 8 , Clear Timer = 1 , Compare A = Disconnect...
Oto program który napisałem $regfile = "attiny2313.dat" 'rodzaj mikrokontrolera $crystal = 8000000 '8MHz Dim Pozycja1 As Integer 'zmienna określająca położenie serwa1 Dim Pozycja2 As Integer 'zxmienna określająca położenie serwa2 Dim Czas1 As Integer 'zmienna pomocnicza do odmierzania czasu Dim Czas2 As Integer 'zmienna pomocnicza do odmierzania...
Witam mam procesor ATTINY85. Fusebity ustawione na "ATTINY15 Compatibility". Pod pin PB0 (noga 5) podłączony nadajnik 433MHz. Jeśli nie konfiguruję żadnego z timerów to procesor wysyła dane poprawnie. Jeżeli natomiast skonfiguruję którykolwiek timer w tryb CTC (potrzebuję do odmierzania czasu wciśnięcia przycisku), to nadawanie już nie działa. Poniżej...
Duszno widzę ten zegarek w tym roku :D ahahahahahaha Łap tu taki kod z odmierzaniem sekundy na 8MHz Miałbym jeszcze jedną ważną uwagę na temat sprawy na której od czasu do czasu ktoś się potknie. Nowa Mega128 ma włączony tryb kompatybilności ze starą M103. Mam nadzieję że kolega wyłączył FuseBit " M103C "
Potrzebuje zmierzyć częstotliwość w zakresie do 200kHz(w tym przypadku 3,2MHz) procek: to ATmega8 Kombinuje jak koń pod górę, na czym polega mój błąd ? Timer 2 odmierza czas 1s. Timer 1 w założeniu ma zliczać impulsy z zewnatrz. (wartość 0xFF w OCR1A,-impulsy dochodzą z T1,-po zrównaniu TCNT1H/L zerują się-i cykl się powtarza.) Oróż Timer2 wchodzi w...
odmierzanie czasu odmierzanie czasu stm32 odmierzanie czasu atmega
konicaminolta skanowanie input selector pioneer podstawowy narzędzie lutowniczy
pozycja pływająca pozycja pływająca
New Holland TN95 - Podnośnik nie reaguje na dźwignię Lampki kontrolne w bojlerach: czerwona czy zielona?