sprintf to dość potężna funkcja co jest okupione i szybkością, i rozmiarem zajmowanego miejsca, jak kolega Piotrus_999 zdążył napisać "taniej" będzie użyć utoa() i w zasadzie w tym przypadku wcale nie mniej wygodnie. A bufor c[] można wykorzystać dla różnych wielkości wielokrotnie.
(...) matować liczby z zerami wiodącymi (najlepiej bez sprintf zajmującego dużo FLASH), zwłaszcza w wypadkach jaki podałeś przy DS18B20 int16_t fraction = (temperature & 0xF) * 625; // Część ułamkowa, 625 = 0.0625 * 10000, przecież gdybyśmy wyświetlili samą liczbę po przecinku mielibyśmy 0.625 zamiast 0.0625 ? ### 1) Weryfikacja w asemblerze na uC...
ad2. To znaczy gdy tworzy swój plik makefile to tak właśnie pomija gdy korzystam z tych "dobry" podmienianych projektów to nie pomija. Prawdopodobnie w jednym z makefil'ów jest włączona optymalizacja Zwróć uwagę na takie słowa kluczowe w pliku jak: -Os ; -O0; O1; O2; oznaczają one stopień optymalizacji kodu ad3. Sporo osób (ja również) używają środowiska...
Juz bol znaleziony. Wlasnie wczoraj po kilku godzinach meki znalazlem problem. Mimo ze w przykladzie CV jest uzyta funkcja sprintf do konwersji float na lancuch char to sama funkcja nie obsluguje float (moze mam jakas stara wersje stdio. Musialem zrobic najpierw konwersje float na int i pozniej skorzystanie z funkcji sprinf do zamiany int na lancuch.
Pokaż prawdziwy schemat, ponieważ ten nie ma prawa działać. Masz tutaj zwarcie zasilania z masą (od nogi 17, pod C2, obok R9 jest mostek do masy). Skąd bierzesz zasilanie do VR1? Rozumiem, że potencjometr ma służyć do regulacji, ale ten układ trzeba zasilić, a na tym schemacie układ jest zasilany wejściem do regulacji (R)? I pokaż jak podłączyłeś ICLa......
a w niektórych przypadkach wystarczy też coś tak prostego: [syntax=c]char tmp[100]; #define lcd_printf(format, args...) {snprintf(tmp, sizeof(tmp), format, ## args); WyslijDoLCDString(tmp);}[/syntax] i już mozesz pisac wartosci dowolnych zmiennych. wada tego rozwiązania: cały tekst nie może przekroczyć sizeof(tmp), ale za to nie ma potrzeby tworzenia...
Wklej ten cały komunikat, a najlepiej cały raport z kompilacji. libm jest w AS standardowo dołączana i nie ma ona nic wspólnego z sprintf.
Odpowiedź jest niby prosta, wyslij po prostu "zmienna" nie używając sprintf. Pytanie jaki rozmiar ma owa "zmienna"?
Witam. A czy nie bardziej oszczędna była by funkcja dtostrf. Obsługuje ona liczby zmiennoprzecinkowe.
Oto odpowiedź: http://mikrokontrolery.blogspot.com/2011...
Przebrnąłem przez ten kod :) Co do ogólnej organizacji kodu, to nie będę się wypowiadał, bo jest to rzecz subiektywna i nieco drażliwa ;) W mojej opinii nadużywasz typu float oraz operacji na tego typu zmiennych. W wielu miejscach można byłoby użyć typu uint32_t z odpowiednio skalowanymi wartościami - to nieco komplikuje kod, ale przynosi wymierne korzyści...
Aby float działał w printf/sprintf , należy dodać w opcjach linkera dodatkową bibliotekę. Jak to zrobić, opisane jest pod koniec pierwszego posta w temacie http://www.elektroda.pl/rtvforum/topic10...
Prawdopodobnie napięcie Vref jest równe lub bliskie zeru. Jakieś zwarcie czy coś. PS. Zamiast: [syntax=c]sprintf(wynik,"%d", ADCL+ADCH*256);[/syntax] można napisać: [syntax=c]sprintf(wynik,"%d", ADCW);[/syntax]
Coś takiego znalazłem. Co prawda na Atiny ale można przerobić. [syntax=c]// // Talking to ultrasonic sensor HC-SR04 with an ATtiny84, and // sending distance data using serial communications. // // electronut.in // #include <avr/io.h> #include <string.h> #include <util/delay.h> #include <avr/interrupt.h> #define F_CPU 8000000...
Tym że funkcja sprintf jest w stdio.h
ISR(INT2_vect) //procedura obslugi przerwania { impulsy++; } A czy zadziała: (chyba powinno ;)) SIGNAL(SIG_INTERRUPT2)// gdy nastąpi przerwanie na wejściu INT2, wykonuje to co w klamrach { impulsy++; // każde przerwanie powiększa zmienną impulsy o 1 // tu wpisz swoją funkcję - opóźnienie o 40 milisekund } Ale spróbuj też w tym swoim...
Może spróbuj tak: (...) ADMUX = 1<<REFS0;// AVCC, channel 0 ADCSRA = 1<<ADEN | 1<<ADIF | 1<<ADPS2 | 1<<ADPS1 | 1<<ADPS0; char buf[10]; int a=1000; while(1) { ADCSRA |= 1<<ADSC | 1<<ADIF; while(! (ADCSRA&(1<<ADIF)&... // czekaj na koniec konwersji...
Ciekawie będzie gdy Code: const dana1 = 123 PROGMEM dana2 = 5; sprintf_P( buf, PSTR("%d-%d"), dana1, dana2); Tak, natomiast poniższy kod powinien zadziałać: [syntax=c]__flash const dana1 = 123; dana2 = 5; sprintf_P( buf, PSTR("%d-%d"), dana1, dana2);[/syntax]
A dlaczego kolega ma ustawiony bit ADLAR w ADMUX ( ADMUX = 0b00100000; )? Przecież to włączenie wyrównania do lewej w rejestrze ADC, więc trzeba to chyba później uwzględnić w obliczeniach. Chciałbym jeszcze zauważyć, że sprintf() operuje na zmiennej czterobajtowej, która w każdej chwili może zostać zmieniona przez przerwanie od ADC przykładowo w czasie...
Np. odbieram przez USART ciąg 49 50 51 65 66 67 na wyświetlaczu chciał bym wyświetlić 123ABC. Czyli chcesz wyświetlić reprezentację znaku ASCII o podanym kodzie? ( http://www.asciitable.com/ ) Jeżeli tak, to powinieneś użyć:[syntax=c]sprintf(str, "%c%c%c%c%c%c", w[0], w[1], w[2], w[3], w[4], w[5]);[/syntax]
Tak liczyć: (W tym kodzie czas jest trzymany w tablicy - pozycja 0 to jednostki sekund, 5 - dziesiątki godzin. [syntax=c] if (++ time[0] >= 10) { time[0] = 0; updtime ++; if (++ time[1] >= 6) { time[1] = 0; updtime ++; if (++ time[2] >= 10) { time[2] = 0; updtime ++; if (++ time[3] >= 6) { time[3] = 0; updtime +=2; if (++ time[4] >= 10) { time[4] =...
Na początek kwestia formalna: jest za dużo tabulatorów w kodzie przed komentarzami, przez to prawa strona posta oraz kodu jest ucinana na ekranie (mam mały ekran). Co do kodu: czytanie zegarka oraz formatowanie sprintfem w procedurze obsługi przerwania jest mocno słabe. Diabli wiedzą jak jest zrealizowany lib TWI. Jakby był oparty na przerwaniach to...
Wziąłem kod z tego artykułu http://mikrokontrolery.blogspot.com/2011... i na wyświetlaczu mam zamiast wyniku to znak ? Najprawdopodobniej przyczyną był brak poprawnego ustawienia środowiska projektu: http://mikrokontrolery.blogspot.com/2011...
Szanowny Panie Kolego... Uwag co do tego rozwiązania można mnożyć... 1. Dlaczego nie na przerwaniach? Taka biblioteka już milion razy w internecie była. Ta nie używa przerwań, blokuje działanie uC przy nadawaniu i odbiorze... 2. Po co funkcje do wysyłania CR i LF? przerost formy nad treścią 3. Funkcje do wysyłania liczb - fajnie, ale po co skoro można...
Próbujesz przepchać ramki CAN 125Kbps poprzez Serial 115.2k, jako stringi generowane z sprintf'a. E: Rzeczywisty transfer jest znacznie mniejszy, ale wciąż każdy bajt jest przesyłany jako 5 + wcześniejsze stringi. Nie wiem czy biblioteka do MCP będzie się wyrabiać, ale podbijanie prędkości uarta w Arduino kończy się gdzieś przy 300-500kbps. Z sprintf'em...
Albo problem elektryczny, albo włączony watchdog, albo błąd w implementacji sprintf.
Przeczytaj ten artykuł: http://mikrokontrolery.blogspot.com/2011...
Generalnie do tego służy funkcja "sprintf". Jednak ona ponoć zajmuje 2kb pamięci uC, więc nigdy jej nie używałem. Szczególnie biorąc pod uwagę to, że jest to funkcja uniwersalna. Ja osobiście robię coś takiego (dla liczb 2-cyfrowych, dla większych musisz rozszerzyć funkcję): Jeśli liczba jest mniejsza od 10 wyświetlam "0" i daną liczbę. Jeśli natomiast...
Dokładnie tak. Kompilator wykonuje dzieleni całkowite, stąd problem. Swoją drogą, po co ładować float i specjalną wersję sprintf dla tak prostej czynności? Nie prościej pomnożyć result*1000 i podzielić przez 8192, wykonując operację na liczbach całkowitych? Na koniec tylko odpowiednio wyświetlić przecinek i cała operacja jest o jakieś 7kB krótsza i...
Witam. Czy włączyłeś optymalizację kodu: -Os ? Warto też dołączyć bibliotekę: "math.h" ponieważ używasz zmiennych double, zmniejszy to objętość kodu wynikowego; i zmiennym nadać volatile. Czy dobrze skonfigurowałeś projekt? Poniższe : char str Dodano po 12 Na temat "dtostrf()" i "sprintf()" poczytaj ich opis w AVR-Libc np. na tej stronie https://savannah.nongnu.org/projects/avr...
Ramu mam cały zapas. Używam atmega128. Póki co zadowalam się rozwiązaniem: [syntax=c] strcpy_P( bufor, PSTR("%d") ); sprintf( bufor2, bufor, liczba ); [/syntax] Po chińsku ale działa. Na 100% problem tkwi w samym sprintf_P(). Co ciekawe raz ta funkcja mi ruszyła (użyta w main() ). Ściągnąłem najnowszą wersje WinAVR. Sprawdze, może poprawili ten problem...
Nie mam jak określić dokladnie częstotliwości, ale mniej więcej z przełożenia czujnika w skrzyni myślę że od 0 do 4000 impulsów na sekundę ( tak orientacyjnie), szerokość impulsu to 1/16 obrotu czujnika. Znalazlem dziś jedyny projekt, z którego mógłbym wziąć podstawę, ponieważ jest to obrotomierz czyli też zliczanie impulsów i podobno działa na takiej...
a mozna tez sprintfem wrzucic sfromatowany lancuch: float adc; unsigned char tmp[MAX]; adc = adc_result/1.0f; sprintf(tmp,"%f2.2 [V]",adc); oczywiscie trzeba pamietac o: -Wl,-u,vfprintf -lprintf_flt -lm
Ale ty nie wysyłasz tam stringa, tylko gołe dane binarne, skanowanie nie działa, bo spodziewa się tablicy znaków w formie np. "3.1415". Wypisz sobie w LabView otrzymane dane, to będziesz miał obraz sytuacji. Albo przekonwertuj w mikrokontrolerze na string za pomocą sprintf(), albo po stronie LabView złóż te wysłane cztery bajty do zmiennej float. Prawdopodobnie...
Korzystam z tych bibliotek i coś nie gra. Dostaje wynik 250000 Pa około. [syntax=c]//Pomiar napięcia przetwornikiem A/C i prezentacja wyniku na LCD 2x16 HD44780 #include <avr/io.h> #include <util/delay.h> #include "HD44780.h" #include "bmp180.h" #include "i2c_twi.h" void main(void) { long cisnienie; char wynik[]=" ";//bufor tekstowy, wyczyszczenie...
Jezeli masz taka funkcje jak sprint to zrob tak sprintf(Buffer,"WYSWIETLAMY LICZBE =%d ",LICZBA); %d - oznacza ze jest to format dziesietny ze smienna iloscia znakow LICZBA - rejestr typu int do wyswietlenia Buffer - bufot tekstowy w ktory otrzymasz dla liczby 6453 " WYSWIETLAMY LICZBE= 6453" czyli tekstowy czysto, latwy do wyslania na LCD Pozdrawiam...
Tutaj masz rozwiązanie problemu: http://support.atmel.com/bin/customer.ex...
Spróbuj tak sprintf(tekst, "%02i:%02i:%02i%",godzina, minuta, sekunda, dziesiatka);
Witajcie mam problem. Mam kod na procesor atmega32. Potrzebuję, aby działał on na atmega128. Jedyny błąd jaki wyskakuje to "ADATE undeclared" oraz ostrzeżenia (zaznaczyłem je w kodzie, żeby nie trzeba było szukać): ../przetwornik.c:31: warning: implicit declaration of function 'sprintf' ../przetwornik.c:31: warning: incompatible implicit declaration...
Możesz jeszcze użyć sprintf - np do wyświetlenia kilku zmiennych - ale tam możesz natrafić na znany w internecie problem, ze funkcja zamiast liczby zwraca "?". Z pomocą funkcji "Szukaj" znajdziesz jak go rozwiązać.
Witam, Chciałem napisać program do liczenia 'sekund'. Jest to początek mojej drogi do zrobienia zegara. Problem jest taki, że po 5 minutach zegar spieszy już o 3 sekundy. Gdzie popełniłem błąd? Prescaler ustawiony na 1024, atmega na 8MHz na kwarcu wewnętrznym(może tutaj jest problem?), według informacji które posiadam przerwanie powinno być generowane...
Początkowo też tak myślałem. Pokażę wam drugi kod, w którym pojawił się problem. main budowa struktury w zegar.h bufor mam cos takiego: [syntax=c_loadrunner]bufor="lol/0/0/0";[... zamiast [syntax=c_loadrunner]bufor="lol/0";[/syn... ale nie mam pojęcia skąd to się bierze... PS: Ktoś zna komendę na włączenie 2 linii wyświetlacza? :c
Faktycznie pomogło ale przy tej okazji jest inny problem: zostają poprzednie wartości wskazań na wyświetlaczu "duchy". Rzeczywiście. Funkcja lcd_puts() wrzuca na wyświetla stringa dopóki nie napotka 0 w tablicy, a itoa zakończy stringa 0 zaraz za ostatnią cyfrą. Wpisz na sztywno wynik[5]=0; i daj wcześniej pętlę [syntax=c]for(int i=0;i<=4;i++)if(wynik[i]==0)wynik[i]=...
juz mi rece opadaja, zastosowalem sie do procedur _Robak_'a i program sie wiesza w miejscu while ((ADCSRA & 0x10)==0); warunek nigdy nie jest spełniony... przypomne Aref=5V, zegar 11,052 Mhz. zaczalem sie zastanawiac czy nie jest po prostu uszkodzony przetwornik a/c w atmedze (nie mam teraz drugiej na podmiane). #include <avr/io.h> #include...
Witam i proszę o wyjaśnienie, dlaczego jeśli zmienna x w funkcji main jest typu long int to po zakończeniu pętli while ma ona wartość mniejszą (66) niż jeśli jest typu int (86). Dzięki. [syntax=c] volatile uint8_t timer1; ISR (TIMER0_COMPA_vect){ uint8_t x = timer1; if (x) timer1 = --x; } int main (void) { TCCR0A |= (1<<WGM01);//tryb CTC TCCR0B...
Postanowiłem zrobić taki test: Po wysłaniu przez atmega do at90 temperatury ten powinien zwrócić ciąg danych. Pierwsza dana to temperatura, druga 56, trzecia 40, czwarta 24 i piąta 8. Ciąg danych następnie wyświetlany jest na LCD i oto co dostałem. http://obrazki.elektroda.net/93_12152502... Czyli jakby 1 dana (ta wysłana przez atmega i zwrócona)...
To uświadom mnie co znaczy %l, bo ja nie wiem, a manual też milczy na ten temat. Albert
Spodziewałem się tego: 3.1.9. Nie ironizuj i nie bądź złośliwy w stosunku do drugiej strony dyskusji. Treści niezwiązane z teatem usunąłem.
Witam Mam problem z taktowaniem w moim projekcie. Pewnie jakaś głupota, ale obszukałem się jak głupi i już nie mam pomysłów. Jak tylko poskładałem układ, to zmieniłem taktowanie procka na zewnętrzny kwarc 10MHz, zmieniłem fusebity, wydawało mi się, że wszystko jest okej. Jednak konfigurując timer mocno mi się nie zgrywały czasy. Po dłuższym czasie studiowania...
Szkoda, że nie czytasz dokumentacji i nie korzystasz z moich porad. Program powinien być rozwijany w oparciu o kod, który wcześniej podałem. Nie zaś na przykładach z Google. Problem na 70 % związany jest i tak z zegarem. Oczywiście tu jest dość bezmyślny błąd: UCSR0B = (1<<RXEN0)|(1<<TXEN0) | (1<<RXC0); Powinno być tylko tyle: UCSR0B...
sprintf arduino sprintf tablica arduino sprintf
moment dokręcać nakrętka piast rozbieranie kluczyka kontroli płomienia
dobry nadajnik rs485 zmywarka candy 2d949
Odczyt hasła z panelu HMI Siemens - porady i metody Opel Mokka – brak reakcji pedału gazu, usterka APP, przepustnica, kody P2138, P2119