Advertisement
ericksm

12f683_current_sense

Jun 2nd, 2022
1,614
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.58 KB | None | 0 0
  1. #include <12F683.h>
  2. #device adc=10
  3.  
  4. #FUSES NOWDT                    //No Watch Dog Timer
  5. #FUSES INTRC_IO
  6. #FUSES NOCPD                    //No EE protection
  7. #FUSES NOPROTECT                //Code not protected from reading
  8. #FUSES NOMCLR                     //Master Clear pin enabled
  9. #FUSES PUT                    //No Power Up Timer
  10. #FUSES BROWNOUT                 //Reset when brownout detected
  11. #FUSES IESO                     //Internal External Switch Over mode enabled
  12. #FUSES FCMEN
  13.  
  14. #use delay(internal=8M)
  15.  
  16. #use spi(BAUD=57600, DO=PIN_A1, CLK=PIN_A2,SAMPLE_RISE, BITS=8,MSB_FIRST)
  17. #use fast_io(A)
  18.  
  19. Int dato=0b01110111;
  20.  
  21. void SPI_Max7219(int8 address,int8 dato)
  22. {
  23.    OUTPUT_LOW(PIN_A5);
  24.    spi_xfer(address);
  25.    spi_xfer(dato);
  26.    OUTPUT_HIGH(PIN_A5);
  27. }
  28.  
  29. void imprimir_4digit(int16 numero)
  30. {
  31.  
  32.    int8 millares = 0;//numero/100;
  33.    int8 centenas = 0;
  34.    int8 decenas = 0;
  35.    int8 unidades = 0;
  36.    if(numero>999)
  37.    {
  38.       millares = (int8)(numero/1000);
  39.       SPI_Max7219(0x04,millares);
  40.    }
  41.    else
  42.    {
  43.       SPI_Max7219(0x04,0x0f);//borrar digito
  44.    }
  45.    if(numero>99)
  46.    {
  47.       centenas = (int8)((numero-(millares*1000))/100);
  48.       SPI_Max7219(0x03,centenas);
  49.    }
  50.    else
  51.    {
  52.       SPI_Max7219(0x03,0x0f);//borrar digito
  53.    }
  54.    if(numero>9)
  55.    {
  56.       decenas = (int8)((numero/10 - (millares*100 + centenas*10)));
  57.       SPI_Max7219(0x02,decenas);
  58.    }
  59.    else
  60.    {
  61.       SPI_Max7219(0x02,0x0f);//borrar digito
  62.    }
  63.    unidades=(int8)(numero-(millares*1000 + centenas*100 + decenas*10 ));
  64.    SPI_Max7219(0x01,unidades);
  65.  
  66. }
  67.  
  68. void main()
  69. {
  70.    int8 count = 0;
  71.    int32 digits;
  72.    int32 aux;
  73.    int16 raw=0;//old_data=0;
  74.    setup_adc_ports(sAN0);
  75.    setup_comparator(NC_NC_NC_NC);
  76.    setup_vref(FALSE);
  77.    setup_oscillator(OSC_8MHZ);
  78.  
  79.  
  80.    //setup_adc_ports(NO_ANALOGS);
  81.    set_tris_a(0b00001001);
  82.    set_adc_channel(0);
  83.    setup_adc(ADC_CLOCK_DIV_8);
  84.    delay_us(50);
  85.  
  86.  
  87.    //test displays Leds ON
  88.    SPI_Max7219(0x0F,0x01);
  89.    delay_ms(1000);
  90.    //Modo normal Activo
  91.    SPI_Max7219(0x0F,0x00);
  92.    //Activar modo no-decode (Caracteres personalizados)
  93.    SPI_Max7219(0x09,0xff);
  94.    //Configuracion Intensidad Luz
  95.    SPI_Max7219(0x0A,0x03);
  96.    //Numero de digitos escaneados
  97.    SPI_Max7219(0x0B,0x07);  // de 0 a 7
  98.    //Empezar operacion normal de deco
  99.    SPI_Max7219(0x0C,0x01);
  100.  
  101.    for (count=1;count<=8;count++)
  102.    {
  103.       SPI_Max7219(count,0x0f);
  104.    }
  105.    while(1)
  106.    {
  107.       raw = read_adc();
  108.       aux =(int32)raw;
  109.       digits = ((aux*11835)+19419)/10000;
  110.       imprimir_4digit(digits);
  111.       delay_ms(200);
  112.    }
  113. }
  114.  
  115.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement