Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

25/07/2011 #1


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:

Código 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.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.