Spróbuj tego: Tmin = 125 *16 Tmax = -55 *16 If T < Tmin Then Tmin = T If T > Tmax Then Tmax = T Lcd Tmax Lowerline Lcd Tmin
Generalnie print od echo różni się... niczym ;) zaleca się używać echo, bo jest szybsze. Można też używać printf() - działa jak w C. Na stronie zadbaj o sprawdzenie rozdzielczości ekranu/rozmiaru okna przeglądarki, bo na ekranie 4:3 layout się rozłazi... Popatrz sobie na kod strony, można taką galerię (generowaną dynamicznie!) zrobić bez PHP: www.mleczkoimagegallery.prv.pl
int nazwa[10]; int X; printf("Którą zmienną chcesz zwiększyć o 1?"); scanf("%d", &X); nazwa[X]++;
zapis writeeeprom zmienna , adres odczyt readeeprom zmienna , adres Musisz pamiętać ile bajtów zajmuje zmienna którą zapisujesz i o taką wartość zwiększyć adres przy zapisie / odczycie następnej zmiennej Jeśli zmienne typu Byte , adres zwiększasz o 1 Jeśli zmienne typu Word , adres zwiększasz o 2 Jeśli zmienne typu Integer , adres zwiększasz o 2 Jeśli...
W procedurze/podprogramie obsługi przycisku wciśniętego zwiększaj zmienną o 1 a w programie głównym, czy też tam gdzie to jest potrzebne, wykonuj program w zależności od tej zmiennej, np. wykorzystując SELECT CASE.
Rozwiązanie jest proste :) Odbieraj 156 znaków. Po odebraniu znaku zwiększaj zmienną pomocniczą. Jeśli osągnie ona 156 to zakończ odbieranie. Użyj np. petli FOR..NEXT lub DO..LOOP UNTIL
To swoją drogą, ale dopóki nie zapamiętasz gdzieś zmiennej kolejny , to ona ciągle będzie równa 2. Zamiast tego, jeżeli plik bez numerka istnieje, musisz napisać pętlę while w której będziesz zwiększał zmienną kolejny i sprawdzał przez FileExists() czy plik istnieje. Dopiero po wyjściu z tej pętli możesz jej użyć do stworzenia nazwy.
... Tylko jak zwiększać zmienną B z krokiem co 0,1? A Ty co, przespałeś matematykę :?: :D Żeby zwiększyć coś o ileś, to wystarczy dodać ileś do coś. atom1477 B = B * 255 B = B / 5 Następny "kwiatek" :|
tylko tyle, chodzi mi o to jak inkrementować zmienną x o 1 wykorzystując funckję GetTickCount z biblioteki windows.h bo nie rozumiem tej funkcji. Ona liczy od momentu uruchomienia programu milisekundy ale nie wiem jak ją wyzerować.
...Dałem polecenie debounce i powinno zwiększyć zmienną o 1 i poczekać do puszczenia przycisku, ale nawet szybkie naciśnięcie zwiększa zmienną o kilkadziesiąt jednostek. Może chodzi o przerwania? Może to być "sprawka" przerywań, proponuję na początek: [syntax=basic4gl]Klik: Disable interrupts Incr Bsend If Bsend = 100 Then Bsend = 0 Enable Interrupts...
Odliczy dokładnie: 1/1M = 0,000001 co 1024 tyknięcie zegara impuls czyli z racji że 100ms to 0.1s więc: 0.1/0.001024 = 97.65625 impulsów Więc w rzeczywistości odliczy 99.328ms. Więc możesz w przerwaniu dać funkcję która co 97 przerwanie zwiększa zmienną o 1. Potem wystarczy porównać jaką wartość ma ta zmienna np. w switch() i gotowe.
Jeżeli nie zależy ci na wielkiej dokładności to można to zastąpić mnożeniem i pętlą. Jeżeli to co w nawiasach czyli (x*x+y*y) nazwiemy zmienną pod_pierwiastkiem to robimy to w taki sposób że bierzemy liczbę pomocniczą tmp i podnosimy ją do kwadratu sprawdzając czy wynik jest większy od zmiennej pod_pierwiastkiem. Dla przykładu zaczynamy od tmp = 1,...
Witam! Tworzę aplikację, w której muszę co tydzień dodawać do zmiennej 1. Nie mam pomysłu, a timer na tydzień to chyba nie za dobry pomysł. Dodatkowo, chciałbym aby aplikacja nie wyłączała się całkowicie po zamknięciu jej, tylko w tle sobie odliczała do następnego poniedziałku. Da się tak zrobić?
Nosave używa się w zasadzie tylko wtedy gdy sam piszesz całą obsługę przerwania w asemblerze (jako wstawkę) i sam dbasz o stos w przeciwnym wypadku - będziesz miał totalny miszmasz albo nie działanie programu - po prostu chaos - bo stos będzie się wykrzaczał Jeśli chodzi o wybór aktywacji przerwania to wybieraj za pomocą ZBOCZA czyli (rising albo falling)...
No właśnie podejrzewałem , to że użyjesz Wait, który tak jakby "zawiesza" procesor na 25 sekund. Najlepiej by było użycie timera do ustalania czasu, ale wiem, że dla początkującego to za trudne. Podpowiem więc inne rozwiązanie: Daj w pętli głównej wait1. Następnie zwiększaj zmienną i napisz warunek kiedy osiągnie ona 25 (if then endif) oraz kolejny...
Robisz sobie dwie zmienne: blokada i aktywność. Blokada jako prosta wartość 0 lub 1: jeśli blokada jest założona i wykryjesz, że oba przyciski są naciśnięte, to ustawiasz blokadę na 0 (i aktywność na 0, dodatkowo można dać opóźnienie, aby nie uwzględniać naciśniętych przycisków dalej). Jeśli blokada jest zdjęta, to robisz wszystkie testy, dodatkowo...
Moim zdaniem koncepcja powinna być taka: 1. Obsługa przetwornika analog-cyfra. Na początek dobrze żebyś umiał dobrze zmierzyć liczbę impulsów. Nie wiem dokładnie jaka jest specyfika Twojego sygnału, jaką amplitudę mają owe szumy, skąd się biorą i czy nie warto by ich po prostu potraktować filtrem dolnoprzepustowym, a jeśli mają odpowiednio niską amplitudę...
Czy zmienna kierunek jest globalna i volatile? Już po pierwszym przerwaniu powinna przyjąć wartość 1 lub 2, a nie być cały czas 0. Czy zaobserwowałeś zwiększanie wartości zmiennej enkoderA ?
Co do średniej: ; } srednia=suma/i; nie musisz wpisywać +1, bo zwiększasz tą zmienną o 1 dwie linijki wcześniej. W tym wypadku zwiększasz j faktycznie o 1, ale wyświetlasz wartość zwiększoną o 2.
Zmienne, które są dzielone między przerwaniami a resztą kodu muszą być deklarowane jako volatile. Zmienną "pozycja" zmieniasz zarówno w przerwaniu od INT0 jak i w innym miejscu w kodzie więc musisz użyć volatile.
Nie wiem czy dobrze kombinuję: Czego tu jeszcze brakuje? Bo w symulatorze nie działa, tzn nie zwiększa zmiennej scnt. Spróbuj uruchomić Run programu w trybie "Step into Code" (F8) aby przekonać się że zmienna jednak za każdym razem inkrementuje się, ale także się ona zeruje bo zaczynasz program od początku (tam gdzie zostaje wysłany przez Return, zgodnie...
Witam. ... Freddy - twój plik też testowałem i wszystko ładnie wyświetla (litery) natomianst nie wiem jak za pomocą tego programu wyświetlić jakąś zmienną typu byte. Tak jak wcześniej pisałem wskakiwanie do podprogramu powoduje zbyt wolne zwiększanie wartości zmiennej którą zmieniam z przycisku. Czy można ten cały podprogram przenieś do głównego programu...
Należy: - zadeklarować zmienną globalną np. LICZNIK i nadać jej wartość zera, - włączyć przerwania od przepełnienia Timer0, - w funkcji przerwania należy zwiększać wartość zmiennej LICZNIK o jeden Aby poznać liczbę impulsów wystarczy pomnożyć LICZNIK*256 i dodać do niego aktualną wartość rejestru licznika timera, czyli jak sądzę counter0 (nie znam BASCOM).
...W masce instrukcji if w sposobie drugim zastosowałem również zapis PC0, ale to też nic nie daje. Piszesz o PC0, a w kodzie maskujesz PC7. Jeśli będziesz zwiększał zmienną co 1Hz a następnie ją wpisywał np. na port D to na PortD.0 będzie 1Hz a na PortD.1 będzie już 2Hz i kolejno jak pisał snnaap . Na PortD.1 będzie raczej 0.5 Hz
A wewnętrzny pull-up włączony? Bo objaw jest typowy dla programu, w którym włączone jest przerwanie zewnętrzne, a wejście wisi w powietrzu, choć program jest prosty i nie ma w nim obsługi przerwań... Ustaw w pętli niech samo zwiększa wartość zmiennej i obserwuj czy dalej są zakłócenia.
Przecież masz jeszcze piny przerwań Int0 int1 int2. Drugi kontaktron podłącz do jednego z tych pinów i zwiększaj stan jakiejś zmiennej w przerwaniu.
Taki kod od biedy napiszesz nawet z użyciem chatGPT. W skrócie: - PWM generujesz przy użyciu timera, wyjście z timera podajesz na driver LEDów (tą część kodu wygenerujesz np. na stronie Microchipa, na której jest klikalny generator kodu). - reakcja na przycisk - poszukaj na elektrodzie np. super debounce, ale to też dobrze generuje chatGPT. Kolejne...
Wartość 4884 to: Round ((10 000000Hz/8/256) + 1) = Round(4882,8 + 1) = 4884 Powinieneś odjąc 1, pomnożyć przez dwa i dodać 1. A najlepiej jeszcze raz przeliczyć. (4884-1)*2 + 1 = 9767 Albo: Round ((20 000000Hz/8/256) + 1) = Round(9765,6 + 1) = 9767. Czyli na to samo wychodzi. Dodano po 44 Ale nie sądzę żeby to pomogło, bo 9767/9768 * 20001 = 19998.95....
Banalne zadanie. A więc włączasz licznik(lepiej TIMER1-większa pojemność), tak, aby odliczał ci te 10sekund. Dajesz zmienną którą zwiększasz np co 1sekunde (zmienna o nazwie sekundy). W czasie odliczania do 10s w pętli głównej zliczasz impulsy przycisku i zwiększasz je w innej zmiennej (np. impulsy). Po 10 sekundach w zmiennej sekundy będzie10s a w...
Funkcje korzystające z tej funkcji robią np: - short - zwiększa wartość zmiennej, - REPEAT - szybko zwiększa wartość zmiennej, - long - wychodzi z regulacji zmiennej... Więc nie mogę najpierw dostać long (bo przytrzymałem przycisk) a potem REPEAT...bo to REPEAT już niczego nie zmieni, wyjdziemy z regulacji zmiennej .. r
Rozumiem że coś w przerwaniu zrobić chcesz, ale ciekawe jak to sprawdzasz (tę dokładność) Może najpierw zwiększasz w kodzie zmienna a potem dopiero każesz ustawiac jakiś pin którym to mierzysz? Może na odwrót, najpierw pin a potem zwiekszanie zmiennej bo zwiększanie może się czasowo różnić w zależności od wartości.
Nawet nie musisz używać Timera. Wystarczy, że w pętli głównej będziesz zwiększał jakąś zmienną (typu "long"). Jeżeli przekroczy jakąś wartość to wyłączasz silniki i wstrzymujesz zwiększanie zmiennej. Za każdym razem gdy otrzymasz z odbiornika wspomniany ciąg kontrolny to zerujesz wartość zmiennej.
(at)jta można wzbogacić o kondka, jak najbardziej. Można prościej, bez oporników Jak zwykle proszę o schemacik. zastąp sobie oporniki kreską... i sam narysuj schemacik oczywiście trzeba obrobić programowo impulsy co 20ms. Możesz to opisać bardziej szczegółowo jak byś to zrobił. Ja do takich rzeczy odpalam sobie licznik (timer) który robi mi przerwanie...
Zastosowanie timera samo przez się (chyba, że jest inaczej) jest znakiem, ze czynności okresowe mają być wykonywane przy poszczególnych tyknięciach a nie hurtowo 1600 sprawdzeń po jednym tyknięciu lub co gorsza cały czas. Kod z trzeciego postu jest chyba najbliższy oczekiwaniu, tylko usunąć z niego linijkę z pętlą która powtarza pierwszy warunek, oraz...
Witam. Najpierw wysyłasz rozkaz pomiaru temperatury, później z pomocą timera lub nawet zmiennej zwiększanej w pętli odliczasz czas pomiaru lub większy (mikroprocesor w międzyczasie normalnie wykonuje program). Po tym odczytujesz wynik pomiaru z DS1820, co nie trwa zbyt długo. Pozdrawiam. EDIT: Uzupełniłem posta
Generujesz sobie na timerze przerwanie co sekundę i w obsłudze przerwania zwiększasz zmienną sekunda o i i sprawdzasz czy nie osiągnięto 60. Jeśli tak to zerujesz i wysyłasz do wyświetlacza.
dziękuje za odpowiedź już jakoś sobie poradze (albo będe pytał :)) mam jeszcze 2 pytania : - w jaki sposób to napisać jeżeli bedą 2 żródła impulsów np. impuls na portb.f7 zwiększa zmienną a ,natomiast impuls na portb.f6 zwiększa zmienną b ? - if ( RBIF == 1 ) // czy to przerwanie z portu B ? { if( RBIE == 1 ) // czy jest wlaczone przerwanie z portu...
Jest to kod z Pana Wiązani być może nieudolnie przerobiony. Oryginał ma tak: Dim licz_8ms As Byte Incr Licz_8ms If Licz_8ms = 125 Then ............. I to działa, czyli ja nie mogę używać liczby stałoprzecinkowej . No dokładnie. To działa tylko dla Byte (i podobnych). Chociaż typ danych Single mówi, iz może przyjmować wartości stało i zmiennoprzcinkowe....
Bardzo nieładnie jest to napisane - naucz się używać w kodzie programu klawisza Tab i dodatkowych spacji przy pętlach/warunkach itp. Wydaje mi się że problem tkwi w tym iż w drugiej pętli for zwiększasz wartość zmiennej b, a wczytujesz do tablicy w której podstawiasz zmienną a - więc dla każdego z 10 przypadków zapisujesz w tym samym miejscu. Co do...
Chyba dokładniej się nie da skomentować ;) Powinno być już wszystko jasne... [syntax=basic4gl]Do ' pętla główna jakiegoś programu ' ' ' tu jest badany przycisk If P = 0 Then 'czy wciśnięty przycisk (P to pin procesora od guzika) If Lk = 0 Then 'czy licznik programowy doliczył już do zera Lk = 50 'jeśli tak to ustaw znowu na 50ms ' (można też nieco mniej,...
Tak jest ;> A co do programu to on zwiększa zmienną "O tyle ile chce" a nie tym więcej im dłużej trzymam.
Nie działa :( Ale co tutaj ma działać, jak poza odczytem "czegoś" z portu i zwiększaniem zmiennej "pozycja" ten program nic nie robi? Wszystko masz 'zakomentowane".
Było niedawno na ten temat. Sprawdzaj upływ czasy, a potem zwiększaj zmienną o 100 a nie o 1
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...
No i nie udało mi się tego zrobić na Timer0- on sie kręci bez przerwy a ja potrzebuję włączyć i wyłączyć timer. Tak że na razie na Timer1- szkoda bo 16 bitów- ale zrobię na Timer2. Spokojnie użyj Timer0, który będzie zgłaszał przerwanie np. co 1ms. W procedurze obsługi tego timera dekrementuj zmienną, jeśli osiągnie 0 to należy zatrzymać dekrementowanie,...
Do tej lampki wystarczy 1/4 twojego programu. Dodano po 7 Zadeklaruj zmienną , by zwiększała się do 255 gdy PINB.0=0 i zmniejszała gdy PINB.0=1. Możesz to zrobić w pętli DO...LOOP.
Jedźmy dalej incr pomiar powoduje zwiększenie zmiennej Pomiar o 1. To był przykładowy podprogram, który za każdym razem kiedy był wywołany instrukcją gosub zwiększał wartość zmiennej - nic prostszego na próbę nie da się wymyśleć. Myślałem bardziej, że za pomocą tego programu sprawdzisz czy to wszystko działa i jak będzie działało to napiszemy coś bardziej...
Jedna uwaga. Do zwiększania zmiennej czas użyj polecenia incr czas, zawsze tak rób gdy chcesz zwiększać zmienną o 1 bo to polecenie działa szybciej niż czas=czas+1 Jeśli czas generowania impulsu na wyjściu nie jest krytyczny mógłbyś po wykryciu zakończenia impulsu wejściowego wykonać polecenie set port..x waitus,czas i reset port..x po waitus podajesz...
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...
Kolego dondu piszesz na podstawie własnych doświadczeń? Zwiększanie 3 zmiennych (hh:mm:ss) w RAM, z 3 warunkami dot ich przepełnienia to bardzo mało jak na procedurę obsługi przerwania. Tak, zawsze tak robię. Dodano po 8 Zobacz przykład timera na przerwaniach: http://www.8052.com/tutrtc Dodano po 7 A tutaj masz algorytm przerwania z układu mikrochip-a...
no i w pętle masz zwiększaną zmienną i . a jeśli wczytujesz plik, to chcesz go umieszczać od początku tablicy (czyli i=0), czyż nie? Ergo, inicjalizacja wartości tej zmiennej musi nastąpić tuż przed ową pętlą.
Czy mógłbym prosić o podpowiedź jak to zrobić? Myślałem, aby za każdym przyciśnięciem klawisza zwiększać zmienną o 1, tj. np. 1, 2, 3, 4. I danej zmiennej przypisać co ma być wyświetlane. Lecz po zaimplementowaniu niestety nie działa w praktyce
Jasne. To może na początek powiedz którego timera użyć i które rejestry muszę ustawić. Wartości wyczytam sobie z datasheeta ;) Mam go skonfigurować tak żeby się przepełniał co 0.1s i wtedy zwiększał zmienną?
Rozwiązanie Twojego problemu jest banalne. Na początek proponuję wykorzystać zmienną, która jest zwiększana przy każdym wciśnięciu przycisku i w zależności od wartości tej zmiennej (tu wystarczy od 0 do 3, przy wartości 4 zmienna jest znowu zerowana) ustawiasz jedynkę na odpowiednim porcie jednocześnie uruchamiając zliczanie. Kiedy licznik dojdzie do...
Nie bardzo rozumiem. Przy takich ustawieniach jak podałem procesor powinien "wchodzić" do podprogramu "Licznik" dokładnie co 1 sekundę i w tym podprogramie zwiększać zmienną dokładnie o 1. W pętli głównej zmienna jest wyświetlana na LCD. Niestety dzieje się to szybciej niż powinno...
Jeśli stale to wykasuj z opcji: [syntax=c] case Nic:{ lcd.print(" "); break; } [/syntax] czyszczenie ekranu spacjami. Tu ewentualnie powinien być zliczany timeout, czyli jakaś zmienna co np. 1ms i jak przez 10s (z delay rozumiem, że to jest Twoje stale): [syntax=c] case Nic:{ static uint16_t timeout1=0; //zmienna static będzie żyła od tego miejsca aż...
Witam, Jestem początkującym w dziedzinie programowania PLC. Chciałbym zrealizować program który przy kliknięciu przycisku (+) zwiększa mi wcześniej zadaną wartość np o 100, no i w drugą stronę - przy kliknięciu (-) zmniejszenie o 100 aktualnej wartości. Jakich bloków powinienem użyć? W jakim języku proponujecie tworzenie takich programów: FBD czy np...
Witam. Wypróbuj to: [syntax=basic4gl]Ddrb = &B11111111 : Portb = &B00000000 Ddrd = &B1100000 : Portd = &B0011000 Dim Pomoc As Byte 'zmienna zliczająca wciśnięcia przycisku Do Debounce Pind.4 , 0 , Wlacz , Sub Debounce Pind.3 , 0 , Wylacz , Sub If Pomoc = 1 Then Portb.0 = 1 'w zależności od stanu zmiennej pomoc If Pomoc = 2 Then Portb.1...
Wystarczy, że opiszesz co robi pętla while Inkrementuję wartość rejestru OCR0A(...) Nawet po zmianie, zwiększasz zmienną test a nie wartość rejestru OCR0A, Zmienną test, której wartość nigdzie nie używasz.
Czy używasz jakiegoś narzędzia administracji bazą danych? Jesli tak, to z pewnością znajdziesz tam opcję auto_increment - tak dodatkowo oznacza się kolumny, których id ma być zwiększany przy każdym dodaniu.
Witam Chciałbym napisać program, który po wystąpieniu stanu 0 na wejściu zwiększałby/zmniejszałby zmienną np o 10. Taki jakby potencjometr. Próbowałem czegoś takiego: Dim A As Byte ... If PortD.x = 0 Then Do A=A+10 Waitms 100 Loop until PortD.x = 1 ... Coś tego typu ze zwiększaniem zmiennych widziałem na forum ale wydaje mi się dziwne i nie spełnia...
Dobrze kolega napisał najpierw naucz się migać diodą a później naucz się obsługi timerów. Kolejny krok jak zliczysz 648 impulsów to zwiększasz zmienną litr o jeden. Zerujesz licznik i zaczynasz od nowa. I tak w koło. To jest przepływomierz do wody czy auta?
Przesuwam wolno pasek 100 sztuk rezystorów 0603. Ilość zliczona przez serial to 88 sztuk: W ENKODER_ISR() przy wejściu ustawiaj jakiś GPIO przy wyjściu kasuj. Na oscyloskopie do jednego kanału doprowadź sygnał z bariery opto, do drugiego GPIO. Nie spodziewam się tu niespodzianek ale lepiej sprawdzić. Później zmiany GPIO przenieś w miejsce gdzie zwiększasz...
Witam, Nie wiem za bardzo co można sprawdzić w tym listingu, bo nie wiadomo co ma do końca robić, ale się nie kompiluje z kilku powodów: -niezadeklarowana zmienna "T1" -zmiennej typu String "H" nie można zwiększać ani zmniejszać jak zwykłej zmiennej, także nie można jej porównywać ze zmienną liczbową -polecenie "Lowerline" nie jest równoznaczne z jednoczesnym...
Zadeklaruj zmienną np A, przyporządkuj klawisze, wciśnięcie jednego zwiększa zmienną o 1 a drugiego zmniejsza o 1, podstaw zmienną "Wait A" Dodano po 2 Jutro jak będę mieć dostep do Bascom napiszę kod.
Ten fragment o którym mówisz lepiej również przenieść za główną pętlę programu, a wywołać również poleceniem gosub . Inna opcja to użycie goto w tym akurat przypadku. Adres powrotu nie jest kasowany, ale zostanie nadpisany, bo po wykonaniu return nie jest już potrzebny. Działa to w ten sposób, że przy wywołaniu procedury adres powrotu jest zapamiętywany...
Przepraszam fakt nie napisałem w jakim języku :). Bascom kod: Dim zmienna1 as word zmienna1 = 23456 Sub zap_eeprom ........... Locate 2 , 1 : Lcd "Wartość: " ; zmienna1 Wait 2 end sub Sub od_eeprom ......... Locate 2 , 1 : Lcd "Wartość: " ; zmienna1 Wait 2 End Sub Jak zapisać zmienną zmienna1 do pamięci eeprom. Znalazłem coś takiego ale nie wiem jak...
Masz jeszcze jedno (chyba najprostsze) rozwiązanie. Widzę że używasz uarta. Zrób sobie pętelkę która będzie zwiększała zmienną , wpisywała ją w rejestr timera, wysyłała ją przez uart, i czekała np 500ms. Patrz kiedy układ będzie miał największy zasięg i spisz sobie wartość timera, lub kilka wartości i średnią wylicz.
LCDGotoXY(0,0); Konwersja(zzz++); procesor choć ARM to nie wyrabia (Może nie tyle nie wyrabia co ma nie wyrabiać bo LCD tego wymaga. Tego czyli nie za szybkiej transmisji danych do niego.). W przerwaniu zwiększaj zmienną ale wyświetlaj ją w programie głównym.
W pętli brak podnoszenia wartości Time, w do while wpisz Time+=1, timer nie podniesie wartości tej zmiennej gdy jest pętla, raczej zrezygnował bym wogole z tej pętli i w metodzie timer_tick, sprawdzał warunkiem czy Time <50, If Time <50 then Zrób coś Else Nie rób nic End if Czyli jeśli mam zmienną globalną X którą sprawdzam w pętli i jest timer...
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...
Musisz sobie utworzyć coś w rodzaju wskaźnika do tablicy. Może to być np int, który będzie wskazywał na kolejne indeksy w tablicy. Wpisujesz zmienną do tablica[indeks] i zwiększasz indeks.
1. Do odmierzania czasu wykorzystaj, tak jak w arduino, timer pracujący niezależnie od programu. Najlepiej tryb CTC z odpowiednio dobranym preskalerem i będziesz miał przerwanie co 1us, w którym będziesz zwiększał zmienną 2. jeśli chcesz większe odcinki czasu to istnieje typ uint64_t, który może przechowywać wartości aż do 18446744073709551615, czyli...
Dzięki, zasadę pomiaru znam, ale tu chodzi o to żeby zrobić na tym konkretnym procku. Chyba coś wymyśliłem, pozostanie sprawdzić w praktyce. 55us to 880 cykli timera, zakładając że Fosc to domyślne 16MHz i preskaler=1 (zlicza cały czas i ciężko go kontrolować). Bramkowanie z komparatora. W przerwaniu będę zwiększał zmienną mierzącą czas .
Zwiększanie wartości zmiennej w zasadzie wygląda wszędzie podobnie: zmienna = zmienna + <o ole zmienić>; Z dokładnością do składni języka wygląda to tak samo. W C wprowadzono pewne uproszczenie i powyższe można zapisać: zmienna += <o ile zmienić>; Ponieważ często <o ile zmienić> ma wartość 1 więc wprowadzono jeszcze operator ++ ale...
Co w tym dziwnego? W czasie 0,1s. generator wykona 400000 taktów. Jeśli przez ten czas pętla zwiększa zmienną o jeden i na końcu wychodzi 9300 to znaczy, że pętla wykonuje się w ok. 43 takty. (niewielki ułamek w wyniku 400000/9300 może pochodzić od Impw = 0 Timer1 = 0, które wykonują się jeden raz po uruchomieniu Timera.)
Byłaby szansa na jakiś kawałek kodu asm ze zwiększaniem wartości zmiennej w przerwaniu :-) ? Zmienna ustawia potem stan wyjść.
Volatile - zmienny niestabilny Jest to złowo kluczowe wyłanczające daną zmienną ( strukture itp??) z optymalizacji. Stsojuesz to tam wszędzie gdzie chcesz aby kompilator nie ingerował z optymalizacją. Stosuje się to także w przypadku gdy korzystasz z zmiennej w różnych częściach programu a szczególnie w przerwaniach. Miałem kiedyś problem przy odmierzaniu...
Wykorzystałem do tego zmienne uint8_t oraz zdefiniowałem je na początku programu. Do klawisza 1 przypisałem komendę ktory_ekran++, która zwiększa zmienną o 1 przy każdym naciśnięciu klawisza, a to powinno powodować zmianę ekranu.! A możesz pokazać, gdzie to przypisanie? Bo w podanym kodzie jakoś go nie widzę? I przede wszystkim co to jest wyswietl_ekran_1?...
Teoretycznie to proste. Tworzysz jakąś zmienną i wpisujesz do niej wartość, np. 5994. Następnie drukujesz dokumenty i tam zwiększasz zmienną przed każdym drukowaniem o 1 i działa. Niestety do pierwszego zacięcia papieru w drukarce (i milionów zdarzeń, które nie mogły się wydarzyć, ale się wydarzyły). :) Wtedy (a najlepiej już teraz) będziesz musiał...
1. a czy sprawdziłeś to co podałem Ci jako możliwe przyczyny? Bo moim skromnym zdaniem to jest powód problemów, i jestem skłonny dziwić się, czemu to zadziałało na mega32... 2. sprawdź sam timer, daj w nim np. za każdym razem zwiększanie zmiennej o 1 (np. utwórz dim zmienna as integer) i wyświetlanie jej na lcd - jeśli będzie się zmieniać to znaczy,...
Tak, bo nie zapamiętywałeś stanu przycisku. A najlepiej zrobić to zmienną pomocniczą, tzw. flagą której stan zmieniasz np. przyciskami a które sterują wykonywaniem funkcji ( "podprogramów " ). Niestety jeśli w kodzie będziesz miał nadal te delay(1000) , to zauważysz, że przyciski nie zawsze reagują na przyciśniecie - dlatego, że podczas każdego "delay(1000)"...
Co forum na inny sposób: timer 1 lub 0. tryb 2 ( automatyczne załadowanie wartości początkowych ) ustawiamy tak aby przerwanie występowało co 250us w przerwaniu liczymy "przerwania" i jeśli doliczymy sie ich 4000 to "upłyneła" jedna sekunda. Zwiększamy zmienną sekundy o jeden; sprawdzamy czy nie 60 jeśli tak do minuty +1 itd. A wszystko to w procedurze...
Jak to pętla niczego nie robi, zwiększa zmienną i i sprawdza jaką ma wartość. no volatile pomogło i wyłączenie optymalizacji też (jedna z tych rzeczy musi być żeby program działał dobrze). a co daje te volatile i o co chodzi z Tą optymalizacją, bo to co napisze to mikroprocesor musi zrozumieć , to raz lepiej to zrozumie(bez) a przy optymalizacji tylko...
Dzieje się to dlatego że aby cokolwiek wyświetliło to wartość ChkSum musi być różna od 0. //Package chkeck if (ChkSum != 0) { LCD_print (5,1, bajt2hex (licznik)); LEDG_ON(); Delay_ms(1); LEDG_OFF(); licznik++; } Mimo zwiększania zmiennej licznik w pętli głównej nie wszystkie jej wartości są wyświetlane....
slavcio2012 - Czyli umiesz coś napisać, napisz program tak żeby każde naciśnięcie przycisku zwiększało zmienną ( przykładowo zmienną zadeklarowaną jako Przycisk_X ), pomoże Ci w tym instrukcja "incr Przycisk_X ", nie zapomnij też o instrukcji "Wait" żeby podczas naciśnięcia przycisku stan zmiennej "Przycisk_X" nie zmieniał się za szybko. Następny krok...
Ściągnij sobie Arduino IDE, otwórz w jednej części ekranu, w drugiej otwórz kurs Arduino i próbuj, kursy są po polsku na blogach, wystarczy w google wpisać i jak nie jesteś botem to znajdziesz. Jak już zaczniesz ogarniać co do czego to wystarczy mieć zmienną i ją zwiększać przyciskiem, a zmniejszać co sekundę, ewentualnie blokować zmianę gdy zmienna...
Te impulsy wejściowe i wyjście ma być na tym samym pinie ? PD.0? Jeśli nie to ustawiamy przerwanie na INT0 i w obsłudze przerwania zwiększamy zmienną. Jeśli zmienna osiągnie dziesięć ustawiamy wyjscie na stan wysoki. Jednocześnie timer zlicza czas pomiędzy impulsami i jeśeli jest większy niż 60 sekund ustawia wyjście na stan niski. Podumowując: Przerwanie...
tak, bariera jest optyczna. Przerwania włączam, by uchwycić moment przerwania tej bariery, ustawić flagę, dzięki której później w programie zwiększam zmienną ilosc_osob. Włączam i wyłączam by rozroznic czy osoba wchodzi czy wychodzi. Jezeli wchodzi to pierwsza bariera dziala, a druga nie dziala przez 1 sekunde. Tak zalozylem. Ale po odliczonym czasie...
Więc dlatego proszę o sprawdzenie kodu Nie wiem jaki wpływ na dekodowanie RC5 ma częstotliwość zwiększania zmiennej g_licznik , ale wartość ładowana do OCR, nie zgadza mi się z komentarzem. OCR1A = 25; // Ustawia wartość pożądaną na 20kHz(50us) dla preskalera 8 Wzór wygląda tak: OCRx=F_CPU/prescaler/częstotliwość - 1
Wiem że można dołożyć więcej pętli , wykorzystać komendy bascoma ale czy to wygeneruje idealnie 36kHz czy trzeba się będzie bawić w analizę czasową? Podejrzewam że odchyłka będzie jeszcze większa a TSOP tego nie lubi. Na jeden przebieg 36kHz procesor przy zegarze 4,8MHz potrzebuje około 128 taktów (64 dioda włączona, 64 wyłączona) teraz każde wejście...
Wydaje się, że najlepiej zwiększać zmienną tak jak pojawiają się impulsy dzięki INT0, i po ustalonym czasie (Timer) ilość zliczonch impulsów dzielić przez określony czas i masz częstotliwość. A tu już łatwo do przekształcenia tego na prędkość. To jedna z prostszych metod pomiaru. Aktualnie ja sobie zrobiłem licznik impulsów by sprawdzić np. ile impulsów...
Dzięki Waszej pomocy aktualnie: - jeden task odbiera dane z UART1 jednocześnie pokazując co odebrał na tym samym uarcie, - drugi task wysyła dane do bazy przez http request metodą POST pokazując po kolei co robi w monitorze, - trzeci testowo zwiększa zmienną o 1 i pokazuje jej wartość także w monitorze. Na czas obsługi http request deaktywuję pozostałe...
Wrzuć wszystko do programu głównego tzn. przyciski ( ustawianie czasu załączania/wyłączania pompy), sprawdzanie Adc (poziom wody) przeliczanie wartości dla wyświetlacza , a samo wyświetlanie w podprogramie odświezanym co jedną sekundę za pomocą Timer0 . Timer0 dalej dla wyznaczania 1 sekundy. Buzer zrealizuj za pomocą zwykłej zmiennej licznikowej zwiększanej...
Cześć Załóżmy że mam pewną funkcje w której zwiększam zmienną a o jeden. W funkcji main wywołuje funkcje i wynik przypisuje do zmiennej b. Załóżmy też że mam przerwanie które też zwiększa a o jeden. W celu optymalizacji operacje na zmiennej a będą wykonywane w wolnym rejestrze i przy wyjściu z funkcji wynik rejestru zapiszemy do zmiennej załóżmy że...
Witam! Główne założenie tej części programu miało być takie, że program sprawdza zmienną w przerwaniu wywoływanym przez timer0 (co 1s) i jeżeli jest warunek spełniony to zwiększa odpowiednią zmienną co 1s. #include <avr/io.h> // dostęp do rejestrów #include <avr/interrupt.h> // funkcje sei(), cli() #include <avr/iotn2313.h>...
Nie ma się co poddawać. Prędzej czy później i tak będziesz musiał używać przerwań i liczników bo bez tego większość programów robi się zagmatwana o ile nie niemożliwa do napisania. W necie jest dużo przykładów, Bascom jest o tyle prosty, że nie grzebiesz po rejestrach. Timer już masz, dodatkowa linia konfiguracji i kawałek kodu da Ci obsługę przerwania...
Czas na system operacyjny. Przy założeniu jakie wprowadziłeś do programu wygląda to tak: Wykonuje się program 1, występuje przerwanie, program 1 idzie w cholerę razem z wynikami jakie obliczył (o ile zdążył), zaczyna się program 2, występuje przerwanie itd... skoro tak to ma działać to nie lepiej zwiększać zmienną w przerwaniu i resetować procesor ?...
W załączniku mój krótki program lampki rgb, zjedź do "software_pwm" i zobacz jakie to proste. W kółko zwiększasz zmienną referencyjną od 0 do 256 (256 rozdzielczość pwm, możesz dać wyższą), porównujesz z nią wartość każdego kanału i zapalasz lub gasisz piny. W tym przykładzie przy 4,8MHz i 256 bitowej rozdzielczości uzyskujemy f ~73.24Hz a jeśli to...
chyba chcialeś powiedzieć 1s, bo 1ms nie chce mi wyjść w żaden sposób. Więc działa to mniejwięcej w taki sposób: za każdym impulsem zwiększamy zmienną "częstotliwość" pomiar trwa 3.9ms i T1 wywołuje przerwanie, i przechodzi do programu czas, potem ilość impulsów jest mnożona przez 256(wartość presklera), otrzymujemy ilość impulsów na sekundę, czyli...
zwiększanie wartości zmiennej zwiększanie średnicy zwiększanie punktów
peugeot bipper silnik cyfrowy regulator alternatora regulacja indukcyjności
ładowanie akumulatora rowerze pradnica amerykanka
Bezpiecznik do elektryki lusterek w Chevrolet Potencjometr balansu nie działa we wzmacniaczu