Autor Tema: Básico "Osciloscopio" para mostrar señal V-I de componentes...  (Leído 4180 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Básico "Osciloscopio" para mostrar señal V-I de componentes...
« en: 26 de Noviembre de 2010, 12:52:30 »
Qué tal gente TodoPIC!

Bueno voy a dar inicio a este hilo aunque en realidad el proyecto no es mío, es del compañero y paisano IAO, él me autorizó a hacerlo...  :lol:
IAO si digo una locura por favor corrígelo...  :D

La idea es hacer un modesto aparato de medición con una pantalla GLCD Nokia 3310 (48x84).
Lo más importante es mostrar en la pantallita la señal V-I de algún componente, para obtener gráficos parecidos a los que salen en esta página:

http://www.techlib.com/electronics/curvetrace.html

Al tener la curva V-I se puede comparar con la curva característica y así detectar fallas y corregir errores...

Yo ahora tengo el honor de ser colaborador con IAO en este proyecto, estoy dedicado más que todo a la parte de la programación, estamos usando el basic ya que IAO programa en PICAXE.

Hasta ahora estoy usando el compilador Pic Basic Pro y haciendo las simulaciones en un PIC16F876, cuando la parte más importante del código esté listo el lo traducirá a picaxe.

Yo no tengo tanta experiencia y es la primera vez que trabajo con estas GLCD... pero por lo menos ya logré hacer que muestre las dos señales sinusoidales que está midiendo el pic, jeje se ven relindas!! Estoy feliz!! yupi!!  :-/  :-/  :-/

Comparto el código con ustedes y la simulación en proteus:

Código: FreeBasic
  1. '****************************************************************
  2. '*  Name    : proyeco-4.BAS                                         *
  3. '*  Author  : Iao-Firepic                                       *
  4. '*  Notice  : Copyright (c) 2010 [select VIEW...EDITOR OPTIONS] *
  5. '*          : All Rights Reserved                               *
  6. '*  Date    : 25/11/2010                                        *
  7. '*  Version : 1.0                                               *
  8. '*  Notes   : MiniOsciloscopio con el LCD Nokia 3310.             *
  9. '*          :                                                   *
  10. '****************************************************************
  11.  
  12. '***************************************************************
  13. 'CONFIGURACIONES GENERALES
  14. '***************************************************************
  15.  
  16. INCLUDE "modedefs.bas"
  17. dEFINE LOADER_USED 1
  18. Define  OSC     4                 ' Definimos la Frecuencia del cristal a 4Mhz
  19. DEFINE ADC_BITS 8
  20.  
  21. Pin_SCLK        VAR PortB.0     'LCD Clock
  22. Pin_SDIN        VAR PortB.1     'LCD Data
  23. Pin_DC          VAR PortB.2     'LCD Data/Command
  24. Pin_SCE         VAR PortB.3     'LCD Chip select
  25. Pin_RST         VAR PortB.4     'LCD Reset
  26. Pin_Vcc         VAR PortB.5     'LCD Power
  27.  
  28. 'Variables usadas por las rutinas del LCD
  29. ascii       var byte
  30. Grafico     var byte
  31. valor_a     VAR BYTE
  32. valor_b     var byte
  33. LCD_f       var word
  34. Fuente      var byte
  35. Fuente1     var byte
  36. lcd_chr     var word
  37. numero      VAR WORD
  38. dato        var byte
  39. PosX        var byte
  40. PosY        var byte
  41. X           var BYTE
  42. Y           var byte
  43. i           var BYTE
  44. j           var BYTE
  45. k           var BYTE
  46. n           var byte
  47. f           var byte
  48. z           var BYTE    'No usar en otra parte, se usa en rutina "DibujaPunto"
  49. Invertido   var bit
  50. canal_a     var byte[70]
  51. canal_b     var byte[70]
  52.  
  53. Inicio:
  54.     X=0
  55.     Y=0
  56.     TRISA = 255
  57.     ADCON1 = 0
  58.     TRISB=0           ' Puerto B entero como salidas
  59.     TRISC=0
  60.     PORTB=0
  61.     OPTION_REG.7 = 1  ' Desactivamos pull-ups del portB
  62.     INTCON.7=0        ' Desactivamos las interrupciones
  63.     Pause 100         ' Hacemos una pausa de 100 ms para estabilizar todo
  64.     gosub InicializaLCD
  65.     gosub ConfiguraLCD
  66.     gosub borra_lcd
  67.     gosub cursor_origen
  68. ciclo:
  69.     gosub muestreo
  70.     gosub Pantalla
  71.     pause 2000
  72.     gosub borra_lcd
  73.     goto ciclo
  74.    
  75. '***************************************************************
  76. 'Rutina para muestreo y almacenamiento de medición en RAM.
  77. '***************************************************************
  78. Muestreo:
  79.     for i = 0 to 69                                    
  80.         adcin 0, valor_a
  81.         adcin 1, valor_b
  82.         canal_a[i]= valor_a/8
  83.         canal_b[i]= valor_b/8
  84.         pause 15               
  85.     next i
  86.     return
  87.        
  88. '***************************************************************
  89. 'Esta rutina muestra las dos señales en el LCD.
  90. '***************************************************************
  91.  
  92. Pantalla:
  93.     x=0
  94.     for i = 0 to 69                                    
  95.         y=canal_a[i]
  96.         gosub Dibujapunto
  97.         y=30+canal_b[i]
  98.         gosub dibujapunto
  99.         pause 10
  100.         x = x+1        
  101.     next i
  102.     Return
  103.    
  104. '***************************************************************
  105. 'Esta rutina grafica un punto en la pantalla
  106. 'siguiendo coordenadas X,Y (X:0-83; y:0-47).
  107. '***************************************************************
  108. DibujaPunto:
  109.      if Y<=7 then                  
  110.         z=7-Y
  111.         dato = %00000001 << z  
  112.         posy=5
  113.     endif
  114.     if Y>=8 AND Y<=15 then
  115.         z=15-Y
  116.         dato = %00000001 << z  
  117.         posy=4
  118.     endif
  119.     if Y>=16 AND Y<=23 then
  120.         posy=3
  121.         z=23-Y
  122.         dato = %00000001 << z
  123.     endif  
  124.     if Y>=24 and Y<=31 then
  125.         posy=2
  126.         z=31-Y
  127.         dato = %00000001 << z
  128.     endif    
  129.     if Y>=32 AND Y<=39 then
  130.         posy=1
  131.         z=39-Y
  132.         dato = %00000001 << z
  133.     endif    
  134.     if Y>=40 AND Y<=47 then
  135.         posy=0
  136.         z=47-Y
  137.         dato = %00000001 << z
  138.     endif    
  139.     PosX = X
  140.     gosub cursor_xy
  141.     lcd_chr = dato
  142.     gosub lcd_data
  143.     return
  144.  
  145. '*******************************************************************************************    
  146. '                           RUTINAS GESTION LCD NOKIA 3310
  147. '*******************************************************************************************
  148.  
  149. '-------------------------------------------------------------------------------------------
  150. InicializaLCD:      
  151.     Pin_DC=1          ' Seleccionamos el registro de datos en RAM
  152.     Pin_SCE=1         ' Anulamos la seleccion del chip
  153.     Pin_VCC=1            ' Damos alimentacion al LCD
  154.     pause 100         ' Hacemos una pausa de 100 ms
  155.     gosub Reset_LCD   ' Reseteamos el LCD
  156.     return
  157. '-------------------------------------------------------------------------------------------
  158. '-------------------------------------------------------------------------------------------
  159. ConfiguraLCD:
  160.     lcd_chr=%00100001 ' Chip Activo, Direccionamiento horizontal, uso de instrucciones extendidas
  161.     gosub lCD_cmd
  162.     lcd_chr=$B5       ' Configura el voltage de operacion del LCD (Contraste)
  163.     gosub lCD_cmd
  164.     lcd_chr=$13       ' Configura bias mux rate a 1:48
  165.     gosub lCD_cmd
  166.     lcd_chr=%00100000 ' Chip Activo, Direccionamiento horizontal,uso de instrucciones basicas
  167.     gosub lCD_cmd
  168.     gosub Segmentos_ON   ' Configura el display (Todos los segmentos ON)
  169.     gosub Display_Normal ' Configura el display (modo Normal)
  170.     gosub direccionamiento_vertical
  171.     return
  172. '-------------------------------------------------------------------------------------------
  173. '-------------------------------------------------------------------------------------------
  174. Display_Blanco:
  175.     lcd_chr=%00001000 ' Display Blanco    
  176.     gosub lCD_cmd
  177.     return
  178. '-------------------------------------------------------------------------------------------
  179. '-------------------------------------------------------------------------------------------
  180. Display_Inverso:
  181.     lcd_chr=%00001101 ' Display Inverso    
  182.     gosub lCD_cmd
  183.     return
  184. '-------------------------------------------------------------------------------------------
  185. '-------------------------------------------------------------------------------------------
  186. Display_Normal:
  187.     lcd_chr=%00001100 ' Display Normal  
  188.     gosub lCD_cmd
  189.     return
  190. '-------------------------------------------------------------------------------------------
  191. '-------------------------------------------------------------------------------------------
  192. Segmentos_ON:
  193.     lcd_chr=%00001001 ' Segmentos ON  
  194.     gosub lCD_cmd
  195.     return
  196. '-------------------------------------------------------------------------------------------
  197. '-------------------------------------------------------------------------------------------
  198. Direccionamiento_Vertical:
  199.     lcd_chr=%00100010 ' Chip Activo, Direccionamiento Vertical,uso de instrucciones basicas
  200.     gosub lCD_cmd
  201.     return
  202. '-------------------------------------------------------------------------------------------
  203. '-------------------------------------------------------------------------------------------
  204. Direccionamiento_Horizonal:
  205.     lcd_chr=%00100000 ' Chip Activo, Direccionamiento Vertical,uso de instrucciones basicas
  206.     gosub lCD_cmd
  207.     return
  208. '-------------------------------------------------------------------------------------------
  209. '-------------------------------------------------------------------------------------------
  210. Borra_LCD:
  211.     gosub Cursor_Origen  ' Colocamos el cursor en el origen
  212.     for LCD_f=0 to 503       ' Recorremos todas las posiciones del LCD colocando ceros
  213.         lcd_chr=0
  214.         gosub LCD_Data
  215.     next LCD_f
  216.     return
  217. '-------------------------------------------------------------------------------------------
  218. '-------------------------------------------------------------------------------------------
  219. Cursor_Origen:        
  220.     lcd_chr=%01000000 ' Ponemos la direccion Y a 0 (01000yyy)
  221.     gosub lCD_cmd
  222.     lcd_chr=%10000000 ' Ponemos la direccion X a 0 (1xxxxxxx)
  223.     gosub lCD_cmd
  224.     return
  225. '-------------------------------------------------------------------------------------------
  226. '-------------------------------------------------------------------------------------------
  227. Cursor_XY:
  228.     lcd_chr=%10000000 <PIPE> PosX
  229.     Gosub lCD_cmd         ' Envia Posicion X
  230.     lcd_chr=%01000000 <PIPE> PosY
  231.     Gosub lCD_cmd         ' Envia Posicion Y      
  232.     return
  233. '-------------------------------------------------------------------------------------------
  234. '-------------------------------------------------------------------------------------------
  235. Reset_LCD:
  236.     Pin_RST=0   ' Damos un pulso de reset durante 100 ms  
  237.     pause 100
  238.     Pin_RST=1
  239.     return
  240. '-------------------------------------------------------------------------------------------
  241. '-------------------------------------------------------------------------------------------
  242. lCD_cmd:
  243.     Pin_DC=0    ' Seleccionamos el registro de comandos
  244.     goto Data_Out
  245. '-------------------------------------------------------------------------------------------
  246. '-------------------------------------------------------------------------------------------
  247. LCD_Data:  
  248.     Pin_DC=1   ' Seleccionamos el registro de datos de RAM        
  249.     if Invertido=1 then   ' Comprobamos si se invierte el dato para la representacion
  250.         lcd_chr = lcd_chr ^ $FF
  251.     endif
  252.     goto Data_Out
  253. '-------------------------------------------------------------------------------------------
  254. '-------------------------------------------------------------------------------------------
  255. Data_Out:
  256.     Pin_SCE=0   ' Seleccionamos el chip del LCD
  257.     Pin_SCLK=0  ' Ponemos a cero la se&#241;al de reloj
  258.     shiftout Pin_SDIN,Pin_SCLK,1,[lcd_chr\8] 'Enviamos los datos en modo SPI
  259.     Pin_SCE=1   ' Deseleccionamos el chip para liberar el bus
  260.     return      
  261. '-------------------------------------------------------------------------------------------
  262. '-------------------------------------------------------------------------------------------
  263.  
  264. END

Gran parte del código es cortesía del amigo IAO, aunque él a su vez consultó otros autores.
Espero les sirva a alguien que esté trabajando con estos LCD.
En este enlace está la datasheet del glcd: http://homepage.ntlworld.com/c.lewis19/lcd_controller_pcd8544.pdf

Por aquí iremos publicando los resultados, y como siempre cualquier sugerencia o crítica es bienvenida!!  ;-)

Saludos a todos, nos leemos!  :mrgreen:
« Última modificación: 26 de Noviembre de 2010, 12:59:23 por firepic »
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Básico "Osciloscopio" para mostrar señal V-I de componentes...
« Respuesta #1 en: 26 de Noviembre de 2010, 13:23:43 »
Holaaaa.... a todos....

sr. FirePic, usted es un monstruo de la programacion.... jamás pude ver las dos señales al mismo tiempo...

De verdad Recontra Felicitaciones, me dejó loco como grafica las dos señales...

Más felicitaciones, ah y no me metas a mí, en tus logros, la mejor parte es la tuya.  jajajajajajajajaja

Mejor es imposible...  Estoy muy Feliz tambien ,  :D :D :D :D ;-)
que gusto verlo trabajar mejor... :-/ :-/ :-/ :-/ :-/

Nos vemos....
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Básico "Osciloscopio" para mostrar señal V-I de componentes...
« Respuesta #2 en: 26 de Noviembre de 2010, 13:30:07 »
sr. FirePic, usted es un monstruo de la programacion.... jamás pude ver las dos señales al mismo tiempo...
[...]
Más felicitaciones, ah y no me metas a mí, en tus logros, la mejor parte es la tuya.  jajajajajajajajaja

Hombre IAO, no me des tanto crédito que de verdad no lo merezco...  :oops:
"Moustro" es demasiado grande, esa frase aplica a los masters como diego, manolo, mig, ariel y tantos otros de este foro...
Yo creo que ni a mounstrico llego...  :D  :D

Es un logro conjunto compañero, las rutinas de manejo del glcd son tuyas...  :lol:
Por cierto, en picaxe puedes usar arreglos para grabar en RAM así como hice en pbp??

Ok estamos hablando, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado flacoclau

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1692
    • El Micro Reactor
Re: Básico "Osciloscopio" para mostrar señal V-I de componentes...
« Respuesta #3 en: 26 de Noviembre de 2010, 14:18:45 »
Muy buen proyecto amigos!! los felicito!!
Las personas con buena ortografía me atraen textualmente.

El Micro Reactor

Córdoba capital - Argentina.

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Básico "Osciloscopio" para mostrar señal V-I de componentes...
« Respuesta #4 en: 26 de Noviembre de 2010, 14:38:14 »
Vi el código muy por encima, en la noche es que más tiempo tengo.
Pero si hay formas  de hacer arreglos, es un poco más enredado
y depende del modelo de picaxe que estes usando.

Muchos le tienen rabia o cosa a picaxe, pero es entretenido y no tan fácil
como se piensa a veces.. lo que te facilita por una lado te lo quita
por otro lado...

Nos hablamos en un rato...
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Básico "Osciloscopio" para mostrar señal V-I de componentes...
« Respuesta #5 en: 26 de Noviembre de 2010, 14:54:51 »
Muchos le tienen rabia o cosa a picaxe, pero es entretenido y no tan fácil
como se piensa a veces.. lo que te facilita por una lado te lo quita
por otro lado...

:D  :D  :D
IAO buena aclaratoria, para los que le tienen miedo a los PIC y creen que con los picaxe la cosa es papayita...  :D

Sería bueno que pensaras en cambiarte a los PIC una vez que termines de usar esos picaxe que tienes ya comprados...  ;-)
Estamos en contacto!

Nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Básico "Osciloscopio" para mostrar señal V-I de componentes...
« Respuesta #6 en: 27 de Noviembre de 2010, 13:24:35 »
Hola...

Sr. Firepic, es que regalé hace tiempo los programadores de pic que tenía. :)
Y no quería comprar uno para grabar una solo chip y después, un perol más tirado. :mrgreen:

Esa fué una de las razones de utilizar picaxe, dos resistencias, puerto serial, bajo el código y listo.

Lo demás es acostumbrarse un tantín.  :)

Saludos para todos...
« Última modificación: 27 de Noviembre de 2010, 13:34:40 por IAO »
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado Chrisbaf

  • PIC16
  • ***
  • Mensajes: 178
Re: Básico "Osciloscopio" para mostrar señal V-I de componentes...
« Respuesta #7 en: 27 de Noviembre de 2010, 22:51:26 »
yo lo quise simular pero me muestra el mensaje pcd.dll 8544.dll not found... :( utilizo proteus 7.6 

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Básico "Osciloscopio" para mostrar señal V-I de componentes...
« Respuesta #8 en: 28 de Noviembre de 2010, 00:45:06 »
Hola..

Sr. Chris, eso es porque te falta los archivos de models y library del glcd nokia en proteus. Coloca en el buscador del  foro nokia lcd models debe aparecer la direccion de donde descargarlo. Yo no recuerdo la pagina ahora, te repondo desde un celular y es incomodo buscarte la info.. O sino buscalo en google. El autor creo q es un ruso.

Saludos...
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Básico "Osciloscopio" para mostrar señal V-I de componentes...
« Respuesta #9 en: 30 de Noviembre de 2010, 14:03:20 »
Qué tal!

Aquí dejo los archivos del modelo del GLCD para proteus, y la página fuente: http://www.tanu-sha.narod.ru/

Todo esto cortesía del compañero IAO que me los pasó...  :lol:
Espero les sea útil!

Saludos, nos leemos!  :mrgreen:

"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Básico "Osciloscopio" para mostrar señal V-I de componentes...
« Respuesta #10 en: 30 de Noviembre de 2010, 14:26:19 »
Notifico que por circunstancias ajenas a nuestra voluntad tendremos que detener el trabajo con este proyecto...  :(
Pero para pronto esperamos tenerles noticias!  ;-)

Saludos a todos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web


 

anything