Hallo,
habe ein Programm in Bascom geschrieben, daß den Poti- Wert an ADCO
einliest und den zugehörigen Spannungswert an 4 LED's ausgibt.
Rein theoretisch müsste doch B0 bei 1,25V, B1 bei 2,5V, B2 bei 3,75V und
alle 3 LED's bei 5V aufleuchten. Als Referenz dienen die 5V
Versorgungsspannung. An ADC0 muß dann doch die Spannung entsprechend
meßbar sein? Das Poti ist an ADC08 (pin23 Schleifer), + der Anfang und -
das Ênde angeschlossen.
Von 0V bis 2,4V leuchtet B0, von 2,4V bis 3,4V leuchtet B1, von 3,4 V
bis 5V leuchtet (nur!)B1.
Mache ich etwas falsch?
***********************************************************
$regfile = "m8def.dat"
$crystal = 1000000
Dim Ad As Word
Config Portb = Output
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Do
Ad = Getadc(0)
If Ad = 256 Then Portb.0 = 1 : Portb.1 = 0 : Portb.2 = 0 '1,25V
If Ad = 512 Then Portb.0 = 0 : Portb.1 = 1 : Portb.2 = 0 '2,5V
If Ad = 768 Then Portb.0 = 0 : Portb.1 = 0 : Portb.2 = 1 '3,75V
If Ad = 1024 Then Portb.0 = 1 : Portb.1 = 1 : Portb.2 = 1 '5,0V
End If
Loop
**********************************************************
Danke im Voraus Maxx
Hallo,
habe mich verschrieben und möchte es dem "Antworter" nicht noch
erschweren.
>> Das Poti ist an ADC0 (pin23 Schleifer), + der Anfang und ->>das Ênde angeschlossen.>>Von 0V bis 2,4V leuchtet B0, von 2,4V bis 3,4V leuchtet B1, von 3,4 V>>bis 5V leuchtet (nur!) B2.
Gruß Maxx.
Maxx schrieb:> Do>> Ad = Getadc(0)>> If Ad = 256 Then Portb.0 = 1 : Portb.1 = 0 : Portb.2 = 0 '1,25V>>>> If Ad = 512 Then Portb.0 = 0 : Portb.1 = 1 : Portb.2 = 0 '2,5V>>>> If Ad = 768 Then Portb.0 = 0 : Portb.1 = 0 : Portb.2 = 1 '3,75V>>>> If Ad = 1024 Then Portb.0 = 1 : Portb.1 = 1 : Portb.2 = 1 '5,0V>>>> End If>> Loop
If Ad < 256 Then
Portb.0 = 1
Portb.1 = 0
Portb.2 = 0 '1,25V
ElseIf Ad < 512 Then
Portb.0 = 0
Portb.1 = 1
Portb.2 = 0 '2,5V
ElseIf Ad < 768 Then
Portb.0 = 0
Portb.1 = 0
Portb.2 = 1 '3,75V
Elseif If Ad < 1024 Then
Portb.0 = 1
Portb.1 = 1
Portb.2 = 1 '5,0V
end if
muste richtig gehen.
falls kein end if, else etc gibt wird nur die erste anwesung nach IF
bedingt ausgeführt. also die zuweisungen 2 und 3 werden ignoriert.
2 Du solltest eigentlich nicht die Stuffen direkt abfragen mit "=",
sondern bereiche mit "<" weil snst nur an dem stuffenwert was geändert
wird also bei einderung won 298 auf 45 passiert nix.
Das geht am Besten mit der Select-Käse äh Case Anweisung:
$regfile = "m8def.dat"
$crystal = 1000000
Dim Ad As Word
Config Portb = Output
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Do
Ad = Getadc(0)
Select Case Ad
Case 0 To 255 : Portb = &B00000001
Case 256 To 512 : Portb = &B00000010
Case 512 To 768 : Portb = &B00000100
Case 769 To 1023 : Portb = &B00000111
Case Else : Portb = 0
End Select
Loop
MfG Paul
Hallo,
vielen Dank für Eure Antworten. Hätte ich vielleicht selber draufkommen
können, aber manchmal sieht man ja den Wald vor lauter Bäumen nicht.
@ Paul dises Prog. ist gut und durch "Case"-Abfrage kürzer und besser
als meins.
Ich habe mal die Spannungen gemessen:
'B0 gleich an
'B1 geht bei 1,35V (gemessen)an und bleibt bis 2,35V an ; B0 ist dkl.
'Abfrage auf 255
'B2 geht bei 2,58V (gemessen)an und bleibt bis 3,8V an ; B0 und B1 sind
dkl.
'Abfrage auf 512
'ab 3,8V gehen alle LED's an und bleiben bis 5V (gemessen)auch an.
'Abfrage auf 1024
Ist damit die Genauigkeit der AD-Wandlung ausgeschöpft?
@Gast
Ja, stimmt, daß er alle anderen Abfragen ignoriert.
Der Editor meldet immer 2 Fehler bei Deinem Programm.
Vl. Grüße und Danke
Maxx
>>mal dumm fragen: 1024?? ich dachte immer von 0-1023 sind die möglichen>>werte..
Ja, deswegen hat sich schon manch Einer am Kopf gekratzt.
;-)
Aber: von 0-1023 sind 1024 Werte. 1023 ist der "obere Anschlag" und
mehr kommt ohnehin bei der Auflösung von 10 Bit nicht aus dem Wandler
heraus.
MfG Paul