Witam! Wiersz z if: Przede wszystkim, zmienna x jest zmienną typu float (zmiennoprzecinkowa) a znaki reprezentowane są przez liczby typu int, zatem x powinno być zadeklarowane jako int. Pamiętaj, że przy operacjach arytmetycznych, typ char rozszerzony jest "z urzędu" do typu int a po ich wykonaniu przykracany do typu char! Dalej: w tym samym wierszu...
[syntax=c] int16 t16; int16 tTemp; t16 = (buf[0] | buf[1] << 8); tTemp=(t16*10)/16; [/syntax] "buf" to odczyt "scratchpad" termometru. Zmienna tTemp zawiera temperaturę w 0.1st, to znaczy np. 13.5 to będzie 135. Potem, jak chcesz to dziel przez 10 i na float albo dzielenie przez 10 z resztą i bez reszty, tylko trzeba znaku pilnować: [syntax=c]...
Przedewszystkim zrób to inaczej... po prostu... main() { char bufor[20]; ... funkcja(bufor, ...); } funkcja(char* bufor, ...) { } I w ogóle nie ma problemu. Zmienna tmp w ogóle jest nieporozumieniem. Przecież wewnątrz funkcji możesz sobie zadeklarowac tablicę o dowolnym wymiarze... funkcja(...) { char tablica[1000]; } A pamięć możesz zwalniać gdzie...
Kompilator owszem i u mnie błędów kompilacji nie sygnalizuje. Ale program strasznie jest "ociężały" powolny i zawiesza się po jakimś czasie pracy - czego nie zaobserwowałem w moich poprzednich wersjach. Mnie razi używanie delay(). O ile przebolałbym to w samym setupie to w pętli głównej jest nie do przyjęcia. No ale czat uczył się na kodach z netu....
Troszkę monolog z mojej strony ale - zostawię rozwiązania dla potomnych. Przyczyna wyświetlania tylko 2 cyfr dość banalna jak się okazało: - zmienna Sensor1Data była zadeklarowana jako int - zmieniono na float - konwersja Sensor1Data = atoi(Sensor1CharMsg); w prawidłowej postaci powinna wyglądać Sensor1Data = atof (Sensor1CharMsg); Śmiga - trzeba rozbudowywać...
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...
1. ($44*524288) + ($79*65536) + ($AC*256) + $CD 2. ($44*524288) or ($79*65536) or ($AC*256) or $CD 3. ($44 Shl 24) or ($79 Shl 16) or ($AC Shl 8) or $CD najszybsze chyba te bajty przedstawiają liczbę type DWORD więc musisz poprzez pointer wpisać je do zmiennej Float żeby wynik był poprawny. Albo jeśli wiesz jak jest skonstruowana zmienna float - to...
OK ... podmieniłem pętle czasowe na te wg. "bvr". Wykrywanie OK i odczyt około 0x017A. Pytanie ... widzę w jego kodzie jakąś konwersję ... do czego ona służy? Zmienna float jaki ma zakres danych? Sorry za pytania, ale nigdy nie posługiwałem się zmiennymi z przecinkami ;) Dodano po 34 //Jeszcze parę pytań ;) Jak ze zmiennej float wyciągnąć części dziesiętne,...
Witam, mam problem z przetwornikiem ADC w LPC1768. W instrukcji użytkownika LPC1768 jest napisane, że ADC jest 12-bitowy ale gdy wartość rejestru danych ADGDR jest równa 0x3FF (10 bitów !!!) jest to już napięcie bliskie/równe Vrefp. W moim przypadku z rejestru ADGDR odczytuję wartości większe od 0x3FF. Na wejście przetwornika podaję napięcie zmienne...
Witam, Zgodnie z lekturą http://www.jaglarz.com/ja/elektronika/ds... próbuję odczytać temperaturę. Przepisałem wszystko tak jak jest w dokumencie, sprawdziłem kilka razy - wydaje mi się że błędu nie popełniłem. Mimo to odczyt temp. nie działa. Otrzymuję wynik -0.1 Oto kod: /* * ds18s20.h * */ #include <avr/io.h> #include <stdlib.h>...
Czyli wyczyszczenie magistrali następuje w pierwszej linijce tej funkcji, tak? Mam cały program i coś jest nie tak. Temperaturę z MCP9700 odczytuje prawidłowo, a z dallasa mam ciągle "cisza". Poza tym wszystko działa bardzo wolno i jak wyjmę kondensator filtrujący spomiędzy pinów MCP9700 to nie reaguje na zmianę napięcia. Procesor to ATmega8 i jest...
Dzięki za chęć pomocy, oto program który wysłałem na maila: #define F_CPU 1000000UL // oscylator wewnetrzny AtMega8 #include <avr/io.h> #include <stdlib.h> #include <util/delay.h> #define WE 5 // przypisanie linii 1-Wire dla pinu PC5 #define PORT_1WIRE PINC #define CLEAR_1WIRE DDRC&=~_BV(WE) // stan niski magistrali #define...
Witam, problem polega na tym, że po przekroczeniu wartości 255 na ADC co u mnie odpowiada 8,6V wartości pobierane z ADC nie zmieniają się aż do osiągnięcia wartości ok 280. To samo ok 743 do 768. Napięcie na wejściu ADC zmienia się ale odczytywane wartości już nie. Być może problemem jest: return ADCW; które może zwraca 8 bitów zamiast 10? Wszędzie...
Przy zamianie ośmiocyfrowych liczb long do postaci float pojawiają mi się zaokrąglenia na ostatniej pozycji. Czasem o jedną, czasem o kilka jednostek. Na przykład: Zmienna long przed konwersja: 88888889 Zmienna float po konwersji: 88888888.00 Nie dokopałem się do powodów takiego stanu rzeczy. Jakieś pomysły jak z tym walczyć?
Witam wszystkich Mam mały problem. Mmam dwie zmienne FLOAT zmienna1; BYTE zmienna2; i chce zrobić konwersje zmienna=(BYTE)zmienna1; to które bity mi wezmie ze zmiennej1 i wstawi do zmiennej2. np. jezeli mam FLOAT zmienna1=3421.2323 lub zmienna1= 65653421.2323; to co odpowiednio zostanie?
To nie ma znaczenia czy float czy double. Jeśli zmienna jest typu float to dodatkowo dochodzą jeszcze konwersje float->double double->float fpu_enable() jest wywoływane wcześniej - to jest Twój kod. Problem i tak jest w tym, że nie ma obsługi sprzętowego fpu - kompilator wszystkie operacje na zmiennoprzecinkowych wykonuje programowo.
Udało się to wykonać, jestem na etapie konwersji zmiennej string na float. I teraz po konwersji mam zmienną A=27.500, chciałbym aby zmienna A miała postać i była wyświetlana jako A=27.5, czyli bez tych dwóch zbędnych zer. Jak można je usunąć?
Nigdzie nie podałeś (albo ja niedowidzę) jakiego typu jest zmienna temp_current ... a to pewnie jest przyczyną problemów
Napisałem poniższą funkcję do konwersji liczby typu float na stringa, który go reprezentuje. W symulatorze AVR Studio sprawdziłem czas takiej konwersji przy zegarze 16MHz i wyniósł on ok 500µs. Czy ma ktoś pomysł jak bardziej zoptymalizować tą funkcję? Inna sprawa to optymalizacja wykorzystywanej pamięci, bo w tej chwili wykorzystuje jeśli poprawnie...
metoda kolejna to w wywołaniu lcd.print aby wyświetlić wartość zmienna jako liczbę całkowitą: A gdzie w tym kodzie masz zmienną w postaci liczbowej? Wszystko co dostaje z Thingspeak to stringi. Musi je więc najpierw skonwertować do zmiennej liczbowej aby wyświetlić używając[syntax=c] lcd.print(zmienna, 1);[/syntax]. Jak juz konwertuje, to zrobi od...
Kwestia połączeń jest raczej mniej prawdopodobna, bo błędny wynik oznaczałby błędy transmisji, a te okresowo powodowałyby "przeinaczenie" komend i brak poprawnej komunikacji z sensorem (co przy dobrze napisanej obsłudze 1wire wyrzuciłoby komunikat o błędzie). Tutaj jest kwestia tylko samego wyniku i właśnie przy samej konwersji szukałbym przyczyny....
Dołączałem już math.h float.h i dalej to nie pomaga, problem chyba tkwi w odpowiednim użyciu bibliotek newlib. Poprzedni post mogl wprowadzic Cie w blad. math.h to nie jest zadna biblioteka tylko plik naglowkowy - zawiera on miedzy innymi prototypy funkcji matematycznych, definicje typow danych i stalych. Biblioteka odpowiadajaca za funkcje matematyczne...
odczytanie i wysłanie całego bajtu [syntax=c]void send_byte(char wartosc) //wysyla caly bajt do ukladu { unsigned char i; //licznik unsigned char pom; //zmienna pomocnicza for(i=0; i<8; i++) { pom = wartosc>>i; //przesuniecie bitowe w prawo pom &= 0x01; //skopiowanie bitu do zmiennej pomocniczej send(pom); //wyslanie bitu na magistrale...
Witam, Piszę program na Atmega8 który wyświetli mi liczbę float na wyświetlaczu BCD. Sama zmienna globalna float nie zajmuje za dużo miejsca. Moim sposobem na wyświetlenie tej liczy jest: [syntax=c] int pom; volatile float zmienna = 34.9; volatile int jednosci, dziesiatki, setki; i dalej: pom = (zmienna*10); // 34,9 zamieniam na 349 jednosci = (pom%100)%10;...
Witam. Odpaliłem właśnie bibliotekę freemodbus na avr i potrzebuje informacji w jaki sposób zapisać w rejestrach Read Holding registers liczbę float. Rejestry Read Holding registers w tej bibliotece są uint32_t. Ogólnie w programie działam na liczbach całkowitych. Przykładowo mam taką wartość rzeczywistą pewnej zmiennej (5,25) to mnożę ją razy 100 i...
Cześć, Znalazłem w kodzie: if ( IN_L>=0x00008000 )IN_L |= 0xffff0000; Czyli: jeśli liczba ma znak "-" to robimy OR'a tej liczby z 0xffff0000 przez co mamy tę samą liczbę, także w kodzie U2 tyle, że zapisaną na 32 bitach (jeśli jest dodatnia to starsze 16 bitów defaultowo wypełni się zerami) - czyli zmienna typu int jest w C traktowana jako zmienna zapisana...
...proszę o sprawdzenie i korektę błędów z komentarzem... //--------------------------------------... // >>>>>>>>>>... V O L T O M I E R Z <<<<<<<<<<... //--------------------------------------... //##################...
Oczywiście, że mam rację - nie raz się o tym przekonałem. Nawet na stronie, którą podałeś jest napisane - podejrzewam, że z resztą przez Ciebie: "... Ponieważ podana stała zostanie wyliczona na etapie kompilacji programu, w efekcie w finalnym kodzie żadne obliczenia zmiennopozycyjne nie będą wykonywane." STAŁA a ja pisałem o ZMIENNEJ - a tu "obliczenia...
1.Po pierwsze zrób tablicę int, a nie float - konwersja jest niepotrzebna, a i w pamięci będzie to zajmować 2x mniej miejsca. 2.Zmienna x jest wykorzystywana jako indeks wyłącznie w przerwaniu ADC, nie musi być więc globalna, ani volatile, zrób ją jako static uint8_t x; w ramach ISR. 3. Trybu free running nie musisz zatrzymywać, niech sobie sampluje...
Dziękuje wszystkim za odpowiedź, kod który mu wpisuje działa. Problem był z obsługą ADC... ADC ładnie pracują ale bez deklaracji preskalera? Kod na którym mi porty działają to: [syntax=c]#include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include "HD44780.h" #include "HD44780.c" #include <stdio.h> #define...
Działać trzeba na liczbach całkowitych typu uint, które są podstawowym rodzajem zmiennych we wszystkich sterownikach. Pilnujemy żeby działania zawsze mieściły się na szesnastu bitach, czyli w zakresie 0-65535. 50 [min] * 100 [%] / 50 [%] = 50 [min] * 100 [%] / 30 [%] = 50 [min] * 100 [%] / 20 [%] = Pierwszą i trzecią wartość z równań można wyrzucić...
Na początek podam kod:[syntax=C] #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include "hd44780.h" //definicja napięcia referencyjnego #define VREF 5.05 volatile float adc;//zmienna do obliczeń napięcia int main(void) { char wynik[]=" ";//bufor tekstowy, wyczyszczenie bufora //Inicjalizacja ADC ADCSRA = (1<<ADEN);...
Funkcja ta konwertuje zmienna typu double (ten typ na AVR nie jest supportowany, jest to rownowazne z typem float) na string, do bufora, ktorego adres podajesz jako jeden z parametrow. Bufor musi byc na tyle duzy, zeby pomiescic maksymalna konwertowana liczbe + jeden bajt na znak konczacy string (0). Jesli masz bufor o dl. np. 5 bajtow a sprobujesz...
Witam, nie koniecznie problem ale chciałem przedstawić sposób na to aby przedstawić dowolną zmienną z pomocą zmiennej tekstowej string (ciąg HEX) i odwrotnie. Podana przeze mnie metoda robi dużo więcej niż tylko zmienia int na hex czy hex na integer obsługuje oprócz tego String,Int, Long, byte, word, fload, double, oraz tablice i struktury i dowolna...
Witam Do paru dni usiłuje uruchomić banalny program odczytujący temperaturę z DS18b20 oparty na artykule zamieszczonym w necie: http://www.jaglarz.com/ja/elektronika/ds... Niestety nie udaje się uruchomić programu na wyświetlaczu -0.1 Znalazłem identyczny temat na elektrodzie ale bez konkretnej odpowiedzi http://www.elektroda.pl/rtvforum/topic18...
Witam Programuje 2x ADC które szczytuje mi wartości z potencjometrów podłączonych przez dzielnik napięcia do portów PC0 PC1, za pomocą przerwania ADCSRA ( ADIE -Kiedy ten bit jest ustawiony wraz z I-bitem w rejestrze SREG wtedy aktywne jest przerwanie od zakończenia konwersji.) Robię tak za pomocą przerwania a nie timera bo nie chce aby mi ciągle czytał...
Witam, mam problem z tą komendą search rom. Wziąłem kod od kolegi OmikronNs, który jest powyżej i wszystko śmiga ale tylko gdy daje komende Skip ROM, a przy probie odczytu kodu ROM i użyciu Match ROM, nie wyswietla temperatury. Tutaj jest mój kod: [syntax=c]int main(void) { char buf[8]; //Zmienna potrzebna przy konwersji temperatury unsigned char volatile...
Witam! Mam problem co do odczytu temperatury z czujnika DS18B20. Jest podłączony pod PD7. Wynik to -0.1. Jeżeli odepnę czujnik wynik jest ten sam. Wie ktoś dlaczego ? Kod: ... #define WE 7 #define PORT_1Wire PIND #define SET_1Wire DDRD &=~_BV(WE) #define CLEAR_1Wire DDRD |=_BV(WE) char buf[8]; //resetujemy magistrale - czekamy...
Witam, czy moglibyście wytłumaczyc jak prawidłowo zapisać w kodzie wyświetlanie temperatury na lcd 2x16...Cały czas mam problem z dobraniem offsetu.... w chwili obecnej pokazuje mi zakres tem od -25C do 25 C . Stan początkowy 262mV ---> 21.68C..Lm35Dz mam w konfiguracji z pomiarem ujemnych temp poprzez dołaczenie R18k i 2diód.(podniesieie nap masy)......
Napisałem taki oto program do pomiaru napięć: Kiedy uC działa z wewnętrzną częstotliwością 1MHz i ma wyłączony JTAG, czyli ustawienia E1 i D9 wszystko jest ok (ADC4 i ADC5 mierzą napięcia). Kiedy jednak zmieniłem ustawienia na wewnętrzną częstotliwość 8MHz lub 4MHz i też wyłączony JTAG, czyli E4 i D9, to wyświetlacz pokazuje mi podobne napięcie w obu...
`sprintf()` używa bardzo dużo pamięci. Niewinnie wyglądające `val * 3.3 / 4095;` to w istocie mnożenie na typie `double` (standardowy błąd osób które biorą się za zmienny przecinek). Proponuję więc zacząć od: - użycia `s i printf()` (wersja bez wsparcia dla zmiennego przecinka, zużywa dużo mniej RAMu, nie robi alokacji dynamicznej) [zakładam że mowa...
Walk ciąg dalszy, dla łatwiejszego zrozumienia tego makaronu wywaliłem to co uznałem za stosowne, zostawiłem tylko te funkcje które pozwolą mi pomierzyć V na 2 kanałach. Bez przerwań, bez dodatkowych deklaracji wprowadzających zamęt. Ale dalej nie działa tak jak bym tego chciał :/ #include <avr/io.h> #include "hd44780.h" #include <stdlib.h>...
Ja bym to zrobił zupełnie inaczej: Stała konwerja ADC - > przerswanie i w przrerwniu adc obsługa logiki ADC czyli liczenie jakiejs sredniej , odrzucanie, przypadkowych wynikow itp Jak pomiar jest gotowy to ustawiasz flage ze pomiar jest gotowy. możesz sobie zrobic kolejke wyników i inne wodotryski Jeżeli masz żłozone obliczenia (np float) bierzesz i...
Witam! Napisałem program w C do mierzenia napięcia przez ADC w ATmega8, odczytuję z przetwornika wartość bitową od 0 do 1023. I dotąd jest wszystko ok, ale chcę sterować diodą na innym pinie(np PB1) w ten sposób, że gdy wartość odczytana będzie mniejsza od 500 to dioda ma nie świecić, a gdy przekroczy 500 ma świecić. Problem w tym, że gdy włączę układ...
Witam, chciałem przetestować porty ADC wyświetlając wynik na LCD. Korzystam z kodu przedstawionego tutaj: http://obrazki.elektroda.pl/3988361600_1... [syntax=c]#include <avr/io.h> #include <util/delay.h> #include "HD44780.h" #include "HD44780.c" #include <stdio.h> //definicja napięcia referencyjnego #define VREF 5.0...
Witam. Mam problem z kompilacja programu. Posiadam gotowego maina i biblioteki tylko nie wiem czy to wszystko dobrze robie... Jest to program do wytrawiarki który steruje grzałka i wyświetlaczem LCD. Chciałbym go nieco przerobic. Tak wyglada main: http://obrazki.elektroda.pl/5703366500_1...
Problem związany jest z konwersją float/double do AnsiString. Generalnie wykonuję to tak: [syntax=c]jakas_nazwa_obiektu->Caption = "Jakiś napis: " + jakas_nazwa_obiektu->Caption.FloatToStrF... ffExponent, 40, 1);[/syntax] Zgodnie z [url=http://docs.embarcadero.com/product...
Mam płytkę z PIC16F877A mam podłączony wyświetlacz, na którym na bieżąco wyświetlam napięcie na AN0 (analog nr 0).Chciałem póki co zrobić zwykły woltomierz, ale mam problem ze sformatowaniem części dziesiętnej. 10bit ADC ma teoretycznie 5 mV dokładności,ale mam problem bo nie według kompilatora nie mogę używać typu float. -Używając sprintf( %f , zmienna)...
Witam! Podaję Ci zmodyfikowany nieco programik. Dodano po 11 Witam! ad Twój dodatek: Po pierwsze, lepiej liczbom zmiennoprzecinkowym nadawać typ double zamiast float, bo typ float zawsze jest awansowany niejawnie do typu double, podobnie jak typ char i short do typu int. Ale idziemy dalej. w wierszu: [syntax=c]srednia = suma / ilosc;[/syntax]suma i...
operuj na zmiennych typu uint8_t (osobno część całkowita, osobno dziesiętna), wówczas nie będziesz musiał marnować kodu na float i jego konwersję, co jest " trochę nieoptymalne". poszukaj w sieci bibliotek Petera Danneggera - będzie szybciej. poszperaj w postach na forum, było już chyba wszystko na temat tego czujnika. Wydaje mi się że unit8_t nie...
float konwersja konwersja float zmienna float
emachines sterowniki lc320w01 inwerter wtrysk common
esperanza płyta indukcyjna esperanza płyta indukcyjna
Jak przywrócić hamulec elektryczny w Toyocie C-HR? Turnigy Eclipson, Eclipse 2K Wi-Fi – instrukcja obsługi, konfiguracja, funkcje FPV