Sie sind auf Seite 1von 17

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"
En línea

Un saludo desde Sevilla, España.


Visita MicroPIC ɔ!doɹɔ!ɯ ɐʇ!
s!ʌ
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 tal vez si lo tumbamos ...


En línea

Si juegas contra el mejor, pierdes como los demás.


Nocturno
 Administrador
 DsPIC33


 Mensajes: 17506


o

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
En línea
Un saludo desde Sevilla, España.
Visita MicroPIC ɔ!doɹɔ!ɯ ɐʇ!
s!ʌ
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) !!

P.D.: perdon por la publi, pero lo "interesante" es lo que hizo el "becerro" este ...
En línea

Si juegas contra el mejor, pierdes como los demás.


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 si alguien genera alguna libreria para


el mismo se agadece de antemano que la compartiera en este mismo

-==XooTRAooX==-
En línea
vszener
 Moderador Local
 PIC24H


 Mensajes: 2390

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 jeje
En línea

· Nos vemos en los bares!!!!!

· Mi Blog: Aqueronte
vszener
 Moderador Local
 PIC24H


 Mensajes: 2390

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!!!
aupa depo.rar (16.42 kB - descargado 319 veces.)
« Última modificación: 25 de Mayo de 2006, 10:26:18 por vszener »
En línea

· Nos vemos en los bares!!!!!

· Mi Blog: Aqueronte
vszener
 Moderador Local
 PIC24H


 Mensajes: 2390

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!!!!
En línea

· Nos vemos en los bares!!!!!

· Mi Blog: Aqueronte
vszener
 Moderador Local
 PIC24H


 Mensajes: 2390

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!!!
hola_rot_7seg.rar (16.36 kB - descargado 455 veces.)
« Última modificación: 25 de Mayo de 2006, 10:27:53 por vszener »
En línea

· Nos vemos en los bares!!!!!

· Mi Blog: Aqueronte
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


En línea

Si juegas contra el mejor, pierdes como los demás.


vszener
 Moderador Local
 PIC24H


 Mensajes: 2390

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&dD
ocName=en019469&part=SW007002

PD: Es GRATISSS!!!!!jeje
En línea

· Nos vemos en los bares!!!!!

· Mi Blog: Aqueronte
vszener
 Moderador Local
 PIC24H


 Mensajes: 2390

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!!!!


limites 7seg.rar (15.31 kB - descargado 394 veces.)
« Última modificación: 25 de Mayo de 2006, 10:29:12 por vszener »
En línea

· Nos vemos en los bares!!!!!

· Mi Blog: Aqueronte
vszener
 Moderador Local
 PIC24H


 Mensajes: 2390

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:
// dcba NUM
// 0000 0
// 0001 1
// 0010 2
// 0011 3
// 0100 4
// 0101 5
// 0110 6
// 0111 7
// 1000 8
// 1001 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!
En línea

· Nos vemos en los bares!!!!!

· Mi Blog: Aqueronte
vszener
 Moderador Local
 PIC24H


 Mensajes: 2390

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!!!
dado.rar (18.33 kB - descargado 466 veces.)
« Última modificación: 25 de Mayo de 2006, 10:30:17 por vszener »
En línea

· Nos vemos en los bares!!!!!

· Mi Blog: Aqueronte
vszener
 Moderador Local
 PIC24H


 Mensajes: 2390

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!!!

Das könnte Ihnen auch gefallen