Autorannge Voltmeter

Gast #2672683
Lesenswert?

Servus zusammen

kann mal eine bitte über das Prgramm schauen und sagen, worum das 
Programm auf dem Controller net das macht, was ich möchte?Also die 
automatische Umschaltung( Der MEssbereich 3V funktioniert)

Kurz zum Projekt:

Auto-Range multimeter( Versuchs/ Messplatine) mit 3 Fenster +/- 
3V/300mV/ und 30mV
Die Spannungsbereiche wollen wir mittles HighPegel aus Fensterkomparator 
ausgegeben der nun die Funktionen im Programm ansteuern soll.
Die Spannungen zeigt er mir nur " normal als Volt an, also nicht als mV 
ausgabe. Desweiteren schwangen die Spannungen im 300mV auf der Ausgabe 
des LCD, was kann ich dagegen Softwaremäßig machen?
Das Programm:


$regfile = "m16def.dat"
$crystal = 4000000
$hwstack = 16
$swstack = 32
$framesize = 32
Baud = 9600


Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , 
Db7 = Portb.5 , E = Portb.6 , Rs = Portb.7
Config Lcd = 16 * 2

Led1 Alias Portc.5


Config Portc.0 = Input 'port für ac Messung-anzeige

Config Portc.1 = Input 'port für 3V
Config Portc.2 = Input 'port für 300mv
Config Portc.3 = Input 'port für 30mV
Config Portc.4 = Input


Dim C0 As Bit , C1 As Bit,
Dim C2 As Bit , C3 As Bit,
Dim C4 As Bit , C5 As Bit

Const Adc_multi = 0.0048828125
Const Negativ = 2.5
Const Drei = 1.2
Const Dreih = 0.12
Const Dreissig = 0.012 ' = 5.0 / 1024.0
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Dim Messergebnis As Word
Dim Volt As Single


C0 = Pinc.0
C1 = Pinc.1
C2 = Pinc.2
C3 = Pinc.3
C4 = Pinc.4
C5 = Pinc.5

Config Led1 = Output
If C0 = 1 Then Set Led1 'led für ac MESSUNG
Led1 = 1



If C0 = 0 Then Reset Led1
Led1 = 0


Initlcd
Cls

Cursor Off
Cls 'Begrüßungsfenster
Locate 1 , 3
Lcd "text"
Locate 2 , 3
Lcd "textE"
Wait 10
Cls
Locate 1 , 1
Lcd "Experimentier-"
Locate 2 , 1
Lcd "Platine"
Wait 10
Cls

Start Adc
Do


'Config Led1 = Output
'If C0 = 1 Then Set Led1 'led für ac MESSUNG
' Led1 = 1





Messergebnis = Getadc(0)



If C1 = 1 And C2 = 0 And C3 = 0 Then ' 3V
Volt = Messergebnis * Adc_multi
Volt = Volt - Negativ
Volt = Volt * Drei


Locate 1 , 1
Lcd "ADC0 "
Lcd Messergebnis
Lcd " "

Locate 2 , 1
Lcd Fusing(volt , "###.###")
Lcd " V "
Waitms 500

End If

If C2 = 1 And C3 = 0 And C1 = 0 Then ' 300mv
Volt = Messergebnis * Adc_multi
Volt = Volt - Negativ
Volt = Volt * Dreih
Volt = Volt * 1000


Locate 1 , 1
Lcd "ADC0 "
Lcd Messergebnis
Lcd " "

Locate 2 , 1
Lcd Fusing(volt , "###.###")
Lcd "mV "
Waitms 500

End If

If C3 = 1 And C1 = 0 And C2 = 0 Then ' 30mv
Volt = Messergebnis * Adc_multi
Volt = Volt - Negativ
Volt = Volt * Dreissig
Volt = Volt * 1000

Locate 1 , 1
Lcd "ADC0 "
Lcd Messergebnis
Lcd " "

Locate 2 , 1
Lcd Fusing(volt , "###.###")
Lcd "mV "
Waitms 500

End If

Loop




End
#2672691
Lesenswert?

So wie ich das sehe
1
C0 = Pinc.0
2
C1 = Pinc.1
3
C2 = Pinc.2
4
C3 = Pinc.3
5
C4 = Pinc.4
6
C5 = Pinc.5

liest du genau EINMAL den Zustand der Pins ein.
Das hier ist kein Alias, mit dem du dem Pinc.0 einen anderen Namen 
gibst, sondern da wird eingelesen.
Allerdings nur ein einziges mal, vor der Hauptschleife. Nachdem die 
Werte feststehen, ändern sie sich nie wieder, egal wie oft du danach C0 
in der Schleife prüfst.


> Desweiteren schwangen die Spannungen im 300mV auf der Ausgabe
> des LCD, was kann ich dagegen Softwaremäßig machen?

Aus mehreren Messungen einen Mittelwert nehmen
Gast #2672703
Lesenswert?

Also

Karl Heinz Buchegger schrieb:
> C0 = Pinc.0
> C1 = Pinc.1
> C2 = Pinc.2
> C3 = Pinc.3
> C4 = Pinc.4
> C5 = Pinc.5
>
> liest du genau EINMAL den Zustand der Pins ein.
> Das hier ist kein Alias, mit dem du dem Pinc.0 einen anderen Namen
> gibst, sondern da wird eingelesen.
> Allerdings nur ein einziges mal, vor der Hauptschleife. Nachdem die
> Werte feststehen, ändern sie sich nie wieder, egal wie oft du danach C0
> in der Schleife prüfst.

Also diese Anweisung mit in dei SChleife nehmen, wenn ich es richtig 
verstehe?!
Eigentlich wollte ich dieses als Namenszuweisung geben, damit ich diese 
in der Schleife ansprechen kann. Wie würde es denn richtig sein?
Gast #2672717
Lesenswert?

So danke erstmal für deine Hilfe, hab es wie folgt geändert

Pinc.0 Alias C0
Pinc.1 Alias C1
Pinc.2 Alias C2
Pinc.3 Alias C3
Pinc.4 Alias C4
Pinc.5 Alias C5

Werd am Montag gleich mal schauen was es jetzt macht ;)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren