Någon som är bra på GPIB här?
Någon som är bra på GPIB här?
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???
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???
Re: Någon som är bra på GPIB här?
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?
Re: Någon som är bra på GPIB här?
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.
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.
Re: Någon som är bra på GPIB här?
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:
Edit:
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:
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.REN (remote enable)
The System Controller drives the REN line, which is used to place devices in remote or local
program mode.
Edit:
Får väl testa ta REN låg och sedan sända ett adresseringskommando i kväll.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.
Re: Någon som är bra på GPIB här?
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..
Re: Någon som är bra på GPIB här?
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...
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...
Re: Någon som är bra på GPIB här?
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.

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.
Re: Någon som är bra på GPIB här?
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
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
Re: Någon som är bra på GPIB här?
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...
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...
Re: Någon som är bra på GPIB här?
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?
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?

Re: Någon som är bra på GPIB här?
Hittade ett ganska bra timingdiagram här:
http://www.upscale.utoronto.ca/PHY406F/ ... ln_par.pdf
och här:
http://z80cpu.eu/mirrors/oldcomputers.d ... eee488.pdf
http://www.upscale.utoronto.ca/PHY406F/ ... ln_par.pdf
och här:
http://z80cpu.eu/mirrors/oldcomputers.d ... eee488.pdf
Re: Någon som är bra på GPIB här?
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.
?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.
Re: Någon som är bra på GPIB här?
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
}