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

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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: Ejemplitos en C para 16F648A
« Respuesta #45 en: 25 de Agosto de 2005, 06:13:00 »
Anda, amigo, cámbialo por Depor, que me temo que ahora mismo los ánimos los necesita más que el Betis.

De todas formas, podrías poner algo como: "musho Beti y Aupa Depor"

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: Ejemplitos en C para 16F648A
« Respuesta #46 en: 25 de Agosto de 2005, 06:18:00 »
la "m" con el display va esta complicada xD Muchas risas tal vez si lo tumbamos ... :P
Si juegas contra el mejor, pierdes como los demás.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: Ejemplitos en C para 16F648A
« Respuesta #47 en: 25 de Agosto de 2005, 06:32:00 »
Glub, no me dí cuenta que hablabas de 7-seg.
Bueno, puedes poner AUPA DEPO

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: Ejemplitos en C para 16F648A
« Respuesta #48 en: 25 de Agosto de 2005, 06:44:00 »
Weno, todo es ponerse jejeje, en el foro de modding que yo frecuento, hay un chaval algo bruto que hizo lo siguien, sin multiplexar (que sera como consumir 2A) !! loco



P.D.: perdon por la publi, pero lo "interesante" es lo que hizo el "becerro" este ...
Si juegas contra el mejor, pierdes como los demás.

Desconectado xootraoox

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 248
RE: Ejemplitos en C para 16F648A
« Respuesta #49 en: 25 de Agosto de 2005, 07:30:00 »
MMMM...  Algunos de uds ha visto por hay este chip??? TLC5904..... bueno este mismo es capas de controlar hasta 16 salidas de leds permitiendonos ajustar el error de los leds.... asi tambien es capas de variar la intensidad de los leds por medio de PWM

osea en pocas palabras con solo 4 de estos mas 3 pines de un micro podemos hacer una matriz de 32 x 32 con la capacidad de generar hasta 4096 tonos de escalas de grizes osea sin problemas podemos mostrar imagenes

bueno si quieren un poco mas de info en realidad vealla uds mismos en la hoja de datos del mismo

http://www-s.ti.com/sc/ds/tlc5940.pdf

apsss..... se me olvidaba lo mas importante FlashFlash si alguien genera alguna libreria para el mismo se agadece de antemano que la compartiera en este mismo

-==XooTRAooX==-

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #50 en: 25 de Agosto de 2005, 08:43:00 »
jejeje la virgen!!!!jeje la verdad que el chiko no se compliko la cabeza mucho....y yo ke kreia ke radon estaba hablando en broma de eso de tumbar los 7seg.....jeje ke descaro!..ainsss por cierto xootraoox interesante el data sheet que pusiste haber si lo leo detenidamente me interesan los "chismes" esos....bueno se que al Depor le hace mas falta los animos ya que no estamos en europa ni nada asi que haciendole caso a nocturno66 aqui va el programita que anima al depor diciendo: AUPA DEPO y suena un pitidito....como mejor he podido poner las letras en display"s de 7seg jeje:

////////////////////////////////////////////////////////////////////////////////////
//                     VsZeNeR"05      
//                     25/Agosto/05
//
//   Programa:   AUPA DEPO parpadeo
//   Version:   0.0
//
//   Dispositivo: PIC 16F648A         Compilador:    CCS vs3.227
//   Entorno IDE: MPLAB IDE v7.20      Simulador:    Proteus 6.7sp3
//
//   Notas: Muestra el mensaje de AUPA DEPO por cuatro display"s de 7 segmentos
//         multiplexados. El mensaje aparece cada 0,5s parpadeando primero la
//         frase AUPA y luego la frase DEPO y suena un pitido al cambio de frase.
//         Tener en cuenta que hay que poner la directiva NOLVP
//         para que el pin B4 sea de salida.
//         Se utiliza variables locales:
//            * i -> indice 1º 7seg
//            * j -> indice 2º 7seg
//            * w -> indice 3º 7seg
//            * z -> indice 4º 7seg
//            * cont -> contador: cont=0 -> AUPA
//                           cont=1 -> DEPO
//            * rep -> variable para visualizar mensaje
//            * tab7seg[] -> vector donde se almacenan letras mensajes
//   Conexiones:
//         · RA0 -> Display 1º 7seg
//         · RA1 -> Display 2º 7seg
//         · RA2 -> Display 3º 7seg
//         · RA3 -> Display 4º 7seg
//         · RB0 -> a 7seg
//         · RB1 -> b 7seg
//         · RB2 -> c 7seg
//         · RB3 -> d 7seg
//         · RB4 -> e 7seg
//         · RB5 -> f 7seg
//         · RB6 -> g 7seg
//         · RB7 -> Buzzer
//////////////////////////////////////////////////////////////////////////////////

#include <16f648a.h>            //pic a utilizar          
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#use standard_io(B)
#use standard_io(A)

///PROGRAMA
void main(void)
{
   char rep,cont=0,i=0,j=1,w=2,z=0;   //variables
   int tab7seg[6]={0x77,0x3E,0x73,0x5E,0x79,0x3F};   //A U P D E O
      
   set_tris_b(0x00);            //portb como salida
   set_tris_a(0x00);            //porta como salida
   disable_interrupts(GLOBAL);      //desactivadas interrupciones

   do{                        //bucle...
      for(rep=0;rep<15;rep++){   //bucle visualizacion aupa/depo         
      output_a(0b1110);         
       output_b(tab7seg[ i ]);      //1º 7seg on
      delay_ms(10);
      output_a(0b1101);      
      output_b(tab7seg[ j ]);      //2º 7seg on
      delay_ms(10);
      output_a(0b1011);      
      output_b(tab7seg[ w ]);      //3º 7seg on
      delay_ms(10);
      output_a(0b0111);      
      output_b(tab7seg[ z ]);      //4º 7seg on
      delay_ms(10);
      }
      
      cont=!cont;               //cont=~cont
      if(cont==1){            //muestra:
         i=3;               //D
         j=4;               //E P
         z=5;}               //O
      else{                  //muestra:
         i=0;               //A
         j=1;               //U P
         z=0;}               //A
         
      output_b(0b10000000);      //Buzzer on...todo...
      output_a(0b0000);
      delay_ms(500);            //...apagado durante 0,5s         
      }while(TRUE);            //...infinito         
}
aupa depoooo piiii piiii piiiiiii jejeGiño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #51 en: 25 de Agosto de 2005, 08:46:00 »
Aqui los archivos necesarios para el programa anterior: Aupa Depo


Suerte!!! :wink:
« Última modificación: 25 de Mayo de 2006, 10:26: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 #52 en: 26 de Agosto de 2005, 09:12:00 »
Un ejemplito mas!!!!y seguimos machacando los display"s de 7 segmentos de catodo comun...esta vez el ejemplo consiste en 4 display"s de 7seg mostrar la palabra "hola" e ir rotandola hacia la izquierda:

////////////////////////////////////////////////////////////////////////////////////
//                     VsZeNeR"05      
//                     21/Agosto/05
//
//   Programa:   HOLA
//   Version:   0.0
//
//   Dispositivo: PIC 16F648A         Compilador:    CCS vs3.227
//   Entorno IDE: MPLAB IDE v7.20      Simulador:    Proteus 6.7sp3
//
//   Notas: Muestra el mensaje de HOLA por cuatro display"s de 7 segmentos
//         multiplexados. El mensaje se va rotando por los display"s hacia la
//         izquierda. Tener en cuenta que hay que poner la directiva NOLVP
//         para que el pin B4 sea de salida.
//         Se utiliza variables locales:
//            * i -> indice tabla 7seg para mostrar 1º 7seg
//            * j -> indice tabla 7seg para mostrar 2º 7seg
//            * z -> indice tabla 7seg para mostrar 3º 7seg
//            * w -> indice tabla 7seg para mostrar 4º 7seg
//            * flag -> variable que cuenta 0.5s
//            * var -> ajuste fino para que desborde cada medio segundo.
//         Utilizamos la funcion de interrupcion para actualizar indices de la
//         tabla de 7seg para mostrar la palabra correspondiente en el respectivo
//         7seg, para ello el TMR0 se desborda cada 0.5s, para ello debe ser cargado
//         con 61(equivale a un desbordamiento cada 50ms mas o menos), para obtener
//         un desbordamiento de 0.5s utilizamos una variable(flag) que no entra en
//         la actualizacion de indices hasta transcurrido 0.5s.
//   Conexiones:
//         · RA0 -> Display 1º 7seg
//         · RA1 -> Display 2º 7seg
//         · RA2 -> Display 3º 7seg
//         · RA3 -> Display 4º 7seg
//         · RB0 -> a 7seg
//         · RB1 -> b 7seg
//         · RB2 -> c 7seg
//         · RB3 -> d 7seg
//         · RB4 -> e 7seg
//         · RB5 -> f 7seg
//         · RB6 -> g 7seg
//////////////////////////////////////////////////////////////////////////////////

#include <16f648a.h>            //pic a utilizar          
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#use standard_io(B)
#use standard_io(A)

char i=0,j=1,z=2,w=3,var=10,flag=0;   //indices para tabla 7 seg

///LLAMADA FUNCION INTERRUPCION
#INT_TIMER0
void interrupcion()
{
   if(flag>var){      //¿ya es 1 segundo?
      var--;         //SI -> decremento var...
      if(var<18)
         var=10;      //...ajuste fino de 1s
      flag=0;         //reset flag para contar 1s
      i++;         //incrementos...
      j++;
      z++;
      w++;         //...indices para mostrar en 7seg
      if(i>3)         //¿Ha llegado fin tab7seg?
         i=0;      //SI -> restaura indice i
      if(j>3)         //¿Ha llegado fin tab7seg?
         j=0;      //SI -> restaura indice j
      if(z>3)         //¿Ha llegado fin tab7seg?
         z=0;      //SI -> restaura indice z
      if(w>3)         //¿Ha llegado fin tab7seg?
         w=0;      //SI -> restaura indice w
      }
      
   set_timer0(61);      //reset TMR0
   flag++;            //incremento variable flag
}


///PROGRAMA
void main(void)
{
   int tab7seg[4]={0x76,0x3F,0x38,0x77};      //7seg H O L A
   
   set_tris_b(0x00);                     //portb como salida
   set_tris_a(0x00);                     //porta como salida
   enable_interrupts(INT_TIMER0);            //interrupcion TIMER0 activada
   setup_counters(RTCC_INTERNAL,RTCC_DIV_256);   //configuracion interrupcion TMR0
   set_timer0(61);                        //carga TMR0
   enable_interrupts(GLOBAL);               //activadas interrupciones

   
   do{                        //bucle...
      output_low(PIN_A0);         //activado...
      output_high(PIN_A1);
      output_high(PIN_A2);
      output_high(PIN_A3);   
      output_b(tab7seg[ i ]);      //...1º 7seg
      delay_ms(10);
      output_high(PIN_A0);
      output_low(PIN_A1);         //activado...
      output_high(PIN_A2);
      output_high(PIN_A3);      
      output_b(tab7seg[ j ]);      //...2º 7seg
      delay_ms(10);
      output_high(PIN_A0);
      output_high(PIN_A1);
      output_low(PIN_A2);         //activado...
      output_high(PIN_A3);      
      output_b(tab7seg[ z ]);      //...3º 7seg
      delay_ms(10);
      output_high(PIN_A0);
      output_high(PIN_A1);
      output_high(PIN_A2);
      output_low(PIN_A3);         //activado...
      output_b(tab7seg[ w ]);      //...4º 7seg
      delay_ms(10);            
      }while(TRUE);            //...infinito         
}

Bueno....terminada la publicidad y animos a los equipos de futbol como el que no quiere la cosa sabemos contar de forma ascendente,descendente,automatica,con botones,parpadeo de palabras,parpadeo de dos palabras y ahora rotar palabras....ya sabemos algo mas!!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #53 en: 26 de Agosto de 2005, 09:15:00 »
De este enlace os podeis descargar los archivos necesarios del programa anterior:hola


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

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: Ejemplitos en C para 16F648A
« Respuesta #54 en: 26 de Agosto de 2005, 09:17:00 »
Joder tio, eres una máquina, no paras de trabajar Rebotado
Si juegas contra el mejor, pierdes como los demás.

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #55 en: 26 de Agosto de 2005, 16:53:00 »
Jeje bueno trabajar con estos "cacharros" es un placer(hasta que se atraganta algun que otro programita...jeje)..ummmm le han puesto una xincheta al post!!!!jeje bueno asi esta mas visible para que este mas a mano los ejemplitos....bueno decir que microchip acaba de lanzar la version del Mplab 7.21, lo digo porque ya los nuevos ejemplos estaran integrados en el nuevo software(eso si recordando que el compilador utilizado es el CCS), aqui la dire para descargarse la nueva version del Mplab 7.21:

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469&part=SW007002

PD: Es GRATISSS!!!!!jejeGiño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #56 en: 26 de Agosto de 2005, 17:15:00 »
Aqui va otro ejemplito mas!!!!y mas con 7seg!!!!jeje ke jartura de estos dispositivos......ainsss jeje, bueno esta vez consiste en mostrar por pantaya un cuadradito ke se desplaza de izquierda a derechas y viceversa:

////////////////////////////////////////////////////////////////////////////////////
//                     VsZeNeR"05      
//                     26/Agosto/05
//
//   Programa:   Cuadrado que recorre 4 display"s de 7seg de izuiqerda a derechas
//   Version:   0.0
//
//   Dispositivo: PIC 16F648A         Compilador:    CCS vs3.227
//   Entorno IDE: MPLAB IDE v7.20      Simulador:    Proteus 6.7sp3
//
//   Notas: Simbolo recorre cuatro display"s de 7 segmentos de izquierda
//         a derechas y viceversa.
//         Tener en cuenta que hay que poner la directiva NOLVP
//         para que el pin B4 sea de salida.
//         Se utiliza variables locales:
//            * i -> contador de display on
//            * display_on[] -> vector con el display on
//   Conexiones:
//         · RA0 -> Display 1º 7seg
//         · RA1 -> Display 2º 7seg
//         · RA2 -> Display 3º 7seg
//         · RA3 -> Display 4º 7seg
//         · RB0 -> a 7seg
//         · RB1 -> b 7seg
//         · RB2 -> c 7seg
//         · RB3 -> d 7seg
//         · RB4 -> e 7seg
//         · RB5 -> f 7seg
//         · RB6 -> g 7seg
//////////////////////////////////////////////////////////////////////////////////

#include <16f648a.h>            //pic a utilizar          
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#use standard_io(B)
#use standard_io(A)

///PROGRAMA
void main(void)
{
   char i=0;                  //contador de display on
   int display_on[4]={0b1110,0b1101,0b1011,0b0111}; //tabla display on
      
   set_tris_b(0x00);            //portb como salida
   set_tris_a(0x00);            //porta como salida
   disable_interrupts(GLOBAL);      //desactivadas interrupciones
      
   output_b(0x63);               //muestra por pantalla simbolo
   output_a(display_on[ i ]);      //inicializo display
   
   do{                        //bucle...
      for(i=0;i<3;i++){         //hacia la izquierda
         delay_ms(100);                  
         output_a(display_on[ i ]);         
      }
      
      for(i=3;i>0;i--){         //hacia la derecha    
         delay_ms(100);      
         output_a(display_on[ i ]);         
      }            
      }while(TRUE);            //...infinito         
}

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

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #57 en: 27 de Agosto de 2005, 14:58:00 »
Bien aqui  el ejemplito numero 22!!!!jeje esta vez consiste en hacer un dado electronico, se utilizada un display de 7seg en formato BCD(que ya conocemos) y un pulsador(los cuales producen los molestos "rebotes" que pueden ser eliminados mediante hardware o como este caso emdiante software pero esta vez no realizamos una espera sino que lo eliminamos mediante un bucle), el programa llama a una funcion definida en la libreria #include <STDLIB.H> la cual tiene la funcion srand() y rand() , esta ultima para generar numeros aleatorios, tener en cuenta que tenemos que definir esta variable como sigue: #define RAND_MAX  10 para que solo contemos del 0 al 9:

////////////////////////////////////////////////////////////////////////////////////
//                     VsZeNeR"05      
//                     25/Agosto/05
//
//   Programa:   Dado digital
//   Version:   0.0
//
//   Dispositivo: PIC 16F648A         Compilador:    CCS vs3.227
//   Entorno IDE: MPLAB IDE v7.20      Simulador:    Proteus 6.7sp3
//
//   Notas: Dado digital, que al presionar el boton conectado al pin A0 del porta
//         genera un numero pseudo-aleatorio mediante la funcion rand() que se
//         encuentra en la libreria STDLIB.H. El numero pseudo-aleatorio es elegido
//         mediante la funcion rand() y segun los "rebotes" producidos por el boton.Tener
//         en cuenta que hay que poner la directiva NOLVP para que el pin B4 sea de
//         salida. Cuando agregamos un boton a nuestro circuito hay que tener en cuenta
//         que este dispositivo genera "rebotes" que hay que ser eliminados para
//         una correcta visualizacion en el display del digito seleccionado. Esta vez
//         la eliminacion de "los rebotes" se ha realizado mediante software.
//
//   Conexiones:      A0 -> boton            
//               B0 -> a
//               B1 -> b
//               B2 -> c
//               B3 -> d
//   BCD:
//            d c b a   NUM
//            0 0 0 0    0
//            0 0 0 1    1
//            0 0 1 0    2
//            0 0 1 1    3
//            0 1 0 0    4
//            0 1 0 1    5
//            0 1 1 0    6
//            0 1 1 1    7
//            1 0 0 0    8
//            1 0 0 1    9
//////////////////////////////////////////////////////////////////////////////////

#include <16f648a.h>            //pic a utilizar
#include <STDLIB.H>               //libreria donde esta la funcion rand();          
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#use fixed_io(b_outputs=PIN_B0,PIN_B1,PIN_B2,PIN_B3)
#use standard_io(A)
      
///PROGRAMA
void main(void)
{
   char num=0;                  //variable almacena numero aleatorio

   set_tris_a(0xFF);            //porta como entrada   
   disable_interrupts(GLOBAL);      //todas las interrupciones desactivadas
   
   srand(10);                  //maximo hasta 9
   for( ; ; ){                  //bucle...
      if(!input(PIN_A0))         //¿se ha pulsado el boton?
         {
            do{                     //elimina...
               num=rand();            //genera numero pseudo-aleatorio
               }while(!input(PIN_A0));   //...rebotes
         }      
      output_b(num);                   //muestra por portb digito 7 segmentos   
      }                     //...infinito
}

Parece que fue ayer cuando encendiamos y apagabamos un led y ya vamos por el programa numero 22!!!jeje hasta pronto!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #58 en: 27 de Agosto de 2005, 15:01:00 »
Desde este enlace os podeis descargar los archivos necesarios para el programa anterior: Dado


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

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #59 en: 29 de Agosto de 2005, 05:03:00 »
Ke tal!!!bien, decir que vamos a practicar con pantallas lcd por lo tanto me parece bueno que tengamos referencias sobre la lcd a utilizar, la elegida es la Hitachi 44780(LM016L) para ello utilizaremos la libreria que viene incluida en el CCS llamada lcd.c, esta libreria maneja nuestra lcd ya que se compone de 2x16 LCD Panel. La idea es hacer funcionar estos "cacharros" y segun pasen los ejemplos poder modificar la libreria para poder conectar nuestra lcd a nuestro pic de la forma que queramos okis??, bien aqui van algunos enlaces sobre nuestra lcd a utilizar(decir que la libreria lcd.c es compatible con otras pantallas lcd que cumplan 2x16 LCD Panel):
Data sheet del lcd Hitachi 44780(con info sobre ella):
http://www.x-robotics.com/rutinas.htm#LCD
Y aqui un enlace que CCS da sobre sus librerias, siempre es bueno tenerlo a mano ya que asi sabremos sobre que material esta realizada la libreria lcd.c(teneis que buscar en la tabla el nombre de lcd.c y a la derecha estara el data sheet en pdf del lcd patron de dicha libreria que ha utilizado CCS para realizarla):
http://www.ccsinfo.com/data.shtml

PD: Comentar que el manejo a priori de las lcd"s son facil...pero a la hora de simularlas o montaje real viene las complicaciones, normalmentee estas complicaciones son debidas la mayoria de veces al conexionado mal de la lcd con nuestro pic, asi que si el programa compila sin errores revisar bien el conexionado de la lcd con el pic.

Vamos al lio!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte


 

anything