Comentarios curso básico programación PIC en C

Cualquier cosa relacionado con la programación de Microcontroladores PIC en C utilizando el compilador CCS.

Comentarios curso básico programación PIC en C

Notapor biblioman » Vie Ago 28, 2009 7:41 am

Hola a todos. he iniciado este nuevo hilo para que todo el que quiera pueda poner aquí sus comentarios, correcciones y sugerencias sobre el curso de programación de PIC en C. Si los comentarios son muy largos y los ponéis en el artículo, pronto tendré que quitar alguno para que la página del artículo no se alargue excesivamente, por eso he trasladado aquí el comentario hecho por "rahip":
rahip escribió:Estimado biblioman, primeramente te agradezco infinitamente por el aporte la ayuda que nos brindas con este aporte tuyo.

Segundo quisiera hacer notar que hay un error en la tabla de verdad con respecto al numero 6, las salidas activas deberian ser:
RB2,RB3,RB4,RB5,RB6,RB7.
por lo que el codigo deberia de ser:

Código: Seleccionar todo
/*Decodificador de binario a decimal, mostrando los resultados en un display de siete segmentos.
autor: biblioman
http://www.aquihayapuntes.com*/
# include
# use delay(clock=4000000)
# fuses XT,NOWDT
# byte puerto_b=06 //Dirección del puerto B
# byte puerto_a=05 //Dirección del puerto A

void main() {

set_tris_b(0x00); //Configuro la puerta B como salida y RA0, RA1, RA2, RA3 y RA4 como
set_tris_a(0x1F); //entradas aunque por defecto ya están configuradas como entradas

puerto_b=0; //inicializo todos los bits de la puerta B a cero

while(true) //bucle infinito
{
if (input(PIN_A0)==false && input(PIN_A1)==false&& input(PIN_A2)==false)
{
puerto_b=0b0111111; //configura los bits de la puerta B
}
if (input(PIN_A0)==true && input(PIN_A1)==false&& input(PIN_A2)==false)
{
puerto_b=0b00000110;
}
if (input(PIN_A0)==false && input(PIN_A1)==true&& input(PIN_A2)==false)
{
puerto_b=0b01011011;
}
if (input(PIN_A0)==true && input(PIN_A1)==true&& input(PIN_A2)==false)
{
puerto_b=0b01001111;
}
if (input(PIN_A0)==false && input(PIN_A1)==false&& input(PIN_A2)==true)
{
puerto_b=0b01100110;
}
if (input(PIN_A0)==true && input(PIN_A1)==false&& input(PIN_A2)==true)
{
puerto_b=0b01101101;
}
if (input(PIN_A0)==false && input(PIN_A1)==true&& input(PIN_A2)==true)
{
puerto_b=0b01111100;
}
if (input(PIN_A0)==true && input(PIN_A1)==true&& input(PIN_A2)==true)
{
puerto_b=0b00000111;
}
}
}


Hasta la proxima y continua asi.


Gracias por tu comentario y por tú corrección, equivocarse es de humanos y el corregir de sabios, en vez de un "6" se me coló una "b". En cuanto pueda corregiré el artículo.
Decir también que el foro en lo que respecta a usuarios no está integrado con los usuarios de la página (el plugin que hay para ello no me convenció), por lo que hay que volver a registrarse (para el que se haya registrado en la página puede utilizar el mismo usuario y clave).

A primeros de Septiembre continuaré con el curso y con otros temas relacionados con los PIC.

Un saludo y hasta pronto.
Avatar de Usuario
biblioman
 
Mensajes: 221
Registrado: Vie Mar 20, 2009 4:58 pm

Re: Comentarios curso básico programación PIC en C

Notapor biblioman » Jue Nov 05, 2009 3:36 pm

Muessli escribió:hola, muy buna la guia, tengo una pregunta...cuando lo simulo por la terminal virtual en lugar de salir las letras sale cualquier connjunto de simbolos,que podra ser? Gracias


Tú problema tiene toda la pinta de ser que no están bien configurados los parámetros de comunicación serie. Comprueba que la frecuencia del reloj del pic coincide con la que pusiste en el programa, después haz doble clic sobre la terminal y comprueba de que estén bien configurados los parámetros de configuración serie.
Espero tú respuesta, para saber como te ha ido.

Un saludo
Avatar de Usuario
biblioman
 
Mensajes: 221
Registrado: Vie Mar 20, 2009 4:58 pm

Re: Comentarios curso básico programación PIC en C

Notapor muessli » Vie Nov 06, 2009 7:53 pm

Efectivamente biblioman, el virtual terminal necesitaba configuracion, ya que hasta hace un tirmpo estaba aprendiendo programacion de pic con picbasic y tenia el terminal con otra velocidad y opciones avanzadas en invertido. :oops:
Gracias por tu respuesta. :idea:
Una consulta, el el programa donde se escribe el nombre yo intente hacerle una modificacion en la que no se termina con el primer ingreso del nombre ,sino que mediante un do while sea infinito hasta que escriba exit, ahora como deberia poner dentro el while para que me compare una cadena de caracteres y no una sola letra(asi si funciona)?
codigo: :arrow:
char nombre[9];
printf("Para salir escribe EXIT\r");
do{
puts("Introduce tu nombre (max 9 letras)y pulsa Enter:");
gets(nombre);
printf("Te llamas: %s\r",nombre);
printf("La tercera letra de tu nombre es: %c\r",nombre[2]);
} while(nombre[1]!='X');


Muchas Gracias.
Saludos.
muessli
 
Mensajes: 4
Registrado: Vie Nov 06, 2009 7:48 pm

Re: Comentarios curso básico programación PIC en C

Notapor QuijotescoXp » Sab Nov 07, 2009 10:24 am

Hola muessli. Para comparar cadenas puedes hacer uso de de las siguiente funciones de la libreria string.h:

- strcmp
- strmcmp
- stricmp

Si aun sigues con dudas, dilo e intentaré ser más explicito.

Saludos.
Última edición por QuijotescoXp el Sab Nov 07, 2009 1:25 pm, editado 1 vez en total
Existen 10 tipos de personas. Los que saben binario y los que no.
Avatar de Usuario
QuijotescoXp
 
Mensajes: 33
Registrado: Sab Sep 19, 2009 10:46 pm

Re: Comentarios curso básico programación PIC en C

Notapor biblioman » Sab Nov 07, 2009 10:42 am

Hola muessli. Te había preparado un pequeño ejemplo, cuando he visto que QuijotescoXP se me ha adelantado. Como ya lo tengo hecho aquí va:
Código: Seleccionar todo
    #include <16F877.h>
    #include <string.h>
    #use delay(clock=4000000)
    #use RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_D4, RCV=PIN_D5)
   

    void main() {
    char nombre[9];
    char salir[]={"EXIT"};   
   printf("Para salir escribe EXIT\r");

do{
puts("Introduce tu nombre (max 9 letras)y pulsa Enter:");
gets(nombre);
printf("Te llamas: %s\r",nombre);
printf("La tercera letra de tu nombre es: %c\r",nombre[2]);
} while(strcmp(nombre,salir));
    }


La fúnción strcmp(cadena1, cadena2) compara cadena1 y cadena2 y devuelve:
-1 si cadena1 < cadena2
0 si cadena1 = cadena2
1 si cadena1 > cadena2

Un saludo
Avatar de Usuario
biblioman
 
Mensajes: 221
Registrado: Vie Mar 20, 2009 4:58 pm

Re: Comentarios curso básico programación PIC en C

Notapor muessli » Sab Nov 07, 2009 6:46 pm

QuijotescoXp escribió:Hola muessli. Para comparar cadenas puedes hacer uso de de las siguiente funciones de la libreria string.h:

- strcmp
- strmcmp
- stricmp

Si aun sigues con dudas, dilo e intentaré ser más explicito.

Saludos.


Bueno, graciaqs por responder, ahora las pruebo para ver si me sale lo que quiero. Gracias y saludos. :idea:
muessli
 
Mensajes: 4
Registrado: Vie Nov 06, 2009 7:48 pm

Re: Comentarios curso básico programación PIC en C

Notapor muessli » Sab Nov 07, 2009 6:49 pm

biblioman escribió:Hola muessli. Te había preparado un pequeño ejemplo, cuando he visto que QuijotescoXP se me ha adelantado. Como ya lo tengo hecho aquí va:
Código: Seleccionar todo
    #include <16F877.h>
    #include <string.h>
    #use delay(clock=4000000)
    #use RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_D4, RCV=PIN_D5)
   

    void main() {
    char nombre[9];
    char salir[]={"EXIT"};   
   printf("Para salir escribe EXIT\r");

do{
puts("Introduce tu nombre (max 9 letras)y pulsa Enter:");
gets(nombre);
printf("Te llamas: %s\r",nombre);
printf("La tercera letra de tu nombre es: %c\r",nombre[2]);
} while(strcmp(nombre,salir));
    }


La fúnción strcmp(cadena1, cadena2) compara cadena1 y cadena2 y devuelve:
-1 si cadena1 < cadena2
0 si cadena1 = cadena2
1 si cadena1 > cadena2

Un saludo


Muchas Gracias Biblioman.
muessli
 
Mensajes: 4
Registrado: Vie Nov 06, 2009 7:48 pm

Re: Comentarios curso básico programación PIC en C

Notapor muessli » Sab Nov 07, 2009 7:15 pm

Hola, bueno probe lo que me dijeron Biblioman y Quijotescoxp y salio bien, ahora mi duda es : en lugar de hacerlo con un do while, lo hago con un while solo para que no me lea la tercera letra de EXIT, sin embargo si me la lee..no se porque sera. Si alguien sabe le agradeceria, ppongo el codigo :arrow:

void main() {
char nombre[9];
char salir[]={"EXIT"};
printf("Para salir escribe EXIT\r");

while(strcmp(nombre,salir)){
puts("\rIntroduce tu nombre (max 9 letras)y pulsa Enter:");
gets(nombre);
printf("Te llamas: %s\r",nombre);
printf("La tercera letra de tu nombre es: %c\r",nombre[2]);
}
printf("\r Ud a salido del programa");
}



SALUDOS
muessli
 
Mensajes: 4
Registrado: Vie Nov 06, 2009 7:48 pm

Re: Comentarios curso básico programación PIC en C

Notapor QuijotescoXp » Sab Nov 07, 2009 7:58 pm

Hola muesli. La verdad es que no entiendo exactamente que es lo que quieres hacer, pero si me permites me gustaría darte un consejo.

Te recomiendo que te descargues un compilador de C + IDE para aplicaciones de PC que se llama codeblock que para tu caso en concreto te podría servir para tracear el ejercicio que estás montando, viendo que valores toman los registros en cada momento.
De esta forma sabrás el por qué de las cosas.

Date cuenta que en este caso está intentando acceder al la sentencia while sin saber que tenemos en la variable nombre, ya que en ningún momento la has inicializado y el resultado puede ser imprevisible.

En fin, espero haber sido de utilidad.
Existen 10 tipos de personas. Los que saben binario y los que no.
Avatar de Usuario
QuijotescoXp
 
Mensajes: 33
Registrado: Sab Sep 19, 2009 10:46 pm

Re: Comentarios curso básico programación PIC en C

Notapor eliasagustin » Mié Dic 02, 2009 10:35 pm

Hola, antes q nada gracias por el tuto en C la verdad es q siempre quise aprender pero no queria programar como si fuera asembly :P ahora con esto me surgio una idea pero, te queria hacer una pregunta supongamos que tengo un array de leds de 256 en forma de hilera, que se prenden secuencialmente con el timer. De manera que al girarlo a una velocidad esos led en hilera formen un display en movimiento. Cuando los leds se prendan en una secuencia programada haciendo girar con un motor, formarian letras en el aire. Anteriormente vi q esto ya lo hiceron con pics pero no eran mayores a 32 leds. La pregunta esencial es que pics necesitaria para trabajar con 256 leds y la otra gran pregunta es la alimentacion del los leds te dejo un ejemplo de mi idea abajo.

|0 0 0 0 0 0 0 0 0 0| <led>1..
|0 0 1 1 0 0 1 1 0 0| <led>2..
|0 0 1 1 0 0 1 1 0 0| <led>3..
|0 0 1 1 1 1 1 1 0 0| <led> ..
|0 0 1 1 1 1 1 1 0 0| <led> ..
|0 0 1 1 0 0 1 1 0 0| <led> ..
|0 0 1 1 0 0 1 1 0 0| <led> ..
|0 0 0 0 0 0 0 0 0 0| <led> 256

t1-t2...............tn (donde t es igual a tiempo) que girandolo rapidamente en (tn) posiciones, la hilera de leds forma una imagen en este caso la letra H.

Nada mas que lo quiero hacer con un array de 256 leds para formar una img en el aire.
espero tu rta y este es mi mail eliasagustin@gmail.com
eliasagustin
 
Mensajes: 2
Registrado: Mié Dic 02, 2009 10:12 pm

Siguiente

Volver a Programación PIC en C con CCS

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron