TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: juanes79 en 20 de Diciembre de 2010, 02:29:00
-
Hola amigos, les escribo con el fin de solicitarles ayuda para realizar mi primer programa con el microcontrolador 16F873A. La idea que tengo es hacer un programita sencillo donde pueda encender y apagar 10 led de forma secuencial.
La verdad si me orientan con el encabezado que debo empezar para desarrollar este programa y poderlo simular en proteus y si me pueden explicar como debo empezar a desarrollar el codigo fuente. Que compilador me recomiendan para trabajar con este pic y poderlo simular en proteus.
mil gracias por sus concejos, recuerden que apenas estoy empezando el mundo de la programación para que tengan paciencia.
Saludos y mil gracias.
-
el ccs es un buen programa para empezar a trastear los pics.... ademas en proteus puedes simular el programa de manera facil ...
lo primero que te querria preguntar... es que si conoces algo de electronica digital, numeros hexadecimales, binario... etc.... es algo basico para poder empezar con los pics ya que si no sabes distinguir entre un byte y un bit te resultara un poco lioso...
para todo lo demas... Indice de Hilos Destacados en el sub-Foro de C para Microcontroladores. (http://www.todopic.com.ar/foros/index.php?topic=14634.0)
aqui encontraras ejemplos,trucos,ideas,dudas e incluso suluciones
-
el ccs es un buen programa para empezar a trastear los pics.... ademas en proteus puedes simular el programa de manera facil ...
lo primero que te querria preguntar... es que si conoces algo de electronica digital, numeros hexadecimales, binario... etc.... es algo basico para poder empezar con los pics ya que si no sabes distinguir entre un byte y un bit te resultara un poco lioso...
para todo lo demas... Indice de Hilos Destacados en el sub-Foro de C para Microcontroladores. (http://www.todopic.com.ar/foros/index.php?topic=14634.0)
aqui encontraras ejemplos,trucos,ideas,dudas e incluso suluciones
Gracias por la respuesta. Te cuento que tengo conocimientos en la parte digital y numeros hexadecimales, ya que soy tecnico profesional en electronica. busco es un programa similar al que quiero hacer donde expliquen detalladamente los pasos y explicacion de cada uno de los comandos que debo utilizar en el codigo fuente.
saludos.
-
en el post de ejemplillos con pic 16f648 desde el numero 5 al 8 es mas o menos lo que estas buscando
-
en el post de ejemplillos con pic 16f648 desde el numero 5 al 8 es mas o menos lo que estas buscando
Gracias por la informacion que me distes respecto a los ejemplos del pic 16F648, los estuve mirando y analizando y quede con varias dudas que espero me ayuden a resolver.
Pienso que mi nivel para programar es muy bajo ya que apenas estoy comenzando, por eso decidi empezar a entender mejor desde lo mas basico. Creo que el prender y apagar un led es lo mejor para empezar.
Este es el programa de los ejemplos publicados aqui de prender un led, al frente de las instrucciones voy a poner lo que no entiendo, espero me ayuden.
Notas: Parpadeo de un led cada 0.5s por el pin RB0 del puerto B
//////////////////////////////////////////////////////////////////////////////////
#include <16f648a.h> //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT //ordenes para el programador :no entiendo bien para que se programan los fuses
#use delay (clock=4000000) //Fosc=4Mhz ; frecuencia con la que el reloj interno debe trabajar
#use fast_io(b) ;esta instruccion no la entiendo, pienso que es (io)entradas, salidas, fast de rapido, entonces seria entradas y salidas rapidas en el puerto b
///PROGRAMA
void main(void)
{
set_tris_b(0xFE); //portb como salida(RB0,las demas desactivadas), porque se coloca este valor exadecimal(0xFE)
disable_interrupts(GLOBAL); //todas las interrupciones desactivadas; para que se desabilitan las interrupciones
do{
output_low(PIN_B0); //led off;colocar el pin a un estado bajo (o)
delay_ms(500);
output_high(PIN_B0); //led on ; colocar el pin a un estado alto (1)
delay_ms(500);
}while(TRUE); //bucle infinito ; no entiendo como hece el bucle, si el while es para hacer el bucle mientras las instrucciones sean verdaderas
}
Publicado por el moderador global vszener de todopic
-
pues los fuses son las opciones de configuracion del pic...
te lo explicare a groso modo...
XT oscilador de <4Mhz, osea que puede poner cristales osciladores de menos de 4mhz como es el caso del ejemplo
NOWDT le dice al pic que dehabilite el watchdog timer (perro guardian, este se encarga de resetear el pic si se queda ""bloqueado"" en una instruccion sin fin
NOPROTECT no protege el programa del pic, osea de esta forma el pic podria ser leido con un programador
PUT es el Power Up Timer, el pic cuando arranca espera un tiempo asta que se estabiliza la alimentacion
#use fast_io() configuras tu los pines io con la instruccion set_tris_b(0xFE), osea el puerto b serian todo entradas menos el pin b0. te lo pongo en binario asi lo entenderas... set_tris_b(0b11111110) con los 1 pones el pin en modo de entrada y con los 0 en modo salida 0xFE = 255 = 0b11111110
las intrucciones de deshabilitan para que no aya conflictos en el programa ya que no las usas en el ejemplo
el do{ instrucciones }while(true) es un bucle, cuando acaba comprueba que la condicion true se cumple, si se cumple sale del bucle, y si no se cumple vuelve a repetir...
ejemplo:
int variable
do{
variable=variable+1; //suma un 1 a el valor variable
}while(variable==100); //asta que variable no sea 100 el bucle se repetira
ya sabes si tienes dudas no dejes de preguntar
-
Hola amigo ppyote, mil gracias por la explicacion y sobre todo el tiempo que dedicas para ayudarme. te quiero preguntar una duda que tengo en este ejemplo.
#use fast_io() configuras tu los pines io con la instruccion set_tris_b(0xFE), osea el puerto b serian todo entradas menos el pin b0. te lo pongo en binario asi lo entenderas... set_tris_b(0b11111110) con los 1 pones el pin en modo de entrada y con los 0 en modo salida 0xFE = 255 = 0b11111110
aqui en este ejemplo no entiendo porque porque en pin bo se pone como salida y no como entrada.
Ya me quedo claro porque b(0xFE).
estoy buscando en internet algun libro o documento donde exliquen detalladamente toda la informacion sobre pic. Los que he leido no explican con detalles.
Saludos y mil gracias.
-
Hola amigo ppyote, mil gracias por la explicacion y sobre todo el tiempo que dedicas para ayudarme. te quiero preguntar una duda que tengo en este ejemplo.
#use fast_io() configuras tu los pines io con la instruccion set_tris_b(0xFE), osea el puerto b serian todo entradas menos el pin b0. te lo pongo en binario asi lo entenderas... set_tris_b(0b11111110) con los 1 pones el pin en modo de entrada y con los 0 en modo salida 0xFE = 255 = 0b11111110
aqui en este ejemplo no entiendo porque porque en pin bo se pone como salida y no como entrada.
Ya me quedo claro porque b(0xFE).
estoy buscando en internet algun libro o documento donde exliquen detalladamente toda la informacion sobre pic. Los que he leido no explican con detalles.
Saludos y mil gracias.
De nada... es todo un placer el poder ayudarte y mas entre toda la gente que hay en el foro que son unas verdaderas maquinas
en el post de vszener, Ejemplitos en C para 16F648A... abajo en herramientas tienes un par de manuales de ccs....
en cuanto a lo de por que el pin b0 es salida... facil explicacion..... el puerto B tiene 8 pines, B7,B6,B5.... B2,B1 Y B0, en el datashell del pic hay una pagina que es la de DATA MEMORY MAP, osea mapa de memoria de datos que es donde esta cada registro, cada opcion, cada bit de interrupciones, etc... hay un registro que es el trisb, osea la configuracion de los pines IO del puerto B, 8 pines = 8bits = 1 byte con lo que si tu le das a el valor de un byte con set_tris_b(0xFE) lo que estas haciendo es asignarle el valor al registro trisb, osea... 11111110 en binario o 127 en decimal o 0xFE en hexadecimal... por eso la primera pregunta que te hice sobre si tenias idea de hexadecimal, binario byte y bits etc...
mira...
binario decimal hexadecimal
pin b0=1 =1 =0x01
pin b1=1 =2 =0x02
pin b2=1 =4 =0x04
pin b3=1 =8 =0x08
pin b4=1 =16 =0x10
pin b5=1 =32 =0x20
pin b6=1 =64 =0x30
pin b7=0 =0 =0x00
+
__________________________________
11111110 127 0xFE
si pones un 1 en el bit del pin b0 le estaras diciendo al pic que trabaje el pin b0 como entrada pero como esta en 0 lo que hace es tratarlo como una salida de hay el valos que le asignas a trisb...
-
Mill gracias por la respuesta nuevamente amigo ppyote. Leyendo la explicación acerca de la pregunta que te realice acerca de porque colocaste el pin bo como salida, te consulto algo: es posible que yo pueda colocar todos los 8 pin del micro como entradas y como salidas o siempre debe quedar configurado el pin bo como salida por la explicación que me diste anteriormente del datashell.
tambien te pregunto si conoces algun libro especializado en microcontroladores para lenguaje C, donde expliquen de una manera detallada cada uno de los pasos que hacen.Como de la editorial Mcgraw hill o alguna editorial especializada en este tipo de libros.
Saludos y mil gracias por tu ayuda.
-
Mill gracias por la respuesta nuevamente amigo ppyote. Leyendo la explicación acerca de la pregunta que te realice acerca de porque colocaste el pin bo como salida, te consulto algo: es posible que yo pueda colocar todos los 8 pin del micro como entradas y como salidas o siempre debe quedar configurado el pin bo como salida por la explicación que me diste anteriormente del datashel
en el datashell te lo pone todo, los pines que pueden ser bidirecionables, y los que no, pero para hacertelo mas facil mira la imagen con la distribucion de los pines
en cada pin hay una flecha, mira la direccion de las flechas, estas te indican el sentido de corriente, si la flecha esta en las dos direcciones puedes poner el pin como entrada o como salida, todo el puerto b puedes ponerlo como entradas o como salidas y el puerto a, menos el pin A5 que solo es entrada y los pines A7 y A6 que se comportaran como entradas y salidas siempre y cuando se utilize el oscilador que lleva interno este pic
(http://www.olimex.cl/images/tutorial-hola_mundo/pic16f628pin.JPG)
tambien te pregunto si conoces algun libro especializado en microcontroladores para lenguaje C, donde expliquen de una manera detallada cada uno de los pasos que hacen.Como de la editorial Mcgraw hill o alguna editorial especializada en este tipo de libros.
para saber como va internamente el pic, lo mejor es que mires un par de videotutoriales de assembler que los hay online y te explican mas o menos como trabaja el pic a nivel maquina...
-
Hola buenos dias, mil disculpa mi interrupcion es para decirle al colega juanes79 que en ese caso particuular de prender y apagar el led B0 se coloca como salida porque logicamente el pic tiene que enviar 1 logico para que el led prenda y 0 logico para que apague es decir es el puerto B0 del pic quien dice apagate o prende y para el poder decir eso tiene que estar como salida y tuviera como entrada solo recibiera informacion en este caso el da informacion.
Saludos y espero haberme explicado.
Atten.
Alexander Santana.
Venezuela-Barcelona.
-
Hola buenos dias, mil disculpa mi interrupcion es para decirle al colega juanes79 que en ese caso particuular de prender y apagar el led B0 se coloca como salida porque logicamente el pic tiene que enviar 1 logico para que el led prenda y 0 logico para que apague es decir es el puerto B0 del pic quien dice apagate o prende y para el poder decir eso tiene que estar como salida y tuviera como entrada solo recibiera informacion en este caso el da informacion.
Saludos y espero haberme explicado.
Atten.
Alexander Santana.
Venezuela-Barcelona.
Se me olvido puntualizarlo jejeje gracias por aclarar su pregunta
-
Mil graciaas a ppyote nuevamente por atender mis dudas y aclararme conceptos. Tambien agradezco a el amigo Astrocar por hacer su aporte tan valioso.
Si saben de una pagina bien completa para ver videotutoriales, por favor me avisan.
Saludos y mil gracias.
-
Si saben de una pagina bien completa para ver videotutoriales, por favor me avisan.
yo me mire los tutoriales de esta web y me fueron de maravilla... AQUI (http://www.tutorialesvirtuales.com/index.php)
un saludo y de nuevo de nada, ayudo en lo que puedo... un saludo
-
Amigo ppyote mil gracias por permitir conocer esa ppagina tan maravillosa de videotutoriales. eso era lo que estaba buscando, para aprender de una manera mas didactica. voy a realizar todos los videotutoriales para poder aprender a programar, aunque veo que este curso virtual de microcontroladores esta basado en lenguaje asembler, vale la pena realizarlo.
Te contare mis avances y dudas en el proceso de aprendizaje.
Con personas como uno puede llegar muy lejos.
Saludos y mil gracias.
-
Mil graciaas a ppyote nuevamente por atender mis dudas y aclararme conceptos. Tambien agradezco a el amigo Astrocar por hacer su aporte tan valioso.
Si saben de una pagina bien completa para ver videotutoriales, por favor me avisan.
Saludos y mil gracias.
Que gusto hermanos, pero les digo que para eso estamos aca para ayudar con mucho gusto y mas aun cuando personas como juanes79 tiene el animo de aprender, ya hasta animos me dio de retomar ccs ya que en un principio lo probe pero luego lo deje voy hacer unos proyectos usando ccs y les cometo.
Si saben de una pagina bien completa para ver videotutoriales, por favor me avisan.
yo me mire los tutoriales de esta web y me fueron de maravilla... AQUI (http://www.tutorialesvirtuales.com/index.php)
un saludo y de nuevo de nada, ayudo en lo que puedo... un saludo
Gracias estimado colega por este link vere los video para ver que tal me va en el avance en c y los pic.
Saludos y gracias a ustedes por hacer posible este medio.
Atten.
Alexander Santana.
Venezuela-Barcelona.
-
Gracias estimado colega por este link vere los video para ver que tal me va en el avance en c y los pic.
compañero, los videos son el assembler, son muy buenos ya que si uno parte de un desconocimiento de los pic con estos tutoriales aprendes como funcionan lis pics a nivel maquina, claro esta que no se centran al 100% en saber como va el pic pero por lo menos de algo te enteras, como ya dije a mi me sirvieron de mucho, sabia de electronica pero no tenia ni idea de microcontroladores