HP 33120A - Generador de Ondas -
- To: uylug-linux@uylug.org.uy, debian-user-spanish@lists.debian.org, l-linux@linux.org.ve, linux-plug@linux.org.pe, lugar-conf@linux.org.ar, newbie-es@linux-mandrake.com, bulmailing@m3d.uib.es, expert-es@linux-mandrake.com, usb-linux@gruposyahoo.com, ibarrae@ib.cnea.gov.ar
- Subject: HP 33120A - Generador de Ondas -
- From: "Eduardo Daniel Ibarra" <ibarra@data54.com>
- Date: Wed, 27 Mar 2002 15:37:54 +0000
- Message-id: <[🔎] web-7752446@data54.com>
Hola:
Quisiera pedir ayuda sobre la configuración de un
Generador de Ondas Hewlett Packard
HP 33120A
para manejarlo a través de un puerto serie,
con un programita en C (bajo Linux Debian Potato).
No estoy seguro de que estas sean las listas
correctas en donde averiguar, pero Uds. sabrán
comprender... ¿no?
Si alguien conoce una lista más acorde a mi consulta,
por favor, avíseme.
Este equipo HP lo uso en el laboratorio
y hasta ahora no logro configurarlo bien...
En cambio, sí me puedo comunicar correctamente
con un Lock-In por otro puerto serie.
En el manual del equipo, sólo vienen unos ejemplos
en C para el Sistema Operativo comercial
del millonario Gates, pero utilizan una librería
especialmente hecha por Hewlett Packard para este SO,
librería que por otra parte yo no poseo.
Con el programita que sigue más abajo,
parece que tengo algún problema de configuración
del puerto, pues el equipo HP me manda un error
en la cadena de bits enviada.
Probé algunos cambios, pero no me resultaron...
Yo supongo que el error está en la configuración
de los flags de la estructura termios (¿"c_cflags"?).
Bueno, desde ya, muchas gracias por su ayuda
y el tiempo que me han brindado.
Eduardo.
Bariloche-Argentina
/**********************************************************/
/**********************************************************/
// GENERADOR ONDAS
/**********************************************************/
#include <string.h> //Funciones: strlen (), strcmp ().
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h> //Modos de apertura y funcion open ().
#include <termios.h>
#include <stdlib.h> //Funciones: write (), close (), atol().
#include <ctype.h> //Funciones: isdigit ().
#include <time.h> //Funciones: time().
/**********************************************************/
#define SI 1
#define NO 0
// Constantes de Inicializacion de Puerto Serie:
// COM4: Puerto Serie Generador Ondas (GO):
#define PUERTO_GENERADOR_ONDAS "/dev/ttyS3"
/**********************************************************/
void Configurar_Puerto_GO (int* Archivo_Puerto_GO, int*
Salir);
void Enviar_Comando_GO (int Archivo_Puerto_GO, char
*Comando, char* Respuesta);
void Cerrar_el_Archivo_del_Puerto (int* Archivo_Puerto);
void Esperar (int t);
/**********************************************************/
void main ()
{
int Archivo_Puerto_GO;
int* Salir; int No = NO;
char Comando [1024]; // 64 = 2^6 Caracteres.
char Respuesta [1024]; // 1024 = 2^10 Caracteres.
Salir = &No;
Configurar_Puerto_GO (&Archivo_Puerto_GO, Salir);
/*--------------------------------------------------------*/
strcpy (Comando,"*RST"); // Resetear (Reinicializar) GO.
Enviar_Comando_GO (Archivo_Puerto_GO, Comando, Respuesta);
Espera (100);
strcpy (Comando,"SYST:REM");
Enviar_Comando_GO (Archivo_Puerto_GO, Comando, Respuesta);
Espera (100);
strcpy (Comando,"*CLS"); // Despejar errores antiguos del
GO.
Enviar_Comando_GO (Archivo_Puerto_GO, Comando, Respuesta);
Espera (100);
strcpy (Comando,"OUTP:LOAD#MAX");
Enviar_Comando_GO (Archivo_Puerto_GO, Comando, Respuesta);
Espera (100);
strcpy (Comando,"VOLT:OFFS#0");
Enviar_Comando_GO (Archivo_Puerto_GO, Comando, Respuesta);
Espera (100);
strcpy (Comando,"FREQ 5000");
strcat (Comando,"\r");
l = strlen (Comando);
write (Archivo_Puerto_GO, Comando, l);
/*--------------------------------------------------------*/
Cerrar_el_Archivo_del_Puerto (&Archivo_Puerto_GO);
}
/**********************************************************/
void Enviar_Comando_GO (int Archivo_Puerto_GO,
char *Comando, char* Respuesta)
{
int Char = 0, i, l, Estado = 1;
int is_response = 0;
time_t t, t0;
// Agregar "Retorno de Carro" al comando a enviar:
l = strlen (Comando);
Comando [l] = '\r' ; // Enter o "Return" (Retorno de
carro).
Comando [l+1] = 0 ;
/*
// Agregar retorno de carro al Comando
strcat (Comando,"\r");
l = strlen (Comando);
*/
write (Archivo_Puerto_GO, Comando, l);
tcdrain (Archivo_Puerto_GO);
i = 0;
if (is_response)
{
bzero (Respuesta, 1000);
// Esperar 5 segundos:
time (&t0);
while (t-t0 < 5)
time (&t);
Estado = read (Archivo_Puerto_GO, Respuesta, 1000);
Respuesta [Estado] = 0;
}
}
/**********************************************************/
void Configurar_Puerto_GO (int* Archivo_Puerto_GO, int*
Salir)
{
char CualquierTecla [2];
struct termios t_GO; // Generador de Ondas.
if ((*Archivo_Puerto_GO =
open (PUERTO_GENERADOR_ONDAS,
O_RDWR | O_NDELAY | O_NOCTTY )) == -1)
{
perror (" Error al abrir el archivo '/dev/ttyS3' = COM
4");
*Salir = SI; // SALIR DEFINITIVAMENTE.
}
else // Si NO hay error al abrir el archivo de puerto al
GO:
{
tcgetattr (*Archivo_Puerto_GO, &t_GO);
t_GO.c_cc [VMIN] = 6; // Minimo de caracteres a leer:
VMIN=6.
t_GO.c_cc [VTIME] = 200; // El GO tiene 20 s para
responder.
t_GO.c_lflag = 0;
t_GO.c_cflag = CS7| B9600 | CSTOPB | CREAD | PARENB;
t_GO.c_oflag = 0; //NLDLY; //OLCUC | OCRNL;
t_GO.c_iflag = INPCK;
if (tcsetattr (*Archivo_Puerto_GO, TCSANOW, &t_GO))
{
perror (" No se pueden pasar los nuevos atributos de
Comunicacion al SO");
printf ("\n No se pueden pasar los nuevos atributos");
printf (" de Comunicacion al SO...\n");
Cerrar_el_Archivo_del_Puerto (Archivo_Puerto_GO);
*Salir = SI; // SALIR DEFINITIVAMENTE.
}
else // Si se pudieron pasar OK los nuevos atributos al
SO:
{
/*
printf ("\n Puerto Serie conectado");
printf (" al Generador de Ondas");
printf (" configurado correctamente.\n\n");
printf (" Pulsar cualquier tecla y <Enter> para
continuar... ");
scanf ("%s", CualquierTecla);
*/
}
}
/*
Despues de hacer esto de forma correcta, estamos en
condiciones
de "hablar" con el dispositivo al otro lado del puerto.
*/
}
/**********************************************************/
void Cerrar_el_Archivo_del_Puerto (int* Archivo_Puerto)
{
close (*Archivo_Puerto);
}
/**********************************************************/
void Esperar (int t)
{
for (int i; i<t; sin(i++));
}
/**********************************************************/
/**********************************************************/
---------------------------------------------------------------------------------------
Sacá tu cuenta de e-mail gratis en http://www.data54.com y pasá a ser parte de nuestra comunidad
--
To UNSUBSCRIBE, email to debian-user-spanish-request@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Reply to: