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
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
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?
ralf schrieb: > Eigentlich wollte ich dieses als Namenszuweisung geben, damit ich diese > in der Schleife ansprechen kann. Wie würde es denn richtig sein? Tja. Was du wolltest ist aber nicht das was du geschrieben hast. Und für den Compiler zählt nur das, was du geschrieben hast. Schau mal in die BASCOM Doku zum Thema "ALIAS"
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 ;)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.