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

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

Desconectado hayn

  • PIC10
  • *
  • Mensajes: 39
Re: Ejemplitos en C para 16F648A
« Respuesta #420 en: 09 de Junio de 2009, 22:08:19 »
gracias a aquellas personas que con su ayuda desinteresada llevan luz donde no la hay haciendo de este mundo un sitio mas plural donde vivir gracias....... :-/ :-/ :-/ :-/ :-/ :-/

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Ejemplitos en C para 16F648A
« Respuesta #421 en: 09 de Junio de 2009, 22:23:22 »
gracias a aquellas personas que con su ayuda desinteresada llevan luz donde no la hay haciendo de este mundo un sitio mas plural donde vivir gracias....... :-/ :-/ :-/ :-/ :-/ :-/

:z) eh? y que paso? jajajajaja
no pasa nada hayn, para eso estamos para ayudarnos :wink:
.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Ejemplitos en C para 16F648A
« Respuesta #422 en: 09 de Junio de 2009, 23:25:47 »
gracias a este aporte, pongo mi granito de arena para los q apenas empiezan en el lenguaje C como yo. con ayuda de este hilo hice un programa que emula las luces del carro fantastico pero le podemos poner direccion y ademas elegir si queremos rotar un "1" o un "0"...no se si es la forma mas optimizada pero funciona

A0   A1     Salida       rotacion
0      0     00000001  <<<<<<
0      1     00000001  >>>>>>
1      0     11111110  <<<<<<
1      1     11111110  >>>>>>

Código: CSS
  1. for(;;){ //CICLO INFINITO - SIEMPRE USAR
  2.    
  3.    set_tris_b(0x00);
  4.    set_tris_a(0xff);
  5.    if( input(PIN_A0)==0 && input(PIN_A1)==0)
  6.       {
  7.       i=0b00000001;
  8.       for(a=1;a<=8;a++)
  9.       {
  10.    
  11.       output_b(i);
  12.       rotate_left( &i, 1);
  13.       delay_ms(100);
  14.       }
  15.       }
  16.   if ( input(PIN_A0)==0 && input(PIN_A1)==1)
  17.       {
  18.       i=0b00000001;
  19.       for(a=1;a<=8;a++)
  20.       {
  21.    
  22.       output_b(i);
  23.       rotate_right( &i, 1);
  24.       delay_ms(100);
  25.       }
  26.       }
  27.   if ( input(PIN_A0)==1 && input(PIN_A1)==0)
  28.       {
  29.       i=0b11111110;
  30.       for(a=1;a<=8;a++)
  31.       {
  32.    
  33.       output_b(i);
  34.       rotate_left( &i, 1);
  35.       delay_ms(100);
  36.       }
  37.       }
  38.   if ( input(PIN_A0)==1 && input(PIN_A1)==1)
  39.       {
  40.       i=0b11111110;
  41.       for(a=1;a<=8;a++)
  42.       {
  43.    
  44.       output_b(i);
  45.       rotate_right( &i, 1);
  46.       delay_ms(100);
  47.       }
  48.       }
  49.      
  50.       }//fin del for infinito
  51.       //FIN DEL CODIGO DE USUARIO - NO ESCRIBIR CODIGO A PARTIR DE AQUI
  52. }//fin void main

ahora, quisiera saber como puedo hacer para que inmediatamente ocurra el cambio de los bit A0, A1 cambie el programa tambien.,ademas de otras alternativas para hacer el programa, ademas que pasa con el else if del ccs cuando lo pongo aparece "A numeric expression must appear here."
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Ejemplitos en C para 16F648A
« Respuesta #423 en: 09 de Junio de 2009, 23:54:02 »
Hola jhozate,

Creo que para que cambie inmediatamente de función cuando cambies los estado de los pines A en tu caso, se podría hacer dos cosas:

  • Utilizar interrupciones, para la temporización, cambiaría bastante la estructura; ya que de la manera que la hiciste ejecuta un proceso hasta que lo acabe, y al final recíen consulta por nuevos estados. Por interrupciones consultarías constantemente los estados para ejecutar una u otra secuencia
  • Dentro de los for usar la instrucción BREAK consultando (con un if) por cambios de estado en los pines del puerto A, para que pase a preguntar por el nuevo estado en los pines del puerto A

Esa pregunta del else if, no la entendí, pero esta es lo que yo hago:

if(condición1){
...//proceso1
}
else if(condición2){
...//proceso2
}
else if(condición3){
...//proceso3
}
....  // solo se ejecutará un proceso, o ninguno

esto funciona como un switch:
switch(variable){
   case x: {... proceso1;
               break;
              }
   case y: {... proceso2;
               break;
              }
    ....
}   //solo se ejecutará un caso o ninguno cada vez que se ejecute el switch

algunas diferencias, ventajas y desventajas entre ellos, lo usarás de acuerdo a tus necesidades

espero sirva, un saludo.
« Última modificación: 09 de Junio de 2009, 23:56:32 por Cryn »
.

Desconectado cascabelito666

  • PIC10
  • *
  • Mensajes: 1
URGENTE NECESITO LA LIBRERIA KBD3X4.C
« Respuesta #424 en: 11 de Junio de 2009, 03:23:08 »
OYE CUATE NECESITO URGENTE PARA MI TESIS LA LIBRERINA KBD3X4 .C NO LA ENCUENTRO EN NINGUN LADO TENGO LA KBD.C PERO NO SE SI ESTA ME TRAIGA PROBLEMAS AL METER EN EL MISMO PUERTO EL TECLADO Y EL LCD POR FAVOR SI LA TIENES MANDAMELA TE LO AGRADECERIA PARA TODA LA VIDA MI CORREO ES LAPPRAS@HOTMAIL.COM

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Ejemplitos en C para 16F648A
« Respuesta #425 en: 11 de Junio de 2009, 10:51:53 »
Buenas:

Antes que nada cascabelito666 , usa el buscador si requieres algo, en caso de no dar con ello, busca donde aparezca dicha librería, y si no obtienes frutos de ninguna de las opciones, pídelo de forma respetuosa.

¿Por qué digo respetuosa? Simplemente porque te estás saltando a la torera más de una norma del foro, y visto que es tu primer mensaje por estos lugares, te aconsejo que te la repases.

Y hay algo en este hilo, que abrí hace mucho y me ha reportado tanto, que no logro entender, todo, repito, absolutamente todo lo que aparece en este hilo (librerias, ejemplos, etc) está en el primer mensaje, concretamente hay un espacio donde pone: Disco Virtual vszener, desde ahí os mandará para la descarga de cualquier elemento que haya aparecido en este hilo.

Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: URGENTE NECESITO LA LIBRERIA KBD3X4.C
« Respuesta #426 en: 11 de Junio de 2009, 22:19:47 »
OYE CUATE NECESITO URGENTE PARA MI TESIS LA LIBRERINA KBD3X4 .C NO LA ENCUENTRO EN NINGUN LADO TENGO LA KBD.C PERO NO SE SI ESTA ME TRAIGA PROBLEMAS AL METER EN EL MISMO PUERTO EL TECLADO Y EL LCD POR FAVOR SI LA TIENES MANDAMELA TE LO AGRADECERIA PARA TODA LA VIDA MI CORREO ES LAPPRAS@HOTMAIL.COM

esa libreria que necesitas en las kdb.c de CCS es generica, y si lo quieres usar por el puerto B solo tienes que de clararla

aqui te al dejo ya modificada

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Ejemplitos en C para 16F648A
« Respuesta #427 en: 19 de Junio de 2009, 23:39:07 »
en ccs no hay q estar pendiente de poner las banderas de interrupcion nuevamente a cero?....al igual que en assembler retorna al lugar donde ocurrió la interrupcion?
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Ejemplitos en C para 16F648A
« Respuesta #428 en: 20 de Junio de 2009, 00:46:24 »
en ccs no hay q estar pendiente de poner las banderas de interrupcion nuevamente a cero?....al igual que en assembler retorna al lugar donde ocurrió la interrupcion?
Exactamente, el compilador se encarga de eso, de guardar y restablecer los registros y borrar las banderas. Pero para la interrupción por cambio de estado de RB4-RB7, donde como requisito hay que hacer una lectura/escritura del Puerto B no lo realiza, así que a tenerlo en cuenta.
No contesto mensajes privados, las consultas en el foro

Desconectado aragonevil

  • PIC10
  • *
  • Mensajes: 1
Re: RE: Ejemplitos en C para 16F648A
« Respuesta #429 en: 03 de Julio de 2009, 16:56:49 »
hola amigo vszener necesito que me ayudes en unas cosillas en c , con el programa para desplegar un mensaje ya que deseo desplegar un mensaje de 30 caracteres lo estoy haciendo con la libreria del ccs lcd.c pero no lo consigo he leido que necesito mover el cursor del lcd pero no se como hacerlo si tienes tiempo te lo agradeceria 1000000 jajaja gracias sigue con tus grandes aportes he aprendido bastante :-/ :-/

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: RE: Ejemplitos en C para 16F648A
« Respuesta #430 en: 03 de Julio de 2009, 19:13:29 »
hola amigo vszener necesito que me ayudes en unas cosillas en c , con el programa para desplegar un mensaje ya que deseo desplegar un mensaje de 30 caracteres lo estoy haciendo con la libreria del ccs lcd.c pero no lo consigo he leido que necesito mover el cursor del lcd pero no se como hacerlo si tienes tiempo te lo agradeceria 1000000 jajaja gracias sigue con tus grandes aportes he aprendido bastante :-/ :-/
Para pasar a la siguiente linea solo coloca lcd_gotoxy(1,2); o un lcd_putc("\n");

Si quieres mostrar el mensaje en una sola linea y desplazar el mensaje puedes enviar este comando varias veces después de haber escrito el mensaje:
lcd_send_byte(0,0x1C); Esto mueve el display una posición a la derecha, o lcd_send_byte(0,0x18); Esto mueve el display una posición a la izquierda
No contesto mensajes privados, las consultas en el foro

Desconectado mexpic

  • PIC10
  • *
  • Mensajes: 2
Re: Ejemplitos en C para 16F648A
« Respuesta #431 en: 14 de Julio de 2009, 15:52:35 »
hola a todo el mundo en especial a vszener q nos hace favor de compartir su conocimiento con todos

bueno antes q nada pedir disculpas si me desvio un poco del tema o algo asi jaja

entonces bueno tengo un problema lo que pasa es que quiero hacer un glucometro con un pic estoy actualmente con el 16f877a sobradisimo no pero el de batalla
ya tengo las siguientes funciones para esto bueno lo que me pidieron segun esto seria mejor con un dspic en esa es mi primera cuestion, bueno entonces iguiendo con lo que estaba me piden esto bueno la mayoria ya lo tengo aqui estan:
1.- la lectura de los datos osea que convertir la señal de entrada que segun yo es analogica y convertirla a datos digitales (el pic lo tiene q vendicion asi no compro otro pero no se si sea el adecuado).
2.-la lectura pasa a visualizarse en la LCD que conjunte para mostrar los datos de entrada pero ya convertidos a datos digitales.
3.-la comunicacion con rs232 solo los datos que envia el pic (estos datos los visualizo en visual basic 6).

ahora bien queria saber como ustedes son mu buenos para esto hacerles unas preguntas.
1.- que me convendria mas usar este pic o usar otro no se si pueda ser los dspic.
2.- desviando unpoco lo del pic que sensor me podrian recomendar para poder tener la señal de glucosa en la sangre (estaba pensando en laser o algo asi).
3.- si tengo queusar algun  A/D que no sea del pic.

bueno un saludo y espero que me puedan ayudar o dandome alguna idea
les repito una disculpa si me desvio del tema
gracias. :?


Desconectado palmas5678

  • PIC10
  • *
  • Mensajes: 6
Re: RE: Ejemplitos en C para 16F648A
« Respuesta #432 en: 23 de Septiembre de 2009, 22:54:13 »
Hola vszener, tal vez puedas ayudarme, necesito reemplazar el codec HT12E y el decode HT12D con el pic 16f84 o 16F628 (por que no los encuentro, ya estoy esperando mas de tres meses y no llegan al Perú). La idea es enviar un dato en forma serial por cualquier pin del puerto B, cuando se activa un pulsador y recibirlo por un puerto B de otro pic similar, luego al soltar el pulsador, el led se apagará. Lo que quiero es saber el código de la transmisión serial y poder encender un led y apagarlo cuando activo un pulsador en el otro pic. Gracias.

 Palmas

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: RE: Ejemplitos en C para 16F648A
« Respuesta #433 en: 23 de Septiembre de 2009, 23:40:04 »
Hola vszener, tal vez puedas ayudarme, necesito reemplazar el codec HT12E y el decode HT12D con el pic 16f84 o 16F628 (por que no los encuentro, ya estoy esperando mas de tres meses y no llegan al Perú). La idea es enviar un dato en forma serial por cualquier pin del puerto B, cuando se activa un pulsador y recibirlo por un puerto B de otro pic similar, luego al soltar el pulsador, el led se apagará. Lo que quiero es saber el código de la transmisión serial y poder encender un led y apagarlo cuando activo un pulsador en el otro pic. Gracias.

 Palmas
Revisa el siguiente ejemplo de vszener, a partir de ese ya podes ir diseñando el tuyo. Y revisa que vi un par de ejemplos más de comunicación RS23  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado bakhosm

  • PIC10
  • *
  • Mensajes: 5
Re: Ejemplitos en C para 16F648A
« Respuesta #434 en: 17 de Octubre de 2009, 21:35:48 »
hola, estoy tratando de hacer un programa que en C, que envie un mensaje de la siguiente manera:

PIC1 > PIC2 > PC

para explicarlo de mejor manera:

el PIC1 envia "sistema activo", y el PIC2 reenvia el mensaje a la PC.

supongo que es por medio del getc() pero no veo por donde empezar  :?

la comunicacion la se hacer el problema es tomar el MENSAJE y reenviarlo

la comunicacion entre el PIC1 y el PIC2 es HALF, solo el PIC1 le transmite informacion al PIC2, pero entre el PIC2 y la PC es FULL.

espero haberme explicado bien y gracias de antemano

alguna idea de como tomar el mensaja del PIC1 y reenviarla en este caso a la PC?