E tam, nic strasznego.... Tu masz błąd: Dim U_wy As String * 2 Zwiększ to na: Dim U_wy As String * 3 I leci aż miło. Nie mieścisz się w zmiennej, that's all:) Poza tym skonfiguruj watchdog oraz TIMER. Pewnie jeszcze coś tam siedzi (wyświetlanie bez wymazywania poprzednich, większych o rząd wartości na przykład) ale to tak na szybko. Pozdrawiam, TD
Instrukcja służy do kopiowania wartości z wejścia IN do wyjścia Q, w tym przypadku dla zmiennej typu Integer (liczba całkowita). Do czego wykorzystać: np zerowanie jakiś zmiennych (liczników, numerów kroku sekwencera itp). ustawienie jakieś wartości zmiennej zależnie od logiki itd
Raczej na [syntax=c]char rodzaj[2]; [/syntax] Mniej zmian trzeba będzie dalej wprowadzać. Zamiast [syntax=c]//if (tab[i].rodzaj=="L" || "l") [/syntax] musisz napisac [syntax=c]if ((tab[i].rodzaj[0]=='L') || (tab[i].rodzaj[0]=='l'))[/syntax] (lubię dużo nawiasów) Jeszcze trzeba przesunąć zerowanie zmiennej wynik przed pętle, a wypisanie wyniku po.
Jeżeli tak zrobisz i nastąpi przypadek, że w momencie w którym licznik będzie miał wartość 125, a warunek który dopisałeś nie będzie spełniony to nie wykona się kod zawarty w instrukcji if, czyli nie wykona się zerowanie zmiennej licznik. W rezultacie zmienna licznik w następnym przerwaniu będzie miała już wartość 126, itd. - i teraz pytanie: Czy to...
Czy w sterowniku jest jakaś zmienna odpowiedzialna za zanik zasilania ? A co za problem stworzyć samemu marker typu BOOL w deklaracji VAR (będzie to zmienna ulotna). Po zaniku zasilania tego typu zmienne zawsze są zerowane. Na początku programu wykonujemy operację: IF bAfterReboot = 0 THEN (*tutaj zamykamy pliki*); bAfterReboot := 1; END_IF;...
buffer<<=18; można też rozumieć jako przesunięcie o 18 bitów :D bo docelowe dane nie znajduja się na początku ramik Tylko czy aby we właściwym kierunku? Funkcja TC_GetTC1() nie wykonuje konwersji tylko rzutowanie i moim zdaniem jest zbędna. Spróbuj tak buf w funkcji RD_AD() bo zmienne lokalne nie są domyślnie zerowane podczas deklaracji i mogą...
Witam, jestem pewnien, że to błachostka, ale niestety kompletnie nie umiem programować, dlatgeo pytam na naszym forum. Nie wiem, dlaczego zmienna się zeruje. Przypuszczam, że poprostu nie umiem użyć globalnej zmiennej. [syntax=cpp]int ir_pin = 7; //Sensor pin 1 wired through a 220 ohm resistor int led_pin = 10; //"Ready to Recieve" flag, not needed...
Problemem są twoje zmienne adcresult. Jak zwykle to bywa zapomniałaś dodać magicznego modyfikatora volatile - bez tego optymalizator pzyjmuje te zmienne za stałe i pod tym kątem optymalizuje pętlę w main. No i robi się kaszana. Poza tym diodami świecisz po 50ms, niezły cyborg z ciebie, skoro to ci wystarcza :) W pętli nie ma też sensu inicjować za każdym...
Chciałem Ci dać wędkę, ale wolisz rybę. $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 Cls Config Timer1 = Timer , Prescale = 256 On Timer1 Odmierz_2s Dim Licz As Byte Enable Interrupts Enable Timer1 Start Timer1...
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,...
Witam. Zmontowałem przed chwilą i sprawdzone. Zostaje tylko pozbycie się drgań styków klawisza. [syntax=c]#define F_CPU 16000000UL // Atmega644 #include <avr/io.h> /*biblioteka avr*/ #include <string.h> /*biblioteka napisy*/ #include <stdio.h> /*biblioteka podstawowa C*/ #include <stdlib.h> /*biblioteka C*/ #include <stdbool.h>...
Składnia: cbr Rejestr, Maska Instrukcja CBR kasuje w Rejestrze te bity, które są w Masce ustawione na 1. Zapis 1<<CośTam oznacza w uproszczeniu ustawienie bitu na pozycji CośTam. Maska (1<<BitNew)+(1<<Bit)+(1<&... będzie więc wyglądała tak: 00000111 ponieważ BitNew=2, LoTif=1, Bit=0 (to są pozycje bitów w bajcie). W rezultacie...
Oba procesy trzeba zsynchronizować. w pełny sposób to do kazdej zmiennej która jest używana (zarówno zapis ja i odczyt) trzeba by było dostawić indywidualna flagę (mutex). Moze w twoim wypadku wystarczy prościej (ale zerowanie wystąpi dopiero jeżeli wystąpi następne zdarzenie). int fClearCounter; unsigned imp; SIGNAL(siganal_interrupt0) {...
for (i=1 ; i<=NWW; i++) { if (i%(NWW/li_A)== 0) PORTC |=0x02; if (i%(NWW/li_B)== 0) PORTC |=0x08; if (i%(NWW/li_C)== 0) PORTC |=0x20; if (i%(NWW/li_D)== 0) PORTC |=0x80; // zerowanie pinów ABCD PORTC &=0x55; // opóźnienie _delay_ms(czas_kr/NWW); } Wszystko...
Przeorganizowałem twój kod z pierwszego postu bo w tym z dzieleniem i modulo to może działać ślamazarnie. Jeśli ci pasuje oczywiście. Licznik obsługuj w przerwaniu timera. A zmieniaj tylko wartość zmiennej za pomocą przycisków. To musisz sobie dopisać. Gdyby obliczenia w przerwaniu były za długie, przenieść je do głównej pętli, ale tutaj zawsze będzie...
drobny opis programu: [syntax=vb] Public Class Form1 Dim operat As String ‘deklaracja zmiennej operatora artemtycznego Dim Cyfra_Pierwsza As Boolean = True ‘deklaracja zmiennej Dim walor1, walor2 As Double ‘deklaracja zmiennych dzialan artmetycznych Private Sub operat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)...
Piszesz, że jesteś początkujący więc będzie Ci trudno zrozumieć wyjaśnienie bez znajomości przynajmniej wskaźników i tablic. Przeczytaj najpierw podręcznik dla tej funkcji - [url=http://www.cplusplus.com/reference/... Funkcja wpisuje do zmiennej "bufor" (tablica znaków - cstring) odpowiednie dane (godzinę) ale żeby nie...
Sprawa jest prosta: funkcja strcpy kopiuje tyle bajtów, ile może, póki trafi na zero które kopiuje, ale zaraz po tym przerywa kopiowania. Jeżeli ilość znaków w MaskEdit1->Text będzie większa od 3, to strcpy może nadpisać wszystkie lokalne zmienne, od pierwszej do tej przed str1, a nawet zmienne w funkcjach które oczekują na powrót z aktualnej funkcji....
Licząc, że jeden impuls trwa dokładnie 1 us i przy timerze zliczającym do 10 (startuje od 246 - Timer0) to po przekręceniu się timera uzyskujemy czas 10us. Przy długości impulsów w podanym zakresie timer powinien się przekręcić od 100 do 200 razy. Niestety program zlicza mi od 12 do 24 przekręceń tylko. Gdzie robię błąd ??? Nieprawidłowe obliczenia...
a po co Ci dwie zmienne ? if(!(PIND & _BV(4))) { _delay_ms(250); if(++set_h >= 10){ set_hh++; set_h = 0; } } if((set_hh>=6)&&(set_... 68 to wyzeruj set_hh i set_h { set_h=0; set_hh=0; } tak to raczej winno wyglądać
Uparcie trzymasz w loop() zerowanie zmiennej iloscImpulsow. Już pisałem wcześniej, że robi to funkcja odczytImpulsow() i w sposób prawidłowy tzn. na chwilowej blokadzie przerwań.
https://obrazki.elektroda.pl/5661040000_... Miernik temperatury cewki głośnika wysoko-tonowego Wstęp, zastosowanie Jako konstruktor zwrotnic głośnikowych często stawiałem sobie pytanie, jak dużo jest w stanie wytrzymać głośnik wysoko-tonowy, i jak bardzo jego wytrzymałość zależy od rodzaju filtracji czy samej częstotliwości podziału....
Umieszczam kod, Podłączenie wyświetlaczy, wspólne katody na pinach A0, A1, A2, A3 (dziesiątki godzin, godziny, dziesiątki minut, minuty), segmenty odpowiednio na pinach od 4 do 11 odpowiednio, A, B, C, D, E, F, G, DP. Na przerwaniu realizowane jest tylko przełączanie stanu dwukropka (mruganie co pół sekundy), multipleksowane wyświetlanej cyfry i zwiększanie...
Już Ci pisałem, że nie zerujesz zmiennej licznik_bitow_rx.
Jak w czystym C (AVR GCC) wyglądała by funkcja millis() ?, a może pokaż też 2 podejście (listing), gdzie milisekundy to zmienna globalna np millis. Wykorzystaj timer do przerwać dostępny na każdym AVR. W AVR GCC, funkcja podobna do `millis()` z Arduino, która zwraca liczbę milisekund od startu programu, może być zaimplementowana z wykorzystaniem timera...
niestety w obu kodach brakuje czegoś co by dodawało cokolwiek do zmiennej A, więc nie przyjmie ona nigdy wartości 1 lub 2 skoro na początku się ją zeruje. Jesli chodzi o podciągnięcie programowe to nie działa (dałem rezystor zewnętrzny). Próbowałem tak i działa: config debounce = 50 ' 50ms dla przycisku dim a as byte ' deklaracja zmiennej a=0 ' zerowanie...
Ten kod, który męczysz z botem jest z grubsza bez sensu. Wykorzystujesz przerwanie w celu modyfikacji flagi, podczas, gdy taka flaga już jest - RXC w rejestrze stanu UART. Wystarczy ją testować. Wykorzystanie przerwań ma sens, jeśli tworzysz bufor. Jeśli przepisujesz rejestr UDR do 8-bitowej zmiennej i ustawiasz flagę, to jest to kompletnie bez sensu....
Jak to skonfigurować? W Arduino nie mam zielonego pojęcia No właśnie, a internet też milczy... Wymyśliłem to tak - Potrzebuję sygnał którego rozdzielczość jest równa 0.25us czyli timer musi zliczać z częstotliwością 4MHz czyli przy zegarze 72MHz będzie to 18 cykli. Zegar co 18 cykli dodaje 1 do zmiennej x, jeśli zmienna x = 19 (4.75us) ustawia stan...
W kodzie poniżej , jak się przedstawia dokładność 50 % ,czy jest lepsza jak w kodzie z 2x asm("nop"); , z postu #13. Czy zmiana z 128 sekund na 128000000 us poprawi dokładność. Jak zmienić 128 sekund na 128000000 us. [syntax=c]#include <avr/io.h> // kwarc 16MHz main () { unsigned char Sekundy = 0; // Nasza zmienna ustawiona na 0 DDRB = 255; PORTB...
W przerwaniu Int0 inkrementuj zmienną. Ustaw timer na jakąś jednostkę czasu i w przerwaniu od tego timera obliczaj cześtotliwość i zeruj zmienną
No tak teraz to widzę, zerowanie zmiennej powinno być na samym końcu warunku a nie za klamrą jak napisałem. Jest: [syntax=c] /* Wysyła komunikat do wyświetlacza */ lcd_puts(str); // Do nothing - echoing is handled by the ISR instead of in the main loop } RxCount=0x00; [/syntax] A powinno być: [syntax=c] /* Wysyła komunikat do wyświetlacza */ lcd_puts(str);...
Excray, twój kod zadziała raz na 255, zapomniałeś zerować zmiennej a :P Mylisz się. Po prostu nie zrozumiałeś jak działa ten kod. Nie trzeba zerować tutaj żadnej zmiennej. W zasadzie kod można jeszcze bardziej uprościć: [syntax=c] while(1) { if(!(PINC & 0x01)) PORTD ^= 0x01; }[/syntax] Jak widać żadne zmienne ani globalne ani lokalne nie są potrzebne...
Tylko liczone, że np przez 5 sekund było 77 impusów to później po upływie kolejnych 5 sekundach ( jeżeli rzecz jasna nie przejeżdżałem magnesem nad kontaktronem) wyświetlało się 0. O widzę że stary temat dalej żyje :D Tu po prostu, po wyświetleniu wyniku (println) ale przed odczekiwaniem tych 5 sekund(delay), musisz wyzerować zmienną, czyli dodać instrukcję...
Witam wszystkich. Zaprojektowałem i uruchomiłem zegarek z wyświetlaczami LED(SA10-21GWA) i układem PCF8583 współpracującym z mikroprocesorem Atmega8 oraz układami PCF8574AP na szynie TWI(i2c). http://obrazki.elektroda.net/21_12497604... http://obrazki.elektroda.net/58_12497606... http://obrazki.elektroda.net/95_12497605...
Przeczytałem uwagi. Zastosowałem zerowanie zmiennej "sredni" i opóźnienie w pętli do while. Gdy do kanału 0 , który jest kanałem pomiarowym podepnę masę (bez dzielnika) nie mam zera tylko 0,1 - 0,9 V stale się zmienające. Wymieniłem mikrokontroler i jest to samo. Mierzyłem napięcie akumulatorków 4*1,2 - miernik pokazał 5.02 V; atmega skaczące 4,60 -...
Co ten warunek if (T0IR & 1) sprawdza ? Sprawdza czy została ustawiona flaga od rejestru MR0 timera. Ściągnij sobie UM od LPC serii 2000, naprawdę nie jest straszny. [syntax=c]LPC_TMR16B0->MR0 = 12000 - 1;// odlicz 12000 us = 12 ms[/syntax] Odliczy 11999, po co odejmujesz 1 ? Kod poza tym sprawdza, czy 7 bit zmiennej cmd jest ustawiony. Jeśli tak tzn....
Całkowicie zapomniałem o temacie :) Z problemem poradziłem sobie w następujący sposób, jest to wycinek z większego programu więc coś może być źle wycięte :) [syntax=c] //--------------------------------------... // Dołączone biblioteki //--------------------------------------...
Witam! Napisałem program, który ma liczyć ile czasu trwał impuls i jaki jest odstęp między nimi. Problem wygląda tak, że mocno przekłamuje, ponad 2x i nie wiem z czego to wynika. Pomysł był taki, aby za pomocą przerwania od zrównania licznika uzyskiwać czas, czyli jedno przerwanie to u mnie 10µs. Gdy pojawia się impuls, ogólny czas między impulsami...
kolega może mieć racje jeśli chodzi o napiście zasilania. magistrale I2C jest typu otwarty kolektor i musi być zasilana z 5V. co do rezystorów to w różnych żródłach piszą różne żeczy gdzieś czytałem o 4,7k gdzieś nawet o 10k i o 1k też coś było. z tego wynikż że to mam małe znaczenie. ja używam 4,7k i działa ale wcale nie mówie że to poprawna wartość...
ups. znowu mój błąd. zapomniałem zerować zmienną I I=0 program u góry już poprawiłem moze teraz zadziała ??? :D
A spróbuj tak: Odczyt=Temp Dim Jednostki As Byte , Dziesiatki As Byte ' cyfry do wyświetlania temperatury Dim Temp As Byte ' temperatura Dim Pompka As Bit ' sterowanie pompką Dim Odczyt As Byte Dim Cyfrybcd As Byte Dim Ktorywysw As Bit Enable Interrupts ' oblokuj przerwania Enable Timer0 'odblokuj timer0 Enable Timer1 'oblokuj timer1 Config Timer0 =...
Aby uzyskać zerowanie po dłuższym zwolnieniu przycisku w mojej wersji, trzeba: - dodać :deklarację zmiennej do odliczania czasu: uint8t idle_time = 0; - zmienić warunek zerowania licznika na: if (++ n > MAX || idle_time == 100) - za blokiem if() dorzucić else if (khist == 0 && idle_time < 100) idle_time ++; ;)
Zmodyfikowałem przerwanie do takiej postaci: ISR(INT1_vect) //przerwanie od złącza PD3 (INT1) { if( ((PIND&0x08)==0)&... ) //jeśli został zwarty pin... { TCCR1B |= _BV(CS10); //start timera (przerwanie przez zrównanie) znacznik=1; //oznacz że rozpoczeło się liczenie...
Nie zerujesz zmiennej "w" przy kolejnych uruchomieniach, może coś jeszcze. Możesz przecież uruchomić to pod debuggerem i podejrzeć która instrukcja wywołuje błąd i jakie są wartości zmiennych przy jego uruchomieniu. Jeśli włączysz codeguarda to powinieneś też dostać jakiś sensowny komunikat ze wskazaniem na linię kodu, pewnie access overrun.
Poradziłem sobie z paskiem, ale dalej mam problem z ustawieniem timera. ................ Do If Pind.3 = 0 Then Czas = 0 Load Timer1 , 62500 End If If Czas = T_max Then Portd.7 = 0 End If Loop ............... Będzie to chodzić, czy bit Z był tu potrzebny? Obawiam sie ze nie. Po pierwsze, to zalezy jak dlugo Pind.3 = 0 Dopóki jest on =0, to za kazdym...
Witam, jak rozumiem pytasz nie o przebieg samego testu ale o cykliczne jego wywolywanie co np. 3h. Jak opisalem wczesniej podejsc jest wiele: - przerwanie wywolujace test, a przerwanie moze byc zglaszane wewnetrznie przez jakis timer lub zewnetrznie np. jakis ustawiany zegar - mniej eleganckie jest ustawienie w glownej petli jakiejs zmiennej i cykliczne...
https://obrazki.elektroda.pl/6483751800_... Witam, PROJEKT ostatecznie ukończony :D wersja ostateczna programów dla płytek MASTER Arduino Mega2560 i SLAVE ESP8266-12E Testowałem urządzenie przez kilka dni, w międzyczasie dokonałem kilku przeróbek, jak w kodzie tak i w połączeniach PIN itp. Usunięte zostały wykryte błędy, najważniejsze to...
Witam. Przypuszczam że znalazłem błąd w funkcji MemCopy , ale chciałbym sprawdzić czy nie występuje on tylko u mnie. :). Funkcja zwraca do zmiennej WORD lub INTEGER ilość skopiowanych bajtów. Jeżeli wynik ma być zwrócony, do zmiennej globalnej jest wszystko w porządku. Kłopot zaczyna się jeżeli wynik ma być zwrócony do zmiennej lokalnej, po zakończeniu...
Tak. Powyższy program będzie działać. W zmiennej A będziesz miał numer naciśniętego klawisza.
No teraz dobrze, ale czy to Ci w ogóle potrzebne? Zerujesz zmienną prze wejściem w pętle ... A wracając o głównego wątku, jeśli masz włączone przerwanie to jego czas dodaje się do tych 1780us, być może wiele razy na bajt (bo częstotliwości oscylatora nie podałeś) i sprawdzasz PD2 w niewłaściwym czasie ... Albert
bascom zerowanie zmiennej rzutowanie zmiennej zwiększanie zmiennej
olympia radio sprawdzić uzwoić stojan zasilać monitoring
nivona zawor drenazowy kosztowy irekr
Jak naprawić błąd silikon eartung w urządzeniach Ilość oleju w sprężarce rotacyjnej klimatyzatora 3,5kW