TODOPIC

Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: Abner_emanuel en 07 de Noviembre de 2015, 16:31:56

Título: Mover frase en lcd con interrupción del timer1
Publicado por: Abner_emanuel en 07 de Noviembre de 2015, 16:31:56
Que tal amigos del foro, tengo en mente un pequeño diseño al que le pretendo agregar un texto en movimiento, el tiempo en que se desplace este texto lo quiero realizar por medio del temporizador del timer1 solo que e quedado atorado en eso.

el código que muestro ya realiza el movimientos, solo falta lo del tiempo con el timer1. alguien me podría ayudar.
En la linea 38 del code lo vario con el delay_ms(); pero lo quiero mover cada 500 ms con la interrupción del timer1

Código: CSS
  1. #include <18F4550.h>                                        // Pic a utilizar
  2.          #device *=16                                                // Dispositivo de 16 bit´s
  3.          #device adc=10                                              // ADC a 10 Bits
  4.          #fuses PLL1,CPUDIV1,USBDIV,XTPLL,NOFCMEN,NOIESO,PUT,NOBROWNOUT,VREGEN,NOWDT,NOPBADEN,MCLR,NOSTVREN,NOLVP,NODEBUG,NOPROTECT,NOSTVREN,NOCPB,NOWRT      
  5.          #use delay(clock=48000000)                                  // Frecuancia del CPU.        
  6.          
  7.          #byte porta = 0xF80                                         // Dirección del puerto A para la familia 18Fxx5x.
  8.          #byte portb = 0xF81                                         // Dirección del puerto B para la familia 18Fxx5x.
  9.          #byte portc = 0xf82
  10.          #byte portd = 0xf83
  11.          #byte porte = 0xf84
  12.          
  13.          #byte use_portd_lcd=8                                       // Define el puerto_d para la lcd.
  14.          #include <lcd4x20.c>                                       // Librería para el manejo del LCD
  15.          #include <string.h>
  16.          
  17. ////////////////////////////////////////////////////////////////////////////////
  18.  
  19.          char cadena[36]= {"INSTITUTO TECNOLOGICO DE C.D. GUZMAN"};
  20.          int n=0,cnt=0,tmp=0,len=0;
  21.  
  22.          void texto()
  23.          {
  24.          len=strlen(cadena);
  25.          cnt=0;
  26.  
  27.          while(cnt<=len+20)
  28.          {
  29.          lcd_gotoxy(1,2);                                      
  30.          for(n=1;n<=20;n++)
  31.          {
  32.          tmp=n+cnt-20;                                         // Comienzo de linea
  33.          if((tmp>0)&&(tmp<=len))
  34.          {
  35.          printf(lcd_putc,"%c",cadena[tmp-1]);
  36.          }else{printf(lcd_putc," ");}
  37.          }        
  38.          delay_ms(400);                                        // Este es el tiempo a variar con la int del timer1
  39.          cnt=cnt+1;
  40.          }
  41.          }
  42.  
  43.          void main()
  44.          {
  45.          lcd_init();
  46.          printf(lcd_putc,"\f");
  47.  
  48.          while(true)
  49.          {
  50.          texto();                                              //llamar a la funcion texto()          
  51.          }
  52.          }

Título: Re:Mover frase en lcd con interrupción del timer1
Publicado por: KILLERJC en 07 de Noviembre de 2015, 18:16:30
Podrias poner como queres que comienze y como termina ?

Supongamos esto:
"INSTITUTO TECNOLOGICO DE C.D. GUZMAN"

Comienza con:

"INSTITUTO TECNOL" y termina con "O DE C.D. GUZMAN"
Y luego que pasa? Aparece de golpe la primer parte o comienza de la forma:

"               I" (la i de instituto) y termina con un "N                 " ( la n de guzman)
Y recien ahi comienza de nuevo. Hay un espacio en blanco entre medio de la muestra final y la inicial ?
Título: Re:Mover frase en lcd con interrupción del timer1
Publicado por: Abner_emanuel en 07 de Noviembre de 2015, 19:49:03
Mira, esto es lo que hace el code:

feature=youtu.be

A lo que me refiero es que quiero mover el texto con el timer1 es decir que se valla moviendo cada medio segundo, como lo comente antes.
El programa en si si funciona.

Por que con el timer1?, por que tengo al pic haciendo otros procesos y si lo pongo hacer este desplazamiento de texto, entonces se detienen los otros procesos. Así que si implemento la interrupción del timer lo realizara sin importar lo que este haciendo en otros procesos

En la linea 38 del code lo vario con el delay_ms(); pero lo quiero mover cada 500 ms con la interrupción del timer1

Título: Re:Mover frase en lcd con interrupción del timer1
Publicado por: uZYNQ en 07 de Noviembre de 2015, 23:59:16
Normalmente los controladores de LCD ya ofrecen ese desplazamiento de display (shift). Podrias ubicar en la libreria que utilizas como enviar el comando para realizar esa funcion asi liberas al micro. En el controlador HD44780 (Uno de los mas utilizados) el comando a enviar es (0b00011x00) donde x es (1: derecha, 0:izquierda). Primero envias la cadena completa que quieres visualizar hasta un maximo de 40 caracteres, luego solo debes programar el timer con el tiempo que deses y en la rutina de interrupción mandar el comando de desplazamiento (shift)

Saludos.
Título: Re:Mover frase en lcd con interrupción del timer1
Publicado por: KILLERJC en 08 de Noviembre de 2015, 00:21:12
Pense que no tenias nada realizado o que no te funcionaba.

Si vas a mostrar solo una linea si esta muy bueno eso que dice uZYNQ, deberias verlo, el LCD no solo posee 16 lugares (en la primer liena y la segunda), sino que posee mas, y vos podes seleccionar desde donde empieza a barrer esos 16 caracteres.
Título: Re:Mover frase en lcd con interrupción del timer1
Publicado por: uZYNQ en 08 de Noviembre de 2015, 00:32:53
Para la libreria lcd.c de CCS es la siguiente función:

lcd_send_byte(0, 0x18);

Título: Re:Mover frase en lcd con interrupción del timer1
Publicado por: Abner_emanuel en 08 de Noviembre de 2015, 01:16:59
Muchas gracias por sus comentarios, buscaré más sobre  ello y ni dejaré el tema hasta no resolver esto.

Gracias KILLERJC y gracias uznq