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

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

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #105 en: 10 de Marzo de 2007, 15:52:28 »
Y ahora añadiendo las rutinas de conversion del valor del adc a temperatura.

Código: [Seleccionar]
'********************************** PIC Entrenadora BASIC (PicEBasic)******************************
'NOMBRE: 16F88_LCD_ADC_Funcion_13
'MICRO: PIC16f88A
'FECHA/AUTOR: 24/02/07, 13/07, 12/06 - By COS, PSI v7.41
'Version: 1.3
'Se añade un sensor de temperatura en la entrada RA4, se conecta un LM35DZ por medio de la placa ETPA_LM35xZ, Ver. 1.2.
'Se toma una lectura cada 1000mSeg. y se calcula la media aritmetica con 20 muestras.
'Se ajusta la placa ETPA_LM35xZ, para maxima temperatura 60º = 3V (RA2).
'Como 5V=1023=100º, 3V=613.8=60º.
'Como el rango de temperatura del LM35DZ es de 0º a 100º, el RA1 se ajusta a cero voltios.
'Version: 1.2
'Simplificado de la rutina de division.
'Modificacion de la rutina print_lcd, para hacerla compatible con el nuevo formato salida de datos de la division.
'Version: 1.1
'Se acelera la rutina del display.
'Se implementa una rutina tipo funcion para la division.
'Version: 1.0
'Muestra en el display el valor de la entrada analogica con dos decimales y en voltios.
'***************************************************************************************************
'***********************************************************************************
Define CONFIG = 0x2f50  'Configuración bits (Fuses)
Define CONFIG2 = 0x3ffc  'Configuración bits (Fuses)
Define CLOCK_FREQUENCY = 8  'Clock en Mhz
'Define SIMULATION_WAITMS_VALUE = 1  'Activar para simulación, acelera los comandos WaitMs
'-------------------------------------Puertos del LCD-------------------------------------
Define LCD_BITS = 4  'Indicamos que el bus de datos del lcd sera de 4bit
Define LCD_DREG = PORTA  'Bus de datos sera el puerto A
Define LCD_DBIT = 0  'Bus de datos seran los 4 bit menos significativos del puerto A
Define LCD_RSREG = PORTB  'Bit de control RS sera del puerto B
Define LCD_RSBIT = 7  'RB7 como RS
Define LCD_EREG = PORTB  'Bit de control E sera del puerto B
Define LCD_EBIT = 6  'RB6 como E
Define LCD_COMMANDUS = 2000  'Tiempo de espera despues de ejecutar un comando del lcd en uSeg.
Define LCD_DATAUS = 50  'Tiempo de espera despues de enviar un dato al LCD en uSeg.
Define LCD_INITMS = 50  'Tiempo de espera despues de inicializar el Display.
'**************************************DEFINICION DE PUERTOS*************************************
'----------------------ASIGNACION DE I/O y valores de inicio de las salidas---------------------
ANSEL = %00000000  'los pin I/O digitales
Define ADC_SAMPLEUS = 10  'el minimo, configuracion del ADC
Define ADC_CLOCK = 5  '16Tad a 8Mhz = 2uSeg, minimo permitido por el micro 1.5uSeg, configuracion ADC
'_______________registros afectados por Define ADC_CLOCK y ADCIN________________
ANSEL = %00010000  'los pin I/O digitales y RA4 analogico
ADCON0 = %01100000  'Fosc/16 a 8Mhz (ADCON1.ADCS2=1) =2uSeg (minimo 1.uSeg), channel RA4
ADCON1 = %01000000  'voltage reference (AVdd/AVss) y seleccion de escala division clock/2 ADCON1.ADCS2=1
'_______________________________________________________________________________
CMCON = 0x07  'comparador a off
OSCCON = 0x7e  'set intrc To 8mhz, se usara reloj interno a 8Mhz
TRISA = 0x00  'Puerto A como salidas
TRISB = 0x00  'puerto B como salidas
TRISA.4 = 1  'como entrada (RA4, adc)
TRISA.6 = 1  'como entrada (RA6, tecla S1)
TRISA.5 = 1  'como entrada (RA5, tecla S2)
PORTB.3 = 1  'luz lcd a on (RB3)
PORTA.7 = 1  'led amarillo a off
PORTB.0 = 1  'led verde a off
'**************************************Inicio Programa*********************************************
Lcdinit  'inicializa el lcd sin cursor
'Definicion de variables -------------------------------------------
'Variables del ADC y Rutina division -----------------------------
Dim entero As Word  'parte entera
Dim decimal As Word  'los dos decimales
Dim division As Long  'almacenara el numero con los dos decimales
Dim adc_4 As Word  'contendra el valor de la entrada del ADC
'Variables temperatura -------------------------------------------
Dim factor_escala As Word  'contiene el factor de correcion para pasar el valor del ADC a voltios, max. 5V
Dim temperatura As Word
Dim temp As Long
'Variables calculo media aritmetica -------------------------------
Dim media_temp(20) As Word
Dim media_indice As Byte
Dim aux_media As Byte
'Asignaciones ----------------------------------------------------
entero = 0
decimal = 0
division = 0
adc_4 = 0
factor_escala = 10  'Factor de escala para un decimal
temperatura = 0
media_indice = 0
aux_media = 0
'------------------------------------------------------
WaitMs 1000  'Espera 1Seg
Lcdout "16f88_LCD_ADC_"  'Escribe en el lcd
Lcdcmdout LcdLine2Home  'Selecciona la linea dos como proxima para escritura
Lcdout "Funcion_1.3"
WaitMs 3000
Lcdcmdout LcdClear
Lcdout "Pruebas LM35DZ"  'EScribe en el lcd
WaitMs 3000  'Espera 3Seg
Lcdcmdout LcdClear  'Borra el display, y cursor al principio de la primera linea
Lcdout "Lectura Pin RA4"  'Muestra los datos en el lcd
'Inicializa variable media_temperatura---------------------------
Gosub lee_adc  'Salto con retorno, rutina de lectura de la entrada ADC
Gosub temp_calculo  'Salto con retorno, hace el calculo de la temperatura y guarda el valor en temperatura
For media_indice = 0 To 19  'Indice para rocorrer todas las direcciones de memoria que forman la variable tipo array media_temp
media_temp(media_indice) = temperatura  'Se de el valor a media_temp
Next media_indice  'Terminacion del bucle For
media_indice = 0  'Se inicializa a cero, para un uso posterior
'--------------------------------------Main Programa-----------------------------------------------
main:
Gosub lee_adc  'Salto con retorno, rutina de lectura de la entrada ADC
Gosub temp_calculo  'Salto con retorno, hace el calculo de la temperatura y guarda el valor en temperatura
Gosub media_arit  'Salto con retorno, calcula la media aritmetica
division = dvsion_dcmles(temperatura, factor_escala)  'Llama a la funcion dvsion_dcmles, que retorna un long
Gosub print_lcd  'Salto con retorno, rutina muestra los datos por el LCD
WaitMs 1000  'Hace una pausa de 1000mSeg
Goto main
End                                               
'**************************************Subrutinas**********************************************
'Subrrutina lectura ADC, division y LCD
lee_adc:  '_______________________Lee la entrada analogica
Adcin 4, adc_4  'Lee el valor de la entrada analogica y lo guarda en adc_4
Return                                           
print_lcd:  '____________________Muestra los datos por el display
entero = division.HW  'Sede el word alto a entero, parte entera
decimal = division.LW  'Sede el byte alto del word bajo a decimal_1
Lcdcmdout LcdLine2Home  'Selecciona la primera linea y cursor al principio
Lcdout "ADC ", #adc_4, " T ", #entero, "."  'Muestra los datos en el lcd
Lcdout #decimal, "C   "  'Muestra los datos en el lcd
Return                                           
'________Argumentos de entrada dos variables tipo word, dividendo y divisor, argumento de salida una variable tipo long
Function dvsion_dcmles(dvdo As Word, dvsor As Word) As Long  '________Rutina funcion division con decimales
Dim f_entera As Word  'Variable local, contendra la parte entera
Dim f_resto As Word  'Varable local, contendra el resto
Dim f_decimal As Word  'Contendra la parte decimal
f_entera = dvdo / dvsor  'Obtengo la division
f_resto = dvdo Mod dvsor  'Obtengo el resto
f_decimal = (f_resto * 10) / dvsor  'Calculo 1 decimal, para obtener 2 decimales multiplicar por 100
dvsion_dcmles.HW = f_entera  'Almacena la parte entera en el word alto
dvsion_dcmles.LW = f_decimal  'Almacena la parte decimal word bajo
'Recuerda que la parte decimal tiene que ser mostrada en el display con plantilla de dos digitos siempre
End Function                                     
'___________Calculo de la media aritmetica de la temperatura, 10 muestras
media_arit:
media_temp(media_indice) = temperatura  'Asigna el valor
temperatura = 0  'Se inicaliza a cero
For aux_media = 0 To 19  'Blucle for, se ejecuta 20 veces
temperatura = temperatura + media_temp(aux_media)  'Se suman los valores
Next aux_media  'Cierra for
temperatura = temperatura / 20  'Termina el calculo de la media
media_indice = media_indice + 1  'Controla la entrada de datos que corresponde a media_temp(x)
If media_indice > 19 Then media_indice = 0  'Acota el ultimo valor del indice de media_temp
Return                                           
'___________Calculo de la temperatura
temp_calculo:
temp = ((adc_4 * 60) * 100) / 6138  'Temperatura sin decimales, variable tipo long
'temperatura = ((adc_4 * 60) / 613) * 10  'Temperatura sin decimales, variable tipo word
temperatura = temp  'Se pasa de Long a Word, si no se utiliza long se suprime esta linea
Return                                       
« Última modificación: 15 de Junio de 2016, 11:32:38 por dogflu66 »
Saludos desde Granada, España.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #106 en: 12 de Marzo de 2007, 11:48:41 »
nuevamente, ¡Buen trabajo dogflu66!.  :-/ :-/ :-/

esa LCD ¿a que controlador pertenece? por que las que he visto tiene la baquelita ajustada al cristal

Salu2
Pedro
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #107 en: 12 de Marzo de 2007, 21:03:11 »
Es compatible con el HD44780

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

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #108 en: 18 de Marzo de 2007, 16:39:41 »
Saludos desde Granada, España.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #109 en: 18 de Marzo de 2007, 20:23:18 »
Buenisimo.....realmente muy util.

Tanto, que voy a cumplir mi promesa de "robartelo" para ponerlo en mi pagina! ;)

Saludos, y felicitaciones.
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #110 en: 18 de Marzo de 2007, 20:38:46 »
El circuito acondicionador esta pensado para poder elegir el rango de trabajo del lm35, siempre teniendo en cuenta como temperatura mínima 0º, porque se podría fácilmente, con las modificaciones adecuadas según el datasheet del lm35, trabajar con todo el rango de temperaturas del  lm35, pero el actual acondicionador no nos indicaría si la temperatura es positiva o negativa.
Teniendo esto en cuenta procedemos a ajustar el circuito para trabajar con un rango de temperatura de 15º a 30º centígrados.

Ajuste para trabajar en un rango de temperaturas 15º a 30º centígrados:

Procedemos a colocar los puentes en modo ajuste.
Colocamos el voltímetro en el pin 1 del  IC2A
Ajustamos RA1 hasta que el voltímetro indique (30º x 10 mV) - (15º x 10mV) = 150 mV
Y procederemos a ajustar RA2 hasta un valor lineal de trabajo del  IC2B,  en este caso 1.5V
Ya que el RA2 no nos permite mayor nivel de ganancia (es cuestión de cambiarlo por uno mayor que nos permita llegar a los 3v).
Que lo estaremos midiendo en el pin 7 del IC2B con el voltímetro.
Con lo que ya tendremos ajustada la temperatura máxima de trabajo
Procedemos de nuevo a colocar los puentes en modo trabajo
Seguidamente ajustaremos RA1 al valor de 150 mV = 15º x10 mV, que será la temperatura mínima
Mediante la medición del voltaje en IC2A en su pin de salida 1 (en este ejemplo no es necesario porque quedo ajustado a ese mismo valor en el paso anterior).

Y para el calibrado de la rutina del programa procedemos de la siguiente manera:

Como 1.5V son 150mV = 15º, y en nuestro caso serán 30º
50º = (15º x 5Vref) / 1.5V
5Vref. son  50º = 1023 puntos de resolución del ADC a 10Bit.
306.9 = (1023 x 15º) / 50º
15º corresponden a 306.9 puntos de resolución, que son restados físicamente con el RA1.
Así que la formula queda de la siguiente forma, sumando los puntos restados anteriormente
((50ºC  x (RA4 + 306.9)) / 1023) = Temperatura
« Última modificación: 15 de Junio de 2016, 11:29:50 por dogflu66 »
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #111 en: 18 de Marzo de 2007, 20:59:08 »
jeje, como gustes Aitopes.

PD. Actualmente el circuito queda ajustado mediante RA2 a ganancia 10, pero para poder llegar a un valor mas próximo al rango dinámico de trabajo del ADC, se podría sustituir este (RA2) por uno de 20K con lo que la ganancia máxima llegaría a 21 = (R5 + RA2) / R5, este cambio permitiría llegar a los 3 voltios.
No conviene llevar la tensión de salida (pin 7) del IC2B muy próxima a la de alimentación porque este dejara de trabajar linealmente.
« Última modificación: 15 de Junio de 2016, 11:28:12 por dogflu66 »
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #112 en: 18 de Marzo de 2007, 21:07:29 »
El valor de R5 parece redundante en la formulita, pero en realidad no lo es, no hay mas que cambiar el valor de R5 por 2K y veréis que todo cambia...
hay que tener en cuenta que "el que reparte se lleva la mejor parte", en este caso el que diseña se reserva colocar los valores de los componentes, y en este caso ganancia de IC2B es igual a 1 + 10 = 11.
« Última modificación: 18 de Marzo de 2007, 21:10:54 por dogflu66 »
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #113 en: 18 de Marzo de 2007, 21:30:06 »
La ganancia del circuito restador, se calcula de la siguiente manera teniendo en cuenta que siempre se cumpla lo siguiente R1 = R2 y R3 = R4, ganancia = R4/R2.
De esta forma podríamos simplificar el circuito realizando todo con un único amplificador operacional, por ejemplo con el CA3140, en este caso para que el circuito funcionara igual que el otro, tendríamos que darle ganancia 10, y esto se haría cambiando el valor de R3 y R4 por 100K (100K = R3 = R4).
Saludos desde Granada, España.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #114 en: 21 de Marzo de 2007, 10:23:32 »
Hola Carlos!

Tengo una duda (casi una certeza, en realidad): No hay ninguna version del PIC SIMULATOR IDE para programar los PIC12C508A, no?

Tengo 20 de ellos, y con el PIC SIMULATOR de los 16 no lo puedo programar. Solo figuran los 12F629, 12F675 y 12F683, que solo se parecen en el "12" :(

Si tenes algun dato, te lo agradezco. Si no.....o bien los uso para hacer unos aritos para la señora, o me busco otro compilador (algo que no quiero hacer!)

Saludos!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #115 en: 21 de Marzo de 2007, 12:02:59 »
Hay una version que incluye el PIC12F508, que es el PIC10F Simulator IDE, que se puede descargar en su pagina.
Me imagino que el codigo generado sera compatible, pero no estoy seguro que sea verdad de la buena, entre
otras cosas porque el compilador tiene el PIC12F508 y el tuyo es el PIC12C508A y no me refiero solo a la C sino especialmente a la terminacion A.
Saludos desde Granada, España.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #116 en: 21 de Marzo de 2007, 12:15:04 »
Como dicen los chicos por aqui...."estoy en el horno", o sea....no va a andar.

Gracias por el dato!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado Resistencio

  • PIC12
  • **
  • Mensajes: 82
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #117 en: 25 de Marzo de 2007, 20:19:46 »
Empece a experimentar con este entorno...no se nada de C, y me parecio posible aprender algo con este simulador, me parece bastante claro...el problema es que no me anda ni una simulacion en el LCD module (2x16)...estoy usando el sistema "copy and paste", de los codigos que subio este "mostro" (va con onda)...

Lei un tutorial de AITOPES, asi es que creo estoy configurando bien el PSI (5.92)...obviamente en estos inicios esto me supera absolutamente, empece encendiendo un led (como dicen por ahi, es "el hola mundo" del PSI) y no tuve problemas...faltaba mas, sino podia hacer tarea tan sencilla, me anotaba en un curso de cocina (por lo menos aprenderia a hacerme unas milanesas napolitanas... :D)...

Me gustaria que me dijeran, como hago para leer algun dato (letra - numero - lo que sea...) en el LCD Module...

Gracias por la leer !!!

PD: este "laburo", es una barbaridad de conceptos, ojala pueda sacar algo en limpio...me gustaria podes hacer realidad este entrenador, para empezar a practicar...


"Que otros se jacten de lo que han escrito, yo me siento orgulloso de lo que he leido" (J.L.B.)

_________________________________
"justo a mi, me toco ser Yo" QUINO




Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #118 en: 26 de Marzo de 2007, 08:22:38 »
Hola Resistencio!

Citar
Me gustaria que me dijeran, como hago para leer algun dato (letra - numero - lo que sea...) en el LCD Module...

Hasta donde se, no hey instrucciones basic para leer la memoria del LCD. Si se puede hacer "a mano", con la datasheet del LCD y paciencia.

Si lo que necesitas es ESCRIBIR letras en el LCD, entonces esta parte de la ayuda del PSI te va a servir:

Interfacing character LCDs

Basic compiler also features the support for LCD modules based on HD44780 or compatible controller chip. Prior to using LCD related statements, user should set up LCD interface using DEFINE directives. Here is the list of available parameters:
LCD_BITS - defines the number of data interface lines (allowed values are 4 and 8; default is 4)
LCD_DREG - defines the port where data lines are connected to (default is PORTB)
LCD_DBIT - defines the position of data lines for 4-bit interface (0 or 4; default is 4), ignored for 8-bit interface
LCD_RSREG - defines the port where RS line is connected to (default is PORTB)
LCD_RSBIT - defines the pin where RS line is connected to (default is 3)
LCD_EREG - defines the port where E line is connected to (default is PORTB)
LCD_EBIT - defines the pin where E line is connected to (default is 2)
LCD_RWREG - defines the port where R/W line is connected to (set to 0 if not used; 0 is default)
LCD_RWBIT - defines the pin where R/W line is connected to (set to 0 if not used; 0 is default)
LCD_COMMANDUS - defines the delay after LCDCMDOUT statement (default value is 5000)
LCD_DATAUS - defines the delay after LCDOUT statement (default value is 100)
LCD_INITMS - defines the delay for LCDINIT statement (default value is 100)
The last three parameters should be set to low values when using integrated LCD module simulator. If R/W line is connected to microcontroller and parameter LCD_READ_BUSY_FLAG is set to 1 using DEFINE directive, then these delay parameters will be ignored by compiler and correct timing will be implemented by reading the status of the busy flag in the LCD.

LCDINIT statement should be placed in the program before any of LCDOUT (used for sending data) and LCDCMDOUT (used for sending commands) statements. Its argument is used to define the cursor type: 0 = no cursor (default), 1 = blink, 2 = underline, 3 = blink + underline. LCDOUT and LCDCMDOUT statements may have multiple arguments separated by ','. Strings, constants and variables can be used as arguments of LCDOUT statement. If '#' sign is used before the name of a variable then its decimal representation is sent to the LCD module. Constants and variables can be used as arguments of LCDCMDOUT statement and the following keywords are also available: LcdClear, LcdHome, LcdLine2Home, LcdLeft, LcdRight, LcdShiftLeft, LcdShiftRight, LcdLine1Clear, LcdLine2Clear, LcdLine1Pos() and LcdLine2Pos(). Argument of LcdLine1Pos() and LcdLine2Pos() can be a number in the range (1-40) or Byte data type variable. The value contained in that variable should be in the same range. Here are some examples:
DEFINE LCD_BITS = 8
DEFINE LCD_DREG = PORTB
DEFINE LCD_DBIT = 0
DEFINE LCD_RSREG = PORTD
DEFINE LCD_RSBIT = 1
DEFINE LCD_EREG = PORTD
DEFINE LCD_EBIT = 3
DEFINE LCD_RWREG = PORTD
DEFINE LCD_RWBIT = 2
LCDINIT
loop:
   LCDOUT "Hello world!"
   WAITMS 1000
   LCDCMDOUT LcdClear
   WAITMS 1000
GOTO loop


DEFINE LCD_BITS = 8
DEFINE LCD_DREG = PORTB
DEFINE LCD_DBIT = 0
DEFINE LCD_RSREG = PORTD
DEFINE LCD_RSBIT = 1
DEFINE LCD_EREG = PORTD
DEFINE LCD_EBIT = 3
DEFINE LCD_RWREG = PORTD
DEFINE LCD_RWBIT = 2
DIM A AS WORD
A = 65535
LCDINIT 3
WAITMS 1000
loop:
   LCDOUT "I am counting!"
   LCDCMDOUT LcdLine2Home
   LCDOUT #A
   A = A - 1
   WAITMS 250
   LCDCMDOUT LcdClear
GOTO loop

LCD related statements will take control over TRIS registers connected with pins used for LCD interface, but if you use PORTA or PORTE pins on devices with A/D Converter Module then you should take control over the ADCON1 register to set used pins as digital I/O.

You can setup up to eight user defined characters to be used on LCD. This can easily be done with LCDDEFCHAR statement. The first argument of this statement is char number and must be in the range 0-7. Next 8 arguments form 8-line char pattern (from the top to the bottom) and must be in the range 0-31 (5-bits wide). These 8 user characters are assigned to char codes 0-7 and 8-15 and can be displayed using LCDOUT statement. After LCDDEFCHAR statement the cursor will be in HOME position. For example:
LCDDEFCHAR 0, 10, 10, 10, 10, 10, 10, 10, 10
LCDDEFCHAR 1, %11111, %10101, %10101, %10101, %10101,
%10101, %10101, %11111
LCDOUT 0, 1, "Hello!", 1, 0

For LCDs with four lines of characters additional symbolic arguments of LCDCMDOUT statement can be used: LcdLine3Home, LcdLine4Home, LcdLine3Clear, LcdLine4Clear, LcdLine3Pos() and LcdLine4Pos(). Argument of LcdLine3Pos() and LcdLine4Pos() can be a number in the range (1-40) or Byte data type variable. The value contained in that variable should be in the same range. Prior to using these language elements, correct values determining LCD type should be assigned to LCD_LINES and LCD_CHARS parameters using DEFINE directives.
DEFINE LCD_LINES = 4
DEFINE LCD_CHARS = 16
DEFINE LCD_BITS = 8
DEFINE LCD_DREG = PORTB
DEFINE LCD_DBIT = 0
DEFINE LCD_RSREG = PORTD
DEFINE LCD_RSBIT = 1
DEFINE LCD_EREG = PORTD
DEFINE LCD_EBIT = 3
DEFINE LCD_RWREG = PORTD
DEFINE LCD_RWBIT = 2
LCDINIT 3
loop:
   LCDCMDOUT LcdClear
   LCDCMDOUT LcdLine1Home
   LCDOUT "This is line 1"
   LCDCMDOUT LcdLine2Home
   LCDOUT "This is line 2"
   LCDCMDOUT LcdLine3Home
   LCDOUT "This is line 3"
   LCDCMDOUT LcdLine4Home
   LCDOUT "This is line 4"
   WAITMS 1000
   LCDCMDOUT LcdLine1Clear
   LCDCMDOUT LcdLine2Clear
   LCDCMDOUT LcdLine3Clear
   LCDCMDOUT LcdLine4Clear
   LCDCMDOUT LcdLine1Pos(1)
   LCDOUT "Line 1"
   LCDCMDOUT LcdLine2Pos(2)
   LCDOUT "Line 2"
   LCDCMDOUT LcdLine3Pos(3)
   LCDOUT "Line 3"
   LCDCMDOUT LcdLine4Pos(4)
   LCDOUT "Line 4"
   WAITMS 1000
GOTO loop

Y si tenes paciencia, esta semana justamente voy a escribir los capitulos correspondientes al manejo de LCD alfanumericos. Y la otra, los de 128x64.

Saludos, y avanti con el PSI! :)
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #119 en: 26 de Marzo de 2007, 16:51:45 »
Pues lectura de los registros del lcd mediante algun comando del basic todavia no se puede, a un que el numero de comandos para el lcd es ya muy extenso.
y algunos pocos ejemplos no estan probados con el simulador, pero todos fueron descargados en la placa y funcionaron, estando corregidos de errores por lo menos hasta donde me di cuenta y puedo asegurar que suelo ser bastante minucioso antes de publicar algo.

De todas formas si me indicas los que no funcionaron los pruebo de nuevo, a ver si tienen algun error de transcripción.... llamese “Copy/Paste”...  :mrgreen:
Saludos desde Granada, España.


 

anything