Archiv verlassen und diese Seite im Standarddesign anzeigen : Getadc(6.
Da_Vinci13
23.05.2009, 13:01
Hi,
Wenn ich ein Programm mit dem ADC schreibe reklamiert der Compiler immer und zwar weil ich das hier schreibe:
W = Getadc(6.
Der ADC wurde initialisiert und auch die Variable W
Der Compiler schreibt dann:
(or) missing [W = GETADC(6.]
An was könnte es liegen?
Grüsse!
Da_Vinci13
23.05.2009, 14:36
Hi,
Danke für die Hilfe! Nun gehts...
Leider geht, das Programm selbst immer noch nicht wie ich wollte... es hat jetzt zwar nichts mit dem Getadc zu tun, aber ich poste es dochmal hier:
$regfile = "m32def.dat"
$crystal = 16000000
Config Porta.0 = Output
Config Adc = Single , Prescaler = Auto , Refernce = Internal
Start Adc
Declare Sub _betriebsspannung().
Const Ref = 5 / 1023
Dim Volt As Single
Dim Betriebsspannung as Single
Main:
Do
Call _betriebsspannung()
Porta.0 = 0
While Volt < 8
Porta.0 = 1
waitms 500
Wend
Loop
End
Sub _betriebsspannung
Local W as Word
W = Getadc(1)
Betriebsspannung = W * Ref
Betriebsspannung = Betriebsspannung * 5.2941
Volt = Betriebsspannung
End Sub
Mein Ziel wäre es nun, dass sobald die Spannung am ADC1 unter 8 Volt sinkt, eine LED am Porta.0 leuchtet...
Muss ich da Hardware mässig noch was machen, damit die Spannung erkennen werden kann?
Liebe Grüsse!
Nach langer Pause (bin im prüfungsstress) melde ich mich auch mal wieder.
$regfile = "m32def.dat"
$framesize = 60
$swstack = 60
$hwstack = 60
$crystal = 1000000
Config Lcd = 16 * 1
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
Config Lcdbus = 4
Config Adc = Single , Prescaler = Auto
Start Adc
Config Portc.5 = Output
Config Portc.4 = Output
Config Portc.3 = Output
Config Portb.2 = Output
Config Pinb.1 = Input
Dim W As Integer
Dim A As Single
Dim B As Single
Dim C As Single
Dim D As Single
Dim E As Single
Declare Sub Piep()
Declare Sub Spannung()
Portb.1 = 1
Do
W = Getadc(1)
If 390 < W Then
Portc.3 = 1 'Grün
End If
If 340 < W And W < 390 Then
Portc.4 = 1 'Gelb
End If
If W < 340 Then
Portc.5 = 1
Call Piep 'Rot
End If
Call Spannung
Loop
End
Sub Piep()
Config Timer1 = Pwm , Pwm = 8 , Compare B Pwm = Clear Up , Prescale = 1
Pwm1b = 180
Wait 1
Pwm1b = 0
Wait 1
End Sub
Sub Spannung()
A = 4.95 / 1024
C = W * A
D = C * 100
E = Round(d)
E = E / 100
B = E * 3
Cursor Off
Cls
Locate 1 , 1
Lcd Fusing(b , "#.##") ; "V" 'Spannung
Wait 1
End Sub
Also ich lese die spannung von einem Spannunsteiler ab (3x 10k) dadurch sind 15V möglich. Für dich düfte wohl nur Spannung interressant sein. Die Zeile B = E * 3 ist eben weil ich die Spannung durch 3 teile und sie nun wieder verdreifacht werden muss.Das Grün, Gelb,... sind nur leds um die spannung in drei farben darzustellen wie sie ca ist. Piep() dient dazu ein warnsignal auszugeben wenn die spannung zu tief ist.
mfg
Da_Vinci13
23.05.2009, 20:03
Hi,
Schön dass du dich wieder einmal meldest!
Danke für das Programm!
Aber eigentlich würde ich noch gerne wissen was an meinem Programm falsch ist... Was muss ich da ändern? Damits funktioniert? Denn ich finde das noch ganz gut, wenn ich da die Variable Volt habe...
Grüsse!
Hi,
Call _betriebsspannung()
Porta.0 = 0
While Volt < 8
Porta.0 = 1
waitms 500
Wend
Ein Problem wird sein, dass wenn du einmal eine Spannung <8 gelesen hast, du nicht mehr aus der While herauskommst, weil du nicht wieder neu einliest.
Probier es mal so:
While Volt < 8
Porta.0 = 1
Waitms 500
Call _betriebsspannung()
Wend
Gruß
Rolf
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.