Autor Tema: aYUDENME POR FAVOR CON EL PIC 18F4620  (Leído 6277 veces)

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

Desconectado linda16

  • PIC10
  • *
  • Mensajes: 8
aYUDENME POR FAVOR CON EL PIC 18F4620
« en: 20 de Marzo de 2006, 14:15:00 »
Hola a todos POR FAVOR ALGUIEN QUE ME AYUDE ESTOY DESESPERADA!! Llorando .estoy programando un pics 18f4620 en C con PIC C y necesito leer una señal de entrada que si dura en alto  un tiempo determinado prender un led estos tiempos deben ser seleccionables por unos inerruptores (0.5seg, 1seg y 2 seg) lo debo hacer con un timer interno preferiblemente.tengo algunas ideas con los CCp y con contadores pero de verdad no se bien. POR FAVOR!!! si alguien sabe usar bien los timer y cree que me puede ayudar enviandome un programa se lo agrarecere.....desquiciado

cABE DESTACAR QUE SOLO LLEVO UNA SEMANA PROGRAMANDO ESTE PIC S.O.S

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: aYUDENME POR FAVOR CON EL PIC 18F4620
« Respuesta #1 en: 20 de Marzo de 2006, 14:43:00 »
Aquí tienes algo con lo que ir empezando

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: aYUDENME POR FAVOR CON EL PIC 18F4620
« Respuesta #2 en: 21 de Marzo de 2006, 08:26:00 »
Por mucho que desesperes no vas a encontrar el programa listo y envuelto en papel de regalo para qué lo único que tengas que hacer es volcarlo sobre el micro.
En el enlace que te dí hay ejemplos de cómo usar los temporizadores del micro,cosa que necesitarás hacer para "cronometrar" el tiempo que permanece tu entrada en alto y también para hacer parpadear los leds con la frecuencia que necesites.
Si bien ninguno de esos ejemplos son adaptados para tu modelo de pic,los cambios que tendrías que hacer son ínfimos,y siempre puedes contar con la disponibilidad de la gente de este foro que te ayudará si no sabes muy bien como hacerlo.
No te equivoques que tan solo pretendí ayudarte....si lo que buscas es que te den el micro ya funcionando creo que lo mejor será que pagues a alguien para que haga el trabajo por tí

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: aYUDENME POR FAVOR CON EL PIC 18F4620
« Respuesta #3 en: 21 de Marzo de 2006, 10:53:00 »
Seguramente quiere que le resolvamos el programa, se lo compilemos y de paso le enviemos el PIC listo hasta la puerta de su casa Muchas risas

Para que se te ayude Linda16, debes demostrar que tienes intención de hacer funcionar tu tarea. Sube el programa que lleves avanzado, aunque esté incompleto. Si no llevas nada no esperes milagros.

Cualquier ayuda que se te proporcione es buena, no deberías rechazarla ni responder de tal manera.

Desconectado linda16

  • PIC10
  • *
  • Mensajes: 8
RE: aYUDENME POR FAVOR CON EL PIC 18F4620
« Respuesta #4 en: 21 de Marzo de 2006, 12:39:00 »
Llorando   MIL DISCULPAS A TODOS!!!  de verdad disculpame migsantiago   me desespere y estos dias he estado mal se que no debi pagarla contigo ni con el foro bueno fue una mala actitud y no se ni porque la tome, bueno no pretendia que me lo hicieran de verdad disculpen si no quisiera hacerlo ya hubiera pagado de verdad quiero aprender pero es que llevo dias todo lo que hago no me da , aunque se que no es excusa de mi mala respuesta bueno espero tus disculpas y la ayuda que me puedan dar sera gratamente recibida.... GRACIAS por responderme la primera vez Sonrisa

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: aYUDENME POR FAVOR CON EL PIC 18F4620
« Respuesta #5 en: 21 de Marzo de 2006, 12:59:00 »
Qué bueno que la situación se aclaró.

Con confianza puedes subir el programa que te está presentando problemas y los expertos de los PIC18 te apodrán ayudar.

Mantengamos el foro tranquilo, aquí puedes hacer amigos. Sonrisa Gigante


Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: aYUDENME POR FAVOR CON EL PIC 18F4620
« Respuesta #6 en: 21 de Marzo de 2006, 13:02:00 »
Escrito originalmente por linda16
Llorando   MIL DISCULPAS A TODOS!!!  de verdad disculpame migsantiago   me desespere y estos dias he estado mal se que no debi pagarla contigo ni con el foro bueno fue una mala actitud y no se ni porque la tome, bueno no pretendia que me lo hicieran de verdad disculpen si no quisiera hacerlo ya hubiera pagado de verdad quiero aprender pero es que llevo dias todo lo que hago no me da , aunque se que no es excusa de mi mala respuesta bueno espero tus disculpas y la ayuda que me puedan dar sera gratamente recibida.... GRACIAS por responderme la primera vez Sonrisa


linda16, en principio dejame decirte le debieras pedir disculpas principalmente a Modulay que fue quien amablemente intentó ayudarte en primera instancia.

Yo opino como Santiago, y de hecho he manifestado mi opinión en contra de la gente que llega al foro pidiendo que los "salven" sin poner ni el minimo esfuerzo, sin siquiera poner una linea de código para que le veamos donde se está equivocando.

No se si bienes del tema de las pcs o de donde, pero dejame decirte que el mundo de los microcontroladores o más ampliamente el mundo de los sistemas embebidos no es algo "simple" ni algo "obvio".  Se juega con miles de variables las cuales transcurren en microsegundos, nano segundos o milisegundos.  Todo eso sumado a la complejidad que conlleva la electrónica en sí.

Los problemas más simples de explicar no siempre tienen la solución más simple.
Explicar algo en 2 líneas tampoco ayuda.

Hay cientos de pics dando vueltas y que justo encuentre un código qeu se ajuste a tu necesidad para el pic puntual que usas es realmente "una lotería" salvo que uses los pics mas comunes.  En tu caso sería la familia de los pic18, donde el 18F452 el más común.  

Los pics tienen la característica de ser muy compatibles entre un modelo y otro, donde las diferencias son muy pocas.  Más aun si programas en C, las diferencias serán mínimas.

Es importante que aclares cual es tu problema, el frustrarte al principio es algo COMUN y NORMAL.  Si necesitas algo urgente, te sugiero que contrates a un profesional y problema solucionado.  Quienes formamos el foro, ayudamos por la sola motivación y pasión del tema y no cobramos por hacerlo.    No siempre estamos online esperando que alguien postee para responderle la solucion!.

En mi caso , me gusta responderle a la gente que demuestra esfuerzo y en post de eso es que le respondo, guiandola (si es que sé la respuesta) para ir avanzando en el tema.

Te invito a que postees nuevamente , siendo MUY CLARA en que intentas hacer, cuales son las dificultades que has tenido y sobre todo que conocimientos tienes del tema.

Saludos y bienvenida al foro

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado linda16

  • PIC10
  • *
  • Mensajes: 8
RE: aYUDENME POR FAVOR CON EL PIC 18F4620
« Respuesta #7 en: 21 de Marzo de 2006, 13:23:00 »
AHI QUE PENA ME DA YA NI VUELVO A ESCRIBIR MAS DE VERDAD QUE PENA LA CAGUE EN FORMA HOY ME PARE PA CAGARLA YA HASTA DAÑE UN PIC Muchas risas. BUENO REALMENTE AL QUE LE ESTABA PIDIENDO DISCULPAS ERA A MODULAY (PORFA DISCULPAME) Y GRACIAS A MAUNIX POR HACERME VER QUE LA PUSE COPIANDO EL NOMBRE DE MODULAY Y COPIE FUE EL DE MIGSANTIAGO (TIENES RAZON EN LO QUE ESCRIBISTE) AHI NO SE QUE PENA DE VERDAD..... GRACIAS Y BUENO AQUI TIENEN UNA AMIGA AUNQUE HA VECES GROCERA PERO CON TODA LA INTENCION DE APRENDER PIC   VOY A ENVIAR EL CODIGO QUE LLEVO A VER  LO ESTOY HACIENDO MAL GRACIAS Y DE NUEVO DISCULPEN

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: aYUDENME POR FAVOR CON EL PIC 18F4620
« Respuesta #8 en: 21 de Marzo de 2006, 13:54:00 »
Escrito originalmente por linda16
AHI QUE PENA ME DA YA NI VUELVO A ESCRIBIR MAS DE VERDAD QUE PENA LA CAGUE EN FORMA HOY ME PARE PA CAGARLA YA HASTA DAÑE UN PIC Muchas risas. BUENO REALMENTE AL QUE LE ESTABA PIDIENDO DISCULPAS ERA A MODULAY (PORFA DISCULPAME) Y GRACIAS A MAUNIX POR HACERME VER QUE LA PUSE COPIANDO EL NOMBRE DE MODULAY Y COPIE FUE EL DE MIGSANTIAGO (TIENES RAZON EN LO QUE ESCRIBISTE) AHI NO SE QUE PENA DE VERDAD..... GRACIAS Y BUENO AQUI TIENEN UNA AMIGA AUNQUE HA VECES GROCERA PERO CON TODA LA INTENCION DE APRENDER PIC   VOY A ENVIAR EL CODIGO QUE LLEVO A VER  LO ESTOY HACIENDO MAL GRACIAS Y DE NUEVO DISCULPEN


Podemos entender que no tenias un "buen día" y esperemos Modulay acepte tus disculpas.

Con respecto a lo demás, tendrás buen trato mientras mantengas buen trato.

Acá no somos computadoras, somos seres humanos, las reglas son las mismas que en la vida cotidiana...  Giño  asi que si no sigues siendo "grosera" seras bien recibida en el foro, sin importar si tus preguntas son básicas o avanzadas o lo que sea.


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: aYUDENME POR FAVOR CON EL PIC 18F4620
« Respuesta #9 en: 21 de Marzo de 2006, 16:06:00 »
Bueno linda,olvidado queda.
Solo hay que tener presente un par de cosas,muy relacionadas con lo que bien ha expresado maunix.Si dedicas 15 segundos y 3 líneas para plantear tu problema,por regla de 3,quien te conteste invertirá lo mismo o menos en darte una respuesta.Con decir algo sobre tu experiencia con pics,si sabes lo que es el timer,si ya has probado algo pero no funciona,pastear código,etc,la persona que te responde sabrá mejor como enfocar su respuesta y que datos proporcionarte.Mi respuesta fué aparentemente insustancial,pero llevaba la doble intención de que nos contaras algo más.No por gritar más fuerte se consigue que te hagan más caso.
Sé explícita,proporciona datos,experiencias,expresa tus ideas de la forma más clara y concisa que puedas,y seguro obtendrás mucha ayuda,pero como ya has leído algunas líneas atrás,no esperes milagros.

Desconectado linda16

  • PIC10
  • *
  • Mensajes: 8
RE: aYUDENME POR FAVOR CON EL PIC 18F4620
« Respuesta #10 en: 22 de Marzo de 2006, 13:24:00 »
Rebotado Aqui les envio dos codigo casi iguales los cuales no se si estan bien o no ; Empece con uno programita simple a ver si me da pero nada y quiesiera saber que tengo mal, bueno supuestamente segun lo que hace el programa es que leo el puerto por un segundo y si esta en alto durante ese tiempo enciende un led cosa que no hace jajaja!! bueno esto es solo como para empezar porque luego no va ha ser un led sino una salida UART que va hacia un transmisor RF, pero si no me enciende el led pues se podran imaginar lo demas.... bueno el programa lo hice usando supuestamente el timer0y que haga un conteo durante ese tiempo porque tengo que estar segura que durante ese tiempo la señal no bajo a cero y luego subio otra vez ,ademas estoy provando con los CCP en modo de CAPTURE usando los flancos de bajada subida y asi hallar los anchos pulsos pero de eso no tengo sino las inicializaciones y puras ideas en mente es decir no tengo un codigo como tal porque estoy averiguando bien como se usa los ccp.

entonces no se que hacer por doonde me meto no llego a nada por favor todas las ideas seran valiosas para mi GRACIAS!!!

#include <18F4620.h>
#device adc=8
#use delay(clock=4000000)
#fuses NOWDT,WDT128,XT, NOPROTECT, IESO, BROWNOUT, BORV21, NOPUT, NOCPD, STVREN, NODEBUG, LVP, NOWRT, NOWRTD, NOEBTR, NOCPB, NOEBTRB, NOWRTC, NOWRTB, FCMEN, XINST, PBADEN, LPT1OSC, MCLR
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9)



#define INTS_PER_SECOND 16

BYTE seconds;
BYTE int_count;

#int_RTCC

RTCC_isr()
{


    if(--int_count==0)
    {
      if (input(PIN_A0)==1)
         {

         output_bit (PIN_B0,1);

         delay_us (5);

         }
      int_count=INTS_PER_SECOND;
    }



}



void main()
{

   int_count=INTS_PER_SECOND;

   
   set_tris_b (0x00);
 
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_wdt(WDT_OFF);


   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   set_RTCC(0);
   
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256|RTCC_8_bit);
   enable_interrupts(INT_RTCC);
   enable_interrupts(GLOBAL);

  }
---------------------------------------------------------------------------------------------------------
Este es parecido pero no igual no se cual esta mejor:

#include <18F4620.h>
#device adc=8
#use delay(clock=4000000)
#fuses NOWDT,WDT128,XT, NOPROTECT, IESO, BROWNOUT, BORV21, NOPUT, NOCPD, STVREN, NODEBUG, LVP, NOWRT, NOWRTD, NOEBTR, NOCPB, NOEBTRB, NOWRTC, NOWRTB, FCMEN, XINST, PBADEN, LPT1OSC, MCLR
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9)



#define INTS_PER_SECOND 16

BYTE seconds;
BYTE int_count;

#int_RTCC
RTCC_isr()
{


    if(--int_count==0)
    {
      ++seconds;
      int_count=INTS_PER_SECOND;
    }



}



void main()
{

   int_count=INTS_PER_SECOND;



   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_wdt(WDT_OFF);


   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   set_RTCC(0);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256|RTCC_8_bit);
   enable_interrupts(INT_RTCC);
   enable_interrupts(GLOBAL);

   set_tris_b (0x00);
 

   do{                        // esto supuestamente espera a que el puerto reciba un alto

   }while (input(PIN_A0)==1);



   if (seconds == 1 && input(PIN_A0)==1)// esto segun yo espera a que el contador llegue a 1seg y
                                        //si todavia esta en uno la entrada prendame el led en el pin 0
                                        //del puerto B      

      {

        output_bit (PIN_B0,1);



      }



}


10f206

  • Visitante
RE: aYUDENME POR FAVOR CON EL PIC 18F4620
« Respuesta #11 en: 22 de Marzo de 2006, 14:53:00 »
linda16: Debo confesar que C es mi segunda opcion para programar PICs, y por lo tanto no estoy muy seguro de la sintaxis exacta de la version exacta que tu uses, asi que entiende el texto que sigue como una IDEA,  y que esto NO ES CODIGO compilable.

(Estoy obviando la parte de configuracion por no tener sentido aqui)

for (j=1;j<=3 && PIN_INPUT;j++) {
delay_ms(500);
}

if (j==1) // .5s o menos
if (j==2) // entre .5s y 1s
if (j==3) // entre 1s y 1.5s

Espero sirva de algo.

El codigo esta en dependencia de una variable independiente y no del pin, eso hace que trabaje por separado y funcionara para lo que quieres, el uso del timer0, si no estas haciendo procesos en paralelo no le veo mucho sentido.

Saludos Cordiales.

Desconectado linda16

  • PIC10
  • *
  • Mensajes: 8
RE: aYUDENME POR FAVOR CON EL PIC 18F4620
« Respuesta #12 en: 27 de Marzo de 2006, 13:55:00 »
gracias  10f206     por tu codigo me ayudo para el primer avance de mi proyecto por lo menos logre mostrarle a mi profesor que podia prender un led un segundo dos segundo y asi gracias de verdad...Giño ahora tengo que seleccionar por unos interruptores los segundos (0.5seg, 1seg 2seg y combinaciones de ellos) y si la entrada permanece en alto (bit cero del puerto C) ese tiempo prender un led (bit 0 del puerto B). aqui le envio lo que yo creo que debo hacer pero no me da nada por favor me gustaria que me dijeran que estoy haciendo mal y como puedo solucionarlo.... Gracias de antemanoChica

#include <18F4620.h>
#device adc=8
#use delay(clock=4000000)
#fuses NOWDT,WDT128,XT, NOPROTECT, IESO, BROWNOUT, BORV21, NOPUT, NOCPD, NOSTVREN, NODEBUG, NOLVP, NOWRT, NOWRTD, NOEBTR, NOCPB, NOEBTRB, NOWRTC, NOWRTB, NOFCMEN, NOXINST, NOPBADEN, NOLPT1OSC, NOMCLR


unsigned char  tiempos;

void main()
{


   set_tris_b(0x00);
   set_tris_a(0x3f);
   set_tris_c(0xff);


   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_wdt(WDT_OFF);

   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);



   while (1)
   {


      if (input(PIN_C0)==1)
      {

        tiempos = input_a();

        switch (tiempos)
        {

            case (0b000000):
               break;

            case (0b000001):         //0.5seg
               delay_ms(500);
               output_bit (PIN_B0,1);
               break;

            case (0b000010):         //1seg
               delay_ms(1000);
               output_bit (PIN_B0,1);
               break;

            case (0b000011):         //1.5seg
               delay_ms(1500);
               output_bit (PIN_B0,1);
               break;

            case (0b000100):         //2seg
               delay_ms(2000);
               output_bit (PIN_B0,1);
               break;


            case (0b000101):         //2.5seg
               delay_ms(2500);
               output_bit (PIN_B0,1);
               break;

            case (0b000110):         //3seg
               delay_ms(3000);
               output_bit (PIN_B0,1);
               break;

            case (0b000111):         //3.5seg
               delay_ms(3500);
               output_bit (PIN_B0,1);
               break;

        }

      }

   }
}

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: aYUDENME POR FAVOR CON EL PIC 18F4620
« Respuesta #13 en: 27 de Marzo de 2006, 14:58:00 »
No entendi bien tu objetivo, pero fijate lo siguiente

Codigo:

delay_ms(500);
output_bit (PIN_B0,1);
break;



Aqui esperas 500 mseg y luego enciendes el pin... pero... cuando lo apagas?

Yo que tu haría asi.

Codigo:

output_bit (PIN_B0,1);
delay_ms(500);
output_bit (PIN_B0,0);
break;




1ro lo enciendes al pin, esperas 500mseg y luego lo apagas.

Si quieres ver el efecto del apagado, tambien puedes (y hasta creo que debes) poner una demora posterior al apagado.

El punto es que si lo apagas nomas y lo vuelves a releer... todo el tiempo entonces se enciende constantemente entonces no lo veras parpadear.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado linda16

  • PIC10
  • *
  • Mensajes: 8
RE: aYUDENME POR FAVOR CON EL PIC 18F4620
« Respuesta #14 en: 27 de Marzo de 2006, 15:15:00 »
Llorando si ok mi objetivo es el siguiente tengo una entrada en el puerto c  si esta entrada dura en alto los tiempos (0.5s,1s , 2s y combinaciones de los mismos) que seran seleccionados por tres interruptores entonces prendo un led no importa que no se me apague porque luego ese led va a ser una señal uart para enviarla a un transmisor rf y luego recibida por un receptor y luego a otro pic que me enviara una señal que ya lo recibio y eso sera lo que apagara la señal que estoy enviando (no se si me explique bien). pero por ahora lo que quiero es que si la entrada me dura en alto esos tiempos prenda un led..
por eso lo hice con un switch que segun la entradas de los interruptores selecciono un tiempo y veo si la entrada esta en alto prendo un led bueno eso es lo que yo creo claro ; quisiera saber si esa es la mejor manera o la puedo hacer de otra manera... de verdad no se como hacerlo me he metido por contadores internos y demas pero pense que sta era la manera mas facil Llorando pero no me da AYUDENME