Hallo Kampi,
versuch die LCD-Ausgabe mal so:
Locate 1 , 1
Lcd "Spannung: " ; Spannung
Sonstiges:
- Initlcd gehört nicht in die Do-Loop Schleife, sondern davor.
- Vor Loop würde ich eine kurze Pause setzen: Wait 1
Gruß Dirk
Hallo
Ich habe hier ein Programm was an einem ADC Eingang vom Mega32 die Spannung misst und an einem zweiten die Spannung die an einem Widerstand abfällt um daraus den Strom zu berechnen.
Allerdings zeigt das LCD mir die Werte jeweils zwei mal an und ich weiß nicht wieso.
Hier ist der Code
Und hier ein Foto um das Problem zu zeigen.Code:$regfile = "m32def.dat" $crystal = 16000000 Config Adc = Single , Prescaler = Auto , Reference = Internal Config Lcd = 20 * 4 Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4 Config Lcdbus = 4 Start Adc Declare Sub _spannungsmessung() Declare Sub _strommessung() Declare Sub _spannungsanzeige() Declare Sub _stromanzeige() Const Ref = 5 / 1023 Dim Spannung As Single Dim Strom As Single Dim Volt As Single Dim Ampere As Single Main: Do Initlcd Cls Call _spannungsmessung Call _spannungsanzeige Call _strommessung Call _stromanzeige Loop End Sub _spannungsmessung Local W As Word W = Getadc(0.) Spannung = W * Ref Spannung = Spannung * 1 Volt = Spannung End Sub Sub _strommessung Local S As Word S = Getadc(1.) Strom = S * Ref Strom = Strom / 100 Ampere = Strom End Sub Sub _spannungsanzeige() Locate 1 , 1 Lcd "Spannung :" Locate 1 , 13 Lcd Spannung End Sub Sub _stromanzeige() Locate 2 , 1 Lcd "Strom :" Locate 2 , 13 Lcd Ampere End Sub
http://img684.imageshack.us/img684/6269/bilddk.jpg
Was ich meine ist das z.B. 2x der Spannungswert angezeigt wird.
Hallo Kampi,
versuch die LCD-Ausgabe mal so:
Locate 1 , 1
Lcd "Spannung: " ; Spannung
Sonstiges:
- Initlcd gehört nicht in die Do-Loop Schleife, sondern davor.
- Vor Loop würde ich eine kurze Pause setzen: Wait 1
Gruß Dirk
Gut das klappt. Und wie kann ich es machen das er die Single Variable rundet oder so? Weil der stellt jetzt ca 12 oder mehr Stellen da und das ist mir zu lang.
Das kannst Du mit folgendem Befehl machen.
Du brauchst dazu noch eine String-Variable (im Beispiel SpannungSTR)
Dies würde Dir die Werte mit 3 Stellen hinter dem Komma ausgeben.Code:SpannungSTR = Fusing(Spannung , "#.###")
Du musst dann natürlich die String-Variable im Display anzeigen lassen.
mfG Henry
Wie sieht das den Beispielhaft aus? Weil ich kann mir irgendwie grad nichts darunter vorstellen
Du musst eine zusätzliche Variable deklarieren:Dann kommt nach dem messen der Spannung der genannte Befehl:Code:Dim SpannungSTR as String
und zur Anzeige auf dem Display schreibst Du dann z.B.:Code:SpannungSTR = Fusing(Spannung , "#.###")
Code:Locate 1 , 1 Lcd "Spannung: " ; SpannungSTR
mfG Henry
So das runden funktioniert allerdings wird die Spannung nun wieder doppelt dargestellt
Hallo!
Die Bascom Hilfe ist Dir ein Begriff?
Such nach Fusing und ersetz einfach Print durch Lcd.
MfG
Rone
So ich habd en Code nun soweit fertig....außer die Formeln die müssen noch angepasst werden. Das ist er:
Allerdings zeigt mir das LCD die Sachen immernoch nicht richtig an. Zwischen U= und I= ist eine Leerzeile. Und die Bascom Hilfe hilft mir auch irgendwie nicht wirklich weiter, weil das Problem einfach nicht verschwindet.Code:$regfile = "m32def.dat" $crystal = 16000000 Config Adc = Single , Prescaler = Auto , Reference = Internal Config Lcd = 20 * 4 Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4 Config Lcdbus = 4 Start Adc Declare Sub _spannungsmessung() Declare Sub _strommessung() Declare Sub _spannungsanzeige() Declare Sub _stromanzeige() Declare Sub _widerstandsmessung() Declare Sub _widerstandsanzeige() Const Ref = 5 / 1023 Dim Volt As Single Dim Strom As Single Dim Ohm As Single Dim Spannung As Single Dim Voltstr As String * 2 Dim Ampere As Single Dim Stromstr As String * 2 Dim Widerstand As Single Dim Ohmstr As String * 2 Initlcd Cls Main: Do Call _spannungsmessung Call _spannungsanzeige Call _strommessung Call _stromanzeige Wait 1 Loop End Sub _spannungsmessung Local V As Word V = Getadc(0.) Spannung = V * Ref Spannung = Spannung * 1 Volt = Spannung Voltstr = Fusing(volt , "#.&&") End Sub Sub _strommessung Local A As Word A = Getadc(1.) Strom = A * Ref Strom = Strom / 100 Ampere = Strom Stromstr = Fusing(strom , "#.##") End Sub Sub _widerstandsmessung Local O As Word Local P As Word O = Getadc(2.) P = Getadc(3.) Widerstand = Spannung * 1 Ohm = Widerstand End Sub Sub _spannungsanzeige() Locate 1 , 1 Lcd "U = " ; Voltstr ; "" End Sub Sub _stromanzeige() Locate 2 , 1 Lcd "I = " ; Stromstr ; "" End Sub Sub _widerstandsanzeige() Locate 3 , 1 Lcd "R = " ; Ohm End Sub
Hallo!
Was mir mal so spontan ins Auge springt:
Du definierst einen String mit 2 Zeichen:
Dim Stromstr As String * 2
Dann probierst Du 4 Zeichen da reinzuquetschen:
Stromstr = Fusing(strom , "#.##")
Ich find zwar keine Leerzeile,aber:
Lcd "I = " ; Stromstr ; ""
Vor und nach dem = ist sehr wohl ein Leerzeichen!
Vielleichts hilfts weiter.
MfG
Rone
Lesezeichen