Conversor A/D PIC protocolo SPI

Hola
estoy haciendo un circuito para recibir una señal 0-10v analógica y la he de converitr a digital con el PIC16f877a y con este mismo micro, he de sacar la salida digital para enviarla a un módulo con SPI. Tengo el diseño en Proteus y el programa del master lo he hecho con CCS C.
necesitaria poder probarlo con el SPI Debugger del Proteus, pero no me muestra nada. He conectado un osciloscopio en Proteus y veo que tengo señal de salida, pero no soy capaz de hacer funcionar el SPI debugger del proteus.

El programa del master es el siguiente:

PHP:
   #include <16f877a.h>  
    #device ADC=8  
    #fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT  
    #use delay(clock=4M)
    #use SPI()
     
     
    int valor=0x00;  
     
    void toma_adc(void){  
     
      // Lectura del canal 0  
      set_adc_channel(0);  
      delay_ms(1);  
      valor=read_adc();  
      delay_ms(1); //para que se estabilice  
    }  
    void SPI_module(){
      int i=0;
      //++++++++++++++++++Configura puertos analogicos++++++++++++++++++++++++++++++
      //setup_adc(  ADC_CLOCK_INTERNAL  );
      //setup_adc_ports( ALL_ANALOG );                 // Ver que puertos van a ser analogicos
      setup_timer_0(RTCC_INTERNAL|RTCC_DIV_128);
      setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
   
      set_tris_a(0b11111111);
      set_tris_b(0b00000000);
      set_tris_c(0b10010010);
      setup_spi(spi_master|spi_l_to_h|spi_clk_div_64);

      //// seteo como deben estar cada uno de los pines del pic para empezar la comunicacion

      output_high(pin_B1);

      ////seteo la transmision

      delay_ms(500);
      //inicbuffRX();                                   // Borra buffer al inicio
      //inicbuffTX();                                   // Borra buffer al inicio
      enable_interrupts(int_rda);                  // Habilita Interrupción RDA
      //   enable_interrupts(int_ext);                   // Habilita Interrupción RB0, PASO DE ALTO A BAJO
      ext_int_edge(H_TO_L);
      enable_interrupts(global);                    // Habilita interrupciones
      //// mando dato al pote por spi para R=71.5K
      //// mando primero el command byte y despues el dato

      while(true){
         //spi_write(5);
         spi_write(valor);
      }
   }
    void main() {  
     
      setup_adc(ADC_CLOCK_INTERNAL); //configura el conversor  
      setup_adc_ports(RA0_analog); //entrada 0 como analogica  
      do {  
         toma_adc();
         SPI_module();
         //output_b(valor);  
      }while(true);  
    }

Y el circuito en proteus es el adjunto.
El Vref lo he configurado a 3.5v y el RV1 es una entrada de 5v.
Si alguien me puede orientar en como configurar el SPI debugger o si estoy haciendo algo mas mal, se lo agradezco.

Un saludo a todos.
 

Adjuntos

  • Proteus.JPG
    Proteus.JPG
    37.5 KB · Visitas: 32
Última edición por un moderador:
Atrás
Arriba