jak najprościej wykonać obliczenie zmiennoprzecinkowe (z dzieleniem) na liczbach uint8_t, tak aby wynikiem także była liczba uint8_t? Wcale nie musisz wykonywać dzielenia na zmiennoprzecinkowych :wink: wystarczy że zrobisz np: tak: uint8_t a; uint16_t b; b=(20*10)/3; b*=10; a = b/10; Zasada jest taka żeby "przesunąć" przecinek z ilorazu w prawo...
Do prostych operacji, zwłaszcza mnożenia, dzielenia, dodawania i odejmowania polecałbym jakiś format stałoprzecinkowy, nowa avr-libc ma może i szybkie, ale za to strasznie "rozdęte" procedury obliczeń zmiennoprzecinkowych. Ich rozmiar jest wręcz paskudny. Przykład, kod z mnożeniem, dzieleniem, dodawaniem i odejmowaniem zmiennoprzecinkowym w poprzedniej...
temat wałkowany już kilka krotnie. funkcje delay mają argument typu float jeśli podajesz zmienna jako argument do dodajesz również operacje zmiennoprzecinkowe na tej funkcji które .... dają efekt jaki uzyskałeś
Nie podoba mi się bezpośrednie połączenie wejścia ADC do napięcia mierzonego. Mógłbyś zastosować tam jakiś prosty filtr RC. A co, jeżeli jest tam sygnał prostokątny albo podobny? Będziesz miał wyniki pomiarów raz 0, raz 100%, a czasami jakąś przypadkową wartość jeżeli pomiar wypada w momencie narastania lub opadania zbocza. Czas próbkowania przetwornika...
Nie wiem czy to będzie istotne, ale w języku C/C++ istotnym na pewno jest przy jakimkolwiek dzieleniu stosować zapis , dla przykładu : [syntax=c]dodaj=modul_depth/8192.0[/synt... Wtedy kompilator wie że to co dzieli dzieli w sposób dedykowany liczbom zmiennoprzecinkowym, w innym przypadku jako wynik wyjdzie tylko część całkowita. Ale to też zależy od...
Czy można jakoś wprowadzić parametr do strtod aby zaczynał z innego miejsca niż początek zmiennej? Użyj sscanf i odpowiedniego ciągu formatującego. No tylko, że domyślnie sscanf nie zawiera obsługi formatów zmiennoprzecinkowych. A włączenie jej "nieco" zwiększy rozmiar kodu wynikowego.
Ta linia powinna być w przerwaniu Wtedy będzie miał błędy odczytu termometru gdy DS18B20_STOPINTERRUPTONREAD != 1 a gdy DS18B20_STOPINTERRUPTONREAD == 1 to multipleksowanie będzie działać źle. Ten kod jest słaby. Z najważniejszych błędów to, nie sprawdza crc, zawiesza na długo przerwania a wystarczy na czas transmisji bitu gdy wystawiane jest 0 na...
Używam wersji 20060421, o nowszej nawet nie słyszałem. może to problem z jakimiś funkcjami zmiennoprzecinkowymi. Czytałem gdzieś, ze w Makefile są opcje kompilacji z tym związane, ale niestety nie bardzo się w nich łapię. Hm.. A linkujesz bibliotekę libm? (-lm w opcjach linkera.. Nie doszukałem się tego w tym co wcześniej wkleiłeś..) Ogólnie używasz...
Programuję procesor Atmega 128 w gcc. Zmontowany układ ma mnożyć zmierzone napięcie przez przekładnię. Przekładnię zmieniam od 1 do 10 z krokiem 0.1. Problem jest w tym że w procedurze zmiany przekładni dodając do przekładni 0.1 lub odejmują na wyświetlaczu wyświetlają się wartości np. 9.3 i 9.5 a 9.4 nie idzie wyświetlić. Dodam że jeśli na stałe w...
Mnożąc zmienną typu WORD przez stałą CONST wychodzi niedokładny wynik. Np: WORD = 200 x CONST = 0.0025 = SINGLE = 0.499999933. Dokładność obliczeń zmiennoprzecinkowych jest kwestią długości (i formy) reprezentacji liczb zmiennoprzecinkowych. Z oczywistych względów w ośmiobitowych procesorach z małą pamięcią reprezentacja FP nie może być zbyt długa...
Witam, Zrobiłem VI w Labview do komunikacji z Atmegą32 przez RS-232. Atmega wykonuję obliczenia zmiennoprzecinkowe i wysyła w czterech bajtach dane typu float. Labview zaś po otrzymaniu czterobajtowych danych typy string, powinno konwertować je na dane float przy pomocy funkcji Scan from string. Niestety, ale nie wiem czemu labview widzi gdzieś problem...
Ten Twój program to, niestety, brak zrozumienia dla sprawy. W pętli Do Loop Until zbierasz 64 odczyty i je uśredniasz, ale tego wyniku w ogóle nie używasz... Zamiast tego robisz jeszcze raz odczyt zamazując poprzedni wynik uśredniania. Gdzie tu sens? :D Spokojnie możnaby też zrezygnować z użycia zmiennoprzecinkowej Single i program byłby mniejszy -...
Jeśli chodzi o tego typu rzeczy to polecam interpolację Newtona. Całkiem sprawny i dość dokładny algorytm interpolacji wielomianowej. Sam w ten sposób zaimplementowałem funkcje cyklometryczne (popularnie zwane arcusami). Cóż, jeśli chcesz to robić w BASCOMie to powodzenia, polecam C, jak już. W asemblerze z kolei byś się musiał za dużo męczyć. Poza...
NO jak musisz wykonać jakieś modulo, to musisz liczbę zmiennoprzecinkową zrzutować na typ stałoprzecinkowy. Bo nawet w matematyce modulo jest niezabardzo zdefiniowane dla liczb innych niż całkowite ;)
Jest to "poprawne rozwiązanie". Poprawne w cudzysłowie ponieważ jak widzę typ SINGLE w Bascomie to aż mnie coś bierze :) Ten sam program napisany bez użycia typu zmiennoprzecinkowego (wykorzystując tylko typ całkowity) wykona się dużo, dużo... szybciej i zajmie mniej pamięci programu i danych.
Witam Nigdy nie działałem za zmiennym przecinku, ale teraz muszę policzyć nie za ciekawy wzór i muszę to zrobić na typie Double Mam funkcję double fp_calc(void) { double fp; double HUMI=55; double TEMP=293.15; fp=((272.186*log(HUMI/100...
Zakup książek nie gwarantuje sukcesu jeśli się ich nie czyta. Osobiście przyjmę każdą książkę na temat techniki i chętnie przeczytam... Po wydaniu "takiej" forsy na lekturę powinieneś wiedzieć, że należy unikać w ośmiobitowych mikrokontorlerach typu Float/Single bo to wymaga dołączenia do kodu biblioteki do obsługi zmiennoprzecinkowych...a to wymaga...
Efekt byłby jeszcze lepszy, gdybyś dodał guziki do ręcznego obracania bryłą Istnieje możliwość ręcznego obracania bryłą względem dowolnej osi w czasie rzeczywistym. Działa też skalowanie i przesunięcia. Można sterować z terminala lub przyciskami. Program to umożliwia choć nie widać tego na nagraniu. Działa jakby w trybie auto dla celów pokazowych....
Po co typ double? Tu w ogóle nie potrzeba liczb zmiennoprzecinkowych, wystarczy int ściślej int16_t. Wydaje mi się,ze poprawienie tak prostego kodu nie ma sensu, szybciej i lepiej napisać to od nowa. Nie wiem jaka precyzja jest potrzebna, jaki zakres temperatur, może lepiej zrobić to na DS18B20?
Powinien ale cls daj przed petla a w niej zastosuj locate. Po za tym nie operuj warunkami na liczbach zmiennoprzecinkowych. Przelicz sobie jaka wartosc ma zmienna Wart_ac przy napieciu 1V i do niej napisz warunek.
Witam, Jeśli nie musisz nie korzystaj ze zmiennych typu single, lepiej przeskalować int'a kilka razy (np zamiast 1,232 robisz 1232 a przy wyświetlaniu dodajesz przecinek) operacje na liczbach zmiennoprzecinkowych zjadają spora flash i czasu procesora. Pozdrawiam, Marcin
W czym programować najlepiej w asemblerze, jeżeli masz zamiar robić w przyszłości poważne projekty! To chyba jakieś żarty :D Kto poważny dzisiaj poważne projekty pisze w asemblerze? Kto się w takim olbrzymim kodzie połapie? Kto po przerwie będzie wiedział "co robił ten fragmencik kodu"? Kto w prosty sposób przeprowadzi obliczenia zmiennoprzecinkowe...
do opcji linkera nalezy dodac -lm (myslnik el em) - dolaczy to do linkowania biblioteke libm.a, ktora zawiera definicje funkcji zmiennoprzecinkowych matematycznych z naglowka math.h niemniej jednak nie wiem czemu dolaczasz wprost biblioteki libc i libgcc - zapewne przez to masz problem (też) - usun je z makefile. 4\/3!!
polprzewodnikowy : _delay_ms może ma coś z funkcji, ale więcej to ma wspólnego z makrem niż funkcją. Przy tych makrach zabronione jest (pod rygorem ogromnych opóźnień oraz wzrostu rozmiaru kodu) używanie wyrażeń, których wartości kompilator nie może policzyć podczas kompilowania - wynika to z tego, że czas opóźnienia jest przeliczany na liczbach zmiennoprzecinkowych...
Pisząc w C, unikając liczb zmiennoprzecinkowych, zakładając programową obsługę 1-wire, sprzętową PWM, oraz bluetooth (UART) powinno się spokojnie zmieścić. Pozdrawiam
Wydaje mi się, że potrzebujesz dolinkować obsługę liczb zmiennoprzecinkowych w gcc/avr-libc. Niestety nie pamiętam teraz dokładnie jak to zrobić, a chwilowo nie mam na komputerze środowiska do sprawdzenia tego..
Powiem tak, ze jeśli działasz swobodnie w BASCOM i umiesz korzystać z not katalogowych procesorów, to przesiadka na C zajmie Ci z dobrą książką (osobiście polecam I. książkę Mirka Kardasia - sam się na niej uczyłem) 2-4 tygodni. A co do pisania programów w C na AVR i PC to powiedzmy sobie szczerze, że jest to jeden i ten sam język - różni się tylko...
Może pozbądź się tych zmiennoprzecinkowych operacji. Takie rzeczy można zarobić stałoprzecinkowo a różnica w prędkość i rozmiarze kodu jest kosmiczna. To bardzo proste: 1) Zakładamy 16 bitową rozdzielczość (można 32 jak się chce) 2) Przlieczamy współczynnik, o tak: 65536*0.351=23003 3) deklarujemy: unsigned short a; //16 bitowa bez znaku unsigned long...
Mam napisany moduł operacji na czasie, ale brakuje mi w nim funkcji obliczenia nr tygodnia w standardzie ISO. Zaproponował być kod w c dla AVR GCC z uwzględnieniem małych ilości RAM na uC Atiny, ATmega oraz oparty na arytmetyce liczb całkowitych (zmienno przecinkowe liczby są nie efektywne na AVR i większości uC) ? Obliczenie numeru tygodnia w standardzie...
Zła struktura, nieskończona rekurencja. Funkcje powinny zwracać wartość int. int tempok() { while(1) { if (xxx) { tempmax(); } } } int tempmax() { while(1) { if (xxx) { tempok(); } } } int main() { tempok();...
Wbudowana biblioteka liczb zmiennoprzecinkowych może zajmować swoje. Najprostszym rozwiązaniem jest zamienić zmienne na stałoprzecinkowe tzn int oraz używanie pewnego czynnika: np liczbę 1,5 zapisywać jako 1500, 0,333 jako 333 itd: ułamek razy 1000 zaokrąglony do liczby całkowitej. Zamiast 1000 można dać coś innego, można też zamiast int dać long long...
Dzięki za odzew Szybkość, szybkość, szybkość - jak wspomniałem program wykonuje tylko przeliczanie liczb binarnych 8-bitowych (x8 liczb) (nawet nie zmiennoprzecinkowych)(statystycznie rzecz biorąc najwięcej jest operacji typu przesunięcie bitowe) więc interesuje mnie coś co będzie miało zegar ustawiony na MAX (bo podejrzewam, że wszystkie procesory...
Zerknij do załącznika. Jest tam procedura obsługi ADC dająca na wyjściu wartość napięcia ze czterema miejscami po przecinku. Oczywiście BEZ UŻYCIA LICZB ZMIENNOPRZECINKOWYCH... Nie chce mi się teraz sprawdzać z ktorego wejścia korzysta, ale na pewno mogę powiedzieć, że źródłem referencyjnym jest napięcie zasilania procka. Dokładna wartość napięcia podawana...
Myślę, że nie. Wiem, że pozbycie się liczb zmiennoprzecinkowych przyspieszyło by obliczenia i myślałem wstępnie o tym. Odstraszała mnie zmiennoprzecinkowa trygonometria i obawa przed "pokaleczeniem" modeli przy zbyt niskiej rozdzielczości liczb. Powinienem gdzieś pomiędzy normalizacją (wstępnym skalowaniem i centrowaniem) a renderowaniem zastosować...
Wiesz 5 lat, nie 5 lat. Atmega8 to proc. który wg noty katalogowej pierwsze wydania miał w latach 2001-2002, więc posiadanie kompilatora z 8 letnim stażem i uaktualnieniami powinno być zdecydowanie bezpieczne, zwłaszcza, że atmega, czy attiny to nie kombajny posiadające takie perełki jak wsparcie dla zewnętrznych pamięci SDRAM, wsparcie dla wielowątkowości,...
Witam, mam problem tej natury że chciałbym wyświetlić liczbę zmiennoprzecinkową, lecz standardowo wykorzystywana funkcja sprintf w AVR-libc nie obsługuje typów zmiennoprzecinkowych i na wyświetlaczu dostaję znak "?". Problem w tym że nie umiem nigdzie znaleźć informacji jaka biblioteka pozwala na wyświetlanie takich liczb za pomocą funkcji sprintf.
Witam, napotkałem w swoim projekcie na dziwny wręcz dla mnie nie wytłumaczalny problem dotyczący mnożenia liczb zmiennoprzecinkowych. Poniżej kod który generuje problem: [syntax=c]float error = ( tutaj podaję różne wielkości z przedziału -100 do +100 ) float dana = error * 4.0f; [/syntax] Następnie zmienną dana wyrzucam sobie rs232 na komputer i otrzymuję...
Witam, Mam taki problem. Zastanawia mnie, dlaczego ten fragment kodu nie dziala poprawnie: unsigned char Line[17]; sprintf(Line, "%f", 234.0/212.0); LCD_Write(Line); Zwykle dzielenie floatow i wyswielenie ich na LCD [HD44780], za to wynik dziwny: na wyswietlaczu dostaje tylko jeden znak: '?' Pisze to pod ATMega8, wyswietlacz...
Ja napisałem Sobie taką implementację vfprintf w wersji full i tiny przełączane flagą, gdzie pierwsza ma wszystko według tego opisu: [url=http://www.cplusplus.com/reference/... oprócz zmiennoprzecinkowych reprezentacji. Reszta sprintf, snprintf, fprintf to pochodne tej funkcji. Wersja tiny 500 bajtów z opcjami left-pads i...
Cuda się dzieją i to niesamowite : Watt.c #define F_CPU 1000000UL // 1 MHz #include <avr/delay.h> #include <avr/signal.h> #include <avr/interrupt.h> #include <avr/io.h> #include <inttypes.h> #include <stdlib.h> #include <math.h> #include "Watt.h" #define REP_ADC 64 /*first array element is leftmost...
Bardzo dziękuje za tak pozytywne opinie ! :) Niestety moim językiem programowania jest mało finezyjny BASCOM, ale to dlatego że nie lubię dużo myśleć i można łatwo uzyskać zamierzony efekt-ale to kwestia sporna. Dzięki za polecenie gotowych płytek pokrytych warstwa światłoczuła,ale to jednak dla mnie nadal za droga metoda :P W któreś wakacje próbowałem...
Faktycznie zapomniałem dodać, że pracuję na ATMega 16, piszę w asemblerze. Zapoznam sie z problemem i na pewno wrócę z pytaniami, chyba, że ktoś podrzuci inny (bardziej przyswajalny) problem :) Czy "to" można zrobić w ATMegach, bo gdzieś obiło mi sie o uszy, że l. zmiennoprzecinkowe, to raczej trudno zaimplementować. Dzieki. We'll be in touch.
Wzory masz na stronie 243 dokumentacji : ADC= Vin*1024 / Vref Przy czym warto pamiętać, że wewnętrzne źródło odniesienia nie ma wartości 2.56V wziętej z kapelusza - ADC*5/2 daje wartość w mV. A użyty dzielnik napięcia usuwa to 2. Po pierwsze kolego dublujesz post który już był. Zacytowałem fragment Twojej wypowiedzi do której dopisałem komentarz -...
No ale właśnie mówiłem, że zysk na prędkości to wiadomo że jest pomijalny, jednak zysk na objętości kodu to już bardzo istotna sprawa i nie patrz na to w ten sposób, że tu akurat dałeś taki procek w którym masz aż tyle wolnej pamięci, bo po prostu na drugi raz będziesz wiedział że można to zrobić na mniejszym bez problemu ;) ..... a najważniejsze to...
Cześć mam taki kod który ma na lcd wyświetlać napięcie ale nie bazuje on na liczbach zmiennoprzecinkowych co jest żle bo lcd pokazuje U=0,59142V zamiast 2,56 około [syntax=c] //Załączenie pliku nagłówkowego #include"LCD/LCD.h" uint16_t funkcja(void); int main(void) { uint16_t a; uint16_t b; uint16_t zm; //Wywołanie funkcji inicjalizacyjnej initialization();...
Witam Ja Odczyt temperatury zrobił bym tak: .... 1wwrite &HCC 1wwrite &HBE Lsb = 1wread(): Msb = 1wread(): Minus = Msb.7 Tempa = Msb * 256 Tempa = Tempa + Lsb If Minus = 1 Then Tempa = Not Tempa Tempa = Tempa + 1 End If Tempa = Tempa * 10 'temperatura *10 Tempa = Tempa / 16 Jest to fragment kodu pozwalający na odczyt ujemnych...
Informacje o zmianach dostępne są po zainstalowaniu: Below is just a sample of what's new. Added support for these devices: AT90PWM216 AT90PWM316 ATtiny43U ATtiny48 ATtiny88 AT90PWM2B AT90PWM3B ATmega48P ATmega88P ATmega168P ATmega328P ATmega1284P ATmega32HVB Binutils 2.18 New version. GCC 4.2.2 New version. avr-libc HEAD (Future 1.6.0) New version....
a wiesz czemu niektorzy tak psiocza na bascoma? bo oducza myslenia. procesor jest procesorem i wciaz operuje wg zasad opisanych ... no gdzie? w instrukcji do bascoma czy w datasheecie procka? wydaje sie wam, ze skoro pisze, ze mozna zaladowac dowolna wartosc, to mozna sobie spokojnie wpadkowac tam liczbe 128-bitowa, albo moze lepiej zmiennoprzecinkowa...
Przerwanie co 8ms (ze względu na to że stosuje bascom i liczby zmiennoprzecinkowe nie mogę zejść niżej) ... Całość pisana jest w bascomie, w przerwaniu nie mogę zejść z czasem niżej bo dużo czasu zajmują obliczenia na zmiennych zmiennoprzecinkowych. No to nie stosuj zmiennoprzecinkowych obliczeń oraz zrób krok do przodu i zmień język na C. Co do samego...
Stałej F_CPU nie definiuje się w kodzie. Robi się to w ustawieniach kompilatora, szczególnie, że korzystasz z opóźnień za pomocą funkcji _delay_ms(). http://mikrokontrolery.blogspot.com/2011... Dodatkowo, jeśli chcesz, żeby procesor taktowany był zegarem 16MHz, to taki kwarc zewnętrzny musisz podłączyć oraz ustawić odpowiednie...
Dotychczasowe podpięcie pod komputer PC, nie ma prawa bytu, więc postanowiłem, że stworze moduł przekaźnika przy użyciu ATMega128. Dość ambitne przedsięwzięcie, tym bardziej jeśli robione od zera. Ale moim skromnym zdaniem użycie ATmega128 na dzisiejsze realia dokłada i tak do złożoności projektu sporo potencjalnych problemów i koniecznych kompromisów...
Implementowałem prostą sieć neuronową na DSP Texasa, miało się liczyć w czasie rzeczywistym. Sieć była wygenerowana w C przez STATISTICA Sieci Neuronowe. Po wrzuceniu sieci do procesora, okazało się, że liczy się coś koło 6 sekund. Ponieważ procesor był stałoprzecinkowy, a sieć zmienno (nie ja wymyśliłem taką konfigurację), problem rozwiązałem przez...
Zmien optymalizacje programu na -O0 Żeby została wkompilowana biblioteka liczb zmiennoprzecinkowych. Funkcji _delay_ms i _delay_us można używać tylko i wyłącznie przy załączonej optymalizacji. mojsamspam : Nie musisz. Po prostu zdefiniuj F_CPU na 20000000, tak jak byś taktował procesor zegarem 20MHz - wszystkie opóźnienia będą zajmować odpowiednio...
Sygnał o częstotliwości 10 kHz. Częstotliwość ADC dla 10 Bitów to 100kHz i to dla jednego kanału. Dla 8 kanałów wynosi 100kHz/8 . Czyli masz 10 pomiarów na okres dla pojedyńczego kanału. Względna dokładność. Do takich pomiarów to według mnie lepiej użyć C niż Bascoma. I broń Boże nie stosuj typów zmiennoprzecinkowych. Co najwyżej 32bitowy typ stałoprzecinkowy.
Witam janbernat czas goni :-) wiec siedze calymi dniami nad tym, najwiecej czasu zeszlo nad RS - 3 dni siedziałem i nie mogłem dojść gdzie leży błąd. :-( No mam juz w sumie zrobione nastawy w AT24C04, poczatkowo chcialem zrobic nastawy liczb zmiennoprzecinkowych, ale mija sie to z celem, gdyz nie stosuje ( i raczej nie bede) PID-a więc i tak na sterowaniu...
wiem wiem, że tak to się robi mam to napisane w programie dokładniej ten fragment jest za to odpowiedzialny: ................. Tyle, że czujnik ds18b20 nie podaje temperatury tak po prostu do procesora np.: 20 stopni Celsjusza tylko trzeba to troszkę przekonwertować za co odpowiedzialna jest ta część programu: fajnie miło i przyjemnie jeśli temperatury...
Albo użyć "sprintf" z biblioteki "stdio.h". sprintf (sbuf, "%0a.bf", temperatura); write_text (sbuf); W ciągu %... zamiast 'b' podstaw liczbę cyfr wyświetlanych po przecinku, a zamiast 'a' podstaw łączną liczbę znaków formatowanego ciągu łącznie z przecinkiem (kropką). Np. pisząc "%05.2f" dla temperatury równej "23.5" otrzymasz...
Po kolei: fantom - wiem, że taki istnieje ale jest troche bardziej skomplikowany niż niż te dla potęgi 2. morph13: soft jest ale niestety nie do wglądu bo powstał dla firmy. Ale służę pomocą: http://www.ise.pw.edu.pl/dydaktyka/psap/... soft powstał na bazie tych informacji, jest tam nawet kod w C funkcji do FFT, początkowo ta funkcja została trochę...
Witam. Chciałem zaimplementować filtr IIR na atmedze 32. Całość symulacji przeprowadziłem w matlabie i tam działa, jednak po przeniesieniu na atmegę filtr jest niestabilny (albo na granicy stabilności. Tak mi się wydaje). W matlabie policzyłem parametry a i b dla filtru dolnoprzepustowego i pomnożyłem te parametry razy 10000 (żeby nie robić obliczeń...
Witam Zabrałem się wczoraj za napisanie jednego z pierwszych programów (chyba 3). Ogólnie działanie programu zadowala mnie ................ Zwykle, jeżeli autor uważa że program pracuje poprawnie i jest z tego zadowolony więc kode "musi" byc dobry!(?) Ale skoro pytasz o opinie, to odpowiedź jest: bez urazy.........., bardzo kiepski. Po pierwsze: Nie...
If V == I Then Czemu kolega przesiada się z "C" na Baskoma? W Baskomie jest prościej If V = I Then przy czym nie wykonuje się V = I. Ponadto porównano w tym warunku zmiennie Single i Word Brak zakończenia End If dla If V = I Then For I = 0.1 To 1 - sam nie wiem jak to się wykona Lepiej chyba byłoby np. For I = 0.1 To 1 Step 0.1 Brak w tej pętli for...
Program wygląda dużo lepiej. I = 1wread(2) pobiera dwa bajty w których znajduje się temperatura. Polecam zajrzeć do karty katalogowej DS18B20 str.4. W I znajdzie się liczba 16 bitowa, gdzie pierwsze 4 bity to znak, następne 8 bitów to część przed przecinkiem, a cztery ostatnie to to co po przecinku. Liczby ujemne są w kodzie U2. S = I / 16 Powyższe...
Problem w tym, że schematu nie mam, prototyp narazie składałem na AVR. Generator jest taki sam jak w oryginalnym układzie i wszystkich innych, narazie bez rewelacji, bajery będą później. Bramka AND z 74LS08. Wyjście do wejścia timera 0, który zlicza sobie impulsy z generatora (dodatkowo jeszcze jest zliczanie ilości przepałnień licznika, bo mały jest,...
Aby Twój sposób liczenia działał zmienna wynik musiałaby być typu float. http://mikrokontrolery.blogspot.com/2011... Musisz się zdecydować, czy chcesz robić operacje na liczbach całkowitych, czy zmiennoprzecinkowych. Dodatkowo zapoznaj się z rzutowaniem i promocją typów: http://mikrokontrolery.blogspot.com/2011...
(at)Weis: pytania które zadajesz dotyczą w większości podstaw programowania w języku C, a ja na takie z zasady nie odpowiadam, bo są o tym strony, książki i tysiące tematów. Parametr typu FILE* nazywa się tak jak autor miał fantazję go nazwać, a nazwa ta oddaje jego rolę, która jest żadna, dlatego też parametr ten jest nieużywany. (at)flapo123: sama...
Panowie Piszę program w Bascomie do sterowania urządzeniem do cięcia drutu. Sam program jest prosty testowałem go w częściach na Attiny2313 i wszystko pieknie działa. Z uwagi na to że wykonuje operacje na liczbach zmiennoprzecinkowych potrzebuje więcej pamięci i zastosowałem Atmega8. Za żadne skarby nie mogę sobie poradzić z szybkością wykonywania programu......
Dzięki, jeszcze z ciekawości, duża jest różnica w poborze prądu? Mówię o operacjach na liczbach zmiennoprzecinkowych i całkowitych
Żeby było przydatne, powinien dzielić, mnożyć, potęgować liczby zespolone, przeliczać je z postaci wykładniczej (kąty w ° i rad) na algebraiczną i z powrotem, i umożliwiać obliczenia w notacji wykładniczej. To i tak znacznie mniej, niż możliwości tak mocnego mikrokontrolera, i to jeszcze z gotowym wyświetlaczem alfanumerycznym. Program wygląda mi na...
tylko tyle i już? Ale najpierw je wyłącz przed warunkiem if(), czyli przesuń cli() przed warunek. Edit: Ale podkreślam to: Problem do wyjaśnienia jest tylko taki, czy to co jest w części gdy warunek jest spełniony, nie trwa zbyt długo. tym bardziej, że używasz tam liczb zmiennoprzecinkowych.
Więc pytanie zasadnicze. Jak zaokrąglić otrzymany wynik zmiennoprzecinkowy w bascomie AVR? Wykorzystywanie liczb zmiennoprzecinkowych do odczytu temperatury z DS18B20 jest lekko mówiąc mało rozsądne, zwłaszcza że "po przecinku" może być tylko 16 różnych wartości. Takie rzeczy to się zaokrągla na etapie pisania programu, który potem operuje wyłącznie...
Tyle, że aby ją można było wykorzystać to tak chyba być nie może Niestety dopóki nie pokażesz całego programu, to tylko Ty wiesz co można, a czego nie. Generalnie należy unikać liczb zmiennoprzecinkowych na mikrokontrolerach takich jak ten z Twojego tematu.
Witam. Wydaję mi się że obliczenia powinieneś przeprowadzać na liczbach co najmniej 16 bitowych, 8 bitów może być za mało. Czy realizujesz regulację prędkości czy położenia takiego silnika? Ja osobiście implementowałem kilka regulatorów na AVRach, ale pisane były one w języku C. Między innymi typowy regulator PID, jednak by uzyskać dość dobrą dokładność...
Witam serdecznie, bawię się ostatnio zmiennymi w Bascomie. Zadeklarowałem dwie zmienne typu single żeby wykonać pewne obliczenia i po skompilowaniu kodu okazało się że ponad 50% pamieci flash mikrokontrolera zostalo zużyte. Czy to normalne? troche mnie to zaskoczyło. Czy nie da sie wykonywac operacji na liczbach zmiennoprzecinkowych w inny sposób, zeby...
Witam, jestem w trakcie tworzenia pierwszego projektu na mikrokontrolerze więc proszę o wyrozumiałość. Buduje kalkulator na zaliczenie laboratorium z mikroprocesorów. Ze wszystkim jakoś dawałem rade szukając samemu informacji w sieci jednak mam problem z wyświetlaniem liczb zmiennoprzecinkowych na LCD 2x16. Czy ktoś mógłby mi pokazać/podpowiedzieć jak...
Teraz muszę wykonać polecenie: "Tak jak pisałem wcześniej, domyślnie funkcje printf i sprintf nie obsługują liczb zmiennopozycyjnych. Zatem trzeba też w menu "Makefile->printf() options" zaznaczyć opcję "floating point"." ??? Do tak prostych obliczeń nie potrzeba używać liczb zmiennoprzecinkowych: http://mikrokontrolery.blogspot.com/2011...
Witam, a i jeszcze jedno pytanie niekumatego... dlaczego program z delay.h trzeba kompilować z optymalizacją?? Funkcje _delay używają arytmetyki zmiennoprzecinkowej. W przypadku gdy używasz optymalizacji i w wywołaniach funkcji wartości argumentów są znane w czasie kompilacji (np. są stałe), wtedy kompilator jest w stanie określić liczbę "przebiegów"...
Zakładam, że funkcja Getadc(0) zwraca wartość z przetwornika ADC. Dlaczego mnożysz wartość przez 0.0048? O ile się nie mylę, w ATMega8 jest przetwornik 10-bitowy, więc nawet największe wskazanie 1023 da Ci wynik 4. Dlatego masz zera. Skąd wartość 0.0048? Podaj jakie napięcie mierzysz i jak zasilasz układ ADC. Raczej unikaj działań na liczbach zmiennoprzecinkowych...
Chce wyswietlic na wyswietlaczu LCD liczbe zmiennoprzecinkowa a wyswietla mi jakies glupoty. To program: while(1) { StartADC(); pomiar=14.3; unsigned char width=4; dtostrf(pomiar,width,2,lcd_buf); write_text(lcd_buf); waitms(40); write_command(0x01); } Program zamiast 14,3 na wyswietlaczu pokazuje...
Zwykle bardzo łatwo jest zastąpić operacje na liczbach zmiennoprzecinkowych, operacjami na liczbach całkowitych. U ciebie w kodzie masz taki kwiatek: Pomoc3 = Cykl / Y Prc = Pomoc3 * 100 Czyli najpierw liczysz wartość która u ciebie jest ułamkiem, a póżniej praktycznie zamieniasz ją na liczbę całkowitą. A wystarczy zamienić kolejność i operować na liczbach...
Taki termometr można zrobić na ATTINY2323 :) A jeżeli chcesz zrobić konwersją prosto i łatwo do wytłumaczenia to robisz tak: Odejmujesz setki, dodając jednocześnie po jeden do innej zmiennej do czasu aż liczba będzie mniejsza niż 100 i otrzymujemy ilość setek. Tak samo liczymy diesiątki i zostaje nam liczba mniejsza niż 10, czyli liczba jedności. Koniec...
Po co uruchamiasz przerwania jak z nich nie korzystasz? Więc musisz sie zecydować, albo robisz przerwania w których liczysz przepłnienia, albo idziesz tą drogą co podałes u góry. W tym rozwiązaniu to zauważ że możesz mierzyć czas ale tylko do wartości gdy licznik się całkiem przpełni. Bedzie to około 5sek. Dłuższe czasy spowodują powstanie błedów. Zrób...
Wpierw drobny komentarz do postu użytkownika albertb: 1. Zmienne, których używasz w przerwaniu i których jednocześnie używasz w "zwykłym kodzie" powinny być deklarowane jako volatile. Dzięki temu kompilator nie wykonuje na nich niektórych optymalizacji. 2. Należy unikać stosowania typów zmiennoprzecinkowych (jak float) w mikrokontrolerach bez jednostki...
WItam. Generalnie algorytm cyfrowego regulatora PID powinien byc cyklicznie wywolywany ze stałym czasem odstepu, który okresla tez próbkowanie wartosci polozenia enkodera. W algorytmie PID powinien byc wiec uwzględniony czas Tp (okres probkowania) lub fp(czestotliwosc probkowania) a u Ciebie tego czasu nie widze. Algorytm PID powinienes wywolywac z...
Po drugie nie używa się zmiennych jako parametr _delay_ms(), to działa jedynie ze stałymi, bo to nie jest "normalna" funkcja. Ta funkcja jest najnormalniejsza w świecie, jak każda inna. Jej mankament polega na tym, że parametr odpowiedzialny za milisekundy jest typu float, więc jakiejkolwiek liczby byś tam nie wpisał to będzie ona promowana do takiego...
http://obrazki.elektroda.pl/7692140300_1... Przedstawiam prosty projekt zegarka (jakich wiele na forum), który nie zawiera układu czasowego PCF... tylko sam sobie mierzy czas. Nie wykorzystuje też powszechnego DS1820 ponieważ : 1. Dallas jest jednak droższy od LM335, 2. jestem leniwy i nie chciało mi się bawić 1wire w języku C. Na Bascomie...
Podłączać oczywiście, że możesz, ale nie zawsze jest to dobre rozwiązanie. Wewnętrznie zwarta jest tylko masa cyfrowa i analogowa i to nie we wszystkich mega8 (łatwo to sprawdzić miernikiem). AVCC i VCC w żadnym AVRe nie jest zwarta. W nocie do megi8 masz pokazane jak podłączać AVCC (dławik + kondensator). Napięcie zasilania jest za mało stabilne na...
Jakie masz arduino? To są właśnie analogowe, będę programował płytkę Mega . Potrzebuje 13 wyjść analogowych. Z tym może być problem. Żaden. W Mega funkcja analogWrite () może operować na pinach: 2-13, 44-46 https://www.arduino.cc/reference/en/lang... Problem jest. AVRmega NIE POSIADA DAC tak więc nie ma ANI JEDNEGO...
Witajcie ! Zgłębiam podstawy programowania w języku C dla AVRów, mam już za sobą miganie diodą, przyszedł czas na LCD. Mój program: [syntax=c]#include <avr/io.h> #include <avr/pgmspace.h> #include <avr/eeprom.h> #include "lcd44780.h" int main(void) { lcd_init(); lcd_locate(1,1); lcd_str("Hello World !"); // napis z pamiêci RAM...
rrata : Istnieją co najmniej dwa sensowne powody, aby _delay_ms wsadzić w pętlę: 1/ "The maximal possible delay is 262.14 ms / F_CPU in MHz." Co oznacza, że gdyby opóźnienia były większe niż (tutaj) 16ms, to pojawił by się problem z zastosowaniem tej funkcji 2/ Jeśli jako argument podać zmienną, to do kodu zostanie wkompilowana cała obsługa liczb zmiennoprzecinkowych,...
Oczywiście zgadzam się z kolegą revcorey z tym, że pozwolę sobie na kilka dopowiedzeń. Co do sterowników PLC które wspólnie wykluczyliśmy (a w każdym razie odradzamy)-posiadają one często dedykowane moduły służące pomiarom prędkości obrotowych więc tu nie ma problemu. Ale to tylko w ramach dopowiedzenia. Co do sterowania silnikiem przy pomocy mikrokontrolera......
Ale jeśli nie jest to absolutnie konieczne, to warto uniknąć aplikowania obliczeń zmiennoprzecinkowych. Jest mnóstwo sposobów, aby je obejść. Wtedy masz krótszy, szybszy kod a w razie błędów łatwiej dojść co działa źle.
W programie Proteus przeprowadzam symulacje , temperatura to "?" , zauwarzyłem też ze na pinach PDA5 w ATmega16 i D5 w wyswietlaczu nic sie nie dzieje(zaznaczyłem to na obrazku) może to uze http://obrazki.elektroda.pl/3394933700_1... wnętrznienie jakiegoś problemu , dodam tylko że przy tworzeniu pliku makefile zaznaczyłem możliwość liczb...
Właśnie po to masz procesor, żeby z hardware nie kombinować... Rezystancja termistora NTC w zależności od temperatury: R_{T} = A e^{B/T} A i B - wartości stałe, albo z katalogu, albo wyznaczone eksperymantalnie. Wartości potrzebna do ich wyznaczenia już masz (wartości rezystancji w rónych temperaturach), tylko pamiętaj, że do tego wzoru T podstawia...
- Nie mierzysz bez obciążenia, bo obciążenie stanowi sam układ pomiarowy. - kondensatory nie są doskonałe, z czasem wytracają zgromadzoną energię - mostki prostownicze nie są doskonałe, mają jakiś określony recovery time (nie wiem jak to po polsku), polega to na tym, że przez pewien moment po zmianie polaryzacji na zaporową dioda przewodzi w kierunku...
A ja zawsze w takich przypadkach zastanawiam się, po co ludzie komplikują sobie życie używając arytmetyki zmiennoprzecinkowej. Najczęściej nie zdając sobie sprawy z ani połowy spraw, o których wypada wiedzieć, aby świadomie (a nie odpatrując, lub metodą prób i błędów) taki program napisać. Przecież jako wejście nasz procesor otrzymuje jedną z 1024 wartości...
Mam dość nietypowy problem, nietypowy bo nie spotkałem się z nim na żadnym forum, ani na stronie o tej tematyce, które przewertowałem, a powoli doprowadza mnie to już do szału... :/ Problem polega na tym, że mój układ powinien wysyłać do komputera przez złącze COM pewne dane i pewne dane odbierać. Z uC powinny byc wysyłane 4 liczby zmiennoprzecinkowe,...
Nie bo chciałem zrezygnować z liczb zmiennoprzecinkowych bo sam7s nie mają jednostki fpu.Gdy bym miał pod ręką jakąś ATMege to z chęcią bym też zobaczył jak na niej te algorytmy się spisują;) Przesadzasz trochę. Liczby stałoprzecinkowe jeszcze bardziej pokazywałyby ten problem o którym piszesz. Stały przecinek ma stałe "ziarno" i tam gubiłbyś stałą...
Witam Procek to ATmega16. Kurcze nie mam teraz możliwości sprawdzenia czy zadziała, ale jutro z rana może później napiszę czy zadziałało. Teraz doczytałem dokładnie, że rezultat to zmienna tekstowa a nie typu single, może jak ją deklaruje jako single to się sypie w tym momencie ? A drugie pytanie jeszcze mam takie, że chcę zrobić np. termostat, czyli...
Szczerze powiedziawszy, to nie zamierzam niczego seryjnie produkować. I oto się rozchodzi przede wszystkim że jest to "dobre" do zabawy i odmóżdżenia. A jak zamierzasz rozbudowywać sterownik to wiesz w jakim kierunku i dobierasz procka do tego kierunku. Znaki można umieścić w zewnętrznej kości z pamięciom, sam program więcej nie zajmie więcej niż te...
http://obrazki.elektroda.pl/5924959500_1... Witam ponownie! Kilka dni temu chwaliłem się projektem "PALM v1.0 BETA Atmega128", a dziś chciałbym przedstawić komputerek do motoru lub roweru jaki zrealizowałem już jakiś czas temu na zamówienie. Urządzenie miało zastąpić oryginalne psujne, mechaniczne zegary. Funkcje i założenia: *Wyświetlanie...
bascom zmiennoprzecinkowy procesor zmiennoprzecinkowy operacja zmiennoprzecinkowy
paski ekranie cienkie zniekształcenia niskich tonach przepływomierz sprawdzić multimetr
dobra antena pokojowa wykrywacz metali schemat
Bosch SGS3002/13 – czy zmywarka ma czujnik przeciwzalewowy, float switch, AquaStop Kontrolka „drzwi otwarte” w pralkach Whirlpool, Indesit, Amica, LG – diagnostyka i naprawa