Inputs am IOWarrior 40 konfigurieren

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
mastudent
Posts: 5
Joined: Fri May 29, 2015 3:55 pm
Location: Griesheim (Hess)
Contact:

Inputs am IOWarrior 40 konfigurieren

Post by mastudent »

Hallo,

ich habe mir das IOW40 Starterkit gekauft. Ich versuche im Moment den Schalter auf Port 0.0 abzufragen. Habe mich bereits durch alle Manuals durchgearbeitet doch es funktioniert nicht Ordnungsgemäß. Ich habe meinen C++ Code angehängt alle Funktionen funktionieren wie gewünscht bis auf getportstatus() und getportstatusdirect(). Hier wird anscheinend nicht der richtige Wert abgefragt obwohl Port/Pin Werte stimmen.

C++ Code: https://dl.dropboxusercontent.com/u/5339358/src.zip

Meine System Daten:
Win 8.1
USB 2.0
VS 2012

Ich hoffe mir kann jemand weiterhelfen.
MfG Oliver Becker


-----------------------------------------------
What's hard to write mus be hard to read

User avatar
Christoph Jung
Posts: 628
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Inputs am IOWarrior 40 konfigurieren

Post by Christoph Jung »

Was genau funktioniert denn nicht wie gewünscht? Ohne zu wissen was denn rauskommt und was rauskommen soll ist es schwer darauf zu Antworten.

EDIT:
Wer lesen kann.....

Ich bin erst Montag wieder im Büro um dir das anzuschauen.
Aber beim groben drüberschauen ist mir nichts aufgefallen.
Evtl, irgendwo falsch herum ODER oder UND verwendet?
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter

mastudent
Posts: 5
Joined: Fri May 29, 2015 3:55 pm
Location: Griesheim (Hess)
Contact:

Re: Inputs am IOWarrior 40 konfigurieren

Post by mastudent »

Hallo,

in der getpinstatus() Methode wird true zurückgeliefert unabhängig ob der Schalter gedrückt ist oder nicht. Daher habe ich den Eindruck, dass ich hier einen Konfigurationsfehler im Aufruf IowKitRead() habe.

Danke für die Rasche Antwort
MfG Oliver Becker


-----------------------------------------------
What's hard to write mus be hard to read

Guido Körber
Site Admin
Posts: 2763
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: Inputs am IOWarrior 40 konfigurieren

Post by Guido Körber »

Wie ist denn der Schalter angeschlossen?

mastudent
Posts: 5
Joined: Fri May 29, 2015 3:55 pm
Location: Griesheim (Hess)
Contact:

Re: Inputs am IOWarrior 40 konfigurieren

Post by mastudent »

Hallo,

der Schalter ist an Port 0.0 angeschlossen ein Schaltplan (des Starterkits) ist hier:

https://dl.dropboxusercontent.com/u/533 ... terkit.JPG
MfG Oliver Becker


-----------------------------------------------
What's hard to write mus be hard to read

Guido Körber
Site Admin
Posts: 2763
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: Inputs am IOWarrior 40 konfigurieren

Post by Guido Körber »

Ah, OK, hätte richtig lesen sollen…

Kann sein, dass da Werte aus dem Puffer gelesen werden.

User avatar
Christoph Jung
Posts: 628
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Inputs am IOWarrior 40 konfigurieren

Post by Christoph Jung »

Ein Versuchen wäre mal mit dem Special-Mode 0xFF (Getting Pin Status oder so) die IO-Ports auszulesen.
Vielleicht behebt das den Fehler.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter

mastudent
Posts: 5
Joined: Fri May 29, 2015 3:55 pm
Location: Griesheim (Hess)
Contact:

Re: Inputs am IOWarrior 40 konfigurieren

Post by mastudent »

Hallo,

ich habe den Special Mode eingebaut. Das senden Funktioniert soweit auch, doch im Report steht danach immer noch nicht der gewünschte Wert 0x01 bzw 0xFE. Ich habe leider auch kein konkretes Beispiel gefunden wie man bei dem I OWarrior stupf den Input auslesen kann. Kann doch eigentlich nicht so schwer sein oder?

Code: Select all


#define PIN0 0x01;
#define PIN1 0x02;
#define PIN2 0x04;
#define PIN3 0x08;
#define PIN4 0x10;
#define PIN5 0x20;
#define PIN6 0x40;
#define PIN7 0x80;

unsigned char IOWARRIOR::getpin(int pin)
{
	switch(pin+1)
	{
	case 1:	return PIN0;
			break;

	case 2:	return PIN1;
			break;

	case 3:	return PIN2;
			break;

	case 4:	return PIN3;
			break;

	case 5:	return PIN4;
			break;

	case 6:	return PIN5;
			break;

	case 7:	return PIN6;
			break;

	case 8:	return PIN7;
			break;

	default: 	return '0x18';

	}
}

bool IOWARRIOR::send(int port, unsigned char byte, bool spec)
{
	if(m_eState==USB_S_INIT)
	{
		ULONG numberofbytes = 0;
		if(!spec)
		{
			m_report.Bytes[port] = ~byte;
			numberofbytes = IowKitWrite(m_handle,IOW_PIPE_IO_PINS,(PCHAR)&m_report,IOWKIT40_IO_REPORT_SIZE);


			if(numberofbytes == IOWKIT40_IO_REPORT_SIZE)
			{
				return true;
			}
			else
			{
				m_elastError = IOW_SEND_ERR;
				uninit();
				return false;
			}
		}
		else
		{
			m_report.Bytes[port] = 0;
			m_report.ReportID = 0xFF;
			numberofbytes = IowKitWrite(m_handle,IOW_PIPE_SPECIAL_MODE,(PCHAR)&m_report,IOWKIT_SPECIAL_REPORT_SIZE);
		}

		if(numberofbytes == IOWKIT_SPECIAL_REPORT_SIZE)
		{
			return true;
		}
		else
		{
			m_elastError = IOW_SEND_ERR;
			uninit();
			return false;
		}
	}
	else
	{
		m_elastError = USB_NOTINIT;
		return false;
	}
}

bool IOWARRIOR::getportstatus(int port, int pin)
{
	send(port,pin,true);					//Special Report 0xFF abfragen

	int bit = m_report.Bytes[port];

	bit = bit&getpin(pin);					//Ergebnis des gewünschten Prots mit gewünschtem Pin verunden

	if(bit != getpin(pin))
	{
		return false;
	}
}


Main:

	int Auswahl = 0;

	IOWARRIOR KIT1;

	cout << "Bitte geben Sie den Pin an, dessen Input Sie detektieren m" << "\x94" << "chten: (1-32): ";
	cin >> Auswahl;

 	int port = (Auswahl-1)/8;
	int pin = KIT1.getpin((Auswahl-1)%8);

	if(KIT1.send(port,pin))							//Pin auf high setzen
	{
		for(int i = 0;i < 5; i++)
		{
			if(KIT1.getportstatus(port,pin))		//Alle Pins Lesen und auf gewünschten Pin auswerten
			{
				cout << "PRESSED!" << endl;
			}
		}
	}

MfG Oliver Becker


-----------------------------------------------
What's hard to write mus be hard to read

User avatar
Christoph Jung
Posts: 628
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Inputs am IOWarrior 40 konfigurieren

Post by Christoph Jung »

Irgendwie fehlt da ein IowKitRead() wo die Werte ausgelesen werden sollten.

Im Groben so:

Code: Select all

m_report.ReportID = 0xFF;
IowKitWrite(m_handle,IOW_PIPE_SPECIAL_MODE,(PCHAR)&m_report,IOWKIT_SPECIAL_REPORT_SIZE);
IowKitRead(m_handle,IOW_PIPE_SPECIAL_MODE,(PCHAR)&m_report,IOWKIT_SPECIAL_REPORT_SIZE);

//Status der Ports steht in den einzelnen m_report.Byte[]
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter

mastudent
Posts: 5
Joined: Fri May 29, 2015 3:55 pm
Location: Griesheim (Hess)
Contact:

Re: Inputs am IOWarrior 40 konfigurieren

Post by mastudent »

Konnte das Problem so lösen. Vielen Dank.
MfG Oliver Becker


-----------------------------------------------
What's hard to write mus be hard to read

User avatar
Christoph Jung
Posts: 628
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Inputs am IOWarrior 40 konfigurieren

Post by Christoph Jung »

Was war es denn?
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter

Post Reply