witam na elektrodzie znalazłem wiele informacji na temat przetwornika adc
w atmega 8 jednak nie mogę poradzić sobie z jednym zjawiskiem mianowicie po odczytywaniu napięcia podawanego z potencjometru na wejście adc0 i adc2
i wyświetlaniu na lcd obserwuje takie zjawisko jak :
napięcie z adc0 zmienia sie od 0 do 1024 zrozumiałe tylu bitowy przetwornik aby mierzyć napięcie wystarczy pomnożyć przez odpowiedni współczynnik.
jednak jednocześnie zmienia sie napięcie odczytywane z adc2 w sposób następujący:
gdy kręcę potencjometrem podłączonym do adc2 napięcie na graniczne wartości
to na adc2 zmienia sie wynik w zakresie 40
podsumowując potencjometr od adc0 zmienia oba wskazania a potencjometr od adc2 zmienia wskazanie tego przetwornika(adc2) o 30
nie mam pojęcia dlaczego tak sie dzieje próbowałem na programie w bascom
własny program i kilka z elektrody zamieszczam oba poniżej. proszę o wyjaśnienie dlaczego sie tak dzieje wg mnie atmega 8 w dip ma 5 niezależnych kanałów przetwornika adc multipleksowanych.
wiec powinien odczytywać ich wartości kolejno a ja powinienem mógł je odczytywać np na lcd.
jeżeli chodzi o schemat jest bardzo prosty lcd 2*16 podłączyłem do portu b
a napięcie podaje za pomocą potencjometru na adc0 i adc2 vref jest podpięte do vcc nie (zależy mi na dokładności, powtarzalności i stabilności pomiaru) muszę korzystać jednak z 2...4 kanałów adc i niestety nie działa mi tak jak należy
uwaga lcd konfiguruje przy kompilowaniu do hex nie w programie
program nr 1
program 2
proszę o pomoc
Tomek
Kod proszę umieścić w znacznikach code!
Robak
w atmega 8 jednak nie mogę poradzić sobie z jednym zjawiskiem mianowicie po odczytywaniu napięcia podawanego z potencjometru na wejście adc0 i adc2
i wyświetlaniu na lcd obserwuje takie zjawisko jak :
napięcie z adc0 zmienia sie od 0 do 1024 zrozumiałe tylu bitowy przetwornik aby mierzyć napięcie wystarczy pomnożyć przez odpowiedni współczynnik.
jednak jednocześnie zmienia sie napięcie odczytywane z adc2 w sposób następujący:
adc0 = 0 adc2 = 330
adc0 = 330 adc2 = 490
adc0 = 750 adc2 = 680
adc0 = 970 adc2 = 830
adc0 = 1023 adc2 = 1022gdy kręcę potencjometrem podłączonym do adc2 napięcie na graniczne wartości
to na adc2 zmienia sie wynik w zakresie 40
podsumowując potencjometr od adc0 zmienia oba wskazania a potencjometr od adc2 zmienia wskazanie tego przetwornika(adc2) o 30
nie mam pojęcia dlaczego tak sie dzieje próbowałem na programie w bascom
własny program i kilka z elektrody zamieszczam oba poniżej. proszę o wyjaśnienie dlaczego sie tak dzieje wg mnie atmega 8 w dip ma 5 niezależnych kanałów przetwornika adc multipleksowanych.
wiec powinien odczytywać ich wartości kolejno a ja powinienem mógł je odczytywać np na lcd.
jeżeli chodzi o schemat jest bardzo prosty lcd 2*16 podłączyłem do portu b
a napięcie podaje za pomocą potencjometru na adc0 i adc2 vref jest podpięte do vcc nie (zależy mi na dokładności, powtarzalności i stabilności pomiaru) muszę korzystać jednak z 2...4 kanałów adc i niestety nie działa mi tak jak należy
uwaga lcd konfiguruje przy kompilowaniu do hex nie w programie
program nr 1
Config Portd = &B0000111
Portd = &B0000000
Config Portc = &B0000111
Portc = &B0000000
Dim Adc0 As Integer
Dim V1 As Integer
Dim Adc2 As Integer
Dim V2 As Integer
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Do
Adc0 = Getadc(0)
V1 = Adc0
Adc2 = Getadc(2)
V2 = Adc2
Cls
Lcd "kanal1=" ; V1
Lowerline
Lcd "kanal2=" ; V2
Loop
program 2
Config Adc = Single , Prescaler = Auto , Reference = Internal
Config Watchdog = 2048 'reset wystąpi po 8192 ms
'Start Watchdog
Declare Sub Odcz_temp
Config Pind.3 = Input 'porty jako wejściowe
Config Pind.4 = Input 'porty jako wejściowe
Config Pind.5 = Input 'porty jako wejściowe
Set Portd.3 ' ustawia na stan wysoki
Set Portd.4 ' ustawia na stan wysoki
Set Portd.5 ' ustawia na stan wysoki
Dim Wart_nap As Word
Dim Wart_nap1 As Word
Dim Wart_nap2 As String *
Dim Wart_nap22 As Word
Dim Wart_ac As Word
Dim Wart_ac1 As Word
Dim Wart_ac2 As Word
Dim Wart_ac3 As Word
Dim V As Single
Dim V1 As Single
Dim V2 As Single
Dim V3 As Single
Dim Adres As Byte , Command As Byte
Enable Interrupts
' Set Portd.3 = Input
Start Adc
Do
'czytam pierwszy czujnik
'waitms 20
Wart_ac = Getadc(0)
V = Wart_ac
'czytam drugi czujnik
'Waitms 20
Wart_ac1 = Getadc(1)
V1 = Wart_ac1
Reset Watchdog
'czytam 3 czujnik
'Waitms 20
Wart_ac2 = Getadc(2)
V2 = Wart_ac2
Reset Watchdog
'czytam 4 czujnik
Wart_ac3 = Getadc(3)
V3 = Wart_ac3
Cls
Lcd "in1:" ; V
Lowerlineproszę o pomoc
Tomek
Kod proszę umieścić w znacznikach code!
Robak
