• Sábado 21 de Diciembre de 2024, 14:48

Autor Tema:  Pic18f8720  (Leído 1739 veces)

aprendiz70

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Pic18f8720
« en: Martes 12 de Junio de 2007, 17:10 »
0
Saludos a todos

Agradecería mucho si me pueden ayudar. Lo que quiero hacer en primer lugar es poder trabajar con el conversor analogo digital del PIC18F8720, la verdad que para un PIC18F452 me funciona, pero al cambiar a un PIC18F8720 no hace lo que quiero que haga( es decir no puedo trabajar con el conversor analogo digital), bueno espero puedan ayudarme, aquí les dejo el programa que estoy tratando de hacer correr.


#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

#byte port_b = 0xf81

void main() {

   float medicion;
   float nivel[3]={0x00,0x7F,0xFF};
   int1  CasoA,CasoB;
   set_tris_b(0x00);

   setup_port_a( ALL_ANALOG );
   setup_adc( ADC_CLOCK_INTERNAL );
   set_adc_channel( 0 );
   port_b=0x00;

   do {
      delay_ms(100);
      medicion = Read_ADC();
      CasoA=((medicion>=nivel[0])&&(medicion<nivel[1]));
      CasoB=((medicion>=nivel[1])&&(medicion<=nivel[2]));

      if(CasoA)
      {
           port_b=0x03;
      }
      else
      if(CasoB)
      {
           port_b=0x07;
      }

   } while (TRUE);
}



para el pic18F8720 solo he cambiado el pic y trato de simularlo en el proteus, el programa queda asi:
 
#include <18F8720.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

#byte port_b = 0xf81

void main() {

   float medicion;
   float nivel[3]={0x00,0x7F,0xFF};
   int1  CasoA,CasoB;
   set_tris_b(0x00);

   setup_port_a( ALL_ANALOG );
   setup_adc( ADC_CLOCK_INTERNAL );
   set_adc_channel( 0 );
   port_b=0x00;

   do {
      delay_ms(100);
      medicion = Read_ADC();
      CasoA=((medicion>=nivel[0])&&(medicion<nivel[1]));
      CasoB=((medicion>=nivel[1])&&(medicion<=nivel[2]));

      if(CasoA)
      {
           port_b=0x03;
      }
      else
      if(CasoB)
      {
           port_b=0x07;
      }

   } while (TRUE);
}


como ya les habia dicho en el primer programa (pic18F452) hace lo que quiero, es decir saca a traves del puerto b el valor 3  o 7 según corresponda, pero en el segundo caso en donde se cambia el pic al PIC18F8720 no lo hace, ¿alguien sabe por qué?, agradeceria mucho vuestra ayuda (sera el simulador?? , ya que todavia no lo paso a la placa para ver esto, la verdad que no se)

                                            BIT

Alternative

  • Miembro MUY activo
  • ***
  • Mensajes: 176
    • Ver Perfil
Re: Pic18f8720
« Respuesta #1 en: Jueves 1 de Noviembre de 2007, 03:01 »
0
SAludos aprendiz70
Mira en tu programa tienes mal configurado el ADCON0, ADCON1  y ADCON2, es diferente que el 18F452, debes configurarlos adecuadamente, checa el DataSheet.

ahora bien, te recomiendo que utilices antes el 18F4525, las configuraciones para la utilizacion de los convertidores son iguales que 18F8720. Para la utilizacion de AN0, ADCON0=01 y ADCON2 depende en cual quieres que esten los mas significativos, si en ADRESH o ADRESL.

Ahora en el simulador AVss y AVdd deves conectarlos para que trabaje el converttidor, sino no te realiza nada.

En mi caso voy armar un diseño que hice con el 18F8720, mi pregunta es que tipo y marca de soldador de aire caliente utilisastes...????

Saludos