Witam wszystkich.
Od razu uprzedzam, że jest to mój pierwszy projekt na procesor w ogóle.
Potrzebne było urządzenie które zidentyfikuje numer przewodu w wiązce.
Na razie wpinałem 100 ohmową drabinkę rezystorową między masę a poszczególne żyły i z drugiej strony mierzyłem rezystancję i tak 100 ohm to pierwsza żyła, 200 druga, itd.
I tak postanowiłem zaprząc atmege8 do tego zadania.
Założeniem było użyć wewnętrzny ADC tej samej drabince, którą używałem do tej pory i wysterować 7 segmentowy wyświetlacz LED.
Tak by to miało wyglądać od strony hardware :
I listing do tego projektu:
Zasada działania jest bardzo prosta: ADC(0) mierzy napięcie na dzielniku rezystorowym, porównuje z tym zdefiniowanym w programie i zapala odpowiednią cyfrę na wyświetlaczu.
Listing się kompiluje i na symulatorze załącza dobrze porty, ale czy to ma szanse zadziałać w praktyce ?
Może można zrobić to inaczej? Liczę na wasze pomysły.
I mam nadzieję, że tym razem moderator nie wyrzuci tego do kosza.
Od razu uprzedzam, że jest to mój pierwszy projekt na procesor w ogóle.
Potrzebne było urządzenie które zidentyfikuje numer przewodu w wiązce.
Na razie wpinałem 100 ohmową drabinkę rezystorową między masę a poszczególne żyły i z drugiej strony mierzyłem rezystancję i tak 100 ohm to pierwsza żyła, 200 druga, itd.
I tak postanowiłem zaprząc atmege8 do tego zadania.
Założeniem było użyć wewnętrzny ADC tej samej drabince, którą używałem do tej pory i wysterować 7 segmentowy wyświetlacz LED.
Tak by to miało wyglądać od strony hardware :
I listing do tego projektu:
$regfile = "m8def.dat"
$crystal = 800000
$sim
Config Adc = Single , Prescaler = Auto , Reference = Internal 'konfiguracja adc
Start Adc
Config Portd = Output
Portd = 0
Dim Pom As Word
Do
Pom = Getadc(0)
Pom = Getadc(0) 'wyczytałem że lepiej 2 razy
' wartości pom trzeba dobrać ekperymentalnie ,
If Pom > 150 And Pom < 250 Then Portd = &B00001100 ' wyświetla 1
If Pom > 290 And Pom < 350 Then Portd = &B01011011 ' wyświetla 2
If Pom > 390 And Pom < 450 Then Portd = &B01001111 ' wyświetla 3
If Pom > 490 And Pom < 550 Then Portd = &B01100110 ' wyświetla 4
If Pom > 590 And Pom < 650 Then Portd = &B01101101 ' wyświetla 5
If Pom > 690 And Pom < 750 Then Portd = &B01111101 ' wyświetla 6
If Pom < 100 Then Portd = &B11111111 ' zapala wszystkie segmenty = GND
If Pom > 1000 Then Portd = &B01000000 ' NC zapala -,segment g
Wait 1
Portd = 0 ' oszczędność baterii , wyświetlacz będzie migał a nie świecił bezprzerwy
Loop
EndZasada działania jest bardzo prosta: ADC(0) mierzy napięcie na dzielniku rezystorowym, porównuje z tym zdefiniowanym w programie i zapala odpowiednią cyfrę na wyświetlaczu.
Listing się kompiluje i na symulatorze załącza dobrze porty, ale czy to ma szanse zadziałać w praktyce ?
Może można zrobić to inaczej? Liczę na wasze pomysły.
I mam nadzieję, że tym razem moderator nie wyrzuci tego do kosza.
