PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Velleman K8055 Eingänge auslesen



Viewty-Fan
05.12.2008, 16:36
Hallo,
Das ist mein erster Beitrag . Trotz Suchfunktion habe ich jedoch nichts gefunden was mir helfen könnte.
Ich muss in der Schule mit dem Velleman K8055 (Programiersprache VBA) eine 7-Segment-Anzeige ansteuern (kein Problem ). Jedoch , und das ist mein Problem, soll immer wenn es ein Signal des ersten Eingangs gibt, die Anzeige auf die nächst größere Zahl umspringen.

Könnt ihr mir helfen?

Viewty-Fan

Willa
05.12.2008, 22:33
Hallo! Das K8055 ist hier nicht so wirklich populär (es ist ein Experimentierboard mit dem man eigentlich keine Roboter bauen kann). Deine Frage ist nicht ganz klar, was für ein Signal auf was für einem Eingang? Soll das ganze wie eine Art Event-Counter funktionieren? Das Board hat doch extra Counter Eingänge. Benutz doch die und gib das dann auf der Anzeige aus.

Viewty-Fan
06.12.2008, 08:22
Erst einmal danke für deine Antwort. Ich meine einen der 5 Digital Eingänge. Wenn dort ein Signal ,vor erst nur durch den Taster, erzeugt wird soll die 7-Segment-Anzeige umspringen.

SIGINT
06.12.2008, 08:43
@Viewty-Fan:
Wo liegt jetzt genau das Problem?! Dafür gibts doch die Funktionen:

ReadDigitalChannel(Channel)
ReadAllDigital(Buffer)

Lad dir mal die Software von Vellemann runter und lese dir die Doku durch.

Gruß,
SIGINT

Viewty-Fan
07.12.2008, 10:03
Ich weiß das es diese Funktionen gibt... Nur weiß ich nicht wie ich sie benutzen soll. Kannst du vielleicht einmal einen Beispiel Code dafür hochladen???

Willa
07.12.2008, 12:42
Erst klemmst du deinen Taster zwischen DigiInput 1 und GND an. Dann machst du in VB einen timer mit z.B. 250ms der folgendes ausführt:
SoOftWurdeGedrueckt = Readcounter(1)

Das sollte doch funktioneiren...? Wo sind deine Schwierigkeiten? Poste doch mal deinen Code.

Viewty-Fan
07.12.2008, 15:30
Hier ist mein Code. Wahrscheinlich gibt es bei den Eingängen kein Problem. Nur Arbeite ich mit VBA erst seit Mitwoch. Daher bin ich Anfänger und habe gar keine Ahnung wie das gehen soll. Also überall wo jetzt MsgBox steht soll per Digital Eingang des Interfaces weitergeschaltet werden. Dh. Wenn es ein Signal über den Digitalen Eingang gibt dann nächste Zahl. Könnt ihr mir das Programmieren???


Private Sub CommandButton12_Click()
'7 Segment Anzeige
Dim t As Integer
t = 50
MsgBox "Zahl 0", vbExclamation, "7 Segment Anzeige"
DoEvents
'Zahl 0
SetAllDigital
ClearDigitalChannel 1
ClearDigitalChannel 8
MsgBox "Zahl 1", vbExclamation, "7 Segment Anzeige"
ClearAllDigital
DoEvents
'Zahl 1
SetDigitalChannel 4
SetDigitalChannel 7
Sleep t
DoEvents
MsgBox "Zahl 2", vbExclamation, "7 Segment Anzeige"
ClearAllDigital
'Zahl 2
SetDigitalChannel 3
SetDigitalChannel 4
SetDigitalChannel 1
SetDigitalChannel 4
SetDigitalChannel 5
SetDigitalChannel 6
Sleep t
DoEvents
MsgBox "Zahl 3", vbExclamation, "7 Segment Anzeige"
ClearAllDigital
'Zahl 3
SetDigitalChannel 3
SetDigitalChannel 4
SetDigitalChannel 1
SetDigitalChannel 7
SetDigitalChannel 6
Sleep t
DoEvents
MsgBox "Zahl 4", vbExclamation, "7 Segment Anzeige"
ClearAllDigital
'Zahl 4
SetDigitalChannel 2
SetDigitalChannel 1
SetDigitalChannel 4
SetDigitalChannel 7
Sleep t
DoEvents
MsgBox "Zahl 5", vbExclamation, "7 Segment Anzeige"
ClearAllDigital
'Zahl 5
SetDigitalChannel 3
SetDigitalChannel 2
SetDigitalChannel 1
SetDigitalChannel 7
SetDigitalChannel 6
Sleep t
DoEvents
MsgBox "Zahl 6", vbExclamation, "7 Segment Anzeige"
ClearAllDigital
'Zahl 6
SetDigitalChannel 2
SetDigitalChannel 3
SetDigitalChannel 5
SetDigitalChannel 6
SetDigitalChannel 7
SetDigitalChannel 1
Sleep t
DoEvents
MsgBox "Zahl 7", vbExclamation, "7 Segment Anzeige"
ClearAllDigital
'Zahl 7
SetDigitalChannel 3
SetDigitalChannel 4
SetDigitalChannel 7
Sleep t
DoEvents
MsgBox "Zahl 8", vbExclamation, "7 Segment Anzeige"
ClearAllDigital
'Zahl 8
SetAllDigital
ClearDigitalChannel 8
Sleep t
DoEvents
MsgBox "Zahl 9", vbExclamation, "7 Segment Anzeige"
ClearAllDigital
'Zahl 9
SetAllDigital
ClearDigitalChannel 5
ClearDigitalChannel 8
Sleep t
DoEvents
MsgBox "Programm beenden", vbExclamation, "7 Segment Anzeige"
ClearAllDigital
End Sub


Danke das ihr soviel Geduld habt.
Viewty-Fan

Willa
07.12.2008, 18:33
So ungefähr könnte das gehen. Wenn du weiter mit VB arbeiten willst solltest du dich auch mal mit der Programmiersprache auseinandersetzen.... Der Code sollte z.B. nicht auf einen Button gelegt werden sondern in einen Timer. Auf einen anderen Button sollte man dann die Funktion ResetCounter(1) legen damit wieder von null losgezählt wird.


Private Sub CommandButton12_Click()
Dim number As Integer
number = Readcounter(1)
Select Case number
Case 0
'Zahl 0
SetAllDigital
ClearDigitalChannel 1
ClearDigitalChannel 8
Case 1
ClearAllDigital
'Zahl 1
SetDigitalChannel 4
SetDigitalChannel 7
Case 2
ClearAllDigital
'Zahl 2
SetDigitalChannel 3
SetDigitalChannel 4
SetDigitalChannel 1
SetDigitalChannel 4
SetDigitalChannel 5
SetDigitalChannel 6
Case 3
ClearAllDigital
'Zahl 3
SetDigitalChannel 3
SetDigitalChannel 4
SetDigitalChannel 1
SetDigitalChannel 7
SetDigitalChannel 6
Case 4
ClearAllDigital
'Zahl 4
SetDigitalChannel 2
SetDigitalChannel 1
SetDigitalChannel 4
SetDigitalChannel 7
Case 5
ClearAllDigital
'Zahl 5
SetDigitalChannel 3
SetDigitalChannel 2
SetDigitalChannel 1
SetDigitalChannel 7
SetDigitalChannel 6
Case 6
ClearAllDigital
'Zahl 6
SetDigitalChannel 2
SetDigitalChannel 3
SetDigitalChannel 5
SetDigitalChannel 6
SetDigitalChannel 7
SetDigitalChannel 1
Case 7
ClearAllDigital
'Zahl 7
SetDigitalChannel 3
SetDigitalChannel 4
SetDigitalChannel 7
Case 8
'Zahl 8
SetAllDigital
ClearDigitalChannel 8
Case 9
'Zahl 9
SetAllDigital
ClearDigitalChannel 5
ClearDigitalChannel 8
Case Else
MsgBox ("Es wurde öfter als 9 mal gedrückt.")
End Select
end sub

Hummel
08.12.2008, 13:51
Hallo,
das Problem dürfte bei der Deklaration der Funktion liegen. Die Karte funktioniert nur wenn der USB-Treiber (k8055f.dll in Systemverzeichnis von Winows) korrekt installiert ist und die nachfolgende Deklaration ausgeführt wird. Kannst die Zeilen einfach ins Formular einfügen und dann die Befehle ausführen.
Open und Close Device beachten.
Wird das Gerät nicht korrekt geschlossen, läuft der Treiber mehrfach und die USB-Routine funktioniert nicht mehr richtig.

Option Explicit
'----------------------------------
' benötigte Deklarationen
' DLL laden für USB-Karte

Dim DoNothing As Boolean
Dim n As Integer
Private Declare Function OpenDevice Lib "k8055d.dll" (ByVal CardAddress As Long) As Long
Private Declare Sub CloseDevice Lib "k8055d.dll" ()
Private Declare Function ReadAnalogChannel Lib "k8055d.dll" (ByVal Channel As Long) As Long
Private Declare Sub ReadAllAnalog Lib "k8055d.dll" (Data1 As Long, Data2 As Long)
Private Declare Sub OutputAnalogChannel Lib "k8055d.dll" (ByVal Channel As Long, ByVal Data As Long)
Private Declare Sub OutputAllAnalog Lib "k8055d.dll" (ByVal Data1 As Long, ByVal Data2 As Long)
Private Declare Sub ClearAnalogChannel Lib "k8055d.dll" (ByVal Channel As Long)
Private Declare Sub SetAllAnalog Lib "k8055d.dll" ()
Private Declare Sub ClearAllAnalog Lib "k8055d.dll" ()
Private Declare Sub SetAnalogChannel Lib "k8055d.dll" (ByVal Channel As Long)
Private Declare Sub WriteAllDigital Lib "k8055d.dll" (ByVal Data As Long)
Private Declare Sub ClearDigitalChannel Lib "k8055d.dll" (ByVal Channel As Long)
Private Declare Sub ClearAllDigital Lib "k8055d.dll" ()
Private Declare Sub SetDigitalChannel Lib "k8055d.dll" (ByVal Channel As Long)
Private Declare Sub SetAllDigital Lib "k8055d.dll" ()
Private Declare Function ReadDigitalChannel Lib "k8055d.dll" (ByVal Channel As Long) As Boolean
Private Declare Function ReadAllDigital Lib "k8055d.dll" () As Long
Private Declare Function ReadCounter Lib "k8055d.dll" (ByVal CounterNr As Long) As Long
Private Declare Sub ResetCounter Lib "k8055d.dll" (ByVal CounterNr As Long)
Private Declare Sub SetCounterDebounceTime Lib "k8055d.dll" (ByVal CounterNr As Long, ByVal DebounceTime As Long)
Sollte es nicht gehen melde Dich noch mal.
Gruß Hummel