Autor Tema: Ejemplitos en C para 16F648A  (Leído 610504 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #60 en: 29 de Agosto de 2005, 05:04:00 »
Y para empezar con estos "cacharros" que mejor que decir "hola mundo" jeje pues aqui esta!!!!:

////////////////////////////////////////////////////////////////////////////////////
//                     VsZeNeR"05      
//                     26/Agosto/05
//
//   Programa:   Hola mundo
//   Version:   0.0
//
//   Dispositivo: PIC 16F648A         Compilador:    CCS vs3.227
//   Entorno IDE: MPLAB IDE v7.21      Simulador:    Proteus 6.7sp3
//
//   Notas: Se muestra por pantalla de lcd(LM016L) en la primera linea la
//         frase "hola mundo Giño" y en la segunda linea "VsZeNeR"05". Tener
//         en cuenta que hay que poner la directiva NOLVP para que el pin B4 sea de
//         salida.
//
//   Conexiones:      B0 -> E            
//               B1 -> RS         
//               B2 -> RW      
//               B4 -> D4        
//               B5 -> D5            
//               B6 -> D6   
//               B7 -> D7                  
//////////////////////////////////////////////////////////////////////////////////

#include <16f648a.h>            //pic a utilizar          
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#define use_portb_lcd TRUE         //definir portb lcd
#include<lcd.c>                  //libreria manejo lcd
      
///PROGRAMA
void main(void)
{
   lcd_init();         //inicializa lcd
   printf(lcd_putc,"hola mundo ; )
VsZeNeR"05" );   //muestra por pantalla el mensaje  
}

Jeje ya sabemos encender las lcd"s.....Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #61 en: 29 de Agosto de 2005, 05:10:00 »
Aqui los archivos necesarios para el programa: hola mundo


Suerte!!! :wink:
« Última modificación: 25 de Mayo de 2006, 10:31:29 por vszener »
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #62 en: 29 de Agosto de 2005, 18:30:00 »
Buenas!!!!decir que el ejemplo que propongo es igual al anterior excepto una salvedad, esta vez nos ahorraremos un pin, es decir, el programa dira la frase "hola mundo...." pero utilizando un pin menos conectado al lcd, el pin que nos vamos ahorrar es el conectado a RW de la lcd, esto tiene sus ventajas y sus inconvenientes, VENTAJAS: tenemos un pin mas sobre el cual poder actuar de nuestro dispositivo, menos lineas de ruteo, etc... INCONVENIENTES: en vez de mandar los datos al lcd empaquetados en 8bits lo mandamos empaquetados en 4 por lo tanto la informacion se procesa de modo mas lenta lo que nos obliga a realizar un retraso de unos 2ms antes de mostrar el mensaje para que pueda ser apreciado todos los caracteres, no podemos leer datos de la lcd, etc.....Bueno decir que segun sea nuestro programa utilizaremos la forma ahorro de un pin o utilizaremos la forma normal...aqui el codigo:

////////////////////////////////////////////////////////////////////////////////////
//                     VsZeNeR"05      
//                     26/Agosto/05
//
//   Programa:   Hola mundo VsZeNeR"05 ahorrando 1 pin
//   Version:   0.1
//
//   Dispositivo: PIC 16F648A         Compilador:    CCS vs3.227
//   Entorno IDE: MPLAB IDE v7.20      Simulador:    Proteus 6.7sp3
//
//   Notas: Se muestra por pantalla de lcd(LM016L) en la primera linea la
//         frase "hola mundo ; )" y en la segunda linea "VsZeNeR"05". Para ahorrar un
//         pin conectamos RW a tierra(GND) y en nuestro programa generamos un retraso de
//         2ms para poder apreciarse todos los caracteres. La ventaja es que nos ahorramos
//         1 pin pero la desventaja es menor rapidez ya que empaquetamos en bloques de 4 bit.
//         Tener en cuenta que hay que poner la directiva NOLVP para que el pin B4 sea de
//         salida.
//
//   Conexiones:      B0 -> E                     
//               B1 -> RS      
//               B4 -> D4        
//               B5 -> D5            
//               B6 -> D6   
//               B7 -> D7                  
//////////////////////////////////////////////////////////////////////////////////

#include <16f648a.h>            //pic a utilizar          
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#define use_portb_lcd TRUE         //definir portb lcd
#include<lcd.c>                  //libreria manejo lcd
      
///PROGRAMA
void main(void)
{
   lcd_init();         //inicializa lcd
   delay_ms(2);      //retardo para apreciarse todos los caracteres
   printf(lcd_putc,"hola mundo ; )
VsZeNeR"05" ) ;   //muestra por pantalla el mensaje  
}

PD: Recordar que nuestro dispositivo tiene 18 patitas asi que muchas veces esta opcion sera muy util a la hora de realizar nuestros diseñosGiño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #63 en: 29 de Agosto de 2005, 18:36:00 »
Desde este enlace os podeis bajar los archivitos del programa: hola mundo ahorrando 1 pin


Suerte!!! :wink:
« Última modificación: 25 de Mayo de 2006, 10:32:25 por vszener »
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #64 en: 29 de Agosto de 2005, 18:41:00 »
Decir que nuestro simulador hasta hoy solo podiamos verlo trabajar en el circuito pero no mediante nuestro codigo escrito en c....aqui en este enlace hay un tutorial de como integrar el lenguaje c al simulador PROTEUS y asi poder verlo paso a paso y resolver antes los problemas de programacion que hubieramos tenido!!
[MANUAL] Integrar CCS en PROTEUS  

PD: Antes, en el archivo .dsn(simulacion de PROTEUS) cargabamos el archivito .hex y simulabamos y veiamos el comportamiento del circuito, ahora mediante esta adaptacion podemos ver tanto el comportamiento del circuito como simularlo paso a paso y las variables definidas y demas!!!asi que apartir de ahora junto al documento .hex agregare el documento .cof que sera el que cargemos en el pic(para simular en PROTEUS!!!!)para asi poder ver paso a paso nuestro programa escrito en c :wink:
« Última modificación: 25 de Mayo de 2006, 10:41:18 por vszener »
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #65 en: 30 de Agosto de 2005, 07:33:00 »
Hola!!!el programita de hoy consiste en mostrar por pantalla del lcd el abecedario carcater por carcater(eso si teniendo en cuenta los caracteres imprimibles de la lcd-ver data sheet que esta indicado en unos de los mensajes anterioresFlash-)uno al lado del otro y borra pantalla y vuelta a empezar:

////////////////////////////////////////////////////////////////////////////////////
//                     VsZeNeR"05      
//                     26/Agosto/05
//
//   Programa:   Abecedario
//   Version:   0.0
//
//   Dispositivo: PIC 16F648A         Compilador:    CCS vs3.227
//   Entorno IDE: MPLAB IDE v7.21      Simulador:    Proteus 6.7sp3
//
//   Notas: Se muestra por pantalla de lcd(LM016L) el abecedario y vuelta a empezar
//         Tener en cuenta que hay que poner la directiva NOLVP para que el pin B4 sea de
//         salida.
//            ·abecedario[] -> vector donde se almacena abecedario
//            ·x -> indice para vector abecedario e indice para columna lcd
//             ·y -> indice para fila lcd: y=1 -> Fila 1
//                                 y=2 -> Fila 2
//   Conexiones:      B0 -> E            
//               B1 -> RS         
//               B2 -> RW      
//               B4 -> D4        
//               B5 -> D5            
//               B6 -> D6   
//               B7 -> D7                  
//////////////////////////////////////////////////////////////////////////////////

#include <16f648a.h>            //pic a utilizar          
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#define use_portb_lcd TRUE         //definir portb lcd
#include<lcd.c>                  //libreria manejo lcd
      
///PROGRAMA
void main(void)
{
   char abecedario[27]={" ","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"},x,y=1;   //tabla y variables definidas
      
   lcd_init();         //inicializa lcd
   
   do{                        //bucle...
   for(x=1;x<27;x++){            //bucle para mostrar digito
      if(y==1)               //1º fila del lcd
         lcd_gotoxy(x,y);
      else                  //2º fila del lcd
         lcd_gotoxy((x-16),y);
      
      if(x>15)               //¿ya esta completa la 1º fila del lcd?
         y=2;               //SI -> escribe en 2º fila
         
      printf(lcd_putc,"%c",abecedario[ x ]);   //muestra por pantalla el caracter  
      delay_ms(300);               
      }
   printf(lcd_putc,"f " ) ;   //borra pantalla del lcd
   y=1;               //restablece indice
   }while(TRUE);               //...infinito
}

Ya sabemos recitar el abecedario...a, b ,c......Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #66 en: 30 de Agosto de 2005, 07:36:00 »
Aqui los archivos necesarios para el programa anterior: abecedario


Suerte!!! :wink:
« Última modificación: 25 de Mayo de 2006, 10:42:29 por vszener »
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
RE: Ejemplitos en C para 16F648A
« Respuesta #67 en: 31 de Agosto de 2005, 02:17:00 »
Para quien use Displays de anodo comun pego en el almacen la rutina del contador de 0 a 9999 correspondiente y el porteus para un display de 8 digitos.
(pido perdon por modificar codigo pero creo que puede servir a alguien)
Pero tengo una duda, en proteus funciona, pero alguien lo monto?
Vereis, la max corriente de salida o entrada de un puerto pic es de 25 mAmp, si esta patilla da salida o entrada (depende de si es anodo comun o catodo comun) para los 7 seg de un display, necesitaras mas de 100 MAmp, por lo que pienso que es necesario al menos un transistor.
¿QUien lo ha montado?

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #68 en: 31 de Agosto de 2005, 04:53:00 »
Ke tal Algec!!!jeje gracias por modificar el ejemplito para anodo comun!!!!asi ya sabemos utilizar las variantes del 7seg(ami se me olvido hacer ejemplos con esa variante!!!jeje gracias de nuevo!),bien decirte hacerca de los 100ma que muchos display"s de 7seg no le hacen falta tanta intensidad....se conforman con 20ma e incluso 10ma(es cuestion de ver el data sheet del dispositivo), aunque tienes razon con respecto a los transistores siempre y cuando queramos amplificar la intensidad entrante por las patitas de seleccion del 7seg....para aquellos que utilicen dispositivos de 7seg que requieran una intensidad mayor decir que simplemente deben conectar un transistor BC327:

Codigo:
7seg CC
     |
     |
     ->|
       |----------porta(pin de seleccion display: RA0,RA1.....)
  GND--|

Mas o menos asi.....que mal dibujo joe!jeje
Pero antes que nada recordar que lo importante de estos ejemplos son los programas en si, es decir la simulacion en PROTEUS no se puede pasar tal cual es a la vida real, ya que si os fijais, nosotros programamos los fuses del dispositivo con cristal externo de 4MHz tipo XL peor en cambio en la simulacion NO aparece, si no aparece es simplemente para ahorrar componentes que creo que son innecesarios para ver si el funcionamiento del programa es el correcto, mi idea antes de iniciar este post era poner fotitos sobre los ejemplos tratados pero se me escacharro la fuente de alimentacio y hasta que no termine de hacerme la nueva pues......jeje(espero que no tarde tanto como la catedral de burgos!!!loco),tb decir que para pasar del PROTEUS a la vida real simplemente habra que poner el cristal con sus respectivos condensadores,poner el reset externo(aunque esto lo tengo para algun que otro ejemplo con lcd) y poquita cosa mas, decir tb que pasa lo mismo con los programas de lcd, le falta poner el potenciometro del contraste...pero mi intencion es simplemente ver si funcionan los ejemplos aunque si hay que hacerlos completos pues se hace!!!!jejeGiño

PD: Por cierto la modificacion de Algec del SUPER CONTADOR para display"s de 7seg de anodo comun esta en esta direccion:
http://miarroba.com/foros/ver.php?foroid=348538&temaid=3541309
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #69 en: 31 de Agosto de 2005, 06:25:00 »
Wenas!!!!jeje bien el programa ke ofrezco hoy es mostrar una frase por lcd e ir moviendola primero por la 1ºfila de la lcd cuando se haya mostrado completo por la primera fila se traslada a la 2ºfila hasta recorrer toda esta 2ºfila y mostrarse completo y vuelta a empezar!!!:

////////////////////////////////////////////////////////////////////////////////////
//                     VsZeNeR"05      
//                     29/Agosto/05
//
//   Programa:   VsZeNeR"05 mov pantalla
//   Version:   0.0
//
//   Dispositivo: PIC 16F648A         Compilador:    CCS vs3.227
//   Entorno IDE: MPLAB IDE v7.21      Simulador:    Proteus 6.7sp3
//
//   Notas: Se muestra por pantalla de lcd(LM016L) como la palabra VsZeNeR"05
//         se va moviendo por pantalla, empieza en la 1ºfila y termina en la 2ºfila.
//         Se utiliza variables locales:
//            ·x -> indice filas, es de tipo char signed porque necesitamos nº negativos
//                  para que en la 2ºfila del lcd aparezca primero el final del mensaje.
//            ·y -> indice de columnas: y=1 -> 1ºcolumna
//                                y=2 -> 2ºcolumna
//         La "x" se comprende en pantalla desde 1 hasta 16 y la "y" desde 1 hasta 2.
//         Tener en cuenta que hay que poner la directiva NOLVP para que el pin B4 sea de
//         salida.
//
//   Conexiones:      B0 -> E            
//               B1 -> RS         
//               B2 -> RW      
//               B4 -> D4        
//               B5 -> D5            
//               B6 -> D6   
//               B7 -> D7                  
//////////////////////////////////////////////////////////////////////////////////

#include <16f648a.h>            //pic a utilizar          
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#define use_portb_lcd TRUE         //definir portb lcd
#include<lcd.c>                  //libreria manejo lcd
      
///PROGRAMA
void main(void)
{
   char y=1;               //indice columnas
   signed char x=1;         //indice filas
   
   lcd_init();               //inicializa lcd
   
   while(TRUE){      //bucle...
      lcd_gotoxy(x,y) ;      //cursor para escribir mensaje
      lcd_putc("VsZeNeR"05" ) ;   //muestra por pantalla el mensaje
      delay_ms(150);         
      x++;               //incremento indice de filas
      if(x>16){            //¿ya se ha mostrado mensaje entero por 1ºfila?
         x=-8;            //SI -> indice fila x=-8
         y++;            //incremento indice columnas
         if(y>2)            //¿ya se ha mostrado mensaje por 2º columna?
            y=1;         //SI -> restauro indice columna
         }
      lcd_putc("f" ) ;         //borra pantalla  
      }            //...infinito
}

Ainnsss que pokito kea pa ke termine agosto....Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #70 en: 31 de Agosto de 2005, 06:27:00 »
Desde esta dire os podeis descargar lo necesario para el programa anterior:mover frase por lcd


Suerte!!! :wink:
« Última modificación: 25 de Mayo de 2006, 10:43:39 por vszener »
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
RE: Ejemplitos en C para 16F648A
« Respuesta #71 en: 31 de Agosto de 2005, 07:02:00 »
Gracias por tu respuesta. El diagrama de proteus es una chapuza (el mio) pero funciona, y ya puestos, ¿porque no hacemos una rutina para libreria en que pasandole un float en coma flotante los visualice en el display poniendo el numero de digitos que tenga el float y el punto decimal en su sitio?
Seria un buen ejercicio para todos el tratar de realizar algo asi
void visualizar_display(float x)
en el que x tuviese valores de hasta 8 digitos y la coma flotante
Fijaos la de codigo que ahorraria en una aplicacion con displays de 7 seg.

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #72 en: 31 de Agosto de 2005, 12:10:00 »
Suena bien eso del float..ummmm haber si consigo algo de tiempo y me pongo a trabajar en ello, lo suyo es abrir un post sobre el tema para ir poneindo los avances y las dudas y de camino no llenar este post de dudas y tal sino que sirva de ejemplos para tenerlos a mano(a no ser que sean dudas de los ejemplos expuestos) no se es una sugerencia, de todas formas voy a empezar a trabajar en ello en cuanto tenga algo de tiempo me ha gustado la idea....jeje gracias de nuevo Algec!!!!!


PD: Tendriamos que definir formato y forma de mandar informacion a la funcion y el codigo en si haber como seria lo mas optimo posible....ummmmm neuronas ya en funcionamiento!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
RE: Ejemplitos en C para 16F648A
« Respuesta #73 en: 31 de Agosto de 2005, 12:15:00 »
Veras, yo acostumbraba a programar para Pc donde el problema de tamaño del programa era minimo, aqui las rutinas si se usan deben ser lo mas pequeñas posibles ya que el espacio del pic es minimo, y por eso las librerias deben estar muy bien hechas.
Se puede usar tu programita de ejmplo a modo de inicio. Quien tenga algo hecho ya que lo publique, y luego depurar, depurar y depurar el codigo hasta reducir reducir y reducir.
Entre todos una vez hecho quien tenga una idea para reducir codigo aplicarla y postearla.
VEremos si se suma alguien mas. Como veo que controlas el tema inicialo tu, y cuando tengas algo lo publicas y aportamos soluciones.
Por cierto, tengo a medio diseñar una placa estandar (siguiendo un estandar propio) para 8 o menos displays de 7 seg, para pics el que quieras. cuando este lista y probada la publico. LAs del 16F877 16F84 etc estan ya listas probadas y diseñadas. Funcionan bien, siguen un estandar de conexionado y si alguien las necesita tengo algunas tambien para pruebas etc. Estan en uso con librerias , teclado etc.

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #74 en: 01 de Septiembre de 2005, 09:43:00 »
Ke tal Algec!!!jeje yo tb acostumbraba a programar para PC jeje(memorias dinamicas jeje) bien la verdad que creo que esa libreria podria ser beneficiosa incluso se podria ampliar para hacer funciones de manejo de display"s de 7seg(ya sean anodo o catodo comun o incluso formato BCD), lo suyo es hacer una libreria digamos "universal" para el manejo de estos dispositivos de cualquier forma....en cuanto termine las vacaciones y ya me ponga a la rutina diaria me pongo a meterle mano y abro el post sobre esa libreria que la verdad suena bien....por cierto lo d las entrenadoras yo tb me hice algunas, estaria bien que las publicaras asi podras ayudar a gente que este buscando fabricarse una(que si no creo recordar mal, lei un post sobre como realizarse una entrenadora...ummm), bueno hasta la proxima!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte