qwerty41 napisał: Przetwonnik zlicza napięcia tylko do 2047, pokazując ujemne napięcie nie ma znaku minus i wartość, tylko np 65320.
Czyli przetwornik zwraca wyniki w kodzie U2. Tam nie ma znaku minus. Jest za to przesunięcie poziomu.
Najprościej mówiąc, zastosowanie takiej funkcji do konwersji:
Napiecie = Zmierz1 * 256
Napiecie = Napiecie + Zmierz2
da Ci złe wyniki.
Dla liczb ujemnych pierwszy bajt w zmiennej Long powinien być ustawiony na FFh. W Twoim przypadku drugi w zasadzie też bo wykorzystywany jest bardzo mały zakres zmiennej Long.
Gdyby zmienna była typu co najmniej Word, a najlepiej Integer, to nie było by tych bajtów więc nie było by problemu.
Ale BASCOM widząc że po prostu mnożysz sobie zmienne bajtowe, myśli że chodzi o wartości dodatnie a więc do dwóch pierwszych bajtów zmiennej Long wstawia zera.
Najlepiej zrób tak:
Dim Napiecie_word as Integer
Dim Napiecie as Long
Napiecie_word = Zmierz1 * 256
Napiecie_word = Napiecie_word + Zmierz2
Napiecie = Napiecie_word
Teraz BASCOM w zasadzie pomnoży wartości dodatnie.
Ale podczas przepisywania zmiennej Napiecie_word, zauważy że jest to zmienna Integer a więc dołoży znak do zmiennej Long.
Przynajmniej mam nadzieję że tak zrobi. U mnie robi.
Jeszcze jedna rzecz mnie dziwi. Dlaczego dodatnie wartości są tylko do 2047? Ten przetwornik chyba jest 12-to a nie 16-to bitowy.
qwerty41 napisał: 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.
A już wiem. Mówiąc licznik masz na myśli wartość z przetwornika ADC? Wartość 65535 nie jest największa, bo 65535 to w kodzie U2...: -1. Nastepna będzie 0, czyli 0, 1 czyli 1 itd aż do 32767.
Myślałem że masz przetwornik zwracający tylko liczby dodatnie, a więc zaczynający od 0 a kończący na 65535. I dlatego nie zwróciłem uwagi na znak, bo on pojawiał by się dopiero przy odejmowaniu.
Ale Ty masz przetwornik z kodem U2, a więc wartości idą od 32768 (co odzwiuerciedla liczbę -32768, 32769 to liczba -32767 itd.) do 32767 (liczba 32767).
A więc zero jest w środku tego zakresu i oznacza 0.
qwerty41 napisał:
Jak to zrealizować? Do wykorzystania jest jeszcze 800 bajtów w pamięci procesora.
?
Acha, Robiąc według pomysłu Snow’a zrobiłeś także według mojego pomysłu, bo nasze pomysły są identyczne.
Ale Ty nie zrobiłeś według naszych pomysłów, bo nie odejmujesz, ale dodajesz odwrotność. Ale to akurat ma małe znaczenie.