Digitale Ausgaben über den IO W 40

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
Frank S.
Posts: 29
Joined: Fri Feb 25, 2005 11:53 am

Digitale Ausgaben über den IO W 40

Post by Frank S. »

Hallo.

Ich facnge gerade an mich mit den IOW40 zu beschäftigen. Bislang experimentiere ich mit dem Programm ioblinc aus dem SDK. Ich möchte gerne meine Programme mit C++ schreiben, da ich da am meißten Erfahrung habe.

In ioblinc habe ich herausgefunden, dass eine zufällige Zahl in eine Variable bits (int) geschrieben wird und diese über eine Write Funktion an den IOW übertragen wird. Wie läuft das eigentlich ab, wenn ich die einzelne Ausgänge direckt anteuern möchte. Meine Idde wäre, eine Zahl in die Variable Bits zu schreiben, die dem gewünschten wert entspricht. Ich habe dies bereits versucht, aber ohne Erfolg. Gibt es irgendwo beispiele?

Schöne Grüße
Frank
supachris
Posts: 124
Joined: Tue Mar 16, 2004 12:30 am
Location: Dresden

Post by supachris »

Ich hab das in der iowclass.h gemacht:

Code: Select all

// Write one port
	
	BOOLEAN WritePort(int port, ULONG value)
	{
		
		printf("Byte %i: %x\n",port,value);

		IOWKIT_REPORT rep;
		BOOLEAN rc = FALSE;
		ULONG read;
		ULONG port0=0;
		ULONG port1=0;
		ULONG port2=0;
		ULONG port3=0;
		ULONG value_new=0;
				
		rc = ReadImmediate((ULONG *) &read);	
		
		printf("%.8x \n",read);


		port0= read & 0xFF;
		read >>= 8;
		printf("%.8x \n",read);
		port1= read & 0xFF;
		read >>= 8;
		printf("%.8x \n",read);
		port2= read & 0xFF;
		read >>= 8;
		printf("%.8x \n",read);
		port3= read & 0xFF;
		
		printf("P3: %.2x ",port3);
		printf("P2: %.2x ",port2);
		printf("P1: %.2x ",port1);
		printf("P0: %.2x \n",port0);

		switch (port)
		{
		case 0:
			
			port0 =value;
			break;
		case 1:
			port1 =value;
			break;
		case 2:
			port2 =value;
			break;
		case 3:
			port3 =value;
			break;
		}
		
		
		value_new = value_new | port3;
		value_new <<=8;
		value_new = value_new | port2;
		value_new <<=8;
		value_new = value_new | port1;
		value_new <<=8;
		value_new = value_new | port0;
		

		// Init report
		rep.ReportID = 0;
		rep.Value = value_new;
		switch (GetProductId()) {
		// Write simple value to IOW40
		case 0x1500:
		rc = Write(0, (PCHAR) &rep, 5);
		break;
		// Write simple value to IOW24
		case 0x1501:
		rc = Write(0, (PCHAR) &rep, 3);
		break;
		
		}

		return rc;
	
	}

	BOOLEAN SetPin(int port, int pin)
	{
		int var;
		DWORD value;
		IOWKIT_REPORT rep;
		BOOLEAN rc = FALSE;

		rc = ReadImmediate((ULONG *) &value);
		
		switch (port)
		{
		case 0:
			{
				var = 0x01;
				var <<=pin;
				value = value | var;
				break;
			}
		case 1:
			{
				var = 0x0100;
				var <<=pin;
				value = value | var;
				break;
			}
		case 2:

			{
				var = 0x010000;
				var <<=pin;
				value = value | var;
				break;
			}

		case 3:
			{
				var = 0x01000000;
				var <<=pin;
				value = value | var;
				break;
			}
		}
		
		// Init report
		rep.ReportID = 0;
		rep.Value = value;
		switch (GetProductId()) {
		// Write simple value to IOW40
		case 0x1500:
		rc = Write(0, (PCHAR) &rep, 5);
		break;
		// Write simple value to IOW24
		case 0x1501:
		rc = Write(0, (PCHAR) &rep, 3);
		break;
		
		}

		return rc;
	}

BOOLEAN ResetPin(int port, int pin)
	{
		int var;
		DWORD value;
		IOWKIT_REPORT rep;
		BOOLEAN rc = FALSE;

		rc = ReadImmediate((ULONG *) &value);
		
		switch (port)
		{
		case 0:
			{
				var = 0xFFFFFFFE;
				var <<=pin;
				value = value & var;
				break;
			}
		case 1:
			{
				var = 0xFFFFFEFF;
				var <<=pin;
				value = value & var;
				break;
			}
		case 2:

			{
				var = 0xFFFEFFFF;
				var <<=pin;
				value = value & var;
				break;
			}

		case 3:
			{
				var = 0xFEFFFFFF;
				var <<=pin;
				value = value & var;
				break;
			}
		}
		
		// Init report
		rep.ReportID = 0;
		rep.Value = value;
		switch (GetProductId()) {
		// Write simple value to IOW40
		case 0x1500:
		rc = Write(0, (PCHAR) &rep, 5);
		break;
		// Write simple value to IOW24
		case 0x1501:
		rc = Write(0, (PCHAR) &rep, 3);
		break;
		
		}

		return rc;
	}



	ULONG LCD_Enable()
	{
	
		ULONG bytes;
		char data[7];

		data[0] = 0x04;
		data[1] = 0x01;


		bytes = IowKitWrite(m_devHandle, 1, data, 8);

		return bytes;
	}

		ULONG LCD_Disable()
	{
	
		ULONG bytes;
		char data[7];

		data[0] = 0x04;
		data[1] = 0x00;


		bytes = IowKitWrite(m_devHandle, 1, data, 8);

		return bytes;
	}
	
		ULONG LCD_Init()
	{
		ULONG bytes;
		char data[7];

		data[0] = 0x05;
		data[1] = 0x03;
		data[2] = 0x28 | 0x10;
		data[3] = 0x01;
		data[4] = 0x0F;

		bytes = IowKitWrite(m_devHandle, 1, data, 8);
		
		return bytes;
	}
	
	ULONG LCD_Cmd(int cmd)
	{
		ULONG bytes;
		char data[7];

		data[0] = 0x05;
		data[1] = 0x01;
		data[2] = cmd;

		bytes = IowKitWrite(m_devHandle, 1, data, 8);
		
		return bytes;
	}

	ULONG LCD_Set_Addr(int addr)
	{
		ULONG bytes;
		char data[7];

		data[0] = 0x05;
		data[1] = 0x01;
		data[2] = (0x80 | addr);

		bytes = IowKitWrite(m_devHandle, 1, data, 8);
		
		return bytes;
	}

	
	

	ULONG LCD_String(char *string)
	{
		ULONG bytes;
		char data[7];
		int nchars=0;
		int nnow=0;
		int ncurr=0;

		data[0]=0x05;

		nchars = strlen(string);
		while (ncurr < nchars)
		{
			if ((ncurr+6)>nchars)
			{
				nnow = nchars - ncurr;
			}
			else
			{
				nnow = 6;
			}

			data[1] = (0x80 | nnow);

			for (int x=0; x<nnow; x++)
			{
				data[x+2] = string[x+ncurr];
			}

			bytes = IowKitWrite(m_devHandle, 1, data, 8);

			ncurr = ncurr +6;
		}
		return bytes;
	}
Viel Spaß
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: Digitale Ausgaben über den IO W 40

Post by Guido Körber »

Frank S. wrote:Wie läuft das eigentlich ab, wenn ich die einzelne Ausgänge direckt anteuern möchte. Meine Idde wäre, eine Zahl in die Variable Bits zu schreiben, die dem gewünschten wert entspricht. Ich habe dies bereits versucht, aber ohne Erfolg.
Im Prinzip richtig, es werden immer alle Portspins gleichzeitig gesetzt, also muss man sich vorher die 32 Bit (16 beim IOW24) mit Logikfunktionen zusammenbauen und dann an den IO-Warrior schicken.
Post Reply