TODOPIC

Microcontroladores PIC => - Flowcode - => Mensaje iniciado por: atomikpic en 31 de Julio de 2012, 04:05:39

Título: Migrar Código 16F877A a 18F4550
Publicado por: atomikpic en 31 de Julio de 2012, 04:05:39
Saludos amigos!!
Soy nuevo en éste foro y recurro a su ayuda para una particular situación que me aqueja a estas horas, y es que por desgracia he quemado mi unico pic 16F877A  :( y me urge terminar mi proyecto para mañana temprano. El caso es que cuento con varios PIC18F4550 pero no he tenido éxito en el intento de migrar el código, he notado que fisicamente la ubicacion de los pines de ambos microcontroladores es exactamente la misma a excepción del pin RC3 que para el 18F4550 es Vusb! y de aqui surgió la idea de una posible solución... El código se encuentra desarrollado en CCS, utilizo 3 canales A/D y despliego información en una LCD.  El programa va perfecto en el 16F877A pero no estoy haciendo bien la conversión   :oops:
//#include <16F877A.h>
#include <18F4550.h>
#device adc=10
#fuses NOWDT,XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#include <lcd.c>
int16 ADC,ADC1,ADC2;
float conv,conv1;
void main(void)
   {
  // setup_adc_ports(RA0_ANALOG);
  // setup_adc_ports(AN0_AN1_VSS_VREF);
   setup_adc_ports(ANALOG_RA3_REF);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_counters(RTCC_INTERNAL,RTCC_DIV_1);
 //  set_adc_channel(0);
 //  set_adc1_channel(1);
//   set_adc2_channel(2);
   lcd_init();
   printf("\f");
   while(TRUE)
      {
      printf("\f");
      lcd_gotoxy(1,1);
      printf(lcd_putc,"Incubad Temp: ");
      lcd_gotoxy(1,2);
      printf(lcd_putc,"Partos Temp: ");
      lcd_gotoxy(21,2);
      printf(lcd_putc,"Partos RH: ");
      set_adc_channel(0);
      delay_us(10);
        ADC=read_adc();
      set_adc_channel(1);
      delay_us(10);
        ADC1=read_adc();
      set_adc_channel(2);
      delay_us(10);
        ADC2=read_adc();
      conv=(float)ADC;
      conv=conv/3.413333333;
      conv1=(float)ADC1;
      conv1=conv1/3.413333333;
      lcd_gotoxy(15,1);
      printf(lcd_putc,"%.0f C",conv);
      printf(" Incubadora_Temp: %.0f C \n\r",conv);
      lcd_gotoxy(14,2);
      printf(lcd_putc,"%.0f C",conv1);
      printf(" Expulsion_Temp: %.0f C \n\r",conv1);
      lcd_gotoxy(33,2);
      printf(lcd_putc,"%.0f RH",conv1);
      printf(" Expulsion_RH: %.0f RH \n\r",conv1);
      delay_ms(500);
      }
   }
Título: Re: Migrar Código 16F877A a 18F4550
Publicado por: mincho en 17 de Marzo de 2013, 17:13:40
Saludos amigos!!
Soy nuevo en éste foro y recurro a su ayuda para una particular situación que me aqueja a estas horas, y es que por desgracia he quemado mi unico pic 16F877A  :( y me urge terminar mi proyecto para mañana temprano. El caso es que cuento con varios PIC18F4550 pero no he tenido éxito en el intento de migrar el código, he notado que fisicamente la ubicacion de los pines de ambos microcontroladores es exactamente la misma a excepción del pin RC3 que para el 18F4550 es Vusb! y de aqui surgió la idea de una posible solución... El código se encuentra desarrollado en CCS, utilizo 3 canales A/D y despliego información en una LCD.  El programa va perfecto en el 16F877A pero no estoy haciendo bien la conversión   :oops:
//#include <16F877A.h>
#include <18F4550.h>
#device adc=10
#fuses NOWDT,XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#include <lcd.c>
int16 ADC,ADC1,ADC2;
float conv,conv1;
void main(void)
   {
  // setup_adc_ports(RA0_ANALOG);
  // setup_adc_ports(AN0_AN1_VSS_VREF);
   setup_adc_ports(ANALOG_RA3_REF);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_counters(RTCC_INTERNAL,RTCC_DIV_1);
 //  set_adc_channel(0);
 //  set_adc1_channel(1);
//   set_adc2_channel(2);
   lcd_init();
   printf("\f");
   while(TRUE)
      {
      printf("\f");
      lcd_gotoxy(1,1);
      printf(lcd_putc,"Incubad Temp: ");
      lcd_gotoxy(1,2);
      printf(lcd_putc,"Partos Temp: ");
      lcd_gotoxy(21,2);
      printf(lcd_putc,"Partos RH: ");
      set_adc_channel(0);
      delay_us(10);
        ADC=read_adc();
      set_adc_channel(1);
      delay_us(10);
        ADC1=read_adc();
      set_adc_channel(2);
      delay_us(10);
        ADC2=read_adc();
      conv=(float)ADC;
      conv=conv/3.413333333;
      conv1=(float)ADC1;
      conv1=conv1/3.413333333;
      lcd_gotoxy(15,1);
      printf(lcd_putc,"%.0f C",conv);
      printf(" Incubadora_Temp: %.0f C \n\r",conv);
      lcd_gotoxy(14,2);
      printf(lcd_putc,"%.0f C",conv1);
      printf(" Expulsion_Temp: %.0f C \n\r",conv1);
      lcd_gotoxy(33,2);
      printf(lcd_putc,"%.0f RH",conv1);
      printf(" Expulsion_RH: %.0f RH \n\r",conv1);
      delay_ms(500);
      }
   }


Disculpa por responder tan tarde, si es muy de afan puedes comprar otro...