abacom-online.de

Das offizielle Elektronik-Software Forum
Aktuelle Zeit: Dienstag 23. Mai 2017, 06:12

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: μPIO/GPIO18 PureBasic
BeitragVerfasst: Montag 4. April 2011, 08:31 
Offline

Registriert: Montag 4. April 2011, 08:18
Beiträge: 6
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:
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


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: μPIO/GPIO18 PureBasic
BeitragVerfasst: Montag 4. April 2011, 11:47 
Offline

Registriert: Samstag 18. Oktober 2008, 21:12
Beiträge: 645
Die Frage ist sehr schwammig gestellt.

Was muss denn Gesendet werden um welche Antwort zu bekommen?

Etwas präziser bitte !

_________________
stachlige Grüße, Kaktus


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: μPIO/GPIO18 PureBasic
BeitragVerfasst: Montag 4. April 2011, 11:51 
Offline

Registriert: Montag 4. April 2011, 08:18
Beiträge: 6
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


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: μPIO/GPIO18 PureBasic
BeitragVerfasst: Montag 4. April 2011, 13:06 
Offline

Registriert: Samstag 18. Oktober 2008, 21:12
Beiträge: 645
Zitat:
Versuche die μPIO/GPIO18 mit PureBasic anzusprechen.


Hallo tinux,


Zitat:
Versuche die μPIO/GPIO18 mit PureBasic anzusprechen.


Ok, du sendest also 7 Bytes Richtung µPIO,
Zitat:
Byte1: ADC-Referenzumschaltung (0=EXTERN; 1=INTERN VCC; 3=INTERN 1.1V)

Byte 1 betrifft ADC, ist erst mal egal.
Zitat:
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

Zitat:
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.

http://forum.abacom-online.de/phpBB3/viewtopic.php?f=21&t=2629

_________________
stachlige Grüße, Kaktus


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: μPIO/GPIO18 PureBasic
BeitragVerfasst: Montag 4. April 2011, 22:05 
Offline

Registriert: Montag 4. April 2011, 08:18
Beiträge: 6
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:


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: μPIO/GPIO18 PureBasic
BeitragVerfasst: Montag 4. April 2011, 22:10 
Offline

Registriert: Samstag 18. Oktober 2008, 21:12
Beiträge: 645
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


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: μPIO/GPIO18 PureBasic
BeitragVerfasst: Montag 4. April 2011, 22:12 
Offline

Registriert: Samstag 18. Oktober 2008, 21:12
Beiträge: 645
Die Bytes 5..7 setzen den Ausgangszustand der I/O-Leitungen

_________________
stachlige Grüße, Kaktus


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: μPIO/GPIO18 PureBasic
BeitragVerfasst: Montag 4. April 2011, 22:19 
Offline

Registriert: Montag 4. April 2011, 08:18
Beiträge: 6
Ich Habs mit hterm probiert, genau dasselbe Problem.
mit 6 und 8 bits
Gruß, tinux


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: μPIO/GPIO18 PureBasic
BeitragVerfasst: Montag 4. April 2011, 22:24 
Offline

Registriert: Samstag 18. Oktober 2008, 21:12
Beiträge: 645
Zitat:
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


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: μPIO/GPIO18 PureBasic
BeitragVerfasst: Dienstag 5. April 2011, 09:06 
Offline
Site Admin

Registriert: Dienstag 23. September 2008, 10:54
Beiträge: 3119
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


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: μPIO/GPIO18 PureBasic
BeitragVerfasst: Dienstag 5. April 2011, 09:25 
Offline

Registriert: Montag 4. April 2011, 08:18
Beiträge: 6
Danke, abacom
Geht aber leider auch nicht.

Code:
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


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: μPIO/GPIO18 PureBasic
BeitragVerfasst: Dienstag 5. April 2011, 10:12 
Offline

Registriert: Montag 4. April 2011, 08:18
Beiträge: 6
Danke, @abacom
Jetzt glaube ich, habe ich es kapiert.

Code:
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


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Deutsche Übersetzung durch phpBB.de