Någon som är bra på GPIB här?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Någon som är bra på GPIB här?

Inlägg av AndersG »

Har byggt ett interface enligt detta:
http://cluster.physik.uni-freiburg.de/~ ... c_usbgpib/
(Notera att det är fel i schemat REN och EOI är omkastade, med det har jag korrat)

Tanken är att styra en HP5328a frekvensräknare och en HP3456a DMM. De är adresserade som 7/W resp 6/V och så långt spelar det, dvs om jag sänder ?UV i kommandomod (med ATN aktiv) så börjar DMMen sända mätvärden över GPIB och ?UW gör att räknare sänder. So far so good, men tydligen skall jag kunna sända tex "F2" till DMMen för att byta till ACV, men jag får inget att de kommandona att fungera, inget händer.

Exemplen i manualerna är väldigt otydliga dock. Skall jag sända "f2" i CMD eller DATAmod? Måste jag aktivera REN för att den skal ta kommandon, etc???
Jonas L
Inlägg: 432
Blev medlem: 14 juli 2009, 14:28:41
Ort: Karlshamn

Re: Någon som är bra på GPIB här?

Inlägg av Jonas L »

Kan tyvärr inget om själva hårdvaran eller protokollet. Däremot funderar jag på om man inte måste fysiskt släppa kontrollen av vissa instrument för att kunna styra dem över GPIB? Något i stil med att trycka på "LOCAL"-knappen tills de är i remote-läge?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Någon som är bra på GPIB här?

Inlägg av sodjan »

Har du skickat ett "Remote Message" ?
Se punkt 3-128 i denna manual :
http://bama.edebris.com/download/hp/345 ... of%202.PDF

http://bama.edebris.com/manuals/hp/3456a
http://bama.edebris.com/manuals/hp/5328a

Det var inte helt tydligt vilka manualer du hade...

> Något i stil med att trycka på "LOCAL"-knappen tills de är i remote-läge?

LOCAL knappen skickar tillbaka instrumentet till local-läge (om inte
knappen har disablats via HP-IB). Ett Remote Message över HP-IB
sätter det i remote-läge.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Någon som är bra på GPIB här?

Inlägg av AndersG »

Sorry, manualerna jag har är:
3456a_op_and_service_high_res.pdf
5328a.pdf

Dessutom har jag en HP manual:
http://bitsavers.org/pdf/hp/hpib/Tutori ... OfHPIB.pdf

Det är just 3-128 jag lusläst, men manualen förutsätter att man programmerar i HP-BASIC där det finns färdiga kommandon. I detta fall måste jag ju flippa pinnarna själv. Jag får som sagt var adresseringen och talk/listen att fungera, dvs leddarna tänds/släcks och jag får ut data, men däremot får jag inte dem i "remote" läge, "remote" ledden tänds aldrig.

Eftersom det inte finns något kommandobyte för "remote":
http://linux-gpib.sourceforge.net/doc_h ... MAND-BYTES


Så utgår jag från att det är vad man skall använda REN-pinnen för:
REN (remote enable)
The System Controller drives the REN line, which is used to place devices in remote or local
program mode.
Men hur/när skall jag driva den aktiv (låg)? Före/efter/medan jag gör ngt annat. Har testat, men inget verkar hända.

Edit:
Remote enable. Asserted by the system controller, it enables devices to enter remote mode. When REN is asserted, a device will enter remote mode when it is addressed by the controller. When REN is false, all devices will immediately return to local mode.
Får väl testa ta REN låg och sedan sända ett adresseringskommando i kväll.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Någon som är bra på GPIB här?

Inlägg av AndersG »

Och det funkade, delvis. Om jag aktiverar REN (dvs låg) och sänder ?U6 vilket ber DMMen att lyssna så tänds remoteledden. Likaså för räknaren (?U7). Räknaren svarar därefter på kommandon, typ släck displayen, men inte DMMen, den blankvägrar, så något är fel ännu..
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Någon som är bra på GPIB här?

Inlägg av sodjan »

Jag har haft tillgång till HP-Basic program som körde just den
där DVM'en, men jag har inte tillgång till dom just nu. Det var
i början av 80-talet och var kod till HP8925 och HP9826... :-)

Och det var på den tiden då HP fortfarande tillverkade kvallitets prylar...
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Någon som är bra på GPIB här?

Inlägg av AndersG »

Det är därför jag köper instrument från den tiden :)

Skulle vara kul att kunna plocka in mätvärdena i Excel bara och det kan jag iofs nu, men det stör mig litet att DMMen inte svarar på kommandona. Det är säkert ngt jag gör fel, men vete katten vad.
Användarvisningsbild
bit96
Inlägg: 2529
Blev medlem: 3 september 2007, 10:04:29
Ort: Säffle

Re: Någon som är bra på GPIB här?

Inlägg av bit96 »

Här kommer ett väldigt diffust tips, men i alla fall.

För länge sedan (80-90-tal) kopplade jag GPIB direkt till parallellporten på en PC för att styra ett instrument.
Jag lödde ihop en egen kabel med GPIB-kontakt (liten Centronics/printer-liknande kontakt) i ena änden och en vanlig Dsub-25 i andra änden.
Det gick bra att både i BASIC och senare i C mjukvaruemulera protokollet.

Att dra olika pinnar/signaler höga och låga i rätt ordning är inga problem.
Men jag minns att en av signalerna var väldigt tids-kritisk. Jag fick lägga in fördröjningar
och annat för att det skulle fungera. Flyttade man programvaran till en annan dator med annan CPU-frekvens
fick man justera i programmet till ett nytt värde.

Jag minns inte nu vilken signal det var, men mitt tips är att kolla i dokumentationen för GPIB och se vilken signal som
det kan vara som måste hållas "aktiv" en liten stund för att allt skall fungera.

Om intresse finns kan jag säkert leta upp min gamla "välkommenterade" C-kod för GPIB-bussen.
Edit: stavfel och förtydligande
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Någon som är bra på GPIB här?

Inlägg av AndersG »

Jag ser gärna på din kod, den är antagligen lika väldokumenterad som den jag fann på länken ovan, men det jag skriver blir betydligt mera väldokumenterat. Finns även en hel del på webben om just GPIBs tajming. Skall kolla detta. Eftersom ett instrument fungerar och ett inte så kan det vara felet.

En annan möjlighet är ju det faktum att jag inte använder riktiga interfacekretsar och således inte uppfyller de elektriska kriterierna för bussen, men det borde eg uinte spela större roll med bara ett eller två instrument.

Bara jag får allt och fungera så skall jag göra en ordentlig dokumenterad design och ett kort där man kan köra antingen sneakvarianten (med bara PIC) och med riktiga buffertkretsar,. de kostar faktiskt bara någon tia, men nu utgick jag från vad jag hade hemma, min GPIB-kontakt är en nedsågad Centronics...
Användarvisningsbild
bit96
Inlägg: 2529
Blev medlem: 3 september 2007, 10:04:29
Ort: Säffle

Re: Någon som är bra på GPIB här?

Inlägg av bit96 »

PM skickat med kod.
Jag skall se om jag hittar schemat för hur kabeln kopplades.

Jag minns att jag också hade några papper kopierade om timingen på GPIB-bussen.
Kan det ha varit en artikel i Allt Om Elektronik måntro? :humm:
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Någon som är bra på GPIB här?

Inlägg av AndersG »

Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Någon som är bra på GPIB här?

Inlägg av AndersG »

OK. Det var eg ett tajmingdiagram i en gammal, scannad PDF som ledde mig på rätt. För att DMMen skall acceptera datat så skall man sända strängen:

?U6 i kommandomod och direkt efter så sänder man tex F2 men som data. Det får inte komma några tecken mellan, således sänder man ?U6 med ATN aktiv (låg), avaktiverar ATN och sänder resten. Då fungerar det.

Om man lusläser DMMens manual så står faktiskt detta, längst ned till vänster på sidan 3-23, men inte så jag begrep det :)

Men har man sidan 5-5 i detta dokument framför sig så är det solklart:
http://z80cpu.eu/mirrors/oldcomputers.d ... eee488.pdf

En bild säger mera än 10^3 ord.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Någon som är bra på GPIB här?

Inlägg av AndersG »

Om någon undrar så krev jag om Rx som en state-machine, mycket renare så:

Kod: Markera allt

void readgpib(void)
{
	i=0;
	LATA = (LATA & 0b00100000);			// Do not touch REN.
	LATC = 0x00;
	TRISC = 0xf9;
	TRISB = 0xff;
	TRISA = (TRISA | 0b11011111);			// Do not touch REN.
	rx_state = GPIB_RX_START;

	while(rx_state != GPIB_RX_FINISH)
	{
		//sprintf(string,"%S:%d %d %X %d %d","\nState", rx_state,i ,PORTB, PORTAbits.RA4,rx_flagsbits.DataAvailable);
		//sio_puts(string);

		if((PORTB ==245 && i>0)||  i>=64 || rx_flagsbits.DataAvailable == 1) // 245 is LF inverted
		{										// Break out if we have seen an LF, Buffer full or serial rx
			rx_state = GPIB_RX_FINISH;
		}
		if (PORTAbits.RA4 == 0) rx_state = GPIB_RX_EOI;

		switch(rx_state)
		{
			case GPIB_RX_START:
				//		NRFD = 0;
				TRISCbits.TRISC1 = 0;			// Set both NRFD and NDAC low
				//NDAC = 0;
				TRISCbits.TRISC2 = 0;
				rx_state = GPIB_RX_ACCEPT;
				break;
	
			case GPIB_RX_ACCEPT:

				//		NRFD = 1;
				TRISCbits.TRISC1 = 1;			// Set NRFD high
				rx_state = GPIB_RX_WAIT_DAV;
				break;
	
			case GPIB_RX_WAIT_DAV:				// Wait here for DAV to go low
	
				if (PORTCbits.RC0 == 0) rx_state = GPIB_RX_DAV_LOW;
				break;
	
			case GPIB_RX_DAV_LOW:
				//		NRFD = 1;
				TRISCbits.TRISC1 = 0;			// Set NRFD low
				buff[i] = ~PORTB;				// Accept databyte
				i++;
				//NDAC = 1;
				TRISCbits.TRISC2 = 1;			// Set NDAC high
				rx_state = GPIB_RX_WAIT_DAV_HIGH;
				break;
	
			case GPIB_RX_WAIT_DAV_HIGH:			// Wait here for DAV to go low
	
				if (PORTCbits.RC0 == 1) rx_state = GPIB_RX_DAV_HIGH;
				break;
	
			case GPIB_RX_DAV_HIGH:
				//NDAC = 0;
				TRISCbits.TRISC2 = 0;			// Set NDAC low
				rx_state = GPIB_RX_ACCEPT;		// and back to the top
				break;
	
			case GPIB_RX_EOI:					// Seen an EOI, ack and wait here until it goes away
				//NDAC = 1;
				TRISCbits.TRISC2 = 1;			// Set NDAC high
				if (PORTAbits.RA4 == 1) rx_state = GPIB_RX_FINISH;
				break;

			case GPIB_RX_FINISH:
				break;
		}
	} // while
}
Skriv svar