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...
Zwiększaj tylko jeśli zmienna <255 z zmniejszaj jeśli >0
Bascom ma symulator, w którym możesz sobie patrzeć jak ci się zmienna zwiększa. Języki nie przestrzegają ściśle reguł zapisu matematycznego.
o co chodzi z tą optymalizacją? Jeśli pętla zostanie wstawiona do kodu ale w środku nic nie będzie się działo, czyli pętla będzie iteracyjnie się zwiększała bez efektu to zostanie pominięta? Tak się zdarza. Można dodać asemblerowe NOP do środka, lub zwiększać zmienna typu volatile.
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.
Za każdym razem jak uruchamiasz tę funkcję zmienna x jest na początku ustawiana na wartość 0. Przenieś deklarację zmiennej x poza funkcję (ma to być zmienna globalna).
Co 30 ms bedzie się zwiększała zmienna a.
CHodzi o to, że Twoja pętla nic nie robi treściwego poza stratą czasu :) Więc optymalizacją ją wywaliła :P
Witam. Po pierwsze, zegar procesora definiuj w opcjach projektu, każdy tutaj na forum Ci to powie. Po drugie: spójrz na tę linijkę: [syntax=c]while(liczba_cykli=zmienna)[/s... program nigdy nie wejdzie w tą pętlę z paru powodów: liczba_cykli = 10, natomiast inicjalizacja zmiennej: zmienna = 0, co oznacza, że nigdzie nie zwiększana zmienna nigdy nie...
Pomysłu na teraz nie mam jak to rozwiązać, ale problem zapewne leży w tym, że kiedy przekaźnik = 1 to zmienna jest zwiększana z każdym przejściem pętli..stąd 2 potem 7 itp. Po prostu przez czas trwania stanu 1 na zmiennej przekaźnik, liczba się powiększa. Ciebie interesuje jednokrotne powiększenie. Czyli Przekaźnik = 1 i tylko raz incr zmienna. Trzeba...
1. Jak masz podłączony przycisk? Powineien być tak żeby zwierał pin procesora do masy. 2. if portd.0 = 0 then !!! 3. taki program Ci bedzie dziwnie dzialal bo jest cos takiego jak drgania stykow. Jezeli odczyt trafi akurat na moment ze styk sobie odskoczy to choc ty myslisz ze g wcisnales to nic sie nie zrobi. Wniosek: trzeba wytlumic rgania stykow....
Witam Tu masz literówke - ncr Katody , powinno być incr Katody Dobrze by było gdybyś dodał warunek jak do jakiej wartości ma być zwiększana zmienna Licznik. Po osiągnięciu danej wartości powinna być zerowana, albo zmniejszana. Pozdrawiam
Nie wiem co ten Twój Keil wyrabia , bo ten program po skompilowaniu SDCC i po załadowaniu do symulatora , działa jak powinien tzn. zmienna k jest zwiększana dokładnie co 1s i 276 us.Po zaprogramowaniu AT89S52 z kwarcem 12 Mhz, stan portu P0 zmienia się co ~1s(zmienna k wyrzucona). Moja propozycja - zmień kompilator :wink: Piotrek PS Dodaj jeszcze w...
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...
Jak pisałem w debugerze w linijce przed sprintf zmienna jest poprawna. Po przejściu za sprintf zmienna zwiększa się o 1. Też tego nie rozumiem. Kod jest dokładnie taki jak pokazałem we wcześniejszych postach.
Witam. To zależy z jaką częstotliwością przychodzą impulsy. Jeżeli przychodzą dośc wolno to można impulsy podać na wejście przerwania a w obsłudze zwiększać wartość jakiejś tam zmiennej o jeden. Jeśli są one dość szybkie to można np. skonfigurować licznik żeby zliczał je i co 10 dawał przrwanie, a w przerwaniu zwiększać zmienna o 10. W tej metodzie...
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ż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...
Chyba wszystko się zgadza. Co 32us licznik się przepełnia i zwiększana jest zmienna licznik o 1. Po 256 takich zwiększeniach zmienna licznik sie przekręca. Teoretycznie powinno być 122Hz.
Tzn. jeśli mowa o: xEventCounter = (xEventCounter <<2); xEventCounter += 0x3; Tutaj była inna nazwa zmiennej, oczywiście że tak bym nie robił bo zwiększałbym zmienna która robi za mój licznik wykonywanych zadań. Generalnie chodziło o fakt że z ifów wyciąłem kod i wkleiłem do funkcji i tyle. Tak czy owak mój powyższy kod który dałem jako...
Pozmieniałem troche program i teraz jest tak: void TIMER0_init() { TCCR0 = 5; TIMSK = 1<<TOIE0; sei(); } //*****************************MAIN*****... int main () { RS_init(UART_CONST); // inicjalizacja portu szeregowego TIMER0_init(); for(;;){} return 0; } //*****************************PRZERWANI... SIGNAL(SIG_OVERFLOW0)...
Ja realizowałem kiedyś program do silnika i timer chodził cały czas i ustawiał flagę co wybrany odcinek czasu. Flaga ta sprawdzana była w pętli głównej i tam była zwiększana zmienna krok, w zależności od niej odpowiedni stan na cały port został wysyłany. Nie musisz po każdym kroku startować timera od nowa. Nie ma takiej potrzeby. Nawet jeśli będzie...
chodzi ci o taki warunek ?? if portb.1 = 0 then 'jeżeli załączy się Pwm1a (buzer) incr zmienna 'to zwiększa się zmienna if zmienna = 10 then ' jeżeli zmienna = 10 stop Timer1 'to wyłącz Pwm1a (buzer) if v < 1 then ' jeżeli poziom wody spadnie poniżej 1 zmienna = 0 ' to zmienna się resetuje i odblokowywuje się możliwość ' ponownego...
Od więc ja zastosowałem sterownie menu w taki sposób: jeżeli nacisnę guzik DÓŁ wówczas zwiększa się zmienna TEMP. Tą zmienna przekazuje do funkcji menu(). W zależności od tego ile ta zmienna wynosi to funkcja menu wyświetla coś innego na ekranie. Niestety bladego pojęcia nie mam jak to zrobić w BASCOMIE :(
Udało się :) .. przynajmniej na razie na to wygląda :] a to jest kod który zadziałał :) : while(1) { while((t = PULPIN & 0x20) == 0) // dopóki jest na wejściu 0 to czekamy {} while((t = PULPIN & 0x20) == 1) // // potem przeczekujemy 1 na wej - czyli zliczamy na opadającym zboczu {}...
W języku C /C++ aby porównać liczby trzeba stosować == użycie pojedynczego = to przypisanie. Po drugie korzystasz wielokrotnie ze zmiennych które nie są za inicjalizowane np: tab1[c]=liczba; ile wynosi zmienna c na samym początku, jeśli to VS to pewnie 0xcccccccc zmienna c również nie jest zwiększana. Ile wynosi k ? Deklarujesz użycie x i d, gdzie z...
. A więc wysyłasz 3x więcej danych niż potrzeba. Nie wysyła bo za każdym razem zwiększa te zmienna. Tak że pętla wykona się width * height razy. Oczywiscie zmienna idx powinien zrobić unsigned, ale tak cały ten wskaźnik nie będzie mógł być większy niż 64k. Niech kolega obejrzy te bitmape. Wygląda na rozwalone.
if(++m >= 1600) Jest uproszczonym zapisem do ++m; if(m >= 1600) Zauważ, ze w moim kodzie nie ma pętli 'for' - zmienna m jest zwiększana dopiero po spełnieniu warunku, potem zmienia się zachowanie (zmniejszanie delty). U ciebie nadal jest pętla for, przez co każdy z warunków jest sprawdzany po 800 razy. Kod zawiera błąd, mianowicie...
Ś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...
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....
Z tego co wyczaiłem to mega popędzana jest kwarcem 14,7456 MHz (kwarc do USART)... Timery ustawione są tak, że przerwanie wywoływane jest co 0,05s stąd podstawowa zmienna zliczająca do sekundy zwiększana jest co drugie wywołanie przerwania (odpowiadają za to variable i variable1)... Spróbuj przeanalizować ten kod i skonfrontować go z dokumentacją do...
Poszukaj, było. :-) Programowe opiera się o kod wykonywany w pętli gdzie jest zmienna LCZ zwiększana co cykl i druga zmienna PWM odwzorowująca wypełnienie. W pętli są sprawdzane 2 warunki: - jeśl LCZ=0 włącz diodę - jeśli LCZ = PWM zgaś diodę Sprzętowe zaś opiera się o PWM o którym już wspomniałeś.
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...
Wprawdzie już trochę czasu upłynęło, i nie wiadomo na jakim etapie jest (zaniechany, przerobiony, czy już wykonany :) ), ale może można by dodać detekcję obecności kogoś w ogródku? Bariera podczerwieni i licznik obecności? Ktoś wychodzi do ogródka (przecięcie bariery) zmienna się zwiększa, ktoś wraca zmienna się zmniejsza... Zmienna większa od zera...
W tym wypadku: zmienna++; oznacza dokładnie to samo co: zmienna=zmienna+1; Czyli najprościej mówiąc, inkrementuje Ci zmienną "zmienna", zwiększa jej wartość o 1 ;)
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...
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.
Zastanawiam się czy jest jakieś gotowy wygodny sposób na obsługę scrolla w aplikacji. Konkretnie to chciałem aby jedna zmienna się zwiększała lub zmniejszała, kiedy kręcę kółkiem.
Dane pokazywane oczom użytkownika mogą być zupełnie inne niż te przechowywane w programie. Wpisywanie wartości liczby po cyferce jest uciążliwe. W piekarniku mam ustawianą godzinę jednym przyciskiem (czy dwoma), wystarczy w programie zauważyć że przycisk został wciśnięty, przytrzymany przez 1s, przytrzymany przez 5s,itd. Jak nie używasz delay nie jest...
Z EEPROM jest wiele zabawy. Najprościej nie zapisywać co 1-2m dystansu, jak miałeś w programie, czy co 1s, jak się zrobiło gdy przeniosłem Ci to do loop. Masz odmierzanie czasu tym nieszczęsnym delay 1000, to definiuje najmniejszą jednostkę czasu w tym programie. Naucz się millis() i usuniesz to ograniczenie. Ale tu też można coś wyrzeźbić, po tym delay...
A może wystarczy: PWM_FREQ=krok(np 10)*zmienna i potem incr zmienna
cóż chylę czoło przed bascomem i odmiennością od C, jednak jakby nie patrzeć jeśli zacząć np. cykliczne powiększanie od najmniejszej wartości do największej wyjdzie na to samo czyli 65535 kolejnych operacji zwiększania :)
Potrzebuję pomocy w konfiguracji Timer1 (ten mam wolny) ewentulanie modyfikacja obecnej konfiguracji Timer0. Obecna konfiguracja jest dla odliczania odpowiedniego czasu dla ramek RC5 odbieranych przez odbiornik TSOP322 przy taktowaniu procesora z F_CPU=8MHz, w celu oszczędności energii chcę zrobić odbieranie przy częstotliwości 1MHz. Jak widać z obsługi...
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...
Tomaszek_ A co ma timer do tego? Zmienna A zwiększa się o 1 podczas przerwania od pinu INT0. Też nie jestem za zwalaniem winy na Bascom. Nigdy mi się nie zdarzyło żeby Bascom namieszał coś.
Dziękuję za odpowiedź. Mam jeszcze tylko pewne wątpliwości. Rozumiem, że wg Pana zmienna f zlicza odcinki czasu <1ms, a gdy zliczy się ich odpowiednia ilość (1ms) to zwiększana jest zmienna m. Znalazłem w Internecie jeszcze taki opis do tego kodu: http://ucexperiment.wordpress.com/2012/0... I z niego wynika...
Jak zrobić by zmienna x zwiększała mi się co sekundę? Na logikę takie coś byłoby dobre DWORD Czas=GetTickCount(); if (Czas > 1000) //1000milisekund to sekunda { x++; Czas=0; } ale nie działa. Bez względu na to jaką wartość wpiszę to i tak w takim samym odstępie czasu się zwiększa. Potrzebuję czegoś co by zerowało mi aby...
Byłaby szansa na jakiś kawałek kodu asm ze zwiększaniem wartości zmiennej w przerwaniu :-) ? Zmienna ustawia potem stan wyjść.
Witajcie. Na początku zaznaczę, że nie mam problemów z tymi modułami czy komendami AT, tylko piszę aby zapytać o wasze doświadczenia z tymi modułami. Robie projekt sterowania przez bluetooth i wykorzystuje moduły BTM222. Odbiornik będzie oddalony od nadajnika o około 25m a dokładnie o około 25m wyżej i będzie między nimi dosyć gruba ściana, dach itp....
Witam . Zadanie jest trywialne . Potrzebujesz 3 zmiennych i dwóch przerwań zewnętrznych plus przerwanie do wyświetlacza. Po starcie procka ustawiasz wartość jednej z zmiennych która będzie równa ilości przerwań wyświetlacza w czasie 10 sekund . Podczas aktywacji przerwania od T1 aktywujesz przerwania od INT0 i INT1 . INT0 zwiększa jedną zmienną a INT1...
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 ?
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,...
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...
witam wszystkich na forum i na wstepie pozdrawiam,mam dwa problemy może ktoś z Was ma gotowy programik który odmierz i zwiększa jakąś tam zmienna co 1S korzystając z Timera1,a drugi to taki że nie wiem w jaki sposób zrealizować zapis temperatury minimalnej zarejestrowanej przez czujnik DS1820,z tem max nie mam problemu robie to tak:If Tmax < T1 Then...
Nie da się zrobić pomiaru co 0,01 s dla takiego przedziału częstotliwości bo to bez sensu. Dla 20 Hz masz przecież impuls co 1/20 s czyli 0,05 s a dla 10Hz masz co 0,1 s. Musisz przyjąć jakieś sensowne odświeżanie. Co do pomiaru to licznik 8 bitowy wystarczy po prostu po każdym przepełnieniu licznika zwiększaj jakąś zmienna o 1 a po odczytaniu impulsu...
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...
Zmienna pojemność, sprężarka kręci się cały czas, zaworek zwiększa jest wydajność.
hmm... czemu tam jest i-N nie powinno być przypadkiem N-i ?? zakładam, że N to stała wielkość tablicy a i to zmienna która będzie się zwiększać czyli gdzieś w programie będzie i++;
Witam, Dodaj timeout, który będzie zerowany przy każdym sygnale użytecznym, gdy nie bedzie sygnału zmienna będzie zwiększa po przekroczeniu ustalonego progu, wyzerujesz zmienną określającą liczbę którą chcesz wyświetlić. W ten sposób po pewnym czasie na wyświetlaczu będziesz miał zero a nie ostatni pomiar Pozdrawiam
Propozycja programowego "czyszczenia" impulsów: Prędkość 5 obr na sekunde przy 36 otworkach daje 180 impulsów/s. Czyli czas od impulsu do impulsu troche wiecej niż 5 ms. Rozsądnie jest przyjąć czas impulsu na jakieś 20% czasu od impulsu do impulsu (jest to związane ze średnicą otworków). Czyli mamy czas impulsu nie mniejsy niż 1ms, a w większości przypadków...
Cześć. Jest sobie program, w którym jest 6 następujących po sobie case. Kiedy warunki w jednym się wykonają, przeskakujemy do kolejnego i tak w kółko. W 4 z nich migają diody, dodatkowo w dwóch z nich uruchamianie na chwilę jest serwo i tu jest pies pogrzebany... Diody migają elegancko, aż wskakujemy w case z obsługą serwa - pulseout. Wtedy program...
Chciałbym dostać przerwanie od PCF po 15 sekundach. Więc ustawiam rejestry następująco: [syntax=c] PCF8583_write(0x00,00000100); PCF8583_write(0x07,0); PCF8583_write(0x08,11001010); PCF8583_write(0x0f,15); [/syntax] Pin PE4 jako ustawiam jako wejście i podciągam do vcc. Obsługa przerwania poniżej. Coś jest nie tak i zmienna zwiększa się przy każdym...
Możesz przetestować Funkcję BIN() A = 25 C = 14 D = 14 B1 = switch functions Sub Write I2cstart I2cwbyte 130 I2cwbyte 0 I2cwbyte A ; Głośność kanał L ; zakres 0 - 63 I2cwbyte A ; Głośność kanał R ; zakres 0 - 63 I2cwbyte C ; Bass ; zakres 0 - 15 I2cwbyte D ; Treble ; zakres 0 - 15 I2cstop Waitms 10 I2cstart I2cwbyte 130 I2cwbyte 8 I2cwbyte B1 ; switch...
Wyszukiwarka: if (licznik < 255) licznik++; Analogicznie dla zera if (licznik > 0) licznik--;
Nieprawda. Zmienna one_sixtieth_sec jest 8-bitowa, czyli ma 256 kombinacji. Skoro kolega jej nie zeruje sam w jakimś momencie, to musi doliczyć do 255, i potem jak się doda jeden to zaczyna się znowu od zera. Flaga odświeżania LCD jest ustawiana tylko dla jednej kombinacji z 256. Przyjmując, że zmienna zwiększana jest co 16 ms mamy 16*256=4096 ms. PS....
Łańcuch z diod LED. Może podpowiecie, jak napisać taką wstawkę w asemblerze do przerwania od Timera. Zmienna globalna pwm jest porównywana ze zmienną licznik (zwiększana w przerwaniu). Jeżeli większa, to LATX HI else LATX LO. Zmienna globalna będzie normalnie widziana w stawce asemblerowej?
Witam. Z pewnych przyczyn musiałem przejść z pisania oprogramowania w Bascom na C. I pojawił się problem. Mianowicie chodzi o konfigurację Timera1 tak aby był generatorem, którego częstotliwość zmienia się wpisem do rejestru pwm1a. Pwm1a = 312 Config Timer1 = Timer , Prescale = 8 , Compare A = Toggle , Clear Timer = 1 On Compare1a Impuls Enable Interrupts...
Wiem że licznik działa ponieważ wypróbowałem jego działanie w nieco zmienionych kodach. Licznik nie jest zwiększany w przerwaniu tylko zmienna zliczająca przepełnienia. W przerwaniu nie są wykonywane żadne operacje na wyświetlaczu lcd - lcd_conversion jest funkcją conversji liczby int do tablicy. Próbowałem różnych kodów przykładowych i nic nie działa,...
Mam taki oto problem z odejmowaniem czasów format lub dokładność Godzina:minuta bez sekund i milisekund. Problem dotyczy bardziej rozbudowanego zadania uproszczę to tylko to interesującej mnie kwestii z owymi godzinami. Mam np godzinę 02:45 potrzebuję teraz od tej godziny odjąć 20 minut otrzymamy wtedy 02:25 potem powtarzam odjecie mam 02:05. W kodzie...
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...
Witam. Mam wydaje mi się błahy problem, ale pomimo wertowania forum nie mogę sobie z nim poradzić. Otóż chodzi o to, że mam funkcję w której chcę zwiększać zmienną. Z niewiadomych przyczyn zmienna zostaje wyzerowana po wejściu do funkcji oraz przed wyjściem z niej. Funkcja mniej więcej taka: [syntax=c]int zmienna=0x00; int funkcja(int zmienna) { DDRD|=0x0F;...
void oznacza że funkcja nie zwraca żadnej wartości. Zmienna i to licznik pętli, tak jak w kodach wyżej, z każdym wykonaniem pętli jest zwiększana i dzięki temu kolejne cyfry rozwinięcia są zapisywane na kojelnych miejscach w tablicy. Wyrażenie 'break' kończy pętle, tu użyte jest gdy liczba jest mniejsza od 2 (wtedy nie trzeba jej specjalnie zamieniać...
Time ma zakres DINT i jest w milisekundach. Pokrywa ok. 24 dni, więc pokaż może kawałek swojego kodu, bo z opisu wnioskuję, że chcesz użyć wbudowanych S5time. Lepiej pójść z duchem czasu i użyć IEC. Możesz użyć np. TONR (FC80), który się sam nie zeruje, tylko trzeba użyć wejścia kasującego. Możesz zapamiętać datę rozpoczęcia i sprawdzać różnicę do aktualnej...
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 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.
Źle podchodzisz do problemu - zmienna i (czyli numer wyświetlanej cyfry) powinna być zmienną globalną, którą w przerwaniu od timera zwiększasz, a następnie wykonujesz blok switch (i) { ... }. Oczywiście delay w przerwaniu to "bluźnierstwo" :) Preskaler ustaw sobie na 64, wtedy przerwanie od timera dostniesz ok. 400x na sekundę, czyli odświeżanie całego...
Współczynnik wypełnienia od 0 rośnie automatycznie do 100. Zwiększanie współczynnika wypełnienia inkrementuje się (zmienna wypelnienie++; ) po każdym przepełnieniu timera0, czyli od 0 rośnie co 1% do 100 czyli do stanu całkowitego zgaśnięcia diody - stan wysoki. Weź także pod uwagę, że liniowe zwiększanie wypełnienia PWM, nie da Ci efektu liniowego...
Przy takim programie, na wyświetlaczu pojawiają się albo same krzaki, albo znaki zapytania, a jeżeli uruchomi się, to jest samo 0... Nie zwiększa się zmienna. [syntax=basic4gl]$regfile = "m8515.dat" $crystal = 8000000 Config Portb.1 = Output 'RW LCD Portb.1 = 0 Config Timer0 = Timer , Prescale = 1024 Tccr0 = 4 Enable Interrupts Enable Timer0 on timero...
Kiedy zmienna == 1 wykonuję konkretny krok zwiększam jej wartość i wykonuję krok 2. Nie potrafię jednak do zmiennej przypisać jakieś liczby oraz potem jej wartości porównywać. Zazwyczaj to się robi po prostu, że jak jest w kroku nr1 i spełnione są warunki tranzycji do kroku nr 2 to się po prostu podstawia instrukcją MOV 2 do rejestracji np krok czy...
Ekstra opóźnienia nie trzeba - już jest 8ms z multipleksacji. Problemem są warunki - nie sprawdzają, czy przycisk został naciśnięty od poprzedniego sprawdzenia, tylko sprawdzają czy teraz przycisk jest naciśnięty - trzymasz przycisk pewnie dłużej niż 8ms, warunek jest spełniony, zmienna jest zwiększana co 8ms. Kod (nie tylko warunek) poprawić jest łatwo...
Z tego co zaprezentowałeś na filmie to zlicza dobrze. Tak jak ma być w programie. Ale rozumiem, że chcesz aby po naciśnieciu zmienna nie rosła a jedynie zwiększała sie o 1 niezależnie od tego jak długo trzymasz przycisk? Następnie puszczasz przycisk i naciskasz ponownie i znów zwiększa się o 1?
Witam. Poradźcie początkującemu. Procesor AT90S2313 Program wygląda tak: Config Int0 = Low Level Dim L As Byte Enable Interrupts Enable Int0 On Int0 Licz Nosave Licz: Incr L Print L Return i jest wszystko w porządku. Przerwania występują w chwili gdy port INT0 znajduje się w stanie niskim i zmienna L jest zwiększana. Chcąc korzystać z pojedyńczego przerwania...
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...
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...
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...
1) To jest twoj problem Czas = T1 T2 = T1 * 16 If Czas = T2 Then I jak ty chcesz tym uzyskać odpowiedź że odebrany bit był dobry? To równanie przecież nigdy nie będzie spełnione. Już ci pisałem, jeśli wiesz że szpilka będzie miała długość "Czas=400" to zrób porównanie ale z przedziałem np 395<x<405 - pojawia się przerwanie RISING - wystartuj timer0...
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! Uczę się programowania w BASCOM i mam problem z procedurami. Chciałem sobie napisać procedurę tak jak w kodzie, który podałem niżej aby zwiększać wartość zmiennej A. Program działa, zmienna się zwiększa ale wyświetlacz jakoś dziwnie mruga. Gdy procedurę wyjmę z pętli to jest dobrze z wyświetlaczem, ale za to zmienną A zlicza tylko od zera do...
a ja mam pytanko z innej beczki, choć dotyczy układu MSP430 potrzebuję odmierzać sekundy w moim układzie, czy ten kod // procedura obsługi przerwania od TimerA #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void) { ++licznik; } będzie to robić (tzn czy zmienna 'licznik' będzie się zwiększać co sekundę?)[code]
zmienna na początku jest równa zero. Jeśli program wykryje "guzik == HIGH" to powinna się zwiększać, a jeśli nie wykryje to powinna pozostać przy ostatniej wartości.
Przykład. W pętli głównej jest zmienna, która jest zwiększana przez TIMER0. Zależnie od wartości owej zmiennej, jest wysyłany dany ciąg znaków przez instrukcję PRINT - uart sprzętowy oraz instrukcję Print#kanał - uart programowy. Mam też przerwanie od timera1 - do obsługi wyświetlaczy siedmioseg. i innych elementów. I co będzie, jak np. w momencie wykonywania...
period register nie ma nic do rzeczy - nim mozesz conajwyzej skrocic cykl timera. nie ma zadnego prostego sposobu - nalezy zwiekszyc preskaler timera skoro przekraczasz zakres - bedziesz mial mniejsza rozdzielczosc, ale dluzszy mozliwy pomiar. mozna ewentualnie sprobowac partyzantki i wlaczyc przy okazji przerwanie od timera wywolywane przy okazji dojechania...
No zmienna licznik - przepisujesz jej wartość do podanej zmiennej. I pewnie zwiększasz. A jako, że licznik jest statyczny, to jest wspólny dla wszystkich obiektów klasy.
Zaczynając od końca - pamięć RAM jest jedna, i stos się też tam musi zmieścić. Dlatego jeżeli dane zajmują 120 bajtów, to niestety przy przerwaniach bedą na pewno "zajeżdżane" przez stos. I to najprawdopodobniej tłumaczy, dlaczego zmienna czas_a jest zwiększana zawsze - po prostu do zmiennej flagi trafiaja dane ze stosu. Przy okazji - nie włączaj iotn2313.h...
Co za problem ? Masz ciąg liczb w tablicy n - elementowej. Ustawiasz sobie 2 wskażniki, pierwszy na pierwszy element tablicy drugi na drugi. Obliczasz różnicę wartości elementów wskazywanych przez wskaźniki i zapamiętujesz ją jako różnice ciągu (np. zmienna RC) Zwiększasz wskaźniki o 1 Badasz czy nie koniec ciągu Znów obliczasz różnicę wskazywanych...
Ok po kolei, wywalam wszystko z programu, zostawiam tylko...... zmienna impulsy jest zwiększana o kilkanaście a nie tylko o jeden ............ Licz: If Scisk = 1 And Ok = 1 Then Incr Impulsy Elseif Scisk = 0 And Ok = 1 Then Decr Impulsy End If Return Kontaktron (Reed switch) generalnie jest stosowany jako proxy switch, czyli w ukladach statycznych....
http://obrazki.elektroda.pl/6568132900_1... Wstęp: Potrzebowałem urządzenia, które sterowało by taśmami LED po otwarciu drzwiczek. Ceny gotowych urządzeń tego typu były dla mnie za wysokie (cena od 30zł w górę), ja potrzebowałem ok 5 sztuk. Pracując nad tematem wykonałem działające urządzenie oparte na gotowym odbiorniku podczerwieni...
Czekaj, czekaj. Jeden czujnik odpali przerwanie INT0 a w tym przerwaniu sie uruchomi timer. Drugi czujnik po INT1 ma go wyłączyć. Raczej o tym myślałem. Lepiej tak: czy ktoś by mi dokładnie wytłumaczył jak wywoływać timery, zbierać z nich czas, do czego służą poszczególne rejestry. Noty katalogowej tego procka po polsku nie znalazłem, a dobrego poradnika...
Masz funkcje RTC_GetTimer i RTC_SetTimer które odczytują i zapisują ten licznik oczywiście można to zrobić też bez tej biblioteki. A jesli jednak 32 bity to za mało to zawsze można dodać dodatkową zmienna przechowywaną w rejestrach podtrzymywanych bateryjnie i zwiększać ją gdy licznik przepełni się ;) Jak już bedę w domu to coś dokładniej Ci napiszę...
Witam To działa tak że im dłużej masz warunek spełniony to zmienna VD544 jest albo cały czas zwiększana (+D) albo zmniejszana (-D) przez okres spełnienia warunku. +D in, out działa jak out=out+in -D in, out działa jak out=out-in Pytanie jest tylko jak w programie jest ta zmienna (VD544) ustawiana wcześniej przed tymi instrukcjami. Pozdrawiam
zwiększać wartość zmienna zwiększać dawka przetwornica zwiększać
arduino termometr ds18b20 kondensator pobór prądu kondensator spawanie
behringer europower proste uklady elektroniki
Wyrzucanie zabezpieczenia w pralce Samsung - przyczyny i rozwiązania Jak uzyskać dostęp do schowka w różnych systemach?