Autor Tema: Problema PIC16F876 y MCP41010  (Leído 1915 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado evamdopico

  • PIC10
  • *
  • Mensajes: 13
Problema PIC16F876 y MCP41010
« 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

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema PIC16F876 y MCP41010
« Respuesta #1 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!
No contesto mensajes privados, las consultas en el foro