Archiv verlassen und diese Seite im Standarddesign anzeigen : Bascom-variable wird nicht richtig ausgegeben
Hallo,
habe in bascom folgendes programm:
$regfile = "m8def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$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
Dim W As Word
Dim A As Single
Dim B As Single
Dim C As Single
Dim D As Single
Dim E As Single
Do
W = Getadc(1)
A = 5 / 1024
C = W * A
D = C * 100
D = Round(d)
E = D / 100
B = E
Cursor Off
Cls
Locate 1 , 1
Lcd B ; " V"
Wait 1
Loop
End
C sollte eigentlich 1,6 V ergeben.
Leider gibt das Display immer nur 1,615559 aus. Kein Volt-zeichen oder sonst was. Nur wenn ich z.b. schreibe A=10/1024, dann gibt er was anderes aus, aber sonst nicht.
mfg
Schau dir mal die Fusing() Funktion zur formatierten Ausgabe von Singles an.
Gruß
Rolf
Hallo,
hab noch ein kleines problem. Ich hab einen Taster der active high geschaltet ist, leider schaffe ich es nicht in bascom, den Wert zu ändern, also er ist entweder immer 1 oder 0, je nachdem wie ich ihn setze. Kann mir jemand schnell sagen, wie ich was setzten muss, bin am verzweifeln.
mfg
Interne Widerstände sind ,wenn eingeschaltet nach Plus.
Also musst Du den Schalter gegen GND schalten lassen.
Wie man die Pullup's einschaltet , ich habe jetzt keine Lust , drum benutze oben SUCHEN.
Gento
helimike0705
02.03.2009, 16:43
Bei 16x1 Displays ist es oft so das man nur die ersten 8 Zeichen mit Locate 1,1 bis 1,8 anzeigen kann.Benutze mal Locate 2,1 wie bei einem 2 zeiligem Display.Oder Definiere es mal als ein 16x2 Display.
Mike
Hallo,
das mit der ausgabe am lcd funktioniert jetzt, aber das mit dem taster nicht. Ich habe ihn jetzt auf active low, also wenn taster geschlossen, dann zieht er den port auf gnd, umgelötet. Aber es geht immer noch nicht.
$regfile = "m8def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$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 Pinb.1 = Input
Portb.1 = 1
Do
If Portb.1 = 1 Then
Cls
Lcd "1"
Wait 1
Else
Cls
Lcd "0"
End If
Wait 1
Loop
End
mfg
Wichtiger als die Richtung, in die der Taster schaltet, ist es, ihn mit
Pinb.1 im Programm anzusprechen. Also
If Pinb.1 = 1 Then
Gruß
Rolf
Hallo,
bei dem einfachen Programm funkts jetzt, wenn ich es aber in mein Hauptprogramm einbaue, wird nur Piep() ausgeführt. Langasam bin ich am verzweifeln.
$regfile = "m8def.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
Dim W As Integer
Dim A As Single
Dim B As Single
Dim C As Single
Dim D As Single
Dim E As Single
Config Portc.5 = Output
Config Portc.4 = Output
Config Portc.3 = Output
Config Portb.2 = Output
Config Pinb.1 = Input
Portb.1 = 1
Declare Sub Piep()
Declare Sub Spannung()
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 = 5 / 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
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 'Rot
End If
If Pinb.1 = 1 Then
Call Piep
Else
Call Spannung
End If
Loop
End
mfg
die richtige Reihenfolge ist:
Configs, Dims, Declares
Befehle vor der Hauptschleife (z.B. Portb.1=1
Do...Loop
END
Subs
Gruß
Rolf
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.