Download Biblioteca para JAVA

Document related concepts
no text concepts found
Transcript
SADE
Biblioteca para JAVA
SADE (Sistema de Adquisición de Datos flexiblE ) es la aplicación de INTESC la cual facilita el
manejo de la tarjeta Avanxe mediante comandos en lenguaje de alto nivel. En el siguiente diagrama
se muestran los recursos con los que cuenta SADE.
Descripción:
SW: Se puede obtener una lectura de los switches de la tarjeta.
LED: Podemos mandar información a los LEDs.
IO PIN: SADE cuenta con 13 pines que se pueden configurar como entrada, salida e inclusive como
PWM
BiPORT: Puerto bidireccional de 8 bits que se puede configurar como entrada o salida.
I2C: Protocolo de comunicación I2C para dispositivos que lo requieran.
RS232 (PC): La tarjeta Avanxe cuenta con un convertidor USB-RS232 por lo que podemos utilizar los
puertos COM de nuestra PC y trabajar con velocidades de transmisión de hasta 3 Megabaudios.
RS232 (SADE): Protocolo RS232 para utilizarlo con dispositivos externos como por ejemplo un módulo
bluetooth HC-05, a diferencia del RS232 (PC) con este recurso trabajamos a velocidades más
lentas ya que está configurado para trabajar a 9600 baudios. También cuenta con un pin para
utilizarlo como interrupción que indica cuando se ha hecho una recepción, es muy útil si
queremos tener más control al realizar la comunicación.
Avanxe también cuenta con un PSoC (System on Chip) que nos permite hacer uso de sus recursos
para ampliar la utilidad de SADE, por lo que podemos utilizar los siguientes recursos:
ADC – ADC CHAN: Podemos hacer conversiones analógico-digital
DAC: También se pueden realizar conversiones digital-analógico.
La siguiente imagen muestra la ubicación de cada recurso.
Esta biblioteca hecha en JAVA tiene como objetivo utilizar los recursos SADE mediante una
interfaz creada por el usuario y la utilización de comandos predefinidos.
Programación.
El template o plantilla de JAVA cuenta con 7 clases, cada una para realiza una función
específica y una librería (libIntescRS232.dll) que se encarga de hacer la interacción con los puertos.
Clase “grafico.java”: En esta clase podemos crear nuestra parte gráfica, se pueden agregar lineas,
figuras geométricas e inclusive imágenes.
Clase “HexToDec.java”: Se utiliza para hacer una conversión de hexadecimal a decimal.
Clase “Hilo.java”: En esta clase escribiremos nuestro código que se va a estar ejecutándose
constantemente.
Clase “LibRS232.java”: Contiene las funciones necesarias para configurar el puerto COM, como por
ejemplo buscar los puertos disponibles, abrir puerto, la velocidad de transmisión, envío y recepción de
datos.
Clase “MAIN.java”: Contiene la interfaz gráfica creada por el usuario.
Clase “SADEAvanxeRevA.java”: Contiene los métodos para utilizar los recursos de SADE.
Clase “Utils.java”: Esta clase contiene las rutas donde se encuentran las librerías que harán funcionar
nuestra aplicación.
A continuación se
“SADESAvanxeRevA.java”.
muestra
como
utilizar
los
métodos
dentro
de
la
clase
Para obtener los métodos dentro de la clase “SADEAvanxeRevA.java” se creó un objeto
llamado “comando” (el nombre se puede cambiar), el cual hereda dichos métodos para controlar los
recursos de SADE:
SADEAvanxeRevA comando = new SADEAvanxeRevA();
Al desplegar el menú de contenido (presionando “Ctrl” + “Espacio”), podemos posicionarnos en
el método a utilizar y se desplegará un cuadro de diálogo con la descripción de dicho método.
También nos muestra los pines que podemos utilizar como entrada, salida o PWM. En el caso
de los pines, un mensaje de ayuda nos indica si es un pin de Avanxe Verde o Avanxe Azul
Algunos comandos piden ciertos parámetros, dependiendo el tipo de variable es lo que se pondrá
dentro de los paréntesis:
byte → Valor tipo byte, por ejemplo: (byte) 0xaa
int → Valor tipo entero, por ejemplo: 1,2,3,….
Boolean → Valor tipo booleano, por ejemplo: true, false
IMPORTANTE: Todos los comandos que devuelvan un valor será de tipo byte.
1) LEDS(byte VALOR_A_LEDS)
Comando que manda a los LEDs un valor de 8 bits, el cual tiene que ser tipo byte. Este método no
devuelve ningún valor. Acá un código de ejemplo:
byte valor = 0x55; //Se carga el número 55 (hexadecimal) = 0101 0101 (binario)
comando.LEDS(valor);//Lo mandamos a los LEDs
Ubicación LEDs:
2) SW()
Se utiliza para leer los Switches de la tarjeta Avanxe. Este comando devuelve un byte.
byte valor_sw = comando.SW(); /* Leemos de los switches y el valor que devuelve lo
guardamos en la variable “valor_sw” */
Ubicación SW:
3) PWM(int PERIODO_PWM,int CICLO_PWM,byte PIN_FPGA)
PINES:
M15, N16, P16, R16, P15, R12, N12, P12, M16, C16, D16, E12, E13, E15, F13, F14.
Con este método utilizamos como PWM uno de los pines de la tarjeta Avanxe. Sólo se deben
especificar los parámetros que se encuentran dentro de los paréntesis. Este comando no devuelve
ningún valor. El pin seleccionado quedará funcionando como PWM hasta que no se le asigne una
nueva función.
int periodo = 10000; //Periodo del PWM (200 us)
int ciclo
= 100; //Ciclo de trabajo del PWM (2 us)
comando.PWM(periodo, ciclo, comando.F14); /*Seleccionamos el pin F14 de la tarjeta
para utilizarlo como PWM */
Fórmulas:
valor_periodo = (Tiempo_periodo) * (50,000,000)
valor_ciclo = (Tiempo_ciclo_trabajo) * (50,000,000)
Ubicación PWM:
4) Pin_Out(byte PIN_FPGA,boolean VALOR)
PINES:
M15, N16, P16, R16, P15, R12, N12, P12, M16, C16, D16, E12, E13, E15, F13, F14.
Se nombra el pin de la tarjeta y lo convierte como salida, cuando VALOR = true se manda un '1' lógico
y VALOR = false se manda un '0' lógico. Este comando no devuelve ningún valor.
comando.Pin_Out(comando.C16, true); /*Seleccionamos a C16 como pin de salida y
mandamos un '1' lógico */
comando.Pin_Out(comando.C16, false); /*Seleccionamos a C16 como pin de salida y
mandamos un '0' lógico */
5) Pin_In(byte PIN_FPGA)
PINES:
M15, N16, P16, R16, P15, R12, N12, P12, M16, C16, D16, E12, E13, E15, F13, F14.
Selecciona y convierte un pin de la tarjeta como entrada. Este comando sí devuelve un byte aunque
únicamente toma dos valores: 0x00 y 0x01.
byte v_pin = comando.Pin_In(comando.M15);/*Seleccionamos a M15 como pin de entrada
y el valor lo guardamos en “v_pin” */
Ubicación IO PIN:
6) BiPort_Out(byte BYTE_A_ESCRIBIR)
PINES:
J14 a L12
Manda un valor de 8 bits a un puerto ya predefinido. Este comando no devuelve ningún valor.
byte dato = 0x55; //Dato a mandar
comando.BiPort_Out(dato); //Mandamos “dato” en el puerto bidireccional
7) BiPort_In()
PINES:
J14 a L12
Lee un byte de un puerto predefinido. Este comando regresa un byte.
byte v_puerto = comando.BiPort_In(); /* Leemos el puerto y el dato lo guardamos en
“v_puerto” */
Ubicación BiPORT:
8) I2C_Write(byte SLAVE_ADDRESS, byte REG_ADDRESS, byte REG_DATA)
PINES: SDA – G12, SCL – E16
Con éste comando se manda a escribir a un registro de un dispositivo mediante protocolo I2C, sólo se
necesitan poner los siguientes parámetros: “SLAVE_ADRESS” (Dirección esclava del dispositivo),
“REG_ADRESS” (Dirección del registro a escribir), “REG_DATA” (Dato a escribir) todos siendo de tipo
byte. Este comando no devuelve ningún valor.
byte dir_esclava = 0x1d; //Dirección esclava del dispositivo sin bit R/W
byte dir_registro = 0x2a; //Dirección del registro a escribir
byte dato = 0x2a; //Dato a escribir
comando.I2C_Write(dir_esclava, dir_registro, dato); /*Mandamos toda la información
por I2C*/
9) I2C_Read(byte SLAVE_ADDRESS, byte REG_ADDRESS)
PINES: SDA – G12, SCL – E16
Comando que se utiliza para leer un dato de un dispositivo mediante I2C. Los parámetros que piden
son la dirección esclava y la dirección del registro a leer ambos valores de tipo byte. El comando
devuelve un byte.
NOTA: Siempre se estará recibiendo un dato del registro.
byte dir_esclava = 0x1d; //Dirección esclava del dispositivo sin bit R/W
byte dir_registro = 0x01; //Dirección del registro a leer
byte dato = comando.I2C_Read(dir_esclava, dir_registro);
/* Mandamos toda la información por I2C y guardamos el dato recibido
en la variable tipo byte “dato” */
IMPORTANTE: La dirección esclava se manda sin considerar el bit R/W
Ubicación I2C:
10) RS232_SADE_Write(byte DATO)
PINES:
G16 – RX, F15 – TX, G14 – Bit de interrupción.
Envia un byte mediante protocolo RS232 cuya velocidad de transmisión es de 9600 baudios, es útil
para comunicarnos con dispositivos externos que soporten este protocolo.
byte DATO = 0x55; //Byte a enviar
comando.RS232_SADE_Write(DATO); //Mandamos el byte “DATO”
11) RS232_SADE_Write(byte DATO)
PINES:
G16 – RX, F15 – TX, G14 – Bit de interrupción.
Recepción de un byte mediante protocolo RS232 cuya velocidad de transmisión es de 9600 baudios,
byte DATO = comando.RS232_SADE_Read(); //Leemos el byte recibido y lo guardamos en
//la variable “DATO”
NOTA: El bit de interrupción puede usarse para saber cuando se ha recibido un dato.
Ubicación RS232 de SADE:
12) ADC(int CANAL)
Comando que se utiliza para trabajar con el ADC del PSoC. Avanxe cuenta con un sólo canal analógico
digital, por lo que el argumento siempre es 1. Una vez que se ha seleccionado el canal, siempre
devolverá un byte con el valor de la conversión.
El siguiente código de ejemplo muestra como utilizar este comando:
byte valor_adc = comando.ADC(1); /*El argumento de entrada siempre es 1 y el valor
que devuelve lo guardamos en la variable tipo
byte “valor_adc”*/
comando.LEDS(valor_adc); //Mandamos a los LEDs el valor leído por el ADC
Ubicación del canal ADC:
ADC
13) DAC(byte VALOR_DAC)
Comando para utilizar el convertidor Digital/analógico del PSoC. Este comando no devuelve ningún
valor.
byte valor_digital = 0xff; //Valor que convertiremos a analógico
comando.DAC(valor_digital); //Hacemos la conversión D/A
Fórmula:
Voltaje de salida = Valor_digital*0.016
donde:
Voltaje de salida – Rango de 0 a 4.08 V
Valor digital – Rango de 0 a 255
Ubicación DAC:
¡Gracias por su interés en SADE!
Cualquier duda o información pueden contactarnos en: [email protected]
También pueden visitar nuestra página www.intesc.mx para ver otros proyectos.