μPIO/GPIO18 PureBasic

Antworten
tinux
Beiträge: 6
Registriert: Montag 4. April 2011, 08:18

μPIO/GPIO18 PureBasic

Beitrag von tinux » Montag 4. April 2011, 08:31

Versuche die μPIO/GPIO18 mit PureBasic anzusprechen.

Leider klappt das nicht so ganz, vielleicht kann mir hier einer helfen und sagen was ich falsch mache.

Code: Alles auswählen

Dim Request.b(6)
Dim Response.b(14)

Request(0)=%000001
Request(1)=%111111
Request(2)=%111111
Request(3)=%111111
Request(4)=%111111
Request(5)=%111111
Request(6)=%111111

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

WriteSerialPortData(6, @Request(), 7)

ReadSerialPortData(6, @Response(), 15)

CloseSerialPort(6)

For i=0 To 14
  Debug Response(i)
Next
Debugger Ausgabe.

63
63
61
3
-1
3
-1
3
-1
3
-1
3
-1
3
-1

Gruß, tinux

KAKTUS
Beiträge: 645
Registriert: Samstag 18. Oktober 2008, 21:12

Re: μPIO/GPIO18 PureBasic

Beitrag von KAKTUS » Montag 4. April 2011, 11:47

Die Frage ist sehr schwammig gestellt.

Was muss denn Gesendet werden um welche Antwort zu bekommen?

Etwas präziser bitte !
stachlige Grüße, Kaktus

tinux
Beiträge: 6
Registriert: Montag 4. April 2011, 08:18

Re: μPIO/GPIO18 PureBasic

Beitrag von tinux » Montag 4. April 2011, 11:51

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.

Gruß, tinux

KAKTUS
Beiträge: 645
Registriert: Samstag 18. Oktober 2008, 21:12

Re: μPIO/GPIO18 PureBasic

Beitrag von KAKTUS » Montag 4. April 2011, 13:06

Versuche die μPIO/GPIO18 mit PureBasic anzusprechen.
Hallo tinux,

Versuche die μPIO/GPIO18 mit PureBasic anzusprechen.
Ok, du sendest also 7 Bytes Richtung µPIO,
Byte1: ADC-Referenzumschaltung (0=EXTERN; 1=INTERN VCC; 3=INTERN 1.1V)
Byte 1 betrifft ADC, ist erst mal egal.
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.
Byte2: Richtung Port B
Byte3: Richtung Port C
Byte4: Richtung Port D
OK, du schaltest alle Ports als Ausgang
Die Bytes 5..7 setzen den Ausgangszustand der I/O-Leitungen deren Datenrichtung auf
Du schaltest alle Ports auf High

Dann ändert sich natürlich nix mehr. Du solltest dann die Ports mal umschalten.

Ansonsten kann ich so direkt keinen Fehler feststellen. der Ablauf erscheint mir logisch.

Ansonsten bitte mal lesen. Damit würde ich erst mal alles testen.

viewtopic.php?f=21&t=2629
stachlige Grüße, Kaktus

tinux
Beiträge: 6
Registriert: Montag 4. April 2011, 08:18

Re: μPIO/GPIO18 PureBasic

Beitrag von tinux » Montag 4. April 2011, 22:05

Ich glaub ich bin zu blöd, Schaffs einfach nicht das der Port_D richtig schalten tut.
Ich sende %111111 und zurück kommt immer %111101

Gruß, tinux :oops:

KAKTUS
Beiträge: 645
Registriert: Samstag 18. Oktober 2008, 21:12

Re: μPIO/GPIO18 PureBasic

Beitrag von KAKTUS » Montag 4. April 2011, 22:10

Mit hterm? du solltest dpch erst aml deine Befehle in Hterm umsetzten. Wenns da geht, dann ins Programm umsetzen.

übrigens , es sind 8 bit 11111111
stachlige Grüße, Kaktus

KAKTUS
Beiträge: 645
Registriert: Samstag 18. Oktober 2008, 21:12

Re: μPIO/GPIO18 PureBasic

Beitrag von KAKTUS » Montag 4. April 2011, 22:12

Die Bytes 5..7 setzen den Ausgangszustand der I/O-Leitungen
stachlige Grüße, Kaktus

tinux
Beiträge: 6
Registriert: Montag 4. April 2011, 08:18

Re: μPIO/GPIO18 PureBasic

Beitrag von tinux » Montag 4. April 2011, 22:19

Ich Habs mit hterm probiert, genau dasselbe Problem.
mit 6 und 8 bits
Gruß, tinux

KAKTUS
Beiträge: 645
Registriert: Samstag 18. Oktober 2008, 21:12

Re: μPIO/GPIO18 PureBasic

Beitrag von KAKTUS » Montag 4. April 2011, 22:24

Ich glaub ich bin zu blöd, Schaffs einfach nicht das der Port_D richtig schalten tut.
Ich sende %111111 und zurück kommt immer %111101
Du gibst mir zuwenig Infos um helfen zu können.

Dir ist bekannt das du 7 Bytes senden musst. Was ist %111111 ?
Damit kann ich nix anfangen
stachlige Grüße, Kaktus

abacom
Site Admin
Beiträge: 3273
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: μPIO/GPIO18 PureBasic

Beitrag von abacom » Dienstag 5. April 2011, 09:06

Man beachte die Datenleitungen am PORT D sind 2...7 (und nicht 0...5)!
Die ZUGEHÖRIGEN BITS sind daher auch die Bit 2..7 im Datenbyte für PORT D:

Für Port D gilt also:

%11111100 = $FC = Alle Leitungen AN
%00000000 = $00 = Alle Leitungen AUS

Bit0 und Bit1 sind nicht relevant ("don´t care"), dürfen aber nicht weggelassen werden,
denn %11111100 = $FC <> %111111 = $3F !!!

Das gilt für alle Bytes für PORT D (Datenrichtung, Portdaten schreiben, Portstatus lesen)


Mit anderen Worten: Für Port B und C sind die niederwertigen 6 Bits (0...5) relevant. Für Port D sind die höchstwertigen Bits (2...7) relevant. Ein Byte hat IMMER 8 Bit!
ABACOM support

tinux
Beiträge: 6
Registriert: Montag 4. April 2011, 08:18

Re: μPIO/GPIO18 PureBasic

Beitrag von tinux » Dienstag 5. April 2011, 09:25

Danke, abacom
Geht aber leider auch nicht.

Code: Alles auswählen

Dim Request.b(6)
Dim Response.b(14)

Request(0)=%00000100 ;ADC-Referenzumschaltung (0=EXTERN; 1=INTERN VCC; 3=INTERN 1.1V)
Request(1)=%11111100 ;Richtung Port B (000000=ALLE AUF EINGANG; 111111=ALLE AUF AUSGANG)
Request(2)=%11111100 ;Richtung Port C (000000=ALLE AUF EINGANG; 111111=ALLE AUF AUSGANG)
Request(3)=%11111100 ;Richtung Port D (000000=ALLE AUF EINGANG; 111111=ALLE AUF AUSGANG)
Request(4)=%11111100 ;Daten Port B (000000=ALLE LOW (0V); 111111=ALLE HIGH (5V))
Request(5)=%11111100 ;Daten Port C (000000=ALLE LOW (0V); 111111=ALLE HIGH (5V))
Request(6)=%11111100 ;Daten Port D (000000=ALLE LOW (0V); 111111=ALLE HIGH (5V))

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

WriteSerialPortData(6, @Request(), 7)

ReadSerialPortData(6, @Response(), 15)

CloseSerialPort(6)

For i=0 To 14
  If i < 3
    Debug Bin(Response(i))
  Else
    Debug Response(i)
  EndIf
Next
Debugger Ausgabe.

111110
111110
1111111111111111111111111111111111111111111111111111111111111101
3
-1
3
-1
3
-1
3
-1
3
-1
3
-1

Gruß, tinux

tinux
Beiträge: 6
Registriert: Montag 4. April 2011, 08:18

Re: μPIO/GPIO18 PureBasic

Beitrag von tinux » Dienstag 5. April 2011, 10:12

Danke, @abacom
Jetzt glaube ich, habe ich es kapiert.

Code: Alles auswählen

Dim Request.b(6)
Dim Response.b(14)

Request(0)=%1        ;ADC-Referenzumschaltung (0=EXTERN; 1=INTERN VCC; 3=INTERN 1.1V)
Request(1)=%111111   ;Richtung Port B (000000=ALLE AUF EINGANG; 111111=ALLE AUF AUSGANG)
Request(2)=%111111   ;Richtung Port C (000000=ALLE AUF EINGANG; 111111=ALLE AUF AUSGANG)
Request(3)=%11111100 ;Richtung Port D (000000=ALLE AUF EINGANG; 111111=ALLE AUF AUSGANG)
Request(4)=%111111   ;Daten Port B (000000=ALLE LOW (0V); 111111=ALLE HIGH (5V))
Request(5)=%111111   ;Daten Port C (000000=ALLE LOW (0V); 111111=ALLE HIGH (5V))
Request(6)=%11111100 ;Daten Port D (000000=ALLE LOW (0V); 111111=ALLE HIGH (5V))

OpenSerialPort(6, "COM6", 57600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
;Delay(70) : SetSerialPortStatus(6, #PB_SerialPort_DTR, 1) : Delay(70) : SetSerialPortStatus(6, #PB_SerialPort_DTR, 0) ;SOFT-RESET

Delay(70)

WriteSerialPortData(6, @Request(), 7)

ReadSerialPortData(6, @Response(), 15)

CloseSerialPort(6)

For i=0 To 14
  If i < 3
    Debug Bin(Response(i))
  Else
    Debug Response(i)
  EndIf
Next
Debugger Ausgabe.
111111
111111
1111111111111111111111111111111111111111111111111111111111111101
3
-1
3
-1
3
-1
3
-1
3
-1
3
-1

Gruß, tinux

Antworten

Zurück zu „Fimware /GPIO18“