Hola hace tiempo que no escribía por aquí; pues como les comenté, compré unos analizadores lógicos y está bastante bien la relación precio-funcionalidad, para lo que nos sirve, funcionan con el software de http://www.saleae.com/ , pues en realidad es un clon; como lo dije, el original y desde mi punto de vista está a buen precio en Estados Unidos ($150USD) para ser un producto de calidad de 8 canales, tristemente no estamos en Estados Unidos, estamos en México y aquí es mucho más caro ya que nos viene saliendo en $250 USD sin la importación lo cual ya vendrían siendo unos $ 3,000 pesos más lo de paquetería y la verdad así ya no vale la pena creo yo.
Pues les explico qué es una analizador lógico. La definición de wikipedia nos dice que: “es un instrumento de medida que captura los datos de un circuito digital y los muestra para su posterior análisis, de modo similar a como lo hace un osciloscopio, pero a diferencia de este, es capaz de visualizar las señales de múltiples canales. Además de permitir visualizar los datos para así verificar el correcto funcionamiento del sistema digital, puede medir tiempos entre cambios de nivel, número de estados lógicos, etc. La forma de capturar datos desde un analizador lógico es conectando una punta lógica apropiada en el bus de datos a medir”
Pues como lo dice, es un instrumento que mide señales digitales, este no lo hace en tiempo real sino que tú le indicas si correr o que espere un disparo en una X señal y empieza a leer datos, pero este tiene la ventaja de que si estás usando un protocolo serial como CAN, DMX-512, I2C, I2S/PCM, Manchester, 1-wire, Async Serial (UART), Paralelo, SPI o UNI/O (protocolo serial de Microchip para sistemas embebidos) tú le dices en el canal 1 tengo SDA y en el canal 2 tengo SCL del I2C, canal 3 tengo MOSI y canal 4 MISO del SPI y los demás son señales simples o algún otro protocolo y te da el dato que se está enviando.
Como ven en la imagen a la derecha más o menos al centro se ven todos los protocolos que tiene el software del analizador lógico.
Pues para probar lo que puede hacer el analizador lógico hice una aplicación muy simple.
El material que utilicé fue una tarjeta XPLAIN XMEGA-A3BU o el micro controlador que está dentro de ella que es un XMEGA256A3BU, un sensor ultrasónico HC-SR04, un módulo bluetooth y el analizador lógico.
La aplicación consiste en hacer una lectura del módulo ultrasónico, procesar el dato (convertirlo a centímetros) y enviarlo vía bluetooth a una terminal, ya sea en la PC o en un teléfono, en este caso estoy usando la del teléfono, desde aquí pueden bajar la aplicación. Actualmente estoy usando el AVR software framework debido a que AVR GCC es del 2010 y ya no le dan soporte y el Atmel software framework (ASF) está bastante bien (es muy parecido al AVR GCC). Una de las cosas que me gustó mucho del ASF es que todo está en estructuras (al menos para los XMEGA que son los que he usado), por ejemplo para los puertos de entrada o salida pones PORTA.DIR, PORTA.OUT , USARTE0.DATA, USARTE0.CTRLA, USARTE0.CTRLB, TCC0.CTRLA, TCC0.CTRLB, TCC0.TCNT, etc …. La verdad no sé si esté así para los ATtiny o ATmega con el ASF pero para los XMEGA sí y los he estado usando bastante y he comparado precios con los ATmega. A mi punto de vista vale mucho más la pena comprar un XMEGA, que son más baratos y hacen muchas más cosas, la curva de aprendizaje no es nada extravagante para los que ya saben usar los ATmega o ATtiny ya que sólo basta aprender los demás dispositivos que tienes disponibles como DMA y Event system, tienen muchos más dispositivos a la mano en muchos puertos, hay 2 USART´s, también 2 timer´s, el ADC es más preciso(12-bit´s), SPI´s, I2C´s, encriptación AES y DES en hardware, cálculo del CRC en hardware, salidas analógicas, etc…… en fin. Son mucho más baratos y tienen muchas más cosas creo que vale la pena aprender a usarlos, si andas tratando de aprender algún micro controlador te recomiendo que aprendas los XMEGA, puedes comprar algún XPLAIN con un XMEGA y pues te vas a gastar no más de 400 pesos, aparte el IDE de C es gratuito (Atmel Studio 6) y esta mucho mejor que otros IDE´s que he visto como de fujistu (softune), TI (Code composer) o Freescale (Codewarrior). Todos esto tiene sus desventajas claro pero pues la verdad no son tan desventajas, si lo son si eres principiante, no encuentras los chips en empaquetado DIP solo en montaje superficial como QFP, QFN, etc … y la segunda trabajan a máximo 3.6 Volts lo que quiere decir que si son interfaces de 5 Volts habrá que poner convertidores de nivel, no lo he probado pero he leído que las entradas no son tolerantes a 5v y se queman si les pones 5 volts.
Ahí está el código pero no lo explicaré muy bien porque el punto es que conozcan más un analizador lógico.
1: #define F_CPU 32000000UL //32 MHZ clock
2: #define triger (1<<0)|(1<<1) //Pin used as triger one for the triger and the other for the logic analyzer
3: #include <avr/io.h>
4: #include <util/delay.h>
5: #include <stdlib.h>
6:
7: typedef union{ //union definition of 16 bits
8: uint16_t palabra; //accessing as a word
9: uint8_t bytes[2]; //accessing as to bytes
10: }w_16bits;
11:
12: char BCD_dis[6]; //pointer to array of the value to send
13:
14: volatile uint32_t distancia; //read value
15: volatile uint8_t i;
16:
17: void clk_config(void); //clock configuration for 32 MHZ
18:
19: int main(void)
20: {
21: clk_config(); //configuration of the clock
22: PORTA.DIR|=triger; //port to trigger the ultrasonic sensor
23: EVSYS.CH6MUX=0b01100000; //event system channel 6 configured to PORTC PIN 0
24: PORTC.PIN0CTRL=0x00; //PORTC PIN 0 set as input sensing both edges
25: TCC0.CTRLA|=TC0_CLKSEL2_bm; //division factor by 8 so the clock is 32000000/8=4000000
26: TCC0.CTRLB|=TC0_CCAEN_bm; //activate output compare A
27: TCC0.CTRLD|=TC0_EVACT2_bm|TC0_EVACT1_bm|TC0_EVSEL3_bm|TC0_EVSEL2_bm|TC0_EVSEL1_bm; //pulse width capture and event channel 6
28: USARTE0.CTRLB=(1<<4)|(1<<3); //UART configuration
29: USARTE0.CTRLC=0b00000011; //UART configuration
30: USARTE0.BAUDCTRLA = 12; //UART configuration
31: USARTE0.BAUDCTRLB = (1<<6); //UART configuration
32: PORTE.DIR|=(1<<3); //set UART port as output
33: BCD_dis[4]=0x0A; //fill the array to send with a LF
34: BCD_dis[5]=0x0D; //fill the array to send with a CR
35: while(1) //main program while cycle
36: {
37: PORTA.OUT|=triger; //triger action
38: _delay_us(11); //minimum time for triger
39: PORTA.OUT&=~(1<<0); //turning of trigger
40: PORTA.OUT&=~(1<<1); //turning of trigger
41: _delay_ms(60); //wait you can only do one read every ~ 60 ms
42: distancia=(TCC0.CCA/232); //convert the read value to centimeters avoiding floating point math
43: itoa(distancia,BCD_dis,10); //Change the 16bit value to a readable number un a console
44: for(i=0;i<=5;i++) //cycle for sending characters
45: {
46: USARTE0.DATA=BCD_dis[i]; //character send
47: while((USARTE0.STATUS&(USART_TXCIF_bm))==0);//check for the send flag
48: USARTE0.STATUS|=USART_TXCIF_bm; //clear the send flag
49: }
50: }
51: }
52:
53: void clk_config(void)
54: {
55: OSC.PLLCTRL=0x80; //Oscillator configuration
56: OSC.CTRL |= (1<<OSC_RC32MEN_bp); //Oscillator configuration
57: while((OSC.STATUS & (OSC_RC32MRDY_bm)) == 0);//Oscillator configuration
58: CCP = CCP_IOREG_gc; //Oscillator configuration
59: CLK.CTRL |= CLK_SCLKSEL_RC32M_gc; //Oscillator configuration
60: OSC.CTRL &= ~OSC_RC2MEN_bm; //Oscillator configuration
61: }
Como les comenté hay que dar un pulso al sensor ultrasónico para que comience la secuencia, se manda el pulso de aproximadamente 10ms.
Seguido del pulso, el sensor ultrasónico nos regresa un pulso, dependiendo de la anchura de este pulso es la distancia medida con un límite de 300 centímetros que yo vi que son como 250 centímetros.
Como se ve en el canal 3 dice Serial TX, estos datos son seriales y es el protocolo que usé, el primero es un 1 seguido de 9 después un 4 y un 0 los \n y \r son retorno de carro y salto de línea, aquí lo interesante es que si se fijan tengo un 0, ese 0 es un cero hexadecimal que envió el hardware debido al programa y los demás no son ceros sino que son los números 31, 39 y 34 que corresponden al 1, 9 y 4, esto se puede ver que el 0 tiene todos los bits en bajo y los demás no debido a que la configuración se conforma por el bit de inicio seguido por el menos significativo y así sucesivamente hasta el séptimo bit que es de paro y sin paridad.
Por ahí se ve el 194 que vimos, me costó trabajo agarrarlo (como lo hace 15 veces por segundo es complicado). Guardé los datos para que los bajen y los puedan abrir en el software de http://www.saleae.com/downloads y aquí esta el link de la sesión.
Aquí una foto de lo que hice físicamente la verdad está hecho un desastre.
Como se ve en el lado izquierdo está el depurador para el micro, en el centro la Xmega-A3BU Xplained después en la orilla derecha el analizador lógico, en la parte de abajo al centro está el sensor ultrasónico y a su lado derecho un poco más arriba el módulo bluetooth.
Pues ya vieron más o menos lo que hace. Es bastante útil para los que diseñamos sistemas digitales y que manejamos protocolos seriales, un osciloscopio nos sirve pero pues este para protocolos seriales es muy muy bueno. Compré varios de estos y por si les interesa los estaré vendiendo en mercadolibre (link) y si les interesa alguna otra cosa tmb la puedo conseguir sólo contáctenme ya saben por correo, un comentario o mi twitter @lams_007