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 [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Responder a