To zadziała, jeśli pętla będzie w metodzie timer_tick, wtedy zmienna powinna się aktualizować. Sam timer jest w zasadzie abstrakcja, każdy jego tick określony interwalem ograniczony jest przez metodę start i stop. Od momentu start timer staje się hermetycznym obiektem.
1. Zaprogramuj timer w tryb CTC, np. na częstotliwość 100 Hz. W przerwaniu timera: - sprawdź, czy przycisk naciśnięty; jeśli tak - zapal diodę i załaduj wartość 1000 do zmeinnej - "timera programowego". - jeśli zmienna timera ma wartość różną od zera, zdekrementuj ją, a jeśli zdekrementowała się do 0 - zgaś diodę. Razem daje to 5 linii kodu w przerwaniu...
Już prawie masz to, co trzeba. Jeśli zmienna timer zwiększana jest co 20 ms, to zrób: if (timer >= 2) { /* albo więcej, ale 40ms to i tak dużo */ uint8_t zmiany = debounce(); /* wersja freddiego */ timer = 0; if (zmiany & _BV(PIN_MINUS)) servonumber -= 1; if (zmiany & _BV(PIN_PLUS)) servonumber...
Jeśli dalej używasz choćby jednej zmiennej typu Bit to nadal pomysł jest aktualny bo bitów zawsze jest osiem. Jeśli nie, to mozna wygospodarować jedną zmienną typu Byte, ale że Tiny13 to bardzo wymagający uC i mozesz już nie mieć więcej miejsca na Byte to możesz pojechac po bandzie i do przechowywania wartości wykorzystać jakiś nieużywany rejestr :D...
Powrócę jeszcze do tematu. Timery programowe to objaśnił Mirekk36 w swojej książce oraz artykułach i wideo poradnikach, bardzo dobrze je się stosuje. Jest to proste, wystarczy ustawić jakiś timer w tryb CTC i wywoływać przerwanie co jakiś zamierzony czas (stosuje około 10ms). F_CPU/Prescaler/100 Zaokrągloną wartość wpisujemy do rejestru OCRx. W przerwaniu...
Ok rozumiem. Spróbuj tego. Użyte przerwanie. Można też zrobić bez zależnie od potrzeb. $regfile = "m8def.dat" $crystal = 8000000 Dim Zmienna As Word Dim A As Bit Config Pinb.1 = Output Config Pind.2 = Input Set Portd.2 '============ definicje timera ================================ Config Timer1 = Timer , Compare A = Toggle , Compare B = Disconnect...
Kwarc 8MHz Prescale 256 Timer liczący do 250 Zmienna licząca do 125 I masz 1.00000s. Dodano po 1 AVCC obowiązkowo do VCC. AGND do GND. Ile razy można to powtarzać.
Na screenach zmienna MW20 przyjmuje wartość 0, 10 i 20 jednocześnie? Sprawdź gdzie i jaką wartość wpisujesz do tej zmiennej.
Co jest nie tak ? Delikatnie mówiąc wszystko. 1 Timer nie wiem co liczy, cały jest źle napisany i nie powinien działać, bo np: przerwanie od timera powinno być zadeklarowane przed pętlą główną i nie w warunku. Zmienna Reload nie jest zerowana i zwiększa się do maximum typu Word Zmienna M (w zamierzeniu chyba od minut) też się zwiększa do 255 Zmienna...
Nie wiem w jakim celu wyłączasz timer na czas obsługi przycisku. Procedura obsługi przerwania powinna być jak najkrótsza. Niepotrzebnie wywołujesz za każdym razem funkcję setNum(). Warto byłoby ją wyrzucić do pętli głównej i wykonywać tylko w momencie zmiany prędkości. Utwórz sobie tablicę trzech elementów, w których przechowywał będziesz kolejne cyfry....
Chwile mnie nie było :D Napisałbym to inaczej, ale wracając do pytania z pierwszego postu . Jeśli chcesz by procesor zawsze był tak samo zajęty to każ mu w tych innych Case`ach także nadawać Pulseout tylko na pin Reset. Bascom to przełknie bo ten pin może pracować jako normalny I/O ale jak jest resetem to nic mu się nie stanie jak napiszesz Pulseout...
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....
Wskazany w linku debugger to zapewne JLink ale za cenę niespełna 10 $ to napewno nielegalny klon :) Jeżeli chcesz poznać LPC'ki i mieć debugger to wejściami . Kiedyś zapomniałem o tym fakcie i dziwiłem się dlaczego program nie działa tak jakbym się tego spodziewał.
1. dobrze 2. zmienna counts nie jest nigdzie zerowana, to raz. pozatym algorytm IMHO jest bledny, to dwa <: idea jest taka, zeby byl on w stanie zmierzyc impulsy o dowolnej dlugosci, a nie tylko takie ktore zmieszcza sie w jednym okresie timera (ile on tam bitow ma). jednoczesnie wiec w pierwszym przerwaniu od gory (overflow) inkrementowany jest...
Oczywiście że nie ma prawa działać. Zasymulujmy: - Włazisz w if (flaga_menufunc1), wykonujesz kod w nim, uzbrajasz timer itp itd. if(Timer1==0) się nie wykona, bo właśnie na świeżo uzbroiłeś timer, więc procek będzie kontynuował kod jak gdyby nigdy nic, a następnie zgasi flagę flaga_menufunc1=0; i opuści ciało "dużego" ifa. Tyle... Co z tego, że w końcu...
Zrob zmienna publiczna np "LecaSekundy" w module tak zeby byla widoczna w calej aplikacji. wstaw timer na formatke kliknij na niego 2razy i wpisz" Private Sub Timer1_Timer() LecaSekundy = LecaSekundy +1 'Mozesz odswierzyc pole tekstowe text1 = ZmienCzas(LecaSekundy) End Sub
W tym trybie timer po prostu zlicza impulsy zegarowe do niego doprowadzone, jeśli przekroczy zakres to zgłasza przerwanie overflow (nadmiaru) i rozpoczyna zliczanie od nowa. Funkcja obsługi tego przerwania zlicza je zwiększając liczniki f - przechowujący czas z rozdzielczością <1ms i m przechowujący liczbę milisekund. W programie należy korzystać...
Uruchomiłeś: TIMSK0 |= (1<<OCIE0A); przerwanie od porównania a obsługujesz: ISR(TIM0_OVF_vect) przerwanie od przepełnienia. A tak przy okazji: - zmienne zsyp1 i 2 to gdzieś zerujesz? Czy tylko je inkrementujesz aż się przekręcą? - zmienna "CZAS_NA_test" jest niepotrzebna. Równie dobrze mógłbyś w main sprawdzać czy zmienna i>=75 a w przerwaniu...
Jeśli masz na myśli timer S5, a nie IEC, to zmienna musi być typu S5TIME. Można ją otrzymać z typu TIME przy użyciu funkcji FC40 TIM_S5TI z biblioteki standardowej lub ze zmiennej WORD, ale z większą kombinacją. Musi być 0-999 w kodzie BCD i trzeba ją sumować z poniższymi wartościami w zależności od podstawy czasu: 0.01 sek. = W#16#0000 0.1 sek. = W#16#1000...
Ten sam kod, który zaprezentowałem w pierwszym poście , natomiast przerwanie wywołane już na nodze portb.0 i działa zmienna nie jest nadpisywana. Cała reszta kodu bez zmian poza zmianą przerwania. Przerwania skonfigurowane prawidłowo. Moze przerwania masz skonfigurowane prawidlowo... ale..... Czy mozesz wyjasnic w jakim celu, w obsludze przerwania...
Jeżeli to ma nic nie robić tylko generować impulsy, to po prostu może użyj Waitms. A jeżeli nie, zmieniaj wartość porównania w zależności od dodatkowej zmiennej. Np: $regfile = "m16def.dat" $crystal = 16000000 Dim A As Word 'Zmienna zwiększana i porównywana. Dim B As Byte 'Zmienna decydująca z jaką wartością będzie porównywana zmienna A. Config...
Jedna rzecz jeszcze nie daje mi spokoju. Jeśli timer się przepełni, zmienna a, jest zwiększana, jest to dla mnie trochę za wolno. Prescaler jest na 1. Więc pozostaje wpisać wartosćdo TCNT0, żeby szybciej się przepełniał. Proponuję użyć trybu CTC timera i przerwań Compare Match. Można ustawić przerwania praktycznie na dowolną ilość taktów, tylko uważaj,...
Przede wszystkim musisz zacząć kolego od poznania timerów. Do odmierzenia czasu używamy timerów ponieważ zlicza nam czas w tle działania procesora. Używając polecenia wait zatrzymujesz kompletnie uC na ten czas. Konfiguracja dla AtMega8 8Mhz u mnie wygląda tak: Config Timer1 = Timer , Prescale = 256 ''''konfiguracja timera On Timer1 1s ''''przy przerwaniu...
W zasadzie to są dwa podejścia do tematu: 1. Odświeżanie na żądanie ( trochę mi się rymło ) tj. każda operacja zmieniająca wyświetlaną daną powinna wywołać funkcję odświeżania ekranu. Nowy odczyt temperatury - bach zapis na ekran. Zmienił się stan wejścia - bach zapis na ekran itd. 2. Odświeżanie cykliczne tj. ekran odświeżany jest w zadanych odstępach...
Witam. Możesz zrobić tak: Config Timer0 = Timer , Prescale = 64 Timer0=6 Enable Interrupts Enable Timer0 Start Timer0 On Timer0 zegar Przy takim ustawieniu przerwanie będzie wywoływane dokładnie co 4ms. Zmienną Js zdeklaruj jako Word. A w podprogramie Zegar zrób tak: Zegar: Timer0 = 6 Incr Js If Js = 15000 Then Js = 0 Toggle Portb.0 Toggle Portb.1...
Jako ze nie przepadam za pisaniem na maile, to odpowiem tutaj... Musisz skonfigurowac odpowiedni timer i przy przerwaniu, jakie generuje int czas=0; int timer0=131; SIGNAL (SIG_OVERFLOW0) { czas++; if (czas==5000) BUUM(); //jezeli czas osiagnal 5000ms, to wywolaj funkcje BUUM(); TCNT0 = timer0; // zaladowanie do...
Czekam na sugestie z góry dziękuje za pomoc;) Robisz totalnie złe założenie niestety. Timer sprzętowy działa bardzo dobrze i precyzyjnie. Nie może on przepełniać się w trybie normal wcześniej niż po 256 tyknięciach zegara ;) ... zatem przez złe założenia - jeszcze wyciągasz złe wnioski i nie w tym miejscu co trzeba szukasz błędu. A błąd polega na tym,...
Zrób to sobie programowo np. weź timer0 i ustaw podstawę czasu tak aby co określony czas timer zgłaszał przerwanie czy to przepełnienia czy porównania w tym przerwaniu umieść np. taki kod [syntax=c] //gl_OCR1 to zmienna globalna pełni funkcje identyczną jak OCR1 uint16_t volatile gl_OCR1 ; ISR(wektor) { static uint16_t zm; if(zm<gl_OCR0) PORTA&=~(1<<PA0);...
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...
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...
WYjasnienie jest bardzo proste. druga pętla for pracująca na zmiennej 'y' nie powoduje wykonanie zadnej instrukcji w ciele fora, a jedynie modyfikuje ten 'y'. Kompilator optymalizując kod na siłe wywali tego drugiego fora, bo de facto nie robi on nic. Ale jednak jesli uzyje sie przed forem zmiennej 'y', kompilator domysla sie ze ta zmienna do czegoś...
ad. 1: rzeczywiście, timer (ostatnia linia) powinien być TON a nie TONR. ad. 2: tak, ponieważ wydaje mi się to sensowne. Jeśli nie - proszę usunąć instr. MOVE w Network 4. ... a przy okazji i ja mam pytanie: jak w S7-1200 używa się adresowanie indeksowe? Coś takiego: http://obrazki.elektroda.pl/4854271800_1... nie chce działać, tablica...
Wracajac do tematu czy moglbym prosic przynajmniej o pseudo kod obslugi przykladowo drgania w przyciskach , wysterowania przekaznika np przez 2s oraz komunikacji 1wire jednym timerem (atmega8 ma az 2 timery wiec pewnie szybko skoncza sie jego mozliwosci chcac napisac kod bez zatrzymywania) Cały dowcip polega na tym że z tego 8 bitowego timera możesz...
Halogeny też będą zabronione ?? a co do projektu, właśnie zakończyłem projekt na uczelnie gdzie wykorzystuję sterowanie halogenem. jest to zrealizowane w ten sposób, że mam 100 poziomów jasności (0-100%). Sterowanie fazowe oczywiście i triak załączany impulsem. Logicznie, program działa tak: 1) system detekcji zera (transoptor) wykrywa moment w którym...
przeanalizuj sobie dobrze ten kdzik poniżej bo on jest dobrze napisany - naprawdę ;) ja wprawdzie kiedyś przy okazju swojej wytrawiarki też zrobiłem sterowanie w Bascomie 2 odbiorników przy 75 krokach ale dałoby radę więcej kroków i jeszcze kilka odbiorników. Z tym, że już nie pamiętam dokładnie zagadnienia więc trudno mi się teraz znowu w to wgryzać....
zdecydowałem się na zastosowanie uC aby wyeliminować efekt falowania wody (a tym samym podnoszenie i opadanie włącznika pływakowego co skutkowało kilkunastoma krótkimi włączeniami pompy przy każdym dolewaniu wody). Nie wystarczyło zastosować filtr RC? Dodaj na wszelki wypadek rezystor 10kΩ podciągający RESET do Vcc. Przy takich urządzeniach jak...
Przetestuj ten. Tak go poopisywałem, że aż mi się nie podoba :D [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 8000000 $hwstack = 40 $swstack = 16 $framesize = 32 '# wyświetlacz 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 '# timer ' 8000000Hz(8MHz)/256(Prescaler)=...
Hmm. Nie wiem jak. Bascoma uczę się od dopiero 2 dni. Może kolega podać jakiś przykład? 1. Do rozpoznania naciśniętego przycisku zastosuj "DEBOUNCE" 2. Do pomiaru czasu w multiplexing zastosuj dowolnyTimer (może byc timer1, skoro już zacząłes go używac). Dla ławości rachunków zastosuj podstawowy czas pomiaru 4 mSec. Co 4 mS zrobisz multiplexing cyfr...
Warto zacząć od uwzględnieniu sytuacji awaryjnych: 1. Co jeśli czujnik się odczepi, uszkodzi. Brak światła? 2. Co jeśli bateria pod wpływem wstrząsów chwilowo straci kontakt a mikrokontroler zasilanie. 3. Skoro to mikrokontroler, to może warto dodać stan baterii? Natomiast kolejne wciśnięcie switcha podczas ściecenia LED nie resetuje licznika czasu....
To jest proste jak świński ogon :D ahahahaha, ale napisz kawałek kodu. Czy masz tam jakiś LCD czy nie, czy masz tam jakiś Timer ustawiony do odmierzania sekundy czy Wait`ujesz :D Czy w dokumentacji czujnika pisze, że nadaje tez na końcu niewidoczne w terminalu znaki 13 lub 10? EDIT: aaa masz tu taki prosty. Napisałem przy śniadaniu więc błąd mógł się...
Jutro jeszcze sprawdzę jak będzie działać Attiny 45. Może coś uda się osiągnąć. Zrobiłem trochę testów na attiny13 i po nich jestem bardzo sceptyczny co do użyteczności funkcji micros() w takim zastosowaniu jak metoda użyta w twoim szkicu. Mam obawy że na attiny45 problem może być ten sam, tylko nieco mniejszy, z powodu możliwości wyższego taktowania....
Mimo że port ma 7 wyprowadzeń to zawsze ustawiaj 8 bitów, bo to wciąż port 8-bitowy tylko że z obciętymi nóżkami. Regulację szybkości robi sie łatwo. Dodajesz jakąś zmienną np LICZ i teraz co każde wejście do przerwania timera to zwiększasz tą zmienną o 1. Teraz porównujesz ją z drugą zmienną np SZYBKOSC. Jeśli LICZ > SZYBKOSC to wykonujesz zawartość...
Witam! Podaję jedno z rozwiązań. [syntax=c]#include <stdio.h>/* tutaj funkcje we/wy */ #include <stdlib.h>/* tutaj funkcje losowe */ #include <math.h>/* tutaj funkcje matematyczne */ #include <time.h>/* tu funkcje dotyczace czasu */ #define PI 3.14 #define PRECYZJA 1000.0 int main(void) { int ilosc_krokow; int i; int a; double...
https://obrazki.elektroda.pl/9462291700_... Chciałbym zaprezentować rozwinięcie eksperymentalnego odbiornika SDR, jaki opisałem ostatnio: https://obrazki.elektroda.pl/6947080100_... https://obrazki.elektroda.pl/7046555300_... Najbardziej w tym momencie interesującym fragmentem płyty jest głowica: https://obrazki.elektroda.pl/9911930900_...
a wiec tak zakładamy że przy up pracuje kwarc 12MHz. jeśli nie wymagasz dużej dokładnośći to timer ustawiasz w tryb 1 ( 16 bit ) tak aby generował przerwanie np: co 10ms; przy 12MHz cykl wynośi 1us czyli przerwanie będzie co 10000 cykli ( 10000 us = 10ms ). wartość po której następuje przerwanie to zmiana z 65535 na 0000. czyli do rejestrów licznika...
'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...
Teoretycznie można coś podobnego zrobić - choć w praktyce jest to bardzo złe rozwiązanie, a już zwłaszcza na plikach w pracy, gdzie istotne jest bezpieczeństwo i pewność danych... Może najpierw wykład, potem kod ;) Garść faktów: Excel nie nadaje się do pracy wielozadaniowej (czy równoległej, zwał jak zwał). Teoretycznie można w pliku włączyć jakiś tam...
Nie rozumiem co się tutaj dzieje. Zmienna Reference nie ma żadnej przypisanej wartości początkowej. Jak np uzyskać 50% świecenia diody? Nie chodzi mi o stopniowe przyciemnianie, po prostu chciałbym mieć możliwość w dowolnym miejscu programu ustalenia jakie napięcie ma być na danym wyjściu. Nie potrzeba żadnej wartości początkowej, jest to zmienna typu...
$regfile = "2313def.dat" $crystal = 6000000 Config Timer1 = Timer , Prescale = 8 On Timer1 Tajmer1_przepelnienie Enable Timer1 : Start Timer1 Enable Interrupts '---------------------------------------... Dim Wyswietlacz_licznik As Byte Dim Wyswietlacz_dane As Byte Dim Wyswietlacz_cyfry(4) As...
To jest kamera analogowa. Jej podłączenie do Arduino będzie dość trudne. Choć nie niemożliwe skoro wymagasz tylko małych rozdzielczości. Kiedyś udało mi się zrobić na AVR układ odbierający sygnał Composite Video (czyli taki jaki masz tutaj) o rozdzielczości około 170x130 pixeli (pomijał większość linii). Tutaj wspomagający układ analogowy którego użyłem:...
wstawia zmienna zmienna ujemna wincc zmienna
czujnik sterować wtrysk volvo silnika mosfet bateria laptop
zwrotnice głośnikowe samsung wf70f5e0w2w
Jak ustawić histerezę w pompie ciepła Nulite NL-BKDX30-95II? Błąd 6L w kotle Buderus GB 162 80/100 – Analiza i Rozwiązanie