Fork me on GitHub

Microcontrolandos

O Blog está passando por uma fase de mudanças. Todos os posts estão sendo atualizados, códigos, links e imagens estão sendo arrumados. Conteúdos novos ainda estão por vir.

PIC: MCP3201

Compartilhe:

MCP3201 é um Conversor Analógico/Digital de 12 bits com interface SPI.

Características

  • 12 bits de resolução;
  • Comunicação via SPI;
  • Tensão de operação: 2.7V - 5.5V;

Funcionamento

A comunicação com o dispositivo funciona através da interface SPI. Inicialmente habilitamos a comunicação colocando o pino CS em nível lógico baixo. Iremos ler os 15 bits, dos quais 12 bits correspondem ao valor da entrada analógica, começando do bit MSB até o bit LSB. A leitura de cada bit é feita após cada borda de descida do pulso de clock. Por fim, desabilitamos a comunicação colocando o pino CS em nível lógico alto.

O cálculo real da tensão de entrada é: Vin = ADC * Vref / 4096, sendo Vin = [V+] – [V-]. Caso V- seja igual a 0V, Vin = V+.

Download

MCP3201.zip

Código

/*
MCP3201 - Conversor Analógico/Digital de 12-bits.
Autor: Tiago Melo
Blog: Microcontrolandos
Compilador: MikroC PRO PIC
Bibliotecas: LCD, Lcd_Constants, Conversions, C_String
*/
//Pinos do MCP3201.
sbit MCP3201_Clock at RB0_bit;
sbit MCP3201_Data at RB1_bit;
sbit MCP3201_CS at RB2_bit;
sbit MCP3201_Clock_Direction at TRISB0_bit;
sbit MCP3201_Data_Direction at TRISB1_bit;
sbit MCP3201_CS_Direction at TRISB2_bit;
//Pinos do LCD.
sbit LCD_RS at RC0_bit;
sbit LCD_EN at RC1_bit;
sbit LCD_D4 at RC2_bit;
sbit LCD_D5 at RC3_bit;
sbit LCD_D6 at RC4_bit;
sbit LCD_D7 at RC5_bit;
sbit LCD_RS_Direction at TRISC0_bit;
sbit LCD_EN_Direction at TRISC1_bit;
sbit LCD_D4_Direction at TRISC2_bit;
sbit LCD_D5_Direction at TRISC3_bit;
sbit LCD_D6_Direction at TRISC4_bit;
sbit LCD_D7_Direction at TRISC5_bit;
void MCP3201_Init() {
MCP3201_CS_Direction = 0;
MCP3201_Clock_Direction = 0;
MCP3201_Data_Direction = 1;
MCP3201_CS = 1;
MCP3201_Clock = 0;
}
unsigned int MCP3201_Read() {
char i;
unsigned value;
//Inicia a conversão.
MCP3201_Clock = 1;
MCP3201_CS = 0;
//Lê 15 bits. Os 3 primeiros serão ignorados.
for(i = 0; i < 15; i++) {
value <<= 1;
MCP3201_Clock = 1;
Delay_us(1);
MCP3201_Clock = 0;
Delay_us(1);
//Lê o valor após um pulso de descida do clock.
value |= MCP3201_Data;
}
MCP3201_Clock = 0;
MCP3201_CS = 1;
return (value & 0x0FFF);
}
float MCP3201_Convert(unsigned int raw, float vref) {
return raw * vref / 4096.0;
}
void main() {
char texto[12];
//Inicializa o MCP3201.
MCP3201_Init();
//Inicializa o LCD.
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
while(1) {
//Lê o valor.
unsigned valor = MCP3201_Read();
//Converte o valor lido em um valor de tensão com 5V como referência.
float tensao = MCP3201_Convert(valor, 5);
//Converte em texto.
FloatToStr(tensao, texto);
//Escreve no LCD.
Lcd_Out(2, 1, texto);
Lcd_Chr_CP('V');
//Faz nada por 1s.
Delay_ms(1000);
}
}
view raw MCP3201.c hosted with ❤ by GitHub

Escreva um comentário

17 comentários:

  1. Muito útil essa biblioteca, pra quem precisar de um ad melhor que o interno, vai ajudar demais. Obrigado por compartilhar.

    ResponderExcluir
    Respostas
    1. Pic: Mcp3201 - Microcontrolandos >>>>> Download Now

      >>>>> Download Full

      Pic: Mcp3201 - Microcontrolandos >>>>> Download LINK

      >>>>> Download Now

      Pic: Mcp3201 - Microcontrolandos >>>>> Download Full

      >>>>> Download LINK fi

      Excluir
  2. Pic: Mcp3201 - Microcontrolandos >>>>> Download Now

    >>>>> Download Full

    Pic: Mcp3201 - Microcontrolandos >>>>> Download LINK

    >>>>> Download Now

    Pic: Mcp3201 - Microcontrolandos >>>>> Download Full

    >>>>> Download LINK

    ResponderExcluir