Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Atmega8 - Odczyt wartości z potencjometru i ich przeskalowanie

pele2 28 Sty 2014 08:39 1257 6
  • #1 28 Sty 2014 08:39
    pele2
    Poziom 9  

    Mam taki problem.
    Mam mały projekt na Atmega8.
    Moja funkcja przyjmuje wartości 1 - 5
    I ten parametr chciałbym regulować potencjometrem.
    Tylko że z potencjometru odczytuję wartości 0 - 255
    I tu nie wiem jak zrobić żeby jedno skrajne położenie było traktowane jako 1, a drugie skrajne położenie jako 5 (i oczywiście wszystkie wartości pośrednie z dokładnością 0.1)
    Pewnie te wartości trzeba przemnożyć przez jakąś funkcję ale nie mam pojęcia jak ją ułożyć.
    Pomożecie?

    0 6
  • #2 28 Sty 2014 08:52
    dondu
    Moderator Mikrokontrolery Projektowanie

    pele2 napisał:
    Pomożecie?

    Już Gierek o to pytał - pewnie że tak :-)

    To zwykłe działanie matematyczne pod warunkiem, że potencjometr ma charakterystykę liniową.
    Stąd dwa pytania:
    - jaki język?
    - czy potencjometr jest liniowy?

    0
  • #3 28 Sty 2014 09:24
    BlueDraco
    Specjalista - Mikrokontrolery

    Przede wszystkim - nie używaj ułamków. Możesz zapisywać dane jako liczby przeskalowane, czyli np. zakresowi od 0 do 5 z rozdzielczością 0.1 odpowiadają liczby całkowite 0..50.

    Przeskalowanie wyniku z dowolnej liczby stopni a na dowolną liczbę stopni b uzyskujesz mnożąc wynik przez b i dzieląc przez a, czyli np. x * 5 / 256.

    0
  • #4 28 Sty 2014 14:29
    voytaschec
    Poziom 24  

    Ogólny wzór na taki przypadek to:
    y = (x*4)/255 + 1
    gdzie x to wartość ADC, a y to wartość dla funkcji.
    Jednak, tak jak pisał BlueDraco, w tak prostych przypadkach unikaj liczb zmienno-przecinkowych (a'propos, jak już pytał dondu, jaki język?), a już na pewno przy przekazywaniu parametrów do funkcji.
    Przy założeniu, że jest to c to zapis powinien wyglądać tak (zakres 1-5 został zmieniony na 10-50):

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Dzięki temu funkcja przyjmuje wartość uint8_t (musisz pamiętać, że ta wartość jest 10x większa niż w pierwszym założeniu):
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #5 28 Sty 2014 20:08
    pele2
    Poziom 9  

    Tylko że ten parametr to wykładnik potęgi
    Przecież nie będę podnosił liczb (chociaż stosunkowo małych) do 50 potęgi!

    0
  • #6 28 Sty 2014 20:43
    BlueDraco
    Specjalista - Mikrokontrolery

    Skoro tak, to licz to na kalkulatorze - będzie szybciej niż na ATmega. ;)

    0
  • #7 28 Sty 2014 22:59
    emarcus
    Poziom 35  

    pele2 napisał:
    Mam taki problem.
    Mam mały projekt na Atmega8.
    Moja funkcja przyjmuje wartości 1 - 5
    I ten parametr chciałbym regulować potencjometrem.
    Tylko że z potencjometru odczytuję wartości 0 - 255
    I tu nie wiem jak zrobić żeby jedno skrajne położenie było traktowane jako 1, a drugie skrajne położenie jako 5

    Więc przebuduj układ potencjometru:-
    Zrób z niego symulator transmittera 4 do 20 mA;
    -przy 4 mA (jedno skrajne połozenie) - masz 1
    -przy 20mA (drugie skrajne położenie) - masz 5

    e marcus

    0
  Szukaj w 5mln produktów