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. Napisałem coś takiego (oczywiście to część z większego projektu) '$sim $regfile = "m8def.dat" 'informuje kompilator o...
Polecenia Wait, Waitms i Waitus nie wstrzymują procesora. "A kto tak mówi?" Na pewno nie cytat który zamieściłem. Chodziło mi o to: Wyczytałem gdzieś że polecenie "wait" wstrzymuje cały procesor , w tym czasie nie wykonują się żadne funkcje. Czy podczas wykonuwania polecenia "wait" timer zlicza, i przerwania są normalnie wykonywane? Czyli definitywnie...
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...
Pomiar rpm akurat wydaje mi się banalną sprawą, podłączasz wiatrak pod przerwanie i zliczasz czas między przerwaniami. Jak lubie przerwania to w tym przypadku biorąc pod uwage mozliwosc pomiaru wiekszej ilosci predkosci obrotowych na przykład 8 nie trzeba stosowac przerwań od zdarzen zewnetrznych INT0,1,2 lub PCINT0..n (nie kazdy procek ma) Zupełnie...
Witam Postanowiłem przetestować wszystkie przerwaniaw ATMEGA32. Program ma działać następująco: naciskam klawisz podpięty pod INT0 (podciągnięty rezystorem 1kom do Vcc) i licznik zlicza mi to naciśnięcie. Naciskam drugi klawisz podpięty pod INT1 (podciągnięty rezystorem 1kom do Vcc) i licznik zlicza mi to naciśnięcie. Teraz jeśli nacisnę klawisz podpięty...
Zegarek oprócz funkcji wyświetlania czasu ma pokazywać temperaturę i mieć możliwość sterowania z pilota (RC5). Tutaj pierwsze pytanie, czy GETRC5() wprowadza jakieś opóźnienia? Mam na myśli to czy nie zakłóci to zliczania czasu. Dodatkowo obawiam się, że będzie problem z płynnym sterowaniem, a to dlatego, że nie jest podłączony pod INT0 albo INT1 Pozdrawiam
Sorry, Wiesz ja to sie z tym bawie tylko i program pisze w bascomie metoda prob i bledow. Nie ma większego znaczenia w jakim środowisku programujesz (Basic albo C). Istotny jest koncept projektu i sposób rachunkowy, reszta to tylko inna forma zapisu programu. Wybrałeś za narzędzia: Timer1 i jeden z interruptów zewnętrznych. Zatem jest tez bez znaczenia...
Chcę zrobić prosty obrotomierz na attiny2313 (częstotliwościomierz), ale jak do tej pory każdy kod, który napisałem kończył się albo niedokładnym zliczaniem 1 sekundy, albo nie wiadomo skąd pojawiały się jakieś wartości w timerach i wynik był conajmniej dziwny. Kwarc mam 10MHz (akurat taki mam na płytce testowej), µP to attiny2313. Wykorzystywałem...
Można również ustawić sobie taktowanie na 8MHz, następnie Timer0 ustawić z prescalerem 8 i generować przerwanie co 58us (Load Timer0, 58). Dzięki temu przy zliczaniu czasu trwania echa powrotnego mamy od razu wynik w centymetrach (58us = 1 przerwanie = 1cm). Pozostaje teraz tylko zliczać ilość przerwań timera0. I to chyba najprostsze rozwiązanie tam...
Naucz się przerwań. Wykorzystaj Timer0 do generowania przerwania co np. 1s- jeśli ten czas Ci wystarczy. Czyli ustaw Timer0 jako timer. Ustaw Timer1 jako counter i zliczaj impulsy co 1s. W przerwaniu co 1s od Timer0 niech Timer1 zaczyna zliczać impulsy. I co 1s wyświetl liczbę impulsów i wyzeruj Timer1. I od początku. Całą koncepcję powinieneś zmienić.
[syntax=basic4gl]Config Timer0 = Timer , Prescale = 1024 Enable Timer0 : On Timer0 Przerwanie0 Dim Tmp As Word Tmp = 0 Dim Ptimer1 As Word Ptimer1 = 0 Do If Klawisz = 0 Then If Ptimer1 = 0 Then Ptimer1 = 100 End If If Ptimer1 < 95 And Klawisz = 0 Then Tmp = 1 End If End If If Tmp = 1 And Ptimer1 < 85 And Ptimer1 > 70 Then If Klawisz = 1 Then...
Witam Posiadam silnik z dołączonym enkoderem i tarczą (z drukarki), steruję prędkością obrotową za pomocą PWM, natomiast przerwanie INT wykorzystuje do zliczania obrotów silnika. Problem polega na tym że zliczanie obrotów silnika bez uruchomionego PWM działa poprawnie, gdy go włączę szaleje (nawet gdy obracam tarczkę palcem). Sygnały od enkodera są...
Mam problem jestem początkujący napisałem program który ma za zadanie regulować włączanie wiatraka i czas z jakim ma dmuchać , jednocześnie mierzy temperaturę i nie działa tak jak powinno : Temperatura pokazuję co jakiś czas błędny pomiar np 124 , 32 , 98 procek się resetuje chińskie znaki raz na jakiś czas w programie można było ręcznie zmieniać czas...
Program ma za zadanie sterować silnikiem krokowym z określoną czestotliwością i jednocześnie zliczać impulsy z enkodera. Do obsługi silnika wykorzystuję Timer0, który odmierza mi równe odcinki czasu pomiędzy kolejnymi krokami silnika. Natomiast do obsługi enkodera wykorzystuję Timer2, który po przepełnieniu zgłasza przerwanie i sprawdza stan na wejściach...
Żeby zrobić za pomocą Timera - to nie możesz używać trybu PowerDown tylko Sleep - żeby właśnie Timery mogły działać to po pierwsze. W taki trybie jednak będziesz miał nieco większy pobór prądu niż w pełnym PowerDown. Więc wszystko zależy na ile ma wystarczać bateria o ile jest to coś zasilane z baterii. Bez PowerDown'a na pewno będzie to sporo krótszy...
Musisz przemyśleć algorytm działania programu. Po pierwsze te mrugające diody zrób na przerwaniach z jakiegoś timera. Ustaw przerwanie tak żeby występowało kilka razy na sekundę i zliczaj ilość przerwań do 2 sekund i raz zapalaj raz gaś to bardzo proste do zrobienia. Co do pozostałych to attiny ma 4 kanały PWM a z tego co zrozumiałem to wystarczą ci...
Stos OK. Mówię Ci. Skasuj flagę przed "Enable INT1". Generalnie kolejność mam w kodzie taką: Config Int0 = Falling 'opadajace zbocze wywoluje przerwanie Config Int1 = Falling 'opadajace zbocze wywoluje przerwanie Config Timer0 = Timer , Prescale = 8 'konfiguracja Timer0 jako timera z preskalerem przez 8 'Przerwanie od przepelnienia Timer0 jest generowane...
Skopiowałem program do zliczania... Skąd to skopiowałeś? Czy sprawdziłeś działanie? Nie widzę Config Int0 - na co ma reagować przerwanie? Chcę aby... Różne rzeczy ludzie chcą. Nawet nie powiem czego ja chcę. Ale życie jest brutalne. Trzeba dać coś z siebie. Może ktoś mi coś pomoże w tym programie Na pewno. Nawet ja. O ile napiszesz jakiś program. Tak...
Te coś takiego , to jest układ do resetowania procesora w momencie włączenia zasilania i nie służy do eliminacji drgań S1 (R10 jest nie potrzebny). Jak chcesz zliczać szybkie impulsy to zrób to na zewnętrznych przerwaniach , jeżeli ma to być tylko liczenie ile razy przycisk został naciśnięty , to powinno wystarczyć If Pinc.4 = 0 Then waitms 200 Incr...
Program zajmuje 50%. Może i jest źle napisany ale działa.. Ja bym to stwirdzenie troche skorygował; Program działa tak jak jest napisany!... bo - "Jest jeszcze jeden problem." Co jakiś czas temperatura podskakuje o 10 stopni a czasami nawet do 200 podskoczyło co spowodowało zbędne załączenie przekaźnika. Z czym jest problem? Popatrz na pracę timera0,...
Czytam i sam się pogubiłem hehe . Czy tu chodzi o względne przesunięcie (tmf) czy bezwzględne (satanistik). Parę miesięcy temu robiłem sterowanie PID dla servo Xmega w bascom . [youtube][/youtube] Nie obyło się bez problemu , który polegał na zliczaniu bezwzględnym więcej niż 65535 impulsów . Mój wpis z innego forum: " Teraz mam silnik z tarczą 400...
Witam, Mam taki problem. Chcę wysyłać do PC informację w formie takiego temp1;temp2;f1;temp3 i coś jeszcze. Jak wysyłam informację to chcę żeby ona była raz wyświetlana powiedzmy co ok 1-2s a nie tak jak na screenach pod kodem. (to jest losowe). Co może być nie tak. Timera2 używam jako odmierzacz czasu a timer0 do pomiaru częstotliwości (na 555) $regfile...
cls nie powinien tu być problemem. A przed wygłoszeniem opinii zapytałeś o częstotliwość sygnałów? Instrukcja CLS może zajmować np. 300ms. Czy 4 impulsy na sekundę to jest coś co przekracza możliwości AVR? A najlepiej sygnał taktujący zliczaniem podaj na pin INT0 lub INT1 i ustaw przerwanie żeby reagowało na zbocze. Bardzo dobre rozwiązanie, pod warunkiem,...
Oczywiście do najprostrzej wersji wystarczą dwa czujniki, chociaż ja użyłbym ultradźwięków z małym kątem (np. 15 stopni), albo coś w stylu "laser - odbiornik" i z przerwania na dole schodów i u góry można już naskrobać jakiś programik do obsługi światła czy co tam chcesz... ;)
Wpisałem polecenia wczytywania czasu z EPROM i zapisu. Różnica jest teraz taka, że co sekundę dostaję: 255:255:255 Wyświetlał ci wszędzie 255 bo taka jest wartośc każdej komórki "surowego" EEPROM (FF). Aby tego uniknąc proponowałem 'startowe wyzerowanie': Przy nagłym odcięciu zasilania z 14V IN czas jest zapisywany do EPROM. Natomiast coś dalej jest...
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.
Po pierwsze, możesz jak najbardziej korzystać z timera (a właściwie to powinieneś, jeżeli chcesz pomniejszyć koszta o zakup zewnętrznego RTC). Po drugie - możesz kalibrować, możesz to robić długo i bezskutecznie. Po drugie i ćwierć - Wewnętrzny oscylator nie za bardzo nadaje się do tego celu. "Nieco" mu się zmienia częstotliwość wraz z temperaturą i...
Niedokładnie przeczytałeś. W zakładce nawigator: Config Timer- uwaga! po ustawieniu prascale licznik natychmiast zaczyna zliczanie. Można użyć start Timerx i stop Timerx Np. Config timerx, prescale 'timer zaczyna liczyć stop Timerx 'timer stoi- ale już coś zliczył Timerx=y 'timer ma wartość początkową =y - np.0 Start timerx ' Timerx zaczyna liczyć od...
...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ę...
Witam Pisalem kiedys program do sterowania robotem (manipulatorem ) w bascomie. Zliczal on miedzy innymi impulsy z 3 enkoderow. i wszystko ladnie chodzilo: Fragment kody ktory zlicza impulsy z 3 enkoderow: //enkoder 1 Enk1_a Alias Pinb.0 Enk1_b Alias Pinb.1 //enkoder 2 Enk2_a Alias Pinb.2 Enk2_b Alias Pinb.3 //enkoder 3 Enk3_a Alias Pinb.4 Enk3_b Alias...
Witam, Nie chciałem zaczynać nowego tematu o impulsatorze, więc się podpinam;) więc potrzebuję program do obsługi impulsatora, musi zliczać szybko impulsy, oraz działać poprawnie prawo(dodać impulsy)-lewo(odjąć impulsy). Po przeszukaniu wszystkiego co możliwe, po przestudiowaniu wszystkich programów dowiedziałem się że najszybciej działa na przerwaniach....
Liczenie impulsów samo w sobie jest bezsensowne.. jak już to liczy sie impulsy przez określony czas albo podczas jakiegoś warunku itp, możliwości jest tak dużo że bascom niezostał w to wyposażony (bynajmniej ja tyle wiem). impulsy najłatwiej można zliczać za pomocą zewnętrznego przerwania, przez czas działania timera, timer uruhomić, uruhomić przerwanie,...
Zegar zrobiony jest na wewnętrznym kwarcu. No i masz odpowiedz. Stabilnosc wewnetrznego oscylatora (ktory bybajmniej kwarcowy nie jest) jest slaba i zalezy od roznych czynnikow miedzy innymi temperatury. Niewiem dokladnie jak dzial program (skladnia bascoma ciagle stanowi zagadke) ale o ile dobrze widze to po wejsciu do przerwania ponownie inicjujesz...
Kol. Roko . Częściowo takie rzeczy pojawiły się już w polskiej pomocy do BASCOM-a On-Line. Obecnie jest jednak ona czasowo niedostępna. Przykład: BASCOM AVR - Tworzenie programu W trakcie edycji (...) Jak nie pisać programów. Dość często podczas przeglądania programów udostępnionych przez inne osoby da się zauważyć pewne charakterystyczne i powtarzane...
Witam. To tej pory nie stosowałem zbyt często timerów do generowania przerwań celem generowania odcinków czasu. Być może dlatego żyłem w słodkiej nieświadomości pewnych komplikacji będących nie bez wpływu na dokładność odmierzanych odcinków czasu. Do tej pory wydawało mi się, że dla danego rezonatora kwarcowego wystarczy: 1. Obliczyć czas trwania pojedynczego...
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...
Powinieneś zrobić to tak: Sygnał doprowadzać do zewnętrznych przerwań INT i gdy nastąpi przerwanie zatrzymać licznik skopiować zawartość licznika, wyzerować licznik i puścić od nowa. a w głównej pętli przeliczasz i wyświetlasz wartość częstotliwości No dobrze, ale gdzieś jeszcze musimy uwzględnić czas (czas pomiaru 1s)? Jakbym chciał zrobić według...
Witam wszystkch. Mam wątpliwości co do odmierzania czasu w Bascom za pomocą Timerów. Sprawa dotyczy procków 51. Proszę o poprawienie mnie jeśli się myle. 1. Timer zlicza w górę od wpisanej wartości do 65535(16bit), Tryb 1. Zadaną wartość ładujemy komendą load timerx, yyyyy 2. Tak więc aby odliczyć 1 sekundę należy np.: 20 razy odliczyć po 50ms więc...
Kwarc dajesz np. 12 MHz Robisz sobie pętelkę pomiarową wywoływaną z Timera np. co 200 µs sprawdzającą dane wejście pomiarowe. Jeżeli wejście jest =0 to nie zliczasz jeżeli = 1 to zwiększasz zmienną WYNIK o 1 (zmienna 16 bitowa) zakres będzie do jakichś 6.4 sekundy. W pętli sprawdzasz także czy zmienna nie przekroczyła 25000 (5 sekund). Jeżeli...
Jestem początkujący, studiuje Oślą Łączkę z EdW, zainstalowałem najnowszą wersie Bascoma Demo. Kupiłem płytkę AVT3500, złożyłem ją i wszystko działa poprawnie aż do tematu liczniki i niebogę załadować programu przykładowego, bo nie chce się wykonać funkcja ON TIMER0, gdy ją skasuje to program się ładuje, ale bez niej nie zadziała, a jeśli ona jest to...
Poi pierwsze. Do BASCOM-a jest pomoc - także po polsku, której to zresztą jestem autorem. Wersję on-line (beta) znajdziesz na mojej stronie WWW. Jak one działają? Zliczają impusy. Albo z prescalera, albo z zewnątrz. Patrz nota katalogowa. W którą stronę zliczają? Zwykle liczą w górę. W trybach PWM liczą też w obie strony. Patrz nota katalogowa. Jak...
Ok. ............ Ale mam jeszcze pytanie. Powiedzmy że mamy program główny w pętli do... loop. Gdy nastąpi przerwanie np w 10 linii w pętli, zostanie wykonana procedura przerwania. Czy następnie wykonywana jest pętla od początku, czy od momentu, od linii w której nastąpiło przerwanie? Czy jest możliwość programowania, żeby powrót był do momentu przerwania...
Czy ktoś z was zrobił może kiedyś w Bascomie stoper? Zastanawiam się, czy transmisja mikrokontroler <-> wyświetlacz LCD nie będzie "wąskim gardłem"? Jak myślicie? A może komuś udało się to zrobić? Może ma ktoś na zbyciu działające procedurki? Na pewno wyświetlacz LCD nie będzie problemem, tymbardziej, że chodzi raczej o stoper z restrem 0,01s....
No więc mają to być przerwania od timer0. Kończąc podprogram1 kończę zliczanie timer0. Jeśli przejde teraz do podprogramu2 to na nowo uruchamiam timer0 ale wtedy chcę aby generował mi przerwanie do przerwania2 . bascom 8051
...Co masz na mysli piszac "chlapniesz"? Chlapanie tutaj na forum czy w swoim kodzie? :) Myślałem o kodzie ;) Hm skoro widzisz jeszce jakies kwiatki, to bede wdzieczny, jesli sie nimi podzielisz ze mna. :) Jasne Dcf_array(1).28 'dla const index Dcf_array(4).4 dla Dcf_array() As Byte Index jest const , a ma być variable. Tzn....
Po prostu byk w BASCOMie. Prescaler jest ustawiany jako CS02..CS00 = 110 a to oznacza, że licznik nie zlicza impulsów zegarowych tylko zewnętrzne na T0 z opadającym zboczem.
Poprawiłem program, sygnał podaje na pind.5, teraz wygląda on tak --------- Dalej nie dobrze. Jest kilka metod pomiaru RPM wirujacych elementow (walow) urzadzen. Widze ze zdecydowales na pomiar czasu pomiedzy impulsami wynikajacymi z jednego obrotu, mimo ze opis do org. watku mial na celu zliczanie impulsow w okreslonej jednostce czasu. Nie ma nic...
Konfiguracja timera '51 jest inna : [syntax=basic4gl]Składnia: CONFIG TIMERx = COUNTER | TIMER , GATE = INTERNAL | EXTERNAL , MODE = 0 | 1 | 2 | 3 gdzie: x0 – TIMER0, 1 – TIMER1, Opis: TIMER0 i TIMER1 mogą pracować jako liczniki impulsów zewnętrznych gdy pierwszy parametr jest ustawiony jako COUNTER. Impulsy zliczane muszą być dostarczane...
Już analizuję, dziękuję za ten kubeł zimnej wody :D Dodano po 5 Hmm, a dlaczego zliczanie czasu zostało wywalone do podprogramu? Chodzi o estetykę, czy raczej o prędkość działania i wielkość kodu? Dobra, już doczytałem. Dodano po 9 Co do tych gosub w obsłudze przerwania: Napisałem w ten sposób, bo miałem problem z przypisaniem kilku poleceń do jednego...
Można nawet to zrobić na Timerze 8-bitowym. Po prostu poza generowaniem przebiegu PWM trzeba odpalać przerwanie od Timera. Timer z preskalerem 8 zliczał by do 256 w ciągu 2048us, czyli 2,048ms. A więc miał być około 128 wartości od 1 do 2ms. Przerwania od Timera były by co te 2ms, a więc dość rzadko żeby dało się je obsłużyć. W przerwaniach trzeba zliczać...
To załóżmy taka sytuacje.. Obsluga przerwania Timera1 zlicza nam czas. Po okreslonym czasie,nastepuje zalaczenie portu. Jezeli licznik do zliczania czasu w WinAVR bedzie zadeklarowany jako zmienna lokalna i nastapi reset to czy licznik bedzie dalej prawidlowo zliczal?fakt ze wystapi zwłoka wynikajaca z kasacji zawartosci timera1. w bascomie juz taka...
Witam! Temat być może poruszany nie raz jeżeli chodzi o sprawę odczytywania stanu przycisków. U mnie jednak stanowią one niejako tło. Program ma za zadanie badać prawidłowe działanie kontaktronów, które są wyzwalane poprzez magnes umieszczony na wałku silnika krokowego. W załączonym kodzie przedstawia się to w ten sposób, że po włączeniu zasilania silnik...
WItam :) Zwracam sie do szanownych doświadczonych kolegów o podpowiedź. Bawię się ostatnio mikrokontrolerkiem atmega8 w sterowanie servem (hitec hs-55). Program piszę w Bascomie i bardzo chciałbym załapać jak sensownie uzywać timera i przerwan (nie chcę uzywać bascomowskiego config servo). Po pierwsze... Czy na 8 mhz kwarcu mogę sterowanie sensownie...
Walcze z licznikiem na Atmega 32 inicjacja wyglada tak : DDRB = 0xff; // DDRB jako wyjscie // t0 JAKO LICZNIK PORTB |= _BV(0); // BEZ PODCIAGNIECIA NIE CHCE LICZYC TCCR0 = _BV(CS01)|_BV(CS02); //_BV(CS00)| cs0 rosnace/~opadajace zbocze TCNT0 = 200; TIMSK |= _BV(TOIE0); // T0 wywoluje przerwanie Caly problem polega...
No więc jeżeli chcesz testować ten program, co napisałem, to musisz w kompilatorze (Bascomie) ustawić : 1. framesize ustawiasz na 8 2. softstack ustawiasz na 16 (zaczerpnięte z innego tematu z elektrody). Kwarc wbudowany, 1 MHz. Pamiętaj tylko, że ten program wygeneruje te sygnały szeregowo, czytaj: nie w tym samym czasie, kolejno po sobie. Pozdrawiam....
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...
Mimitron widzę, że nawet nie sprawdziłeś co robi config clock w bascomie, na wyświetlaczu nie będziesz miał cały czas jednej godziny bo bascom tym poleceniem ustawia timer2 do pracy anachronicznej, ustawia odpowiedni preskaler, konfiguruje przerwanie od przepełnienia i tworzy funkcje obsługi przerwania w której automatyczne zwiększa te zmienne. Wystarczyło...
Witajcie ! Mam taką zamotaną sytuację. Na początek kod, albo raczej jego istotne fragmenty: [syntax=basic4gl] $regfile = "m32def.dat" $crystal = 16000000 $hwstack = 128 $swstack = 128 $framesize = 128 Config Timer1 = Timer , Prescale = 8 , Clear Timer = 1 , Compare A = Toggle Enable Interrupts Start Timer1 On Oc1a Timer1_isr Enable Timer1 Ocr1a = 50...
W trybie 1 jest 16-bitowy, liczy od zadanej mu wartości do 65536, następuje przerwanie od przepełnienia licznika, coś wtedy może zrobić w obsłudze tego przerwania i ponownie zaczyna zliczać od zadanej mu wartości lub od zera jak mu nie zadasz.
niby wystarczy ale chodzi mi o to aby program startował od wyzerowania wszystkich zmiennych a nie wiem czy można skoczyć przed deklarację typu procka którą mam na początku: $regfile = "m8def.dat"? i czy też uruchomiona będzie wtedy procedura bascoma zerująca wszystkie zmienne? Odnośnie pierwszej odpowiedzi to chyba reset nie nastąpi bo mam resetowanie...
Mam mikrokontroler 8051 i licznik T0 który jest częścią tego mikrokontrolera. TO pracuje w trybie 1 (czyli jako 16-bitowy licznik) i ma on zliczać impulsy wewnętrzne (czyli pracować jako timer). Częstotliwość rezonatora kwarcowego podłączonego do mikrokontrolera wynosi 12Mhz. Wiadomo, że TO będzie zliczał impulsy 12Mhz/12(albo odwrotnie). I tutaj nie...
Witam kolegów Nie znam się na assemblerze bascom się nie wyrabia w czasie, czy mógłby ktoś napisać wstawkę assemblerową zamiast poniższego listingu ? ten listing jest w przerwaniu INT0 i zlicza impulsy od enkodera , niezbyt szybko działa, a ja potrzebuję bardzo szybkie działanie. If pind.3 = 1 Then decr poz if poz = 0 then poz = 5000 else incr poz if...
Witam! Program pisany w Bascomie, jest to prosty programik ktory pokazuje temperature w aucie, przejechany dystans itd. Timer0 wykorzystywany jest jako licznik (zlicza impulsy drogi), przy przepelnieniu licznika wywolywane jest przerwanie. Timer1 wykorzystywany jest jako timer, odmierzam nim 1ms, czyli co 1ms wywolywane jest przerwanie. Problem polega...
Witaj, No save spokojnie możesz użyć.... pod warunkiem, że nie korzystasz w obsłudze przerwania z instrukcji Bascoma bo jeśli tak to nie odkładając rejestrów na stos, zgubisz ich wartości i w najlepszym przypadku będą się działy różne rzeczy. Ja bym napisał wstawkę w asemblerze odkładając wcześniej na stos używane rejestry w tym SREG. Możesz też użyc...
Obaj przedmówcy mają rację: sygnał jest o zbyt małej bądź zbyt duzej częstotliwości. Nie znam Bascoma, ale tutaj mi wygląda, że sygnał ma 3125Hz, co jest częstotliwością nieprzyjemną dla ucha. Powinna być albo mniejsza (1kHz, czyli zliczasz do 31-32 w przerwaniu, nawet mniejsza) i tym samym słyszalna, ale akceptowalna dla ucha, albo dużo większa (proponuję...
Witam. Mając trochę wolnego czasu postanowiłem wrócić do zmagań z PIDem. W sieci znalazłem program PIDa w Bascomie na Atmegę8 (maluszek Attiny2313 okazał się niestety za mały). W programie wyłączyłem różniczkowanie - aby było łatwiej. Program działa dość dobrze tzn. obroty utrzymują się na żądanym poziomie ale troszkę oscylują wokół wartości zadanej....
zapominasz ładować konkretną wartość do licznika przed jego uruchomieniem. obliczasz ją (w podstawowym trybie) mniej więcej tak: obliczasz czas jednego cyklu 1/fclk np dla 1Mhz 1us bierzesz teraz czas, jaki chcesz odliczyć, i dzielisz go przez czas jednego taktu, dostaniesz wtedy ilość potrzebną do zliczenia.np 0,020s/0,000 001 = 20000 jak wiesz licznik...
Kolego patrzę na ten kod ze zgrozą, ale załadowałem do swojego Bascoma i trochę więcej zrozumiałem bo mozna sprawdzać referencje i skakać po kodzie. W przerwaniu co osiem taktów (nierealne) timer ma zliczać te twoje "niby" OCR. (Incr Licz_timera1 : If Licz_timera1 >= Ooo Then) Te OCR jest ładowane z tabeli gdzie najmniejsza wartość to 127 a najwieksza...
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...
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...
Witam. Piszę sobie sterownik temperatury w Bascom '51 i mam problem z przerwaniem. Otóż serce układu to AT89C52 do niego jest podłączony RTC DS1678. Ustawiłem RTC, aby na wyjściu INT generował co sekundę impuls. Podaję ten impuls na wejście INT0 procesora. W obsłudze przerwań dałem ustawienie zmiennej Bit na 1, na podstawie jego inicjuję w pętli głównej...
Witam, Mam problem z programem na Atmege8a, mianowicie: Piszę program sterujący pracą silnika (za pomocą L293D) który dodatkowo będzie zliczał w czasie impuls od przerwań zewnętrznych i tu pojawia się problem: kiedy napisałem program obsługujący tylko pracę silnika, wszystko działa sprawnie, kiedy napisałem program zliczający impulsy w czasie, również...
W przerwaniu robisz Enable Interrupts zanim włączysz Timer0, co może powodować problemy. Poza tym procka taktujesz 12MHz. A Timer0 z preskalera 1024. Czyli Timer0 dostaje 11718.75Hz. W przerwaniu zliczasz do 15000. I to Ci daje okres jak mówisz około 4 sekundy. Czyli na sekundę jest 3750 przerwań. Co oznacza że pomiędzy przerwaniami Timer0 zlicza do...
Witam Czy da się w 89C2051 uzyskać coś takiego: potrzebuję zliczać impulsy z dwóch wejść i do tego zliczać czas trwania impulsu z trzeciego wejścia, a poza tym wszystko wyświetlać co jakiś czas (powiedzmy co 0,5s) Można jeden timer użyć jako timer wewnętrzny (wyświetlanie co jakiś czas), a drugi jako timer bramkowany zewnętrznie (do liczenia czasu trwania...
Witam Problem sterowania jest zasadniczo dość prosty jedanak trzeba zdać sobie sprawę z pewnych zjawisk i ich następstw. W jednym z postów ktoś napisał, że odświeżanie następuje co 10ms (5-15ms). Jest to prawda i nie jest. Trzeba wiedzieć, że wyświetlacz przy multipleksowaniu powinien być odświeżany z częstotliowścią nie mniejszą niż 50Hz. Przy podanych...
Zajrzyj sobie do noty katalogowej. Tak de fakto ten układ jest poprany, bo nietypowo koduje informacje o dacie. Masz tu fragment mojego kodu powinien ci pomóc w rozgryzieniu problemu. To definicja i opis rejestrów PCF8583. 'Deklaracja rejestrów dla zegara czasu rzeczywistego PCF8583' Const Rtc_in_adres = 160 'Adres do zapisu danych A0 do GND Const Rtc_out_adres...
Witam. Robię sobie komputerek spalania do samochodu. Wszystko ładnie wychodzi poza czasem wtrysku a co za tym idzie - spalaniem. Występują jakieś zakłócenia i nie wiem dlaczego. Może ktoś pomoże....:) Kod: $regfile = "m168def.dat" $crystal = 16000000 ''''''''''''''''''''''''''konfiguracja portów'''''''''''''''''''''''''''''''''' Config Portd...
Nie jestem za biegły w timerach i się ciut pogubiłem. Proszę zatem o podpowiedzi. Próbuję ustalić ile czasu będzie trwał impuls podawany na INT procesora a jednocześnie zmierzyć czas od początku tego impulsu do początku następnego. Jednym uP podaję impulsy na drugi uP. Do Portc.7 = 0 'stan wysoki Waitms 1 Portc.7 = 1 'stan niski Wait 5 Loop Drugim uP...
Witam Ostatnio złożyłem z książki Marcina Wiązani-"Programowanie_mikrokontrolerow_... dwa układy zegarka i termometru. Próbowałem połączyć te dwa układ i napisałem taki program $regfile = "m8def.dat" $crystal = 8000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 ,...
Wolałbym nie pisać Ci gotowca ;) natomiast moja rada jest taka. Uruchomić timer i jeśli częstotliwość tych impulsów jest dość wysoka to bezpośrednio w przerwaniu timera dawać sygnał rozpoczęcia i zakończenia zliczania i zliczać w pętli głównej programu, a jeśli częstotliwość impulsów jest mała (np. w ciągu 5 czy 10s ma liczyć) to lepiej zrobić dodatkowy...
Powiem szczerze, że z tym INT to po prostu gdzieś zobaczyłem, że ktoś tak zliczał obroty podpatrzyłem i tak po prostu zostało. Tak zapewne chodziło o us. W asemblerze to w ogóle nie będę w stanie nic napisać, wiem tylko, że można dawać wstawki z asa do bascoma. Sugerujesz wykorzystać któryś z timerów ? T0 lub T1 (T0 mam akurat wolny na schemacie więc...
Witam wszystkich! Pewnie pomyślicie "znowu to samo", no ale zlitujcie się w Wigilię i przeczytajcie te kilka zdań :D Walczę z problemem od kilku dni. Nie potrafię skonfigurować Timera by konwertował dane z 1wire poza główną pętlą. Nie mogę sobie pozwolić na waitms, bo wtedy mam problemy z poruszaniem się w menu. Mam już działający Timer1 odliczający...
Przesyłam fragment kodu dla "paluch_gda" jedną cewką zapłonową na dwa obroty wału (pełny cykl pracy) na jednej cewce generowane są 4 takie "odcinki czasu" (iskra przeskakuje po raz na każdej ze świec), więc na 1 obrót wału przypadają 2 "odcinki czasu". Dzielimy więc wartość Nr (liczba "odcinków czasu" w 1 minucie) przez dwa i otrzymujemy prędkość obrotową...
Witam, popełniłem takowy program do sterowania ogrzewaniem i zapętliłem się nieco na funkcji start/stop odliczania pozostałego czasu do wyłączenia urządzenia. Poniżej fragment kodu: [syntax=basic4gl]'----------------------... GLOWNA----------------------------------... Do If Flaga_4ms = 1 Then 'co 4ms Flaga_4ms = 0 End If If Flaga_100ms =...
Witam. Posiadam kilka kompletów tego nadajnika i odbiornika (433MHz) i tak jak kolega wspominał w eterze mega dużo śmieci. Ale... znalazłem rozwiązanie tego problemu śmieci! Zmierzyłem miernikiem częstotliwości wyjście odbiornika podłączonego tylko do zasilania i u mnie były takie wyniki: od około 600Hz nawet do 3kHz sygnały śmieci które zmieniały się...
Hmm, moim zdaniem gdzieś jest zmienna 8 bitowa (Byte) musisz zmienić ją na większy typ. np. Word, Long. zmienna word Dodano po 1 A czy trzeba konfigurować port Config Pinb.0 = Input Set Portb.0 pod counter0 atmega 32 Dodano po 11 [syntax=basic4gl] $regfile = "m32def.dat" $crystal = 8000000 $hwstack = 32 $swstack = 8 $framesize = 24 Config Lcd = 16...
. 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ś...
Bo różnica jest taka , że my tu piszemy o odczytywaniu PCF. Jeżeli będziesz odczytywać PCF dokładnie co minutę to PCF staje się niepotrzebny ;) Bo te 60 minut i 24 h można zrobić na rejestrach. To tylko dwa rejestry. W ten sposób można odmierzać godziny, dni ale chodzi o to żeby PCF mierzył czas. Wracając do Twojego programu to wszystko zalezy jak na...
No to oszacujmy przypadek niemiły - masz trzy enkodery każdy 400 imp/sek, jak złośliwie trzy się ustawią to dadza impulsy w takim układzie, że musisz to sprawdzać z częstotliwością min 3 x 400 Hz plus zapaspowiedzmy około 1500Hz. Jeżeli w BASCOMie ci sie to uda aby pętla główna była krótsza niż 0,66 ms (no coś jeszcze z tymi zliczanymi impulsami bedziesz...
Bardzo was proszę, pomóżcie mi, ja już wysiadam męcze się chyba 4 godzinę z tym prostym programem i nic... pomyły mi się już skończyły... Miało być tak: - wywołanie przerwania przyciskiem - odczytanie znaku z pamięci (procedura reading) - zamiana na znak graficzny z tablicy (procedura szukaj) A jest tak: - wywołuję przerwanie - następuje wyświetlenie...
Zmienna pomocnicza zmodyfikowana w programie obsługi przerwania powinna być widoczna w całym programie. Nie bawiłem się nigdy Tiny 13, więc moje spostrzeżenia mogą być mylne lecz uważam, że kolega zapomniał o istnieniu przerwań zewnętrznych INT. Gdybym pisał ten program to podałbym impulsy wejściowe na wejście INT uC. Przerwanie zenętrzne ustawiłbym...
juz to robie w inny sposob, ale teraz mecze sie nad czyms innym... chce zrobic licznik impulsow zewnetrznych, na timerze 1 ale nie za bardzo chce mi to wyjsc... po prostu program nie chce wejsc mi w przerwanie :( czy moglby mi ktos napisac co powinienem ustawic poza: config Timer1 = timer, prescale = 1 set (pin tam gdzie jest t1) (pin gdfzie...
'C012a Bardzo prosty stoper 0,1-sekundowy Dim Dziesek As Byte , Sekjed As Byte , Sekdzies As Byte , Minjed As Byte Dim 100ms As Byte , Ktorywysw As Byte , Licz As Bit Config Portb = 255 : Portb = &B11111111 : Config Portd = &B1111100 : Portd = &B1111111 Config Timer0 = Timer , Prescale = 64 : Enable Interrupts : Enable Timer0 Dziesek...
Witam Żeby uzyskać 1 sekundę albo skonfiguruj sobie timer albo wykorzystaj fakt, że układ ma dodatkowe wyprowadzenia do podpięcia dodatkowego kwarca a np. Bascom w prosty sposób pozwala Ci zrobić zegar. Skonfigurowanie zegar umożliwia skonstruowanie podprogramu (musi nazywać się sectic, więcej o tym w pliku pomocy), do którego procesor będzie wchodził...
Wybaczcie początkującemu, bo pytam zapewne o jakąś strasznie trywialną sprawę, ale póki co nie mogę sobie z nią poradzić, więc szukam pomocy. Piszę sobie cośtam. Cośtam ma multipleksowo obsługiwany wyświetlacz LED, multipleksowanie jest załatwiane podprogramem uruchamianym z przerwania od T0. Tyle napisałem i tu wszystko działa pięknie. Dalej, przed...
Witam, zaprogramowałem Attiny 2313 w bascomie tak aby co sekundę gasła i zaświecała się dioda led podpięta do PORTD.6. Ustawiłem obsługę przerwań, konfigurację TIMERA1 podzieliłem go przez 64. Oscylator procesora jest ustawiony w FUSEBITS na wewnętrzny 4Mhz ( 100010:int. RC Osc. 4 Mhz; Start-up time: 14 CK + 65 ms; Config Portb = &B11111111 Portb =...
Jak zrealizować problem jak w temacie w bascomie , urządzonko ma zliczac np. 4 implusy i czas występujący między nimi (od zbocza narastającego do następnego zbocza narastającego) np. ________/\______/\____/\__/\_________ | | | | ------------------------ T0 T1 T2 Całość ma zajmować do dwóch sekund. Gdzie dać sygnał wejściowy żeby urządzenie działało...
Ponieważ długo szukałem przykładowego programu do regulacji fazowej mogącego sterować 8 triakami przesyłam kod na 90S8535 do tejże zabawki. Układ nie jest jeszcze sprawdzony w praktyce. Dodaje też pliczek z Proteusa w którym narysowałem schemat i symulowałem działanie układu. Jedna rzecz, którą może będzie trzeba poprawić to regulacja Timer1. W oryginalnym...
Nie umiem odczytać temperatur z ds18b20. Rezystor podciągający jest(4.7k), VDD i GND też są podłączone. Linia danych podpięta jest pod pb.7 Aha wyświetliłem sobie też wartości odczytanych bajtów, zarówno 1szy jaki drugi mają wartość 0xFF. podaję kod może koś znajdzie błąd. Dim Cyfra(10) As Byte Cyfra(1) = &B00000101 Cyfra(2)...
Zrobiłem sobie propeller clock na i działa prawie dobrze :) Problem w tym że co jakieś 50 obrotów zegarek przestaje działać na kolejne 50 obrotów. Wiąże się to z funkcją zliczania czasu obrotu i przeliczanie na 60 pozycji na tarczy zegara. Stop Timer1 Timer1 = 0 Start Timer1 Incr Y If Y = 50 Then X = Capture1 X = X / 60 Y = 0 End If Compare1a = X Pozycja...