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

Przetwornik 16 bitowy zmiana punktu 0

qwerty41 15 Sty 2009 22:45 1603 13
REKLAMA
  • #1 6005225
    qwerty41
    Poziom 10  
    Posiadam przetwornik ADC 16 bitowy. Chciałbym zrealizować programowo (w BASCOMIE) następujące wymaganie:
    - po naciśnięciu S1 przetwornik ustawia aktualnie zmierzony pomiar jako punkt odniesienia.

    Czy jest to wykonalne?

    Mam za sobą już kilka nieudanych prób, wydaje się proste, a nie mogę dojść do prawidłowego rozwiązania...

    Proszę o odpowiedź
  • REKLAMA
  • Pomocny post
    #2 6005253
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #3 6005310
    qwerty41
    Poziom 10  
    Ups! Sorry :(
    Zapomniałem powiedzieć, że jest to zewnętrzny przetwornik AC komunikujący się z procesorem AVR przez I2C.

    Tak wygląda odczyt:
    
    I2cstart
    I2cwbyte &B10011011                                     
    I2crbyte Zmierz1 , Ack                     
    I2crbyte Zmierz2 , Nack
    I2cstop                                                 
    Napiecie = Zmierz1 * 256                             
    Napiecie = Napiecie + Zmierz2
    


    Ale i tak dzięki za odpowiedź i poświęcony czas!
  • Pomocny post
    #4 6005350
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #5 6005563
    qwerty41
    Poziom 10  
    Jestem początkującym, nie bardzo rozumiem ten program...
    Co to są te lds, sts, ldi, R16? W jaki sposób ustawia się w tym programie aktualne napięcie jako zerowe (punk odniesienia)...

    Dodano po 40 [minuty]:

    Napisałem taki program:
    
    Program:
    I2cstart
    
    I2cwbyte &B10011011
    I2crbyte Zmierz1 , Ack
    I2crbyte Zmierz2 , Nack
    I2cstop
    Napiecie = Zmierz1 * 256
    Napiecie = Napiecie + Zmierz2
    Napiecie = Napiecie + Napieciewyzer
    Locate 1 , 1
    Lcd Napiecie ; "       "
    Return
    
    Wyzeruj:                                                    'przechodzi do procedury po naciśnięciu S1
    I2cstart
    I2cwbyte &B10011011
    I2crbyte Zmierz1 , Ack
    I2crbyte Zmierz2 , Nack
    I2cstop
    Napiecie = Zmierz1 * 256
    Napiecie = Napiecie + Zmierz2
    Napieciewyzer = 65536 - Napiecie
    Return
    

    Jednak wtedy pokazują się wyniki wieksze niż 65536, a gdy dochodzi do zeraz, pokazuje się wynik z Napieciewyzer
  • REKLAMA
  • Pomocny post
    #6 6005964
    snow
    Poziom 31  
    Na naciśniecie przycisku robisz żeby jakiejś zmiennej przypisał (w momencie jego naciśnięcia) odczytaną wartość z przetwornika a później za każdym razem od aktualnego odczytu odejmujesz wartość tej zmiennej. Poza tym nie ma raczej sensu w przerwaniu od przycisku (czy w jakimkolwiek innym sposobie odczytu stanu przycisku) robić ponownego odczytu przetwornika. Można po prostu przepisać wartość zmiennej gdyż ona już jakąś będzie posiadać.
  • #7 6007038
    qwerty41
    Poziom 10  
    Też nie działa.
    Zaużmy że po podłączeniu zasilania wskazuje on wartość 65333, gdy wcisnę przycisk jest ona zerowana - z pozoru wszystko ok, ale po dojściu do wartości 203. Pokazuje się -65333...
  • Pomocny post
    #8 6007176
    Konto nie istnieje
    Poziom 1  
  • #9 6007687
    qwerty41
    Poziom 10  
    Cytat:
    Będzie to kodowanie z offsetem, i to w dodatku z offsetem zależnym od pomiaru w momencie naciśnięcia przycisku.
    Tak się po prostu nie robi.

    Czyli jedyna rada, to sprzętowo, za pomocą potencjometru regulować punkt 0?

    Cytat:
    Jak by nie było: zmienne muszą byc typu LONG!!!

    Zmienne są long.
  • Pomocny post
    #10 6008318
    Konto nie istnieje
    Poziom 1  
  • #11 6009420
    qwerty41
    Poziom 10  
    Cytat:
    Najdziwniejsze że pokazuje się -65333.

    Łatwe. Zrealizowałem według pomysłu snow'a, bo tak umiałem. Tylko, że. Przetwonnik zlicza napięcia tylko do 2047, pokazując ujemne napięcie nie ma znaku minus i wartość, tylko np 65320.
    Jeżeli po naciśnięniu przycisku do zmiennej 'wyzeruj' wpisze, aktualny pomiar, czyli np 65333. To na ekranie pojawi się 0. Pokazując 203, tak naprawdę licznik ma wartość 65535 i zwiększając jeszcze o 1, licznik zeruje się i od zera odejmowana jest wartośc 65333.

    Cytat:

    I na czym wyświetlasz wyniki?
    Na wyświetlaczu alfanumerycznym LCD?

    Tak na LCD.

    Cytat:

    Jak masz dużo miejsca to zrób wyświetlanie wartości przed przesuwaniem poziomu (oryginalnej wartości z przetwornika).

    Jak to zrealizować? Do wykorzystania jest jeszcze 800 bajtów w pamięci procesora.
  • Pomocny post
    #12 6010041
    Konto nie istnieje
    Poziom 1  
  • #13 6010226
    qwerty41
    Poziom 10  
    Dzięki! Właśnie o to chodziło. Zmieniłem z Long na Integer i wszystko działa.

    Licznik liczy do 2048 ponieważ maksymalne napięcie jakie może zmierzyć to 2.048V.
  • #14 6010241
    Konto nie istnieje
    Poziom 1  
REKLAMA