TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: evamdopico en 14 de Agosto de 2009, 14:18:56

Título: Problema PIC16F876 y MCP41010
Publicado por: evamdopico en 14 de Agosto de 2009, 14:18:56
Buenas tardes.

Estoy intentando simular con proteus un MCP41010 con un PIC con el siguiente codigo.

La configuración de las patillas es:
           __
RB0 -> CS
RB1 -> SI
RB2 -> SCK

Código: C
  1. #include <16F876.h>
  2. #fuses HS,NOWDT,NOPROTECT,NOLVP
  3. #use delay(clock=20000000)
  4. #use rs232(baud=9600, xmit=PIN_B1, rcv=PIN_C7)
  5.  
  6. #include <input.c>
  7. #include <ad8400.c>
  8.  
  9.  
  10. void main() {
  11.    int   value;
  12.    char  pot_num;
  13.  
  14.    setup_adc_ports (ALL_ANALOG);
  15.    setup_adc (ADC_CLOCK_INTERNAL);
  16.    init_pots ();
  17.  
  18.    do {
  19.       set_adc_channel (0);
  20.       delay_us (100);
  21.       value = read_adc ();
  22.       printf ("\n\r\n\rInput 1: %2X  ", value);
  23.  
  24. if (NUM_POTS > 1) {
  25.          set_adc_channel (1);
  26.          delay_us (100);
  27.          value = read_adc ();
  28.          printf ("Input 2: %2X  \n\r", value);
  29.  
  30.          do {
  31.             printf ("\n\rChange pot 1 or 2?");
  32.             pot_num = getc ();
  33.          } while ((pot_num!='1') && (pot_num!='2'));
  34.          putc (pot_num);
  35.        
  36.       }
  37.       else
  38.  
  39.          pot_num = '1';
  40.  
  41.       printf ("\n\rNew pot pot_value:");
  42.       value = gethex ();
  43.  
  44.       set_pot ((pot_num-'1'), value);
  45.    } while (TRUE);
  46. }

Código: C
  1. #define RST1 PIN_B0
  2. #define CLK PIN_B2
  3. #define DI PIN_B1
  4. #define NUM_POTS 1
  5.  
  6. BYTE pots;
  7.  
  8. set_pot (int pot_num, int new_value) {
  9.    BYTE i;
  10.    BYTE cmd[2];
  11.  
  12.    pots = new_value;
  13.    cmd[0] = pots;
  14.    cmd[1] = 0;
  15.  
  16.    for(i=1;i<=6;i++)
  17.      shift_left(cmd,2,0);
  18.  
  19.    output_low(CLK);
  20.    output_low(RST1);
  21.  
  22.    delay_us(2);
  23.    for(i=1;i<=10;++i) {
  24.       output_bit(DI, shift_left(cmd,2,0));
  25.       delay_us(2);
  26.       output_high(CLK);
  27.       delay_us(2);
  28.       output_low(CLK);
  29.       delay_us(2);
  30.    }
  31.    output_high(RST1);
  32. }
  33.  
  34. void init_pots ()
  35. {
  36.    pots = 0;
  37. }


Es un codigo que viene de ejemplo en PCWHD para el ad8400 pero deberia de funcionar para el MCP. No da errores al compilar, solo un warning.

No se si sera un error al usar el RS232, es la primera vez que uso perifericos con un pic y no tengo nada claro como usarlos

Si alguien me puede ayudar se lo agracedere

Gracias por todo

Eva
Título: Re: Problema PIC16F876 y MCP41010
Publicado por: Suky en 14 de Agosto de 2009, 14:24:37
El AD8400 tiene distinto protocolo al MCP41010, fíjate en el datasheet de cada uno.


Saludos!