PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bascom-variable wird nicht richtig ausgegeben



Wsk8
26.02.2009, 20:41
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

for_ro
26.02.2009, 20:47
Schau dir mal die Fusing() Funktion zur formatierten Ausgabe von Singles an.

Gruß

Rolf

Wsk8
01.03.2009, 21:31
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

Gento
01.03.2009, 23:02
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

Wsk8
02.03.2009, 20:31
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

for_ro
02.03.2009, 20:53
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

Wsk8
02.03.2009, 21:22
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

for_ro
02.03.2009, 21:45
die richtige Reihenfolge ist:
Configs, Dims, Declares
Befehle vor der Hauptschleife (z.B. Portb.1=1
Do...Loop
END
Subs

Gruß

Rolf

Wsk8
02.03.2009, 22:22
Hallo,

perfekt!

mfg