Witam!
Jak w tytule , atmega 8 na wejsciu przetworników ADC (0-3 ) podawane napiecie ktore jest w przybliżeniu wswietlane na LCD 4x20 w postaci 4 linijek swietlnych. Napisałem szkielet programu
(niektóre łatki z elektrody;) ). jestem poczatkujący i moja koncepcja może jest skomplikowana a może byc prościejsza i krótsza występuje łąd w symulaji programowej w lini 1,16 i 2,16
zapalone segmenty wyswietlacza
tutaj kod programu:
prosze o ewentualne uwagi co by poprawić i wyeliminować błedy
pozdrawiam
Proszę umieszczać listingi programów w znacznikach "Code". [c_p]
Jak w tytule , atmega 8 na wejsciu przetworników ADC (0-3 ) podawane napiecie ktore jest w przybliżeniu wswietlane na LCD 4x20 w postaci 4 linijek swietlnych. Napisałem szkielet programu
(niektóre łatki z elektrody;) ). jestem poczatkujący i moja koncepcja może jest skomplikowana a może byc prościejsza i krótsza występuje łąd w symulaji programowej w lini 1,16 i 2,16
zapalone segmenty wyswietlacza
tutaj kod programu:
$sim
$regfile = "m8def.dat"
$crystal = 1000000
Config Lcd = 16 * 4
Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portb.7 , Db7 = Portb.6 , E = Portd.7 , Rs = Portb.0
Cursor Off
Deflcdchar 1 , 32 , 32 , 32 , 32 , 16 , 16 , 16 , 32
Deflcdchar 2 , 32 , 32 , 32 , 32 , 20 , 20 , 20 , 32
Deflcdchar 3 , 32 , 32 , 32 , 32 , 21 , 21 , 21 , 32
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'config ADC
Start Adc
Dim W As Word
Dim Volt As Word
Dim Volt_d As Byte
Dim Pozycja As Byte
Dim Licznik As Byte
Dim Calosc As Byte
Dim Ulamek As Byte
Dim Spacja As Byte
Cls
Do
W = Getadc(0)
Volt = W * 4
Volt_d = Volt Mod 10
Volt = Volt / 10
'Locate 1 , 19
'Lcd Volt ; " " ; Volt_d
Gosub Linijka1
Waitms 25
W = Getadc(1)
Volt = W * 4
Volt_d = Volt Mod 10
Volt = Volt / 10
Gosub Linijka2
Waitms 25
W = Getadc(2)
Volt = W * 4
Volt_d = Volt Mod 10
Volt = Volt / 10
Gosub Linijka3
Waitms 25
W = Getadc(3)
Volt = W * 4
Volt_d = Volt Mod 10
Volt = Volt / 10
Gosub Linijka4
Waitms 25
Loop
End
Linijka1:
Pozycja = Volt / 10 'przeliczenie max zakresu zm wartość na ilość
'dostępnych pozycji wyświetlacza - 48 (16*3)
Calosc = Pozycja / 3 'Jedna pozycja wyświetlacza może wyswietlać 3 wartości
Ulamek = Pozycja Mod 3 'O rodzaju znaku zakończenia linijki informuje zmienna Ulamek
For Licznik = 0 To Calosc
Locate 1 , Licznik
Lcd Chr(3)
Next Licznik 'Wyśwetlamy ilość całości
If Ulamek = 1 Then
Locate 1 , Licznik
Lcd Chr(1);
Incr Licznik
End If
'Dopisujemy niepełną pozycję 1/3 lub 2/3
If Ulamek = 2 Then
Locate 1 , Licznik
Lcd Chr(2);
Incr Licznik
End If
For Spacja = Licznik To 16 'Resztę wypełniamy spacjami
Locate 1 , Spacja
Lcd " ";
Next Spacja
Return
Linijka2: ' 2-4 linijka tak samo jak pierwsza
Pozycja = Volt / 5
Calosc = Pozycja / 3
Ulamek = Pozycja Mod 3
For Licznik = 0 To Calosc
Locate 2 , Licznik
Lcd Chr(3)
Next Licznik
If Ulamek = 1 Then
Locate 2 , Licznik
Lcd Chr(1);
Incr Licznik
End If
'
If Ulamek = 2 Then
Locate 2 , Licznik
Lcd Chr(2);
Incr Licznik
End If
For Spacja = Licznik To 16
Locate 2 , Spacja
Lcd " ";
Next Spacja
Return
Linijka3:
Pozycja = Volt / 5
Calosc = Pozycja / 3
Ulamek = Pozycja Mod 3
For Licznik = 0 To Calosc
Locate 3 , Licznik
Lcd Chr(3)
Next Licznik
If Ulamek = 1 Then
Locate 3 , Licznik
Lcd Chr(1);
Incr Licznik
End If
If Ulamek = 2 Then
Locate 3 , Licznik
Lcd Chr(2);
Incr Licznik
End If
For Spacja = Licznik To 16
Locate 3 , Spacja
Lcd " ";
Next Spacja
Return
Linijka4:
Pozycja = Volt / 5
Calosc = Pozycja / 3
Ulamek = Pozycja Mod 3
For Licznik = 0 To Calosc
Locate 4 , Licznik
Lcd Chr(3)
Next Licznik
If Ulamek = 1 Then
Locate 4 , Licznik
Lcd Chr(1);
Incr Licznik
End If
If Ulamek = 2 Then
Locate 4 , Licznik
Lcd Chr(2);
Incr Licznik
End If
For Spacja = Licznik To 16
Locate 4 , Spacja
Lcd " ";
Next Spacja
Returnprosze o ewentualne uwagi co by poprawić i wyeliminować błedy
pozdrawiam
Proszę umieszczać listingi programów w znacznikach "Code". [c_p]