domingo, 23 de junio de 2013

Analizador Lógico


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.


image


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.


511


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.




image


Como se alcanza a ver en la imagen en el canal 0 que dice Triger me da la anchura del pulso, el periodo y la frecuencia, todos estos datos son útiles, el periodo no es igual al del código debido a que como es la función de _delya_us pues no es exacta pero se aproxima mucho.


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.




image



Esto lo podemos ver en el canal 1 que dice Echo la anchura del pulso es de 10.887 ms y el periodo debe de ser igual al del triger debido a que están relacionados, tomando esos 10.887 ms y viendo la hoja de datos del sensor HC-SR04 la fórmula dice tiempo en cms = tms/58 sabiendo que 10.887 ms son 10887, aplicamos la formula: 10887/58 y sale 187.7068 cms y la lectura que hace el microcontrolador es de 194, quizás no es exacta pero es muy acertada, puede ser error de la fórmula por que no considera pequeñas variables y como estoy eliminando datos de punto flotante pierdo precisión.



image




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.




2013-06-23 20.02.04




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.




2013-06-23 20.28.29




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


Saludos

martes, 5 de marzo de 2013

ST discovery, Analizador lógico y nuevo empleo

Hola hace tiempo que no escribía pero había estado algo ocupado ahorita tendré una semana tranquilo creo.

Pues les comente me iba a estar metiendo con los microcontroladores ARM, la serie Cortex MX, y pues creo les mostré varios de diferentes marca hace tiempo, recientemente compre uno del fabricante ST, es un STM32L-Discovery.

2013-03-05 19.17.11

ST32ML-Discovery

Lo siento por el anuncio de newark/element14 así llego y si se lo quito se ve mas feo, el costo de este mismo fue muy bajo de 12.31 USD mas iva.

Una de sus características que me llamo la atención fue  que como el kit de NXP este trae su depurador y promete poder depurar o programar mas µCde esta misma marca seria de 32 bits

Características principales

  • STLINK/V2 depurador
  • LCD DIP28 de 24 segmentos y 4 comunes
  • 2 Leds para el usuario
  • 1 Push button para el usuario
  • 4 botones táctiles
  • Pin header para fácil prototipaje en una protoboard

Algo que no me gusto de ST en µC de 32 bits seria ARM es que no tienes un IDE propio, comp or ejemplo NXP tiene el LPCxpresso, Atmel el Atmel Studio 6, TI tiene su code composer, etc… muchos de estos estan basados en eclipse que es muy bueno y otros no, ST prefiere no tener uno entonces debes de usar uno externo como IAR, Kiel o Atolic true stduio. Como les comento en lo personal eso a mi no me gusta para nada pero bueno como todo tienes sus ventajas y desventaja

Por el momento es todo lo que les puedo comentas no lo e usada mas que para conectarlo no vi ni el demo que traía.

Otra de las cosas que compre de ST fue un STM8S-Discovery, este es de los µC de 8 bits de ST, haber que tal están en realidad no he visto ni sus características lo compre por que estaba barato como 10 USD ya con IVA. La ventaja es que ST si tiene su IDE para estos chips por que para los de 32 no lo tiene.

 

2013-03-05 19.34.32

STM8S-Discovery

Pues hace tiempo quiero comprarme un osciloscopio y un analizador lógico o los dos en uno, del analizador lógico quiero uno que es del fabricante de www.salaea.com, este es muy básico es por USB pero tiene la opción para decodificar varios protocolos tiene en 8 y 16 bits con un costo de 150 USD y 300 USD respectivamente y del osciloscopio pues estaba pensando en un RIGOL de 100 Mhz y 2 canales, pero como no e podido tener ni uno ni otro un día vagando por internet encontré un analizador lógico al parecer es un clon de una marca www.usbee.com pero pues esta marca y la anteriormente menciona tiene casi el mismo hardware cambiando el VID/PID que viene en una memoria E2PROM podemos hacerlo funcionar como el de la otra marca y pues todo esto por como 20 USD decidí probarlo y ya me llego pro lo pronto pues lo conecte y baje el software de www.usbeee.com y lo reconoce y según hace capturas pero no entiendo ese software, programare esa memoria y veré que tal funciona después les enseño haber si valen la pena y les digo donde o pueden comprar.

2013-03-05 19.45.32

Del lado derecho el analizador lógico y del lado izquierdo una fuente conmutada

Les comento hace tiempo quería hacer kits de fuentes conmutadas y el CI LM2576, LM2596, etc… ya que pues son simples de usar y desde mi punto de vista mucho mejores que un CI de la serie 78XX y la vi esta tiene un LM2596S-ADJ, la estaré probando haber si compro mas, debe de funcionar es solo el diagrama que viene en la hija de datos pero recuerden son chinos y pues el CI puede ser diferente al que esta marcado.

Y por ultimo y no menos importante pues cambie de trabajo me ofrecieron un trabajo en Continental Automotive Group en GDL y pues ya ando par acá se supone hoy era mi primer día de trabajo pero por políticas de le empresa solo puedo empezar a trabajar los lunes, y firme contrato hoy entonces hasta el lunes 11 de marzo empezare mientras tengo una semana sin mucho que hacer. les estaré comentando que hare pero pues no puedo decir mucho el contrato de confidencialidad es mucho mucho mas extenso solo puedo decir que estaré usando CAN y micros ARM Cortex M aun no se bien pero pues se ve interesante lo que voy a estar haciendo.

Por cierto ando buscando un programador de java o algún otro lenguaje, este debe de poder saber leer y escribir el puerto serial y entregarme el código fuente y quizás USB a futuro, no tiene que ser java solo quiero que sea un programa que sea portable para Windows, linux y Mac, pagaría por proyecto en realidad es algo muy simple anímense.

Y como siempre ya saben no duden en contactarse conmigo a mi correo mecatronicamexicana@gmail.com y síganme en mi twitter @lams_007

Saludos