logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Wprowadzanie danych z klawiatury i odczyt z układu po SPI

pawgo2606 25 Kwi 2012 21:50 1697 3
REKLAMA
  • #1 10833085
    pawgo2606
    Poziom 10  
    Witam
    mam problem z działaniem programu..
    Kod: text
    Zaloguj się, aby zobaczyć kod


    w przypadku gdy mam nieaktywny warunek //if(ii==10) a właściwie pomiarADS=(data2/(float)16777216)*10000000; na wyświetlaczu mam wyprowadzanie i zamianę liczb na postać dziesiętną w przypadku wyświetlenia tej funkcji mam rózne ciągi znaków np 1610828568 itp. nie wiem gdzie robię błąd..

    Dodano po 25 [minuty]:

    pomiarADS=(data2/(float)16777216)*10000000 wina takiego zapisu... tylko co on ma wspólnego z danymi wprowadzanymi z klawiatury??
    typy zmiennych
    int32_t data;
    int32_t data2=0;
    unsigned long int dana;
    unsigned long int dana2;
    float pomiarADS;

    Dodano po 14 [minuty]:

    zamianę realizuję w następujący sposób
    Kod: text
    Zaloguj się, aby zobaczyć kod

    sprawdzałem i na bank chodzi tu o typ float... program mi głupieje przez to...
    mam dodane biblioteki
    #include <avr/io.h>
    #include <util/delay.h>
    #include <inttypes.h>
    #include <stdlib.h>
    #include <string.h>
  • REKLAMA
  • #2 10834038
    Szumlus
    Poziom 17  
    Witam,

    Zamień float na jakiś inny typ.
    Załóżmy że pobierasz int z przetwornika.
    Mnożysz pobraną wartość przez rozdzielczość przetwornika w [mV] (Vref/2^rozdzielczość bitowa), następnie skalujesz i gotowe.
    Zajmie to na pewno mniej czasu uP, mniej RAM i Flash niż jakakolwiek operacja na float.

    Co do Twojego błędu to szukał bym przyczyny gdzieś indziej...co ma piernik do wiatraka...ewentualnie float może gdzieś pośrednio powodować błąd,np. procesor nie wyrabia z obliczeniami

    Pozdrawiam,
    Marcin
  • REKLAMA
  • #3 10835547
    pawgo2606
    Poziom 10  
    Kod: text
    Zaloguj się, aby zobaczyć kod


    w ten sposób realizuję wyświetlanie danych na wyświetlaczu.. może tu tkwi problem??

    Dodano po 1 [godziny] 14 [minuty]:

    cały czas bez zmian... stoję w miejscu z tą zamianą i wyświetleniem danych

    Dodano po 1 [godziny] 40 [minuty]:

    pobieram int ale przy dzieleniu muszę przecież podać float więc musi to zostać... czy ktoś spotkał się z podobnym problemem że przez typ float nie działał program prawidłowo??

    Dodano po 10 [minuty]:

    dodam jeszcze że pomiar mam 24bitowy więc otrzymaną liczbę muszę podzielić na 2^24 oraz wyskalować w [V] co robię zamieszczonym fragmentem kodu. chyba że ktoś może mi polecić inny sposób zamiany bez typu float..
REKLAMA