PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Getadc(6.



Da_Vinci13
23.05.2009, 12: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!

Rofo88
23.05.2009, 12:10
W = Getadc(6) [/code]

Da_Vinci13
23.05.2009, 13: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!

Wsk8
23.05.2009, 13:55
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, 19: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!

for_ro
23.05.2009, 19:49
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