TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: Lager. en 11 de Diciembre de 2004, 16:50:00
-
Para accesar de forma RAPIDA y SENCILLA sin laboriosas TABLAS de datos, se puede hacer usando el comando PRINT a traves del cual se accesa la informacion de escritura en la CGRAM enviando el comando 254 + la direccion en donde se va a guardar dicha informacion. Cada caracter o posicion de memoria de pende de sus dimensiones directamente (7 x 5 en muchos de los casos, 7 lineas de 5 bits cada una, dandonos una resolucion de 31 bits por linea y 155 bits por caracter ,revizar cada DS) , Luego entonces tendriamos 7 lineas cuya informacion soportada por cada una seria de 0 a 31 dependiendo del pixel a habilitar con 1 o deshabilitar con cero donde el byte mas significativo(MSB) es taria dado por la linea 1 y el Byte menos significativo(LSB) por la linea 8.
Una ves establecido este protocolo de envio/recepcion de informacion para el LCD, se puede hacer el formato siguiente:
PRINT 254,64,31,17,17,17,17,17,31,254,1
Donde, el 254 como se menciono anteriormente es el comando de habilitacion de la CGRAM, 64 es la direccion donde se guardara, y 31,17,17,17,17,17,31 son la informacion que almacenara en la CGRAM en dicha direccion y 254,1 es el comando de BORRADO(CLS) el cual se puede incluir de esta forma o de la estandar CLS
DIRECCIONES? las direcciones dependiendo del modelo de LCD empezarian de la 64 hasta la 128, como cada direccion requiee de un espacio maximo de 8 bits, entonces para la direccion 0 de CGRAM seria desde el inicio 64 hasta 64+8=71, onde guardaria el ultimo BIT de informacion para esta direccion. Con este FORMATO podemos considerar la siguiente tabla :
Char 0 = 64 // Char 1 = 72 // Char 2 = 80 // Char 3 = 88 //Char 4 = 96
Char 5 = 104// Char 6 = 112// Char 7 = 120
..donde podemos observar que tenemos hasta 8 caracteres para guardar..
Claro que esto no nos limita a usar solo caracteres, tambien podemos usar GRAFICOS, abusando de esta habilidad.. jejejeje.
Ahora si un ejemplo sencillo que resume toda la informacion:
-----------------------------------------------------------------------------------------------------------
DEVICE 16F628A
CONFIG INTRC_OSC_NOCLKOUT,WDT_OFF,PWRTE_ON,CP_OFF,BODEN_OFF,LVP_OFF,MCLRE_OFF
ALL_DIGITAL ON
PORTB_PULLUPS ON
DECLARE LCD_DTPIN PORTA.0
DECLARE LCD_ENPIN PORTB.3
DECLARE LCD_RSPIN PORTA.4
PRINT 254,64,31,17,17,17,17,17,31 "cgram posicion 0
PRINT 254,72,31,27,21,21,31,31,31 "cgram posicion 1
PRINT 254,80,14,27,31,27,31,27,14 "cgram posicion 2
PRINT 254,88,12,18,18,18,23,18,0 "cgram posicion 3
PRINT 254,96,0,14,17,17,17,10,27 "cgram posicion 4
CLS
PRINT 0,1,"x","@",2,3,4
DELAYMS 1000
END
-----------------------------------------------------------------------------------------------------------
"01110///////////////01100//////////////00000//////////////
"11011///////////////10010//////////////01110//////////////
"11111///////////////10010//////////////10001//////////////
"11011 = 2//////////10010 = 3////////10001 =4////////
"11111///////////////10111//////////////10001//////////////
"11011///////////////10010//////////////01010//////////////
"01110///////////////00000//////////////11011//////////////
----------------------------------------------------------------------------------------------------------
Salu2 panas
-
hola:
EXELENTE ARTICULO GRACIAS ,
yo solo sabia crear el simbolo de grados JA JA JA .....pero ahora no hay limites JA JA
GRACIAS PANA
Saludos
khasistos
-
De nada pana Khasistos , para eso estamos

Un abrazo pana
-
Muy buena explicación Lager.
Con esto realmente no tenemos limitaciones para generar cualquier carácter especial o símbolo que necesitemos.
Gracias Lager
Saludos
Ricky
-
Bueno panas, mucho de esto(si no es que todo) se que ya lo sabian emplear, pero veo que muchos usuarios ven el BASIC como limiitado.. y NADA QUE VER.. empleandolo bien (como todo lenguaje) se puede hacer una rutina con EXACTITUD, y optimizacion.
Asi como este detalle hay muchos mas que ofrece proton, ademas de la habilidad de tomar los registros como lo que son REGISTROS!.. es logico que si quieren hacer una operacion con registros como:
PORTB= PORTB/2 , tendrian que guardarlo en una variable ya que el mismo puerto no es UNA VARIABLE..... (PORTB=PORTB/2 <---- MAL SINTAXIS!!!!!! ¿por que mal sintaxis?.. por que proton REALMENTE usa los registros como REGISTROS,, no variables direccionadas que ocupen espacio inecesario en nuestro micro y por consiguiente TIEMPO de proceso)
esta mal que uno lo tome de esa forma ya que uno con el tiempo pierde el conocimiento de que es un REGISTRO no una variable... lo adecuado como Micros Secuanciales es :
VAR= PORTB/2:PORTB=VAR , esto SI EXISTE y es real, y no trabajamos fuera del contexto MAQUINA.
Asi como todos estos detalles, hay mas que proton nos ofrece siempre y cuando respetemos el contexto maquina a seguir.
Con esto solo trato de motivarnos mas ya que la unica limitacion Real es la que nos impongamos. y los BUGs, jajajajajajajajaja. 
Un gran abrazo Ricky y Khasistos