Autor Tema: PIC BASIC del PIC Simulator IDE Oshonsoft (Índice en página 1)  (Leído 859365 veces)

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

Desconectado OSS

  • PIC10
  • *
  • Mensajes: 9
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #660 en: 13 de Octubre de 2010, 20:11:42 »
Saludos Amigos presento una incomodidad en el PSI con Respecto a los LCD alfanumericos, he estado intentando guardar valores ASCII en una EEPROM I2C luego leerlos y mostrarlos en la LCD como caracteres y no su valor numerico, espero me puedas ayudar, en el siguiente codigo intente hacero funcionar pero no se si sea la manera adecuada ya que estoy moviendo las posiciones de la linea 2 para ir escribiendo la palabra, la verdad mi proyecto consta en recibir atraves del USART una cadena de caracteres (nombres, items, descripciones, etc..) , guardar sus valores correspondientes ASCII en la eeprom, luego accesar a ellos y mostrarlos en la lcd, ejemplo: -envio por hyperterminal la palabra "camiones" luego la grabo en la eeprom en sus correspondientes valores numericos, despues acceder a los valores guardados en la eeprom y mostrar en el lcd la palabra guardada "camiones" de antemano agradeceria la ayuda de ustedes
Gracias...   :-)  Saludos desde Tachira-Venezuela Felicitaciones! Excelente Foro!!! ;-)


Código: [Seleccionar]
Define SIMULATION_WAITMS_VALUE = 1
Define CONF_WORD = 0x3f72
Define CLOCK_FREQUENCY = 20
AllDigital

Define LCD_BITS = 8
Define LCD_DREG = PORTD
Define LCD_DBIT = 0
Define LCD_RSREG = PORTE
Define LCD_RSBIT = 0
'Define LCD_RWREG = PORTE
'Define LCD_RWBIT = 2
Define LCD_EREG = PORTE
Define LCD_EBIT = 1
Define LCD_READ_BUSY_FLAG = 1
Lcdinit 1

Symbol scl = PORTC.3
Symbol sda = PORTC.4

Dim b As Byte
Dim addr As Word
Dim data As Byte
Dim mask As Byte
Dim index As Byte

For addr = 0 To 25
index = addr
Lcdcmdout LcdClear
mask = LookUp("ABCDEFGHIJKLMNOPQRSTUVWXYZ"), index
data = mask
I2CWrite sda, scl, 0xa0, addr, data
Lcdout "Write To EEPROM"
Lcdcmdout LcdLine2Home
Lcdout "(", #addr, ") = ", #data
WaitMs 500
Next addr
Lcdcmdout LcdClear
Lcdout "Read From EEPROM"
For addr = 0 To 12
I2CRead sda, scl, 0xa0, addr, data
Lcdcmdout LcdLine2Home
b = addr + 1
Lcdcmdout LcdLine2Pos(b)
If data = "A" Then Lcdout "A"
If data = "B" Then Lcdout "B"
If data = "C" Then Lcdout "C"
If data = "D" Then Lcdout "D"
If data = "E" Then Lcdout "E"
If data = "F" Then Lcdout "F"
If data = "G" Then Lcdout "G"
If data = "H" Then Lcdout "H"
If data = "I" Then Lcdout "I"
If data = "J" Then Lcdout "J"
If data = "K" Then Lcdout "K"
If data = "L" Then Lcdout "L"
If data = "M" Then Lcdout "M"
WaitMs 500
Next addr
Lcdcmdout LcdClear
Lcdout "Read From EEPROM"
For addr = 13 To 25
b = addr - 12
I2CRead sda, scl, 0xa0, addr, data
Lcdcmdout LcdLine2Home
Lcdcmdout LcdLine2Pos(b)
If data = "N" Then Lcdout "N"
If data = "O" Then Lcdout "O"
If data = "P" Then Lcdout "P"
If data = "Q" Then Lcdout "Q"
If data = "R" Then Lcdout "R"
If data = "S" Then Lcdout "S"
If data = "T" Then Lcdout "T"
If data = "U" Then Lcdout "U"
If data = "V" Then Lcdout "V"
If data = "W" Then Lcdout "W"
If data = "X" Then Lcdout "X"
If data = "Y" Then Lcdout "Y"
If data = "Z" Then Lcdout "Z"
WaitMs 500
Next addr

End           
                               



Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #661 en: 16 de Octubre de 2010, 17:50:11 »
Te complicaste la vida.
Solo tienes que enviar el código ASCII directamente al LCD y ya lo reemplaza por su equivalente grafico.
Lcdout ascii 'Envia al display la representacion grafica ASCII del numero contenido en la variable ascii

"#" es un modificador que descompone la cifra en digitos BCD y los envia uno a uno en su representación grafica ASCII al LCD u otro dispositivo.
ascii = 50
Lcdout #ascii 'Envia al display dos digitos, la representacion grafica del codigo ASCII del "5" segido de la representacion grafica del codigo ASCII "0"
Lcdout #ascii = Lcdout 53, 48 = Lcdout "5", "0" = Lcdout "50". Para ascii = 50.
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #662 en: 16 de Octubre de 2010, 17:53:15 »
Ejemplo:

Código: vb.net
  1. Define CONF_WORD = 0x2f10
  2. Define CONF_WORD_2 = 0x3ffc
  3. Define CLOCK_FREQUENCY = 8
  4. 'NOMBRE:16F88_PicEBasic
  5. 'MICRO: PIC16F88/8Mhz reloj interno
  6. 'Uso del LCD con bus de datos a 4Bit y sin pin de RW
  7. '************************************************************************************************
  8. '-------------------------------------Puertos del LCD---------------------------------------------
  9. Define LCD_BITS = 4  'indicamos que el bus de datos del lcd sera de 4bit
  10. Define LCD_DREG = PORTA  'el bus de datos sera el puerto A
  11. Define LCD_DBIT = 0  'el bus de datos seran los 4 bit menos significativos del puerto A
  12. Define LCD_RSREG = PORTB  'el bit de control RS sera del puerto B
  13. Define LCD_RSBIT = 7  'se usara el RB7 como RS
  14. Define LCD_EREG = PORTB  'el bit de control E sera del puerto B
  15. Define LCD_EBIT = 6  'se usara el RB6 como E
  16. 'Define LCD_RWREG = PORTA 'el bit de control RW sera del puerto A (si se suprime el compilador no protesta)
  17. 'Define LCD_RWBIT = 5 'se usara el RA5 como RW (si se suprime el compilador no protesta)
  18. Define LCD_COMMANDUS = 2000  'Tiempo de espera despues de ejecutar un comand del lcd en uSeg.
  19. Define LCD_DATAUS = 50  'Tiempo de espera despues de enviar un dato al LCD en uSeg.
  20. Define LCD_INITMS = 5  '(50) 'Tiempo de espera despues de inicializar el Display, solo se ejecuta una vez en mSeg., trucado para simulacion
  21. '------------------------------------------------------------------------------------------------------
  22. Define SIMULATION_WAITMS_VALUE = 1  'suprime los tiempos de espera Waitms, solo activar esta linea en simulacion
  23. '------------------------------------Definicion de puertos------------------------------------------
  24. ANSEL = 0x00  'los pin I/O digitales (no analogicos)
  25. OSCCON = 0x7e  'set intrc To 8mhz, se usara reloj interno a 8Mhz
  26. CMCON = 0x07  'comparador a off
  27. TRISA = 0x00  'Puerto A como salidas
  28. TRISB = 0x00  'puerto B como salidas
  29. '------------------------------------Inicio------------------------------------------------------------
  30. Lcdinit  'inicializa el lcd sin cursor
  31. Dim ascii As Byte
  32. ascii = 50
  33. WaitMs 500  'pausa para estabilizar
  34. main:  'Rutina principal
  35.     Lcdcmdout LcdClear  'borra el display
  36.     Lcdout "ASCII:"
  37.     Lcdcmdout LcdLine2Home
  38. Lcdout #ascii
  39. Lcdout "="
  40. Lcdout 53, 48
  41. Lcdout "="
  42. Lcdout "5", "0"
  43. Lcdout "="
  44. Lcdout "50"
  45. 'Goto main  'impide que termine el programa principal
  46. End

« Última modificación: 03 de Mayo de 2014, 14:36:17 por dogflu66 »
Saludos desde Granada, España.

Desconectado MiCrOtRoNiC

  • PIC18
  • ****
  • Mensajes: 271
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #663 en: 22 de Octubre de 2010, 23:51:29 »
Bienvenido Amigo OSS yo tambien soy Tachira-Venezuela... pensé que casi nadie utilizaba este soft por estos lares saludos. me imagino que con la ayuda de nuestro amigo dogflu66 el cual es la Biblia propia del PSI lograste terminar parte del codigo

saludos
« Última modificación: 22 de Octubre de 2010, 23:55:48 por MiCrOtRoNiC »

Desconectado gatruca

  • PIC10
  • *
  • Mensajes: 7
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #664 en: 05 de Noviembre de 2010, 12:54:13 »
No se si esta es la forma mas apropiada para publicar, moderadores... a su dispocision!

Este es un codigo para ds1307 basado en un ejemplo que esta colgado en el foro. (genialmente descrito y comprensible) jamas hubiera entendido el funcionamiento i2c 1307 si no fuera por este codigo.
dogflu66 un grosso, estoy aprendiendo mucho de tus aportes. Gracias!!!!!

dogflu66 es el autor y yo me permiti hacer unas reformas optimizando el codigo en las rutinas de "antirebote" de los pines de ajuste de parametros del reloj.

'********************************** PIC Entrenadora BASIC (PicEBasic)******************************
''MICRO: PIC16f88A
'FECHA/AUTOR: 11/10 - By COS (intervencion by GATRUCA)
'Version 2010?¿
'DESCRIPCION: Muestra en el display la fecha y la hora en formato de 24 horas
'***************************************************************************************************
Define LCD_BITS = 4
Define LCD_DREG = PORTB
Define LCD_DBIT = 4
Define LCD_RSREG = PORTD
Define LCD_RSBIT = 0
Define LCD_EREG = PORTD
Define LCD_EBIT = 2
Define LCD_RWREG = PORTD
Define LCD_RWBIT = 1
Define LCD_COMMANDUS = 2000
Define LCD_DATAUS = 50
Define LCD_INITMS = 39
Lcdinit
Symbol sda = PORTC.3  'asignamos nombre al pin que hara de SDA del puerto I2C
Symbol scl = PORTC.4  'asignamos nombre al pin que hara de SCL del puerto I2C
Symbol s1 = PORTD.3  'se asigna nombre a el pin que aumenta el valor
Symbol fc = PORTD.5  'tecla funcion ingresa a programa u cambia parametro
Dim aux_4h As Byte  'contendra el nibble alto del dato leido por el I2C
Dim aux_4l As Byte  'contendra el nibble bajo del dato leido por el I2C
Dim i As Byte  'variable indice
Dim reg(7) As Byte  'contendra los valores finales de fecha y hora en el sistema decimal
Dim flash_1 As Bit  'controla el parpadeo de los digitos del lcd, activo a 1
Dim dato As Byte  'indica la direccion del RTC a cambiar de valor
Dim flag_1 As Bit  'activa la rutina de ajuste del reloj, activo a 1
Dim aux_ajuste As Byte  'variable auxiliar para la rutina de ajuste
dato = 7  'fuera de ajuste o modo normal de trabajo del reloj, de 0 a 6 modo ajuste
flash_1 = 0  'parpadeo off por defecto
flag_1 = 0  'ingreso a programacion reloj off por defecto
WaitMs 500  'espera 0.5
Lcdcmdout LcdClear
main:
If fc = 1 And flag_1 = 0 Then  'modo ajuste
      flag_1 = 1  'activa rutina de ajuste
Endif
If flag_1 = 1 Then Gosub ajuste_reloj  'saltamos a la rutina de ajuste
Gosub lee_hora  'lee la fecha y hora del reloj
Gosub print_lcd  'actualiza los datos del reloj en el display
WaitMs 100
Goto main
End                                               
ajuste_reloj:  'rutina de ajuste del reloj
   If fc = 1 Then  'detecta tecla fc
      While fc = 1  'eliminacion de rebotes (se queda haciendo nada mientras fc = 1
         WaitUs 1
      Wend
      dato = dato + 1  'seleciona el dato a ser modificado
      If dato > 7 Then dato = 0  '8 posiciones de estadio
      If dato > 6 Then flag_1 = 0  'termina programacion reloj
   Endif

While s1 = 1  'deteca tecla S1 y eliminacion de rebotes 
      If dato < 7 Then  'limita la direcciones de trabajo del reloj
         Gosub lee_hora  'lee los datos de los registros del RTC y los pasa a decimal, elimina los bit de control
         aux_ajuste = reg(dato)  'hace una imagen del valor del registro a modificar
         aux_ajuste = aux_ajuste + 1  'incrementa el dato a modificar que fue seleccionado
         If dato = 2 And aux_ajuste > 23 Then aux_ajuste = 0  'acota horas
         If dato = 0 Or dato = 1 Then  'acota segundos y minutos
            If aux_ajuste > 59 Then aux_ajuste = 0
         Endif
         If dato = 3 And aux_ajuste > 7 Then aux_ajuste = 1  'acota el dia de la semana
         If dato = 4 And aux_ajuste > 31 Then aux_ajuste = 1  'acota el dia del mes
         If dato = 5 And aux_ajuste > 12 Then aux_ajuste = 1  'acota el mes
         If dato = 6 And aux_ajuste > 99 Then aux_ajuste = 1  'acota el año, año maximo 2030
         If aux_ajuste > 49 And aux_ajuste < 60 Then  'Decimal a BCD
            aux_ajuste = aux_ajuste - 50
            aux_ajuste.4 = 1
            aux_ajuste.6 = 1
         Endif
         If aux_ajuste > 39 And aux_ajuste < 50 Then  'Decimal a BCD
            aux_ajuste = aux_ajuste - 40
            aux_ajuste.6 = 1
         Endif
         If aux_ajuste > 29 And aux_ajuste < 40 Then  'Decimal a BCD
            aux_ajuste = aux_ajuste - 30
            aux_ajuste.4 = 1
            aux_ajuste.5 = 1
         Endif
         If aux_ajuste > 19 And aux_ajuste < 30 Then  'Decimal a BCD
            aux_ajuste = aux_ajuste - 20
            aux_ajuste.5 = 1
         Endif
         If aux_ajuste > 9 And aux_ajuste < 20 Then  'Decimal a BCD
            aux_ajuste = aux_ajuste - 10
            aux_ajuste.4 = 1
         Endif
         If aux_ajuste < 10 Then aux_ajuste = aux_ajuste  'Decimal a BCD
         If dato = 0 Then aux_ajuste.7 = 0  'restaura el bit de configracion, activa el oscilador del reloj
         If dato = 2 Then aux_ajuste.7 = 0  'restaura el bit, no lo utiliza el RTC
         If dato = 2 Then aux_ajuste.6 = 0  'restaura el bit de configuracion, reloj 24h
         I2CWrite sda, scl, 0xd0, dato, aux_ajuste  'actualiza el dato ya modificado
      Endif
   Gosub print_lcd  'permite ver el valor del parametro cuando estamos dentro del bucle
   Gosub parpadeo  'ver el pametro parpadeando cuando dentro del bucle

   WaitMs 50
'el tiempo de espera puede acelerar o retardar
'la repeticion de incremento de los parametros

Wend
Gosub parpadeo  'ver el pametro parpadeando cuando estamos fuera del bucle
Return                                           
parpadeo:
If dato >= 0 And dato < 7 And flag_1 = 1 Then
      If flash_1 = 1 Then  'selecciona si el dato a modificar es visible o no
         flash_1 = 0  'dato es visible
      Else
         flash_1 = 1  'dato no es visible
      Endif
Endif
Return                                           
lee_hora:  'lee la hora del RTC en formato BCD y la pasa a decimal
   i = 0  'variable indice, asigna los datos de forma ordenada, leidos del RTC
   While i <= 6  'se repite el codigo comprendido entre while y wend, mientras i sea menor o igual a 6
      I2CRead sda, scl, 0xd0, i, reg(i)  'lectura de la direccion de memoria indicada del RTC, formato BCD
      aux_4l = reg(i) And %00001111  'eliminamos los bit de configuracion del RTC y dejamos solo el nibble bajo
      If i = 0 Then aux_4h = reg(i) And %01110000  'segundos, borrado de bit configuracion y almacena nibble alto
      If i = 1 Then aux_4h = reg(i) And %01110000  'minutos, almacena nibble alto
      If i = 2 Then aux_4h = reg(i) And %00110000  'horas, borrado de bit configuracion y almacena nibble alto
      If i = 3 Then aux_4h = reg(i) And %00000000  'dia_semana, almacena nibble alto
      If i = 4 Then aux_4h = reg(i) And %00110000  'dia_mes, almacena nibble alto
      If i = 5 Then aux_4h = reg(i) And %00010000  'mes, almacena el nibble alto
      If i = 6 Then aux_4h = reg(i) And %11110000  'año, almacena el nibble alto
      aux_4h = ShiftRight(aux_4h, 4)  'convierte el nibble alto en bajo
      reg(i) = (aux_4h * 10) + aux_4l  'fusiona los nibbles alto y bajo en una sola variable en formato decimal
      i = i + 1  'incrementa la variable indice con cada repeticion del bucle While/Wend
   Wend  'fin del bucle y salta a While
Return                                           
print_lcd:  'rutina de escritura en el lcd
   Lcdcmdout LcdLine1Home  'cursor del lcd a la izquierda en la linea 1
Lcdout "    " ' espacios para centrar la hora
   If dato = 2 And flash_1 = 1 Then  'control final del parpadeo de los digitos de la hora
      Lcdout "  "  'borra el dato determinado para dar la sencacion de parpadeo
   Else
      If reg(2) < 10 Then Lcdout "0"  'si horas es inferior a 10 escribe el cero delante
      Lcdout #reg(2)  'escribe la hora
   Endif
   Lcdout ":"  'escribe el separador
   If dato = 1 And flash_1 = 1 Then  'control final del parpadeo de los digitos de los minutos
      Lcdout "  "  'borra el dato determinado para dar la sencacion de parpadeo
   Else
      If reg(1) < 10 Then Lcdout "0"  'si minutos es inferior a 10 escribe el cero delante
      Lcdout #reg(1)  'escribe los minutos
   Endif
   Lcdout ":"  'escribe el separador
   If dato = 0 And flash_1 = 1 Then  'control final del parpadeo de los digitos de los segundos
      Lcdout "  "  'borra el dato determinado para dar la sencacion de parpadeo
   Else
      If reg(0) < 10 Then Lcdout "0"  'si segundos es inferior a 10 escribe el cero delante
      Lcdout #reg(0), "   "  'escribe los segundos
   Endif
   Lcdcmdout LcdLine2Home  'cursor del lcd a la izquierda en la linea 2
   
   If dato = 3 And flash_1 = 1 Then  'control final del parpadeo de los digitos del dia semana
      Lcdout "    "  'borra el dato determinado para dar la sencacion de parpadeo
   Else
      If reg(3) = 1 Then Lcdout "Dom."  'asigna el literal al dia de la semana
      If reg(3) = 2 Then Lcdout "Lun."
      If reg(3) = 3 Then Lcdout "Mar."
      If reg(3) = 4 Then Lcdout "Mie."
      If reg(3) = 5 Then Lcdout "Jue."
      If reg(3) = 6 Then Lcdout "Vie."
      If reg(3) = 7 Then Lcdout "Sab."
   Endif
   Lcdout "  "  'escribe separador para justificar la fecha
   If dato = 4 And flash_1 = 1 Then  'control final del parpadeo de los digitos del dia del mes
      Lcdout "  "  'borra el dato determinado para dar la sencacion de parpadeo
   Else
      If reg(4) < 10 Then Lcdout "0"  'si dia del mes es inferior a 10 escribe cero
      Lcdout #reg(4)  'escribe el dia del mes
   Endif
   Lcdout "/"  'escribe el separador
   If dato = 5 And flash_1 = 1 Then  'control final del parpadeo de los digitos de los meses
      Lcdout "  "  'borra el dato determinado para dar la sencacion de parpadeo
   Else
      If reg(5) < 10 Then Lcdout "0"  'si mes es inferior a 10 escribe cero
      Lcdout #reg(5)  'escribe el mes
   Endif
   Lcdout "/20"  'separador y los dos primeros digitos del año de 4 digitos
   If dato = 6 And flash_1 = 1 Then  'control final del parpadeo de los digitos de los años
      Lcdout "  "  'borra el dato determinado para dar la sencacion de parpadeo
   Else
      If reg(6) < 10 Then Lcdout "0"  'si año es inferior a 10 escribe primero el cero
      Lcdout #reg(6)  'escribe el año
   Endif
Return                                           





Utilizar while wend como interrupcion es una buena opcion de antirebote para cualquier menu y ajuste de parametros.

Desconectado meledu

  • PIC12
  • **
  • Mensajes: 83
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #665 en: 05 de Noviembre de 2010, 13:00:03 »
aun no lo pruevo, pero que pasaria si dejas presionada la tecla para siempre, supongo que el programa se quedaria estancado,eso creo,si es asi seria bueno que despues de un cierto tiempo salgas de esa condicion usando el timer para calcular cuanto deveria estar esperando a que se suelte la tecla

Desconectado gatruca

  • PIC10
  • *
  • Mensajes: 7
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #666 en: 05 de Noviembre de 2010, 13:13:41 »
Esa es la idea! mientras el boton esta oprimido, el parametro aumenta indefinidamente.
Eso evita por ejemplo que si el reloj esta en  05 minutos y tenes que llegar a 55, tengas que oprimir 50 veces el boton. (es asi como funciona cualquier reloj digital).
si solo oprimis un pulso, (por el tiempo de retardo) no se produce rebote al salir del bucle.

Desconectado meledu

  • PIC12
  • **
  • Mensajes: 83
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #667 en: 05 de Noviembre de 2010, 13:53:45 »
interesante,lo voy a provar al legar a casa.

Desconectado OSS

  • PIC10
  • *
  • Mensajes: 9
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #668 en: 07 de Noviembre de 2010, 16:21:53 »
Gracias amigo Dogflu66 he estado aprendiendo gracias a tu magnifico y bien elaborado manual del PSI, con tu respuesta pude resolver el problema y otro que ya tenia anteriormente con esto de los lcds alfa-0123 (ya entendido complatemente sobre estos maravillos animalitos) ya  y la verdad si me complique con algo sencillo  :oops: ya he podido realizar el pequeño menu para un rutero que estoy realizando con una matriz de leds, coloco el codigo con la modificacion gracias a la aclaratoria de nuestro amigo dogflu66 he podido eliminar las lineas redundantes jejeje y dejo tambien unas muestras de lo que ya llevo (apenas  :mrgreen:) con este proyecto... todo va caminando como lo esperado  :-/  :-/  :-/ Saludos Amigo y master Dogflu66 gracias  :-) seguire en estos hilos.....
 

aqui la solucion del codigo el antes y el despues...
Código: [Seleccionar]
Define SIMULATION_WAITMS_VALUE = 1
Define CONF_WORD = 0x3f72
Define CLOCK_FREQUENCY = 20
AllDigital

Define LCD_BITS = 8
Define LCD_DREG = PORTD
Define LCD_DBIT = 0
Define LCD_RSREG = PORTE
Define LCD_RSBIT = 0
'Define LCD_RWREG = PORTE
'Define LCD_RWBIT = 2
Define LCD_EREG = PORTE
Define LCD_EBIT = 1
Define LCD_READ_BUSY_FLAG = 1
Lcdinit 1

Symbol scl = PORTC.3
Symbol sda = PORTC.4

Dim b As Byte
Dim addr As Word
Dim data As Byte
Dim mask As Byte
Dim index As Byte

For addr = 0 To 25
index = addr
Lcdcmdout LcdClear
mask = LookUp("ABCDEFGHIJKLMNOPQRSTUVWXYZ"), index
data = mask
I2CWrite sda, scl, 0xa0, addr, data
Lcdout "Write To EEPROM"
Lcdcmdout LcdLine2Home
Lcdout "(", #addr, ") = ", #data
WaitMs 500
Next addr
Lcdcmdout LcdClear
Lcdout "Read From EEPROM"
Lcdcmdout LcdLine2Home
For addr = 0 To 12
I2CRead sda, scl, 0xa0, addr, data

b = addr + 1
'Lcdcmdout LcdLine2Pos(b)
If data = 0x20 Then Lcdout " "
If data = "A" Then Lcdout "A"
If data = "B" Then Lcdout "B"
If data = "C" Then Lcdout "C"
If data = "D" Then Lcdout "D"
If data = "E" Then Lcdout "E"
If data = "F" Then Lcdout "F"
If data = "G" Then Lcdout "G"
If data = "H" Then Lcdout "H"
If data = "I" Then Lcdout "I"
If data = "J" Then Lcdout "J"
If data = "K" Then Lcdout "K"
If data = "L" Then Lcdout "L"
If data = "M" Then Lcdout "M"
WaitMs 500
Next addr
Lcdcmdout LcdClear
Lcdout "Read From EEPROM"
Lcdcmdout LcdLine2Home
For addr = 13 To 25
b = addr - 12
I2CRead sda, scl, 0xa0, addr, data

'Lcdcmdout LcdLine2Pos(b)
If data = "N" Then Lcdout "N"
If data = "O" Then Lcdout "O"
If data = "P" Then Lcdout "P"
If data = "Q" Then Lcdout "Q"
If data = "R" Then Lcdout "R"
If data = "S" Then Lcdout "S"
If data = "T" Then Lcdout "T"
If data = "U" Then Lcdout "U"
If data = "V" Then Lcdout "V"
If data = "W" Then Lcdout "W"
If data = "X" Then Lcdout "X"
If data = "Y" Then Lcdout "Y"
If data = "Z" Then Lcdout "Z"
WaitMs 500
Next addr

End                                              




y el despues;
Código: [Seleccionar]
Define SIMULATION_WAITMS_VALUE = 1
Define CONF_WORD = 0x3f72
Define CLOCK_FREQUENCY = 20
AllDigital

Define LCD_BITS = 8
Define LCD_DREG = PORTD
Define LCD_DBIT = 0
Define LCD_RSREG = PORTE
Define LCD_RSBIT = 0
'Define LCD_RWREG = PORTE
'Define LCD_RWBIT = 2
Define LCD_EREG = PORTE
Define LCD_EBIT = 1
Define LCD_READ_BUSY_FLAG = 1
Lcdinit 1

Symbol scl = PORTC.3
Symbol sda = PORTC.4

Dim b As Byte
Dim addr As Word
Dim data As Byte
Dim mask As Byte
Dim index As Byte

For addr = 0 To 25
index = addr
Lcdcmdout LcdClear
mask = LookUp("ABCDEFGHIJKLMNOPQRSTUVWXYZ"), index
data = mask
I2CWrite sda, scl, 0xa0, addr, data
Lcdout "Write To EEPROM"
Lcdcmdout LcdLine2Home
Lcdout "(", #addr, ") = ", #data
WaitMs 500
Next addr

Lcdcmdout LcdClear
Lcdout "Read From EEPROM"
Lcdcmdout LcdLine2Home

For addr = 0 To 12
I2CRead sda, scl, 0xa0, addr, data
b = addr + 1
'Lcdcmdout LcdLine2Pos(b)
Lcdout data
WaitMs 500
Next addr

Lcdcmdout LcdClear
Lcdout "Read From EEPROM"
Lcdcmdout LcdLine2Home

For addr = 13 To 25
b = addr - 12
I2CRead sda, scl, 0xa0, addr, data
'Lcdcmdout LcdLine2Pos(b)
Lcdout data
WaitMs 500
Next addr

End                                              




aqui unas muestras  disculpen la resolusion (potecito nokia 2MP)  :) :




« Última modificación: 07 de Noviembre de 2010, 16:30:27 por OSS »

Desconectado OSS

  • PIC10
  • *
  • Mensajes: 9
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #669 en: 07 de Noviembre de 2010, 16:47:17 »
Bienvenido Amigo OSS yo tambien soy Tachira-Venezuela... pensé que casi nadie utilizaba este soft por estos lares saludos. me imagino que con la ayuda de nuestro amigo dogflu66 el cual es la Biblia propia del PSI lograste terminar parte del codigo

saludos

Que Bien! Gracias Microtronic saludos tambien y me alegra que hallan paisanos por aca en el foro pues la verdad somos poquitos venezolanos y del tachira menos! jejeje... Dejame decirte que tienes toda la razon gracias a nuestro gran amigo dogflu66 he logrado solucionar, mejorar el codigo y avanzar con este proyecto, todavia hay mucho por hacer y poco a poco atraves de la ayuda que nos ofrecen, iremos desarrollando mas y mas conocimientos en el mundo de los pic's nos estaremos comunicando Saludos desde Tucape (Tariba)  :-/

Desconectado meledu

  • PIC12
  • **
  • Mensajes: 83
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #670 en: 11 de Noviembre de 2010, 11:35:35 »
Amigo dogflu, una consultita,me he encaminado en un nuevo proyecto,solo por entretenimiento,y quiero hacer una lcd por I2C,entonces debo usar los registros de control del modulo mssp,pero al parecer en psi no lo puedo usar,porque coloco el registro,por ejemplo sspcon1 y no lo reconoce como comando(no lo pone en mayusculas de color azu)
entonces mi pregunta va asi: hay alguna manera de trabajar con registros que el compilador no reconosca? en CCS por ejemplo se puede con #byte <variable>= <direccion de registro> .             pero aqui en spi como seria,si esque hay alguna forma claro está.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #671 en: 11 de Noviembre de 2010, 15:51:49 »
Pues no he trabajado nunca con esos registros, ¿que micro estas usando?.
Saludos desde Granada, España.

Desconectado meledu

  • PIC12
  • **
  • Mensajes: 83
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #672 en: 11 de Noviembre de 2010, 15:54:38 »
Es el pic 16f876a quiero usar la comunicacion i2c por hardware en modo esclavo , tengo que usar tres registros sspcon1 sspcon2 y un  ultimo no lo recuerdo bien

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #673 en: 11 de Noviembre de 2010, 15:59:55 »
Los registros SSPCON y SSPCON2 si me los reconoce, y compilando no me tira errores.

PD. Con el SSPCON1 si me da error.
Saludos desde Granada, España.

Desconectado gatruca

  • PIC10
  • *
  • Mensajes: 7
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #674 en: 12 de Noviembre de 2010, 16:44:28 »
Consulta:
Alguno de ustedes hizo alguna experiencia con caracteres fuera de la tabla ascii? o un grafico, (aunque sea sencillo), con psi? he visto que en otros idiomas hay referencias de un soft que crea tablas para generar caracteres, pero creo que no iria bien con psi.
Desde ya gracias por adelantado a quien pueda aportar algun dato.
Saludos


 

anything