PureBoard
http://forums.purebasic.com/german/

Digitale PIO Karte ansprechen.
http://forums.purebasic.com/german/viewtopic.php?f=17&t=24099
Seite 1 von 2

Autor:  tinux [ 31.03.2011 19:28 ]
Betreff des Beitrags:  Digitale PIO Karte ansprechen.

Habe folgendes Problem
Versuche eine Digitale PIO Karte anzusprechen. (μPIO / GPIO18 von ABACOM)
Ich weis überhaupt nicht wie ich das Umsetzen kann.
Wer kann mir weiterhelfen. Ich weis überhaupt nicht was ich ihm senden soll (sieben Datenbytes ?)

Datenprotokoll des Hersteller
Das μPIO / GPIO18 arbeitet als PC-Interface mit 18 digitalen I/O-Kanälen deren Datenrichtung umschaltbar ist (18 GPIO).
Die I/O-Leitungen sind zu drei Ports zusammengefasst (Port B, Port C, Port D). Jeder Port
besitzt sechs I/O-Leitungen:
Die Kommunikation mit dem PC erfolgt per USB. Der USB-Treiber installiert einen virtuellen COM-Port. Der Datenaustausch erfolgt somit wie über eine ‚echte’ RS232-Schnittstelle.
Die Schnittstellenparameter sind: 57600, 8 N, 1
Baud 57600. 8 Datenbits, Keine Parität, 1 Stopbit
Die Kommunikation erfolgt nach dem Frage-Antwort-Prizip (Request/Response). Dabei bestehtein Request immer aus genau sieben Datenbytes. Nachdem Empfang dieser sieben Datenbytes sendet die Firmware 15 Bytes als Antwort an den PC zurück.
Request: 7 Bytes
Byte1: ADC-Referenzumschaltung (0=EXTERN; 1=INTERN VCC; 3=INTERN 1.1V)
Byte2: Richtung Port B
Byte3: Richtung Port C
Byte4: Richtung Port D
Byte5: Daten Port B
Byte6: Daten Port C
Byte7: Daten Port D
Die Bytes 2..4 geben die Datenrichtung an. Ein gesetztes Bit setzt die zugehörige Portleitung auf AUSGANG, ein gelöschtes Bit setzt die Portleitung auf EINGANG.
Die Bytes 5..7 setzen den Ausgangszustand der I/O-Leitungen deren Datenrichtung auf
AUSGANG gesetzt ist. Ein gesetztes Bit schalten den Ausgang HIGH (5V), ein gelöschtes Bit schaltet den Ausgang LOW (0V). Für I/O-Leitungen die nicht als Ausgang sondern als
EINGANG definiert wurden, wird mit den Datenbytes (Byte 5…Byte7) ein interner Pullup-
Widerstand aktiviert . Ein gesetztes Bit aktiviert den Pullup für eine I/O-Leitung. Ein gelöschtes Bit deaktiviert den Pullup für die zugehörige I/O-Leitung.
Die Bits-Nummern der Datenbytes sind den Leitungsnummern der Portleitungen zugeordnet.
Ein gesetztes Bit2 in Byte4 eines Requests setzt also z.B. die Datenrichtung der Portleitung D2 auf Ausgang.
Response: 15 Bytes

Hinweise zur Verwendung des Protokolls
Zum Datenaustausch wird zunächst ein Request-Datenblock (Byte.array) mit einer Länge von
genau sieben Bytes definiert, der mit ALLEN Informationen belegt sein muss, die zum Gerät
geschickt werden sollen. Dann überträgt man diesen Block über die Schnittstelle.
Anschliessend müssen die 15 Antwort-Bytes von der Schnittstelle eingelesen und nach Bedarf
ausgewertet werden. Ein neuer Reqest-Block sollte erst dann ausgegeben werden, wenn alle
15 Bytes als Antwort auf den vorhergehenden Request empfangen wurden.

Code:
OpenSerialPort(6, "COM6", 57600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)

Dim Byte.s(6)
Byte(0)="000001"
Byte(1)="000001"
Byte(2)="000001"
Byte(3)="000001"
Byte(4)="111111"
Byte(5)="111111"
Byte(6)="111111"

WriteSerialPortData(6, @Byte(), 6)

Autor:  H.Brill [ 01.04.2011 18:32 ]
Betreff des Beitrags:  Re: Digitale PIO Karte ansprechen.

Du hast ja auch ein String - Array definiert.
Versuch mal sowas :

Code:
Dim myarray.b(6)
myarray(0) = %000001
usw.


Manchmal mögen solche externen Karten keine
Strings.

Autor:  tinux [ 01.04.2011 18:41 ]
Betreff des Beitrags:  Re: Digitale PIO Karte ansprechen.

Dank @ H.Brill , geht aber leider auch nicht.

Autor:  H.Brill [ 01.04.2011 19:38 ]
Betreff des Beitrags:  Re: Digitale PIO Karte ansprechen.

1 Byte hat ja bekanntlich 8 Bit.
Fülle mal das Byte ganz auf :

Code:
Dim myarray.b(6)
myarray(0) = %00000100


Und mal nach dem Senden ein Delay(50)
reinmachen, da der prozessor ja auch ein paar
Takte braucht.

und daran denken, daß du von rechts zählen
mußt. Im obigen Beispiel ist dann Bit 2 (0-7)
gesetzt.

Wie ich sehe, ist das ganze mit einem AVR
Controller aufgebaut. Müßte mal am Wochenende
mein MyAVR - Board rausholen und mal was probieren.

PS: 49 € ist aber ganz schön teuer für so ein Board
mit USB + TTL Wandler, AVR, und ein paar Kleinigkeiten.

Autor:  tinux [ 01.04.2011 20:37 ]
Betreff des Beitrags:  Re: Digitale PIO Karte ansprechen.

Dank @ H.Brill , geht aber leider auch wieder nicht.

währe dir sehr dankbar wenn du mir weiter helfen könntest.

Autor:  Falko [ 02.04.2011 00:08 ]
Betreff des Beitrags:  Re: Digitale PIO Karte ansprechen.

Vielleicht braucht der AVR ja auch HEX-Werte.

Code:
OpenSerialPort(6, "COM6", 57600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)

Dim A_Byte.s(7); Es sind doch sieben Bytes oder?
A_Byte(0)=Hex(%000001)
A_Byte(1)=Hex(%000001)
A_Byte(2)=Hex(%000001)
A_Byte(3)=Hex(%000001)
A_Byte(4)=Hex(%111111)
A_Byte(5)=Hex(%111111)
A_Byte(6)=Hex(%111111)

;Testausgabe in Hex
For i= 0 To 6
  Debug A_Byte(i)
Next

WriteSerialPortData(6, @Byte(), 7)


Leider kann ich das nicht testen, obwohl ich profilab habe, worin diese Hardware
angesteuert werden kann.


Gruß, Falko

Autor:  H.Brill [ 02.04.2011 07:32 ]
Betreff des Beitrags:  Re: Digitale PIO Karte ansprechen.

Ist vielleicht ein Quellcode für VB
dabei ? Da könnte man mal schauen.

Oder auch den Code (Bascom, ASM oder C)
für den Atmel. Dann könnte man auch sehen,
was wie dem Atmel übergeben wird.

Ist halt immer ewtas schwierig, wenn man die
Hardware nicht selber hat.

Autor:  tinux [ 02.04.2011 11:16 ]
Betreff des Beitrags:  Re: Digitale PIO Karte ansprechen.

Ist leider kein Quellcode dabei.

Gruß tinux

Autor:  - chris - [ 02.04.2011 11:37 ]
Betreff des Beitrags:  Re: Digitale PIO Karte ansprechen.

Und wie sieht dein Quellcode aus?

z.B. so:
es müssen sieben Bytes gesendet werden!

Code:

OpenSerialPort(6, "COM6", 57600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)

Dim Byte.a(6)
Byte(0)=%00000001
Byte(1)=%00000001
Byte(2)=%00000001
Byte(3)=%00000001
Byte(4)=%00111111
Byte(5)=%00111111
Byte(6)=%00111111

WriteSerialPortData(6, @Byte(), 7)


Autor:  tinux [ 02.04.2011 12:11 ]
Betreff des Beitrags:  Re: Digitale PIO Karte ansprechen.

Danke, geht auch nicht.

was ich mich frage, ist ob die 7 Bytes überhaupt so angenommen.

Code:
OpenSerialPort(6, "COM6", 57600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)

Dim Byte.b(6)
Byte(0)=%00000001
Byte(1)=%00111111
Byte(2)=%00111111
Byte(3)=%00111111
Byte(4)=%00111111
Byte(5)=%00111111
Byte(6)=%00111111

;WriteSerialPortData(6, @Byte(), 7)

For i=0 To 6
  Debug @Byte(i)
Next


Gruß, tinux

Seite 1 von 2 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/