TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: TREMENS en 20 de Noviembre de 2006, 16:33:02

Título: Ejemplos Protón
Publicado por: TREMENS en 20 de Noviembre de 2006, 16:33:02
Este hilo lo inicié para documentar ejemplos en protón, dado que hay temas como ejemplos de mikrobasic, o ejemplos de mickrobasic y proton, o de picbasic y usb. Sin embargo no hay un lugar donde especificamente esten ejemplos de protón, por lo me parece interesante ir juntandolos en un solo lugar.
Título: Re: Ejemplos Protón
Publicado por: LordLafebre en 20 de Noviembre de 2006, 17:41:12
Hola:

Creo que no se a publicado mucho sobre proton ya que no mucha gente lo usa, pese a que es un muy buen compilador, estoy migrando a el desde PBP y me gusta mas, pero si te animas a publicar ejemplos o esas cosas, con gusto pasare por aqui a aportar en lo que se pueda.
Título: Re: Ejemplos Protón
Publicado por: doppel en 20 de Noviembre de 2006, 19:44:08
Hola

En el link que dejo, hace mucho tiempo se pusieron algunos ejemplos de protón.-

http://www.todopic.com.ar/foros/index.php?topic=2810.0

saludos :-)
Título: Re: HOLA por LCD
Publicado por: TREMENS en 29 de Noviembre de 2006, 18:51:37
tras algunos problemas , posteo mi primer programilla en esta sección de ejemplos, exclusiva de PROTON.

Saca por lcd la palabra hola.
RS a RB2, RW A MASA, E a RB1
D4 a D7 conectado a RB4 a RB7

cóDIGO:

Device = 16F877         
     XTAL = 4   
     
    LCD_TYPE = 0                 ' Our LCD is the alphanumeric type
       
     LCD_DTPIN = PORTB.4         ' For Proteus Virtual Hardware Board LCD Data is PORTB.4,5,6,7
   
     LCD_RSPIN = PORTB.2        ' LCD RS pin
     LCD_ENPIN = PORTB.1        ' LCD EN pin
     LCD_INTERFACE = 4           ' We're using a 4-bit LCD interface
     LCD_LINES = 2               ' We're using a 2-Line LCD
   
       
   TRISB = 0
DELAYMS 500             
inicio:
cls
print at 2,2,"Hola"
DELAYMS 500
goto inicio


PD: ojalá se unan los demás

Título: Re: Ejemplos Protón
Publicado por: navaismo en 30 de Noviembre de 2006, 16:04:48
[goear]f19d715[/goear]

probando esto

Barometro

Bueno aqui un ejemplo en Proton de como leer la Presion Atmosferica de un sensor de Freescale MPX4115. este ejemplo le hubiera errado de no ser por Pao ya que me explico como hacer el corrimiento para leer los 1024 valores del ADC ya que Proton parece que no lo hace como PBP.

A este sensor no le veo otro uso que el de estacion meterologica o como Altimetro.

Segun el Datasheet la funcion de transferencia del sensor es la siguiente:
Vout=Vs(.009*P-.095)

donde:

                  Vout  es el valor que entrega el sensor
                  P es la Presion (que no conocemos)
                  Vs   es la fuente quew alimenta al Sensor generalmente 5 o 5.1 Volts

Aqui el codigo:

Código: FreeBasic
  1. '****************************************************************
  2. '*  Name    : Barometro.bas                                     *
  3. '*  Author  : Max Eduardo Reyes Vera Juárez                     *
  4. '*  Notice  : Copyright (c) 2006 Protegido por leyes de autor   *
  5. '*          : All Rights Reserved                               *
  6. '*  Date    : 30/11/2006                                        *
  7. '*  Version : 1.0                                               *
  8. '*  Notes   : Funcion de transferecncia del MPX4115A es         *
  9. '*          : Vout=VS(0.009*P-0.095)+- ERROR                    *
  10. '*          : Donde Vout es el voltaje que entrega el MXP4115A  *
  11. '*          : VS es el Valor de la fuente gralmente 5 o 5.1V    *
  12. '*          : P es la presion a encontrar                       *
  13. '*          : ERROR es el error que entrega el MPX a ciertas    *
  14. '*          : Temperaturas;       +-3 de -40° a 0°              *
  15. '*          :                     +-1 de   0° a 85°             *
  16. '*          :                 +-3 de  80° a 125°                *    
  17. '****************************************************************
  18.  
  19.  
  20.  DEVICE = 16F88
  21.  XTAL = 4
  22.  
  23.  declare adin_res 10             ' resolucin de 10 bits
  24.  DECLARE ADIN_STIME 50           ' tiempo de muestreo 50ms
  25.  
  26.                                  
  27. ANSEL  = 1                       ' ADC en RA0
  28. ADCON1 = 11                      ' Justificado a la derecha y con VREFs
  29. TRISA.0= 1                       ' RA0 de entrada
  30.  
  31. symbol Vs = 5                    ' Valor de La Fuente del Sensor  
  32.  
  33. dim Vadc as word
  34. dim Vout As float
  35. dim P    as float
  36. dim c    as Float
  37. dim b    as float
  38. dim i    as byte
  39.  
  40. dim TX as Portb.0                ' Pin de Transmision
  41.  
  42. Inicio:
  43.  gosub get_vout
  44.  gosub pausa
  45.  gosub get_presion              ' Enviar Presion cada 2 minutos
  46.  gosub pausa
  47.  gosub Muestra_presion
  48.  for i=0 to 120
  49.   delayms 1000
  50.  next i
  51. goto inicio
  52.  
  53. get_VouT:
  54.  vadc = adin 0                              ' Obtencion del ADC
  55.  VADC = Vadc >> 6                           ' Rotar a la derecha para conseguir los 1024
  56.  vout = (vadc * 5) / 1024                   ' Voltaje que entra al ADC
  57. return
  58.  
  59. get_Presion:                               ' Obtener la Presion Atmosferica en KPa
  60.  c = .095 * vs
  61.  b = .009 * vs                             ' Vout=Vs(.009*P-.095)
  62.  P = (vout + c)/(b)                        ' P = (Vout + (.095*Vs)) / (.009*Vs)
  63. return
  64.  
  65. Muestra_Presion:                           ' Envio de la Presion en Kpa y el Voltaje medido
  66.   serout tx, 16468, ["Presion(KPa): ", DEC p, " Vin: ",dec vout, 13]
  67. return  
  68.  
  69. pausa:
  70. delayms 250
  71. return

y el PINOUT:

(http://img307.imageshack.us/img307/3971/mpx4115aaz3.jpg)
Título: Re: Ejemplos Protón
Publicado por: Mario en 01 de Diciembre de 2006, 02:32:13
Si puedes escribir directo en el registro escribe esto:
ADCON1.7=1

Con eso justificas a la derecha y no tienes que hacer corrimientos, sino fíjate en los ejemplos del PBP para 10 bits del convertidor, aunque es Proton (ya lo habiamos discutido ¿recuerdas?) puedes escribir directamente en el registro.


Si no me crees, revisa cualquier hoja de datos donde se tenga convertidor y verás que el bit 7 del ADCON1 es para justificar a la izquierda (0) o derecha (1).

Usa izquierda si vas a utilizar 8 bits, usa derecha si vas a utilizar 10 bits.
Título: Re: Ejemplos Protón
Publicado por: navaismo en 01 de Diciembre de 2006, 02:38:06
Pues si Mario si miras el codigo esta escrito r¿directamente el registro ADCON1 justificado a la derecha y con VREFs pero aun asi es necesario hacer el corrimiento si no en lugar de 1024 te toma 65472
Título: Re: Ejemplos Protón
Publicado por: navaismo en 02 de Diciembre de 2006, 05:22:15
Altimetro

Bueno haciendo unas modififcaciones al programa anterior y cambiando de Micro del 16F88 al 18F452 por aquello del logaritmo. tenemos ahora un Altimetro (¿si se llama asi?).

Me encantaria decirles que tiene un margen de error de unos cunatos metros pero aun no se de caunto es su margen de error aunque por las fallas de mis calculos al Voltaje de entrada ha de ser de unos 20m  :shock: jiji en teoria a una presion de 760mmHg o sea unos 101.3Kpa a nivel del mar debe dar 0m pero como no vivo a nivel del mar y en la simulacion no he conseguido una lectura limpia de 101.3 no puedo decirles  :lol:

Pero de algo servira no? al menos una idea.

Aqui el codigo:

Código: FreeBasic
  1. '****************************************************************
  2. '*  Name    : altimetro.bas                                     *
  3. '*  Author  : Max Eduardo Reyes Vera Juárez                     *
  4. '*  Notice  : Copyright (c) 2006 Protegido por leyes de autor   *
  5. '*          : All Rights Reserved                               *
  6. '*  Date    : 02/12/2006                                        *
  7. '*  Version : 1.0                                               *
  8. '*  Notes   :                                                   *
  9. '*          :                                                   *
  10. '****************************************************************
  11. DEVICE = 18f452
  12.  XTAL = 4
  13.  
  14.  declare adin_res 10             ' resolucin de 10 bits
  15.  DECLARE ADIN_STIME 50           ' tiempo de muestreo 50ms
  16.  
  17.                              
  18. ADCON1 = 143                     ' Justificado a la derecha y con VREFs
  19. TRISA.0= 1                       ' RA0 de entrada
  20.  
  21. symbol Vs  = 5                    ' Valor de La Fuente del Sensor
  22. symbol P_0 = 1013.3               ' Valor de la Presion a nivel del mar en HPa
  23.                    
  24. dim Vadc  as word
  25. dim i     as byte
  26. dim Vout  As float
  27. dim loga  As float                  ' Variables de manejo
  28. dim defp  As float
  29. dim M1    As float
  30. dim M2    As float
  31. dim H     as float
  32. dim P     As float
  33. dim HP    as float
  34. dim C     As float
  35. dim B     As float
  36.  
  37. dim TX as Portb.0                ' Pin de Transmision
  38.  
  39. Inicio:
  40.  
  41.  gosub get_vout
  42.  gosub pausa
  43.  gosub get_presion              ' Enviar Presion cada 2 minutos
  44.  gosub pausa
  45.  gosub get_altura
  46.  gosub pausa
  47.  gosub Muestra_presion
  48.  
  49. for i=0 to 120
  50.   delayms 1000
  51.  next i
  52.  
  53. goto inicio
  54.  
  55. get_VouT:
  56.  vadc = adin 0                              ' Obtencion del ADC
  57.  'VADC = Vadc >> 6                           ' Rotar a la derecha para conseguir los 1024
  58.  vout = (vadc * 5) / 1024                   ' Voltaje que entra al ADC
  59. return
  60.  
  61. get_Presion:                               ' Obtener la Presion Atmosferica en KPa
  62.  c = .095 * vs
  63.  b = .009 * vs                             ' Vout=Vs(.009*P-.095)
  64.  P = (vout + c)/(b)                        ' P = (Vout + (.095*Vs)) / (.009*Vs)
  65. return
  66.  
  67.  
  68. '*************************************************************************************************
  69. '*                   para sacar la altitud se usa la formula                                     *
  70.  *                                                                                               *
  71. '*                                                                                               *                    
  72. '*        8430.153*ln(P_0/P)           donde P es la presion actual y                            *
  73. '*  H = ------------------------       P_0 es la presion del mar 760mmHg o 1013.3 HPa            *
  74. '*         1+(.095*ln(P_0/P)                                                                     *
  75. '*                                                                                               *
  76. '*************************************************************************************************                                                                                        
  77. get_Altura:
  78.  hp = p * 10
  79.  defp = P_0 / hp
  80.  loga = log defp
  81.  M1 = 8430.153 * loga
  82.  m2 = (loga * .095)+1
  83.  H  = M1 / m2  
  84. return
  85.  
  86. Muestra_Presion:                           ' Envio de la Presion en Kpa y el Voltaje medido
  87.   serout tx, 16468, ["Presion(KPa): ", DEC p," HPa: ",dec hp, " Vin: ", dec vout,"V ", " Altitud: ", dec h,"m ", " vadc: ",dec vadc, 13]
  88. return  
  89.  
  90. pausa:
  91. delayms 250
  92. return

la formula la saque de esta pagina: http://www.tutiempo.net/silvia_larocca/Temas/ecuaciones.htm#presion

PD: creo que perdimos le Geshi....Temporalmente




Título: Re: Ejemplos Protón
Publicado por: Mario en 02 de Diciembre de 2006, 16:18:43
Una duda:

Esto:
ADCON1 = 11                      ' Justificado a la derecha y con VREFs

Es lo mismo que esto:
ADCON1 = %10000010   

¿Qué valores coloca ADCON1=11?
¿1011 0000?
¿0000 1011?

Está raro que tengas que rotar.
Título: Re: Ejemplos Protón
Publicado por: navaismo en 02 de Diciembre de 2006, 16:24:49
Error de dedo, debe ser 10110000 con eso:

Justificado a la derecha, desabilitado el el ADCS2, y con VREFs

y en ANSEL=1 solo pongo el AN0 como entrada.

NOta como en el codigo del  altimetro ya no tuve que rotar, esta comentada esa linea
Título: Re: Ejemplos Protón
Publicado por: navaismo en 03 de Diciembre de 2006, 01:25:01
Hola solo para confirmar que el Barometro y el Altimetro funcionan :-/ (http://img135.imageshack.us/img135/4037/dancingaq3.gif).

Pues sucede que vivo en una ciudad donde segun sus datos geograficos estamos a una Altura de 2500m sobre el nivel del mar, la presion no la pude encontrar y al probar el codigo estos fueron los valores que arrojo.

Una  Vs de 5.35V (eso es lo que daba mi fuente)
Una  Presion en Kpa =74.848
Un    Vin = 3.090V
Una  H(altura)=2482.205m

Pues por ahi anda no
Título: Re: Ejemplos Protón
Publicado por: Nocturno en 03 de Diciembre de 2006, 02:43:39
Pues enhorabuena Navaismo, da gusto ver cómo las cosas funcionan.

Por cierto, ¿qué ciudad es esa a tanta altitud?
Título: Re: Ejemplos Protón
Publicado por: navaismo en 03 de Diciembre de 2006, 03:27:28
Hola Gracias Master, pues vivo en el Estado de Mexico y mi municipio es Ecatepec de Morelos. Ectaepec significa Cerro del Viento, y de Morelos es porque aqui ejecutaron a Jose Ma Morelos y Pavon.

Saludos sorry por el OFFTOPIC
Título: Re: Ejemplos Protón
Publicado por: navaismo en 08 de Diciembre de 2006, 21:50:00
Porfin la µEstacion-Meteorologica

es solo la adaptacion de los codigos anteriores y el sensado del TCN75 y aqui las gracias a mi gran amigo Marioguillote porque sin el nunca le hubiera atinado a leer en Proton un sensor I2C... Gracias Mario!!! :-/

el codigo:

Código: FreeBasic
  1. '****************************************************************
  2. '*  Name    : µeMeteorologica.bas                               *
  3. '*  Author  : Max Eduardo Reyes Vera Juárez                     *
  4. '*  Notice  : Copyright (c) 2006 Protegido por leyes de autor   *
  5. '*          : All Rights Reserved                               *
  6. '*  Date    : 02/12/2006                                        *
  7. '*  Version : 1.0                                               *
  8. '*  Notes   :                                                   *
  9. '*          :                                                   *
  10. '****************************************************************
  11. DEVICE = 18f452
  12.  XTAL = 4
  13.  
  14.  declare adin_res 10             ' resolucin de 10 bits
  15.  DECLARE ADIN_STIME 50           ' tiempo de muestreo 50ms
  16.  
  17.  DECLARE SDA_PIN PORTB.1                 'Declarar pines de I2C
  18.  DECLARE SCL_PIN PORTB.2                 
  19.  DECLARE SLOW_BUS=ON                     'Con un BUS demenos de 8 MHZ
  20.                                          
  21. ADCON1 = 143                     ' Justificado a la derecha y con VREFs
  22. TRISA.0= 1                       ' RA0 de entrada
  23.  
  24. symbol Vs  = 5.35                 ' Valor de La Fuente del Sensor
  25. symbol P_0 = 1013.3               ' Valor de la Presion a nivel del mar en HPa
  26. SYMBOL CONTW %10010000                    ' Direccion de Escritura TCN75
  27. SYMBOL CONTR %10010001                    ' Direccion de lectura TCN75
  28.                                                                   ' Pines A2,A1 Y A0 a Tierra                  
  29. dim Vadc  as word
  30. dim Temp  as word
  31. dim dato  as byte
  32. dim Vout  As float
  33. dim loga  As float                  ' Variables de manejo
  34. dim defp  As float
  35. dim M1    As float
  36. dim M2    As float
  37. dim H     as float
  38. dim P     As float
  39. dim HP    as float
  40. dim C     As float
  41. dim B     As float
  42.  
  43. dim MSB as temp.byte1
  44. dim LSB as temp.byte0
  45. dim TX  as Portb.0                ' Pin de Transmision
  46. dim RX  as portb.7
  47.  
  48.  
  49. configTCN75:
  50.  busout contw,1,[$00]              ' Apuntar al registro Temp
  51.  delayms 20
  52.  
  53. lee:
  54.  serin rx, 84, [dato]
  55.   if dato="L" THEN
  56.    GOSUB INICIO
  57.   ENDIF    
  58. GOTO LEE
  59.  
  60.  
  61. Inicio:
  62.  gosub get_vout
  63.  gosub pausa
  64.  gosub get_presion              ' Enviar Presion cada 2 minutos
  65.  gosub pausa
  66.  gosub get_altura
  67.  gosub pausa
  68.  gosub get_Temp
  69.  gosub Muestra_todo
  70.  gosub pausa
  71. RETURN
  72.  
  73. get_VouT:
  74.  vadc = adin 0                              ' Obtencion del ADC
  75.  'VADC = Vadc >> 6                           ' Rotar a la derecha para conseguir los 1024
  76.  vout = (vadc * 5) / 1024                   ' Voltaje que entra al ADC
  77. return
  78.  
  79. get_Presion:                               ' Obtener la Presion Atmosferica en KPa
  80.  c = .095 * vs
  81.  b = .009 * vs                             ' Vout=Vs(.009*P-.095)
  82.  P = (vout + c)/(b)                        ' P = (Vout + (.095*Vs)) / (.009*Vs)
  83. return
  84.  
  85.  
  86. '*************************************************************************************************
  87. '*                   para sacar la altitud se usa la formula                                     *
  88.  *                                                                                               *
  89. '*                                                                                               *                    
  90. '*        8430.153*ln(P_0/P)           donde P es la presion actual y                            *
  91. '*  H = ------------------------       P_0 es la presion del mar 760mmHg o 1013.3 HPa            *
  92. '*         1+(.095*ln(P_0/P)                                                                     *
  93. '*                                                                                               *
  94. '*************************************************************************************************                                                                                        
  95. get_Altura:
  96.  hp = p * 10
  97.  defp = P_0 / hp
  98.  loga = log defp
  99.  M1 = 8430.153 * loga
  100.  m2 = (loga * .095)+1
  101.  H  = M1 / m2  
  102. return
  103.  
  104. get_Temp:                                  ' obtener la temperatura y si existe mostrar medio grado
  105.   busin contr,0,[temp]
  106.   delayms 20
  107.   if (LSB & $80) = $80 then
  108.      LSB = 5
  109.   ELSE
  110.      LSB = 0
  111.  ENDIF
  112.  
  113. Muestra_Todo:                             ' Envio de la Presion en Kpa-Hpa, la Altitud y la Temperatura via serie a T9600
  114.   serout tx, 84, ["Presion(KPa): ", DEC p," HPa: ",dec hp,13, "Altitud: ", dec h,"m",13,"Temperatura: ", dec msb,".",dec lsb,"°C",10,13]  
  115. return  
  116.  
  117. pausa:
  118. delayms 250
  119. return

y un pantallazo de lo recibido en el terminal de Proton

(http://img153.imageshack.us/img153/6856/emnj7.jpg)
Título: Re: Ejemplos Protón
Publicado por: pelusac en 23 de Agosto de 2007, 03:45:57
Sería posible que colgases el archivo .HEX de la estación meteorológica, que lo mío no es el basic.
Gracias de antemano
Título: Re: Ejemplos Protón
Publicado por: navaismo en 23 de Agosto de 2007, 11:29:28
Hola aqui dejo el HEX y  aqui (http://miarroba.com/foros/ver.php?foroid=1149907&temaid=5989477) puedes ver el esquematico una errata es que le hacen falta la conexion de los VREFS
Título: Re: Ejemplos Protón
Publicado por: pelusac en 23 de Agosto de 2007, 14:52:03
Muchísimas gracias  :lol:
Saludos
Título: Re: Ejemplos Protón
Publicado por: electronando en 02 de Septiembre de 2007, 13:48:46
Hola navaismo e visto que en el ejemplo que pones usas logaritmos , que tanto de error se obtiene en la ecuacion que posteastes , pues cuando hacia divisiones al mostrar en el lcd me daba cierto margen de error no un valor exacto, me refiero para operaciones con punto flotante  :?
Título: Re: Ejemplos Protón
Publicado por: navaismo en 19 de Diciembre de 2007, 20:19:30
Hola navaismo e visto que en el ejemplo que pones usas logaritmos , que tanto de error se obtiene en la ecuacion que posteastes , pues cuando hacia divisiones al mostrar en el lcd me daba cierto margen de error no un valor exacto, me refiero para operaciones con punto flotante  :?

Ups mira que apenas note esto que me decias que pena. Pues el error era de decimales lo compara con la operacion hecha en la calculadora y le erraba por unas centesimas. Pero como no es una aplicacion critica lo permiti asi.
Título: Re: Ejemplos Protón
Publicado por: navaismo en 19 de Diciembre de 2007, 20:29:01
Y regresando a lo de los ejemplos en PROTON con la ayuda de Pao y un compañero de Trabajo hemos hecho este programilla que muestra el Abecedario casi completo -falta la Ñ y la Z- todo en mayusculas en una MATRIZ de LEDS de 5x7.

Todas las Letras estan en la EEPROM del PIC16F877A por ser uno con gran capacidad. Y las muestra una a una. La idea es despues formar frases mediante la PC. Pero para comenzar con esto creo que le servira a uno que otro. Aqui el codigo:

Código: FreeBasic
  1. '****************************************************************
  2. '*  Name    : UNTITLED.BAS                                      *
  3. '*  Author  : Amigos & Navaismo                          *
  4. '*  Notice  : Copyright (c) 2007 GPL                            *
  5. '*          : All Rights Reserved                               *
  6. '*  Date    : 18/12/2007                                        *
  7. '*  Version : 1.0                                               *
  8. '*  Notes   :                                                   *
  9. '*          :                                                   *
  10. '****************************************************************
  11. device = 16f877a
  12. config WDT_OFF, CP_OFF, LVP_OFF, XT_OSC  
  13. xtal = 4
  14.  
  15. adcon1=7  
  16. trisa=0  'salida ambos puertos, sin comparadores
  17. trisb=0
  18.  
  19. dim i as byte
  20. DIM K AS BYTE
  21. dim j as byte
  22. dim d[26] as byte
  23. dim datos as byte
  24.  
  25. 'Letra A en eeprom
  26. edata 31, 254, 5, 253, 5, 251, 5, 247, 31, 239
  27.  
  28. 'Letra B en eeprom
  29. edata 31, 254, 21, 253, 21, 251, 21, 247, 31, 239
  30.  
  31. 'Letra C en eeprom
  32. edata 31, 254, 17, 253, 17, 251, 17, 247, 17, 239
  33.  
  34. 'Letra D en eeprom
  35. edata 31, 254, 17, 253, 17, 251, 10, 247, 4, 239
  36.  
  37. 'Letra E en eeprom
  38. edata 31, 254, 21, 253, 21, 251, 21, 247, 17, 239
  39.  
  40. 'Letra F en eeprom
  41. edata 31, 254, 5, 253, 5, 251, 5, 247, 1, 239
  42.  
  43. 'Letra G en eeprom
  44. edata 31, 254, 17, 253, 21, 251, 21, 247, 29, 239
  45.  
  46. 'Letra H en eeprom
  47. edata 31, 254, 4, 253, 4, 251, 4, 247, 31, 239
  48.  
  49. 'Letra I en eeprom
  50. edata 17, 254, 17, 253, 31, 251, 17, 247, 17, 239
  51.  
  52. 'Letra J en eeprom
  53. edata 25, 254, 17, 253, 31, 251, 1, 247, 1, 239
  54.  
  55. 'Letra K en eeprom
  56. edata 31, 254, 4, 253, 4, 251, 10, 247, 17, 239
  57.  
  58. 'Letra L en eeprom
  59. edata 31, 254, 16, 253, 16, 251, 16, 247, 16, 239
  60.  
  61. 'Letra M en eeprom
  62. edata 31, 254, 2, 253, 4, 251, 2, 247, 31, 239  
  63.  
  64. 'Letra N en eeprom
  65. edata 31, 254, 2, 253, 4, 251, 8, 247, 31, 239      
  66.  
  67. 'Letra O en eeprom
  68. edata 31, 254, 17, 253, 17, 251, 17, 247, 31, 239      
  69.  
  70. 'Letra P en eeprom
  71. edata 31, 254, 5, 253, 5, 251, 5, 247, 7, 239      
  72.  
  73. 'Letra Q en eeprom
  74. edata 15, 254, 9, 253, 29, 251, 25, 247, 31, 239      
  75.  
  76. 'Letra R en eeprom
  77. edata 31, 254, 5, 253, 29, 251, 21, 247, 23, 239      
  78.  
  79. 'Letra S en eeprom
  80. edata 23, 254, 21, 253, 21, 251, 21, 247, 29, 239      
  81.  
  82. 'Letra T en eeprom
  83. edata 1, 254, 1, 253, 31, 251, 1, 247, 1, 239      
  84.    
  85. 'Letra U en eeprom
  86. edata 31, 254, 16, 253, 16, 251, 16, 247, 31, 239
  87.  
  88. 'Letra V en eeprom
  89. edata 15, 254, 24, 253, 16, 251, 24, 247, 15, 239
  90.  
  91. 'Letra W en eeprom
  92. edata 31, 254, 16, 253, 28, 251, 16, 247, 31, 239
  93.  
  94. 'Letra X en eeprom
  95. edata 27, 254, 10, 253, 14, 251, 10, 247, 27, 239
  96.  
  97. 'Letra Y en eeprom
  98. edata 7, 254, 4, 253, 28, 251, 4, 247, 7, 239
  99.  
  100. 'Letra Z en eeprom
  101. 'edata 29, 254, 21, 253, 21, 251, 21, 247, 23, 239    
  102.  
  103. D[0] = 0
  104. D[1] = 10
  105. D[2] = 20
  106. D[3] = 30
  107. D[4] = 40
  108. D[5] = 50
  109. D[6] = 60
  110. D[7] = 70
  111. D[8] = 80
  112. D[9] = 90
  113. D[10] = 100
  114. D[11] = 110
  115. D[12] = 120
  116. D[13] = 130
  117. D[14] = 140
  118. D[15] = 150
  119. D[16] = 160
  120. D[17] = 170
  121. D[18] = 180
  122. D[19] = 190
  123. D[20] = 200
  124. D[21] = 210
  125. D[22] = 220
  126. D[23] = 230
  127. D[24] = 240
  128. D[25] = 250
  129.  
  130. DATOS="A"
  131.  
  132. loop:
  133. GOSUB CLSM
  134. i = datos - 65
  135. for j=0 to 15
  136. FOR K=0 TO 9 step 2
  137.  PORTA=EREAD d[I]+k
  138.  PORTB=EREAD (d[i]+k) + 1
  139.  DELAYMS 50
  140. next j
  141. NEXT K
  142. datos = datos + 1
  143. goto loop
  144.  
  145. CLSM:
  146.  porta=0
  147.  portb=255
  148.  delayms 750
  149. RETURN


Y la imagen del Circuito en Proteus

(http://img155.imageshack.us/img155/4335/mledshu9.jpg)

Saludos...
Título: Re: Ejemplos Protón
Publicado por: LordLafebre en 19 de Diciembre de 2007, 20:43:30
Hola:

Genial, yo tengo ganas de hacer eso, pero con 5 matrices y usando registros de corrimiento, tengo ya una plaquita con las 5 matrices, a ver si una de estas nos ponemos con eso si les interesa.  :mrgreen:
Título: Re: Ejemplos Protón
Publicado por: navaismo en 19 de Diciembre de 2007, 23:42:43
A mi si me interesa, Pero primero terminare con esta pequeña matriz para darle o los registros de corrimiento, aunque ya lei el articulo de Ariel en su pagina no me quedo muy claro por eso empece con esa pequeña matriz. Por ahi tambien JCC nos da un cable.
Título: Re: Ejemplos Protón
Publicado por: navaismo en 20 de Diciembre de 2007, 22:24:51
Bueno regresando con esto de la matriz de Leds, es el mismo circuito solo que le añadi el puerto serie para mandar desde el PC una cadena de 7 caracteres -en mayusculas-  precedida por el caracter "y" y seguido  la Matriz la interpreta 1 a 1.

Este es el codigo notaran solo unas modificaciones:

Código: FreeBasic
  1. '****************************************************************
  2. '*  Name    : mledsV3.BAS                                       *
  3. '*  Author  : Pao & Navaismo & Friend                           *
  4. '*  Notice  : Copyright (c) 2007 GPL                            *
  5. '*          : All Rights Reserved                               *
  6. '*  Date    : 18/12/2007                                        *
  7. '*  Version : 1.0                                               *
  8. '*  Notes   :                                                   *
  9. '*          :                                                   *
  10. '****************************************************************
  11. device = 16f877a
  12. config WDT_OFF, CP_OFF, LVP_OFF, XT_OSC  
  13. xtal = 4
  14. declare rsin_mode  true
  15. DECLARE RSOUT_MODE true
  16. declare rsin_pin  portd.0
  17. declare rsout_pin portd.1
  18. DECLARE SERIAL_BAUD 9600
  19.  
  20.  
  21. adcon1=7  
  22. trisa=0  'salida ambos puertos, sin comparadores
  23. trisb=0
  24.  
  25. dim i as byte
  26. DIM K AS BYTE
  27. dim j as byte
  28. dim z as byte
  29. dim n as byte
  30. dim d[26] as byte
  31. dim datos as byte
  32. dim spell[7] as byte
  33.  
  34. 'Letra A en eeprom
  35. edata 31, 254, 5, 253, 5, 251, 5, 247, 31, 239
  36.  
  37. 'Letra B en eeprom
  38. edata 31, 254, 21, 253, 21, 251, 21, 247, 31, 239
  39.  
  40. 'Letra C en eeprom
  41. edata 31, 254, 17, 253, 17, 251, 17, 247, 17, 239
  42.  
  43. 'Letra D en eeprom
  44. edata 31, 254, 17, 253, 17, 251, 10, 247, 4, 239
  45.  
  46. 'Letra E en eeprom
  47. edata 31, 254, 21, 253, 21, 251, 21, 247, 17, 239
  48.  
  49. 'Letra F en eeprom
  50. edata 31, 254, 5, 253, 5, 251, 5, 247, 1, 239
  51.  
  52. 'Letra G en eeprom
  53. edata 31, 254, 17, 253, 21, 251, 21, 247, 29, 239
  54.  
  55. 'Letra H en eeprom
  56. edata 31, 254, 4, 253, 4, 251, 4, 247, 31, 239
  57.  
  58. 'Letra I en eeprom
  59. edata 17, 254, 17, 253, 31, 251, 17, 247, 17, 239
  60.  
  61. 'Letra J en eeprom
  62. edata 25, 254, 17, 253, 31, 251, 1, 247, 1, 239
  63.  
  64. 'Letra K en eeprom
  65. edata 31, 254, 4, 253, 4, 251, 10, 247, 17, 239
  66.  
  67. 'Letra L en eeprom
  68. edata 31, 254, 16, 253, 16, 251, 16, 247, 16, 239
  69.  
  70. 'Letra M en eeprom
  71. edata 31, 254, 2, 253, 4, 251, 2, 247, 31, 239  
  72.  
  73. 'Letra N en eeprom
  74. edata 31, 254, 2, 253, 4, 251, 8, 247, 31, 239      
  75.  
  76. 'Letra O en eeprom
  77. edata 31, 254, 17, 253, 17, 251, 17, 247, 31, 239      
  78.  
  79. 'Letra P en eeprom
  80. edata 31, 254, 5, 253, 5, 251, 5, 247, 7, 239      
  81.  
  82. 'Letra Q en eeprom
  83. edata 15, 254, 9, 253, 29, 251, 25, 247, 31, 239      
  84.  
  85. 'Letra R en eeprom
  86. edata 31, 254, 5, 253, 29, 251, 21, 247, 23, 239      
  87.  
  88. 'Letra S en eeprom
  89. edata 23, 254, 21, 253, 21, 251, 21, 247, 29, 239      
  90.  
  91. 'Letra T en eeprom
  92. edata 1, 254, 1, 253, 31, 251, 1, 247, 1, 239      
  93.    
  94. 'Letra U en eeprom
  95. edata 31, 254, 16, 253, 16, 251, 16, 247, 31, 239
  96.  
  97. 'Letra V en eeprom
  98. edata 15, 254, 24, 253, 16, 251, 24, 247, 15, 239
  99.  
  100. 'Letra W en eeprom
  101. edata 31, 254, 16, 253, 28, 251, 16, 247, 31, 239
  102.  
  103. 'Letra X en eeprom
  104. edata 27, 254, 10, 253, 14, 251, 10, 247, 27, 239
  105.  
  106. 'Letra Y en eeprom
  107. edata 7, 254, 4, 253, 28, 251, 4, 247, 7, 239
  108.  
  109. 'Letra Z en eeprom
  110. 'edata 29, 254, 21, 253, 21, 251, 21, 247, 23, 239    
  111.  
  112. D[0] = 0
  113. D[1] = 10
  114. D[2] = 20
  115. D[3] = 30
  116. D[4] = 40
  117. D[5] = 50
  118. D[6] = 60
  119. D[7] = 70
  120. D[8] = 80
  121. D[9] = 90
  122. D[10] = 100
  123. D[11] = 110
  124. D[12] = 120
  125. D[13] = 130
  126. D[14] = 140
  127. D[15] = 150
  128. D[16] = 160
  129. D[17] = 170
  130. D[18] = 180
  131. D[19] = 190
  132. D[20] = 200
  133. D[21] = 210
  134. D[22] = 220
  135. D[23] = 230
  136. D[24] = 240
  137. D[25] = 250
  138.  
  139.  
  140. loop:
  141. delayms 500
  142. GOSUB CLSM
  143. rsin wait("y"), str spell\7
  144.  
  145. for z=0 to 7
  146. i = spell[z] - 65
  147. for j=0 to 15
  148. FOR K=0 TO 9 step 2
  149.  PORTA=EREAD d[I]+k
  150.  PORTB=EREAD (d[i]+k) + 1
  151.  DELAYMS 50
  152. next j
  153. NEXT K
  154. next z
  155.  
  156. goto loop
  157.  
  158. CLSM:
  159.  porta=0
  160.  portb=255
  161.  delayms 750
  162. RETURN

la imagen del circuito.

(http://img530.imageshack.us/img530/6428/mledsv3pe9.jpg)

y un link del video (http://files.filefront.com/mledsserialrar/;9293505;/fileinfo.html) en funcionamiento. En el isis cada cambio de letra tengo que hacer zoom porque no refresca pero en la realidad espero se comporte bien. El programa tiene un bug que es que muestra la A al final de cada frase antes de limpiar de nuevo la matriz. Y se puede modificar para que reciba mas caracteres.

Ahora el Reto es el que comentaba GIO hacerlo mas grande  :twisted:

Saludos
Título: Re: Ejemplos Protón
Publicado por: LordLafebre en 21 de Diciembre de 2007, 01:13:34
Hola:

Max, no crees que sería mejor utilizar la matriz de forma vertical?, de esa forma se pueden formar mejor las letras, como si se tratara del caracter de un LCD.
Título: Re: Ejemplos Protón
Publicado por: navaismo en 21 de Diciembre de 2007, 14:42:51
Si tambien; solo que como empece a formar las frases de esa manera me pique y todo lo deje asi.
Título: Re: Ejemplos Protón
Publicado por: ASTROCAR en 25 de Febrero de 2008, 06:06:24
Aca les dejo mi aporte en proton unas rutinas 100% funcional para leer eeprom SPi especificamente las 25010-25020-25040.

ojo con esta codigo lees completa la eeprom 25040. ya que esta eeprom esta direccionada en dos bloques.

Saludos y espero les sirva mi aporte si gustan desarrollo  la escritura.

'****************************************************************
'*  Name    : spi.BAS                                      *
'*  Author  : [Alexander Jose Santana Vargas]                   *
'*  Notice  : Copyright (c) 2008 [meritos propios]              *
'*          : All Rights Reserved                               *
'*  Date    : 24/02/2008                                        *
'*  Version : 1.0                                               *
'*  Notes   : lee protocolo spi "25010-25020-25040              *
'*          :                                                   *
'****************************************************************
Device = 16F877A  'ASIGNA EL TIPO DE PIC A USAR EN ESTE CASO PIC16F877A
      XTAL = 4  'INDICA QUE EL CRISTAL ES DE 4MHZ
'...................................CONFIGURACION DE PUERTOS........................................................     
        TRISA=0
        TRISD=$78
'...................................ASIGNACION DE PINES AL LCD.......................................................
        LCD_DTPIN = PORTA.0
        LCD_RSPIN = PORTA.4
        LCD_ENPIN = PORTB.3
        LCD_LINES = 2     
        LCD_INTERFACE = 4
'..................................DECLARACION DE VARIABLES..........................................................       
       
        Dim addr      As word                       ' DIRECCION PARA EEPROM EXTERNA
        Dim B0        As byte                       ' DATO QUE SE TOMA DE LA EEPROM EXTERNA
        Symbol CS     = PORTB.2                      ' Chip select pin
      Symbol CLK    = PORTB.1                      ' Clock pin
      Symbol DI   = PORTB.0                      ' Data in pin
      Symbol DO   = PORTB.4                       ' Data out pin
      DIM  RD_CMD  AS  byte
      Output CS                                  ' Set CS to output
       
       
'..................................................
Loop:   For addr = 0 To 511                          ' Loop 16 times
                GoSub eeread                         ' lee la eeprom
                print $fe,1,hex addr,": ",hex B0     ' Display
                DelayMS 500
        Next b0

        Goto loop
       
'******* Subroutine to read data from addr in serial EEPROM ********
eeread:     if addr <= 255 then
            RD_CMD=$3
            else
            RD_CMD=$b
            endif
            low CS                                   
            Shout Di, ClK, MSBFIRST, [RD_CMD, Addr.lowbyte]         
            Shin DO, ClK, MSBPRE, [B0]           
            high CS                                   
            Return