Moderadores: andre_luis, 51, guest2003, Renie
carlucio escreveu:Caros Ze e moral,
Ate que entendi bem a parte que se refere-se a media de leituras para se apresentar o valor. O problema mesmo meu e que não entendi onde ele achou os 264. Estes 264 refere-se a saida do acs712 de 5A que é de 185mv /Ampere. Não entendi como ele chegou a esse valor. Creio que se compreender a maneira do calculo( para o acs712 de 30A a saida é de 66mv / ampere) conseguirei fazer o mesmo ler corrente.
Alguem entendeu que possa me explicar?
int sensorPin =A0;
int sensorValue_aux = 0;
float sensorValue = 0;
float currentValue = 0;
float voltsporUnidade = 0.004887586;// 5%1023
void setup() {
Serial.begin(9600);
pinMode(sensorPin, INPUT);
}
void loop() {
for(int i=100; i>0; i--){
sensorValue_aux = (analogRead(sensorPin) -511); // le o sensor na pino analogico A0 e ajusta o valor lido ja que a saída do sensor é (1023)vcc/2 para corrente =0
sensorValue += pow(sensorValue_aux,2); // somam os quadrados das leituras.
}
sensorValue = (sqrt(sensorValue/ 100)) * voltsporUnidade; // finaliza o calculo da méida quadratica e ajusta o valor lido para volts
currentValue = (sensorValue/66)*1000; // calcula a corrente considerando a sensibilidade do sernsor (66 mV por amper)
// mostra o resultado no terminal
Serial.print(currentValue,3);
Serial.print(" A \n" );
sensorValue =0;
delay(100);
}
int i;
#define sensor_corrente pin_a1
float sensorValue_aux =0;
float sensorValue =0;
float currentValue =0;
float voltsporunidade = 0.0048828125;
for (i=100; i>0; i--)
{
sensorValue_aux = (read_adc()-511);
sensorValue += pow (2,sensorValue_aux);
sensorValue = (sqrt(sensorValue/500) * voltsporunidade);
currentValue = (sensorValue/66)*1000;
lcd_locate(1,8); //
printf(lcd_dado,"%2f",currentValue);
//-----------------------fuses do pic-----------------------//
#include <16F876A.h>
#device adc=10
#include "lcd.c"
#use delay(clock=4000000)
#fuses xt,nolvp,nowdt
#include <math.h>
//--------------variaveis globais---------------------------//
unsigned int16 leitura_tensao;//global
unsigned int16 leitura_conv;
int i;
#define sensor_corrente pin_a1
float sensorValue_aux =0;
float sensorValue =0;
float currentValue =0;
float voltsporunidade = 0.0048828125;
//-------------constantes de conversão----------------------//
float fm = 0.393;
float fm1 =0.393;
float fm2 =0.382;
float fm3 =0.380;
float fm4 =0.373;
float fm5 =0.370;
float fm6 =0.366;
float fm7 =0.365;
float fm8 =0.364;
float fm9 =0.362;
float fm10=0.365;
float fm11=0.365;
float fm12=0.368;
float fm13=0.368;
//--------------------funções------------------//
void lineariza_e_mostra(void)
{
leitura_tensao=read_adc();
if((leitura_tensao>=562)){ //maior que 220v
leitura_conv=(read_adc() * fm);goto fim;}
if ((leitura_tensao<=561) && (leitura_tensao>=544)){ // 220 a 210v
leitura_conv=(read_adc()* fm1);goto fim;}
if ((leitura_tensao<=543)&& (leitura_tensao>=526)){ //210 a 200v
leitura_conv = (read_adc()* fm2);goto fim;}
if ((leitura_tensao<=525) && (leitura_tensao>=509)){ // 200 a 190v
leitura_conv=(read_adc()* fm3);goto fim;}
if ((leitura_tensao<=508) && (leitura_tensao>=487)){ // 190 a 180v
leitura_conv= (read_adc()* fm4);goto fim;}
if ((leitura_tensao<=486)&& (leitura_tensao>=464)) { //180 a 170v
leitura_conv = (read_adc()* fm5);goto fim;}
if ((leitura_tensao<=463)&& (leitura_tensao>=438)) { // 170 a 160v
leitura_conv = (read_adc()* fm6);goto fim;}
if ((leitura_tensao<=437)&& (leitura_tensao>=411)) { // 160 a 150v
leitura_conv = (read_adc()* fm7);goto fim;}
if ((leitura_tensao<=410)&& (leitura_tensao>=385)) { // 150 a 140v
leitura_conv = (read_adc()* fm8);goto fim;}
if ((leitura_tensao<=386)&& (leitura_tensao>=359)) { //140 a 130v
leitura_conv = (read_adc()* fm9);goto fim;}
if ((leitura_tensao<=358)&& (leitura_tensao>= 329)) { //130 a 120v
leitura_conv = (read_adc()* fm10);goto fim;}
if ((leitura_tensao<=328)&& (leitura_tensao>= 301)) { //120 a 110v
leitura_conv = (read_adc()* fm11);goto fim;}
if ((leitura_tensao<=300)&& (leitura_tensao>=272)) { // 110 a 100v
leitura_conv = (read_adc()* fm12);goto fim;}
if (leitura_tensao<=271) { // menor que 100v
leitura_conv = (read_adc()* fm13);goto fim;}
//etc ...
fim:
//----------------apresentação do display----------------//
delay_ms(2000); //
lcd_locate(1,2); //Posiciona o cursor na segunda linha
printf(lcd_dado,"%3lu",leitura_conv); //Mostra a tensão medida
}
//-------------------programa principal-----------------//
void main(void)
{
inicializa_lcd(); //Chama função de inicialização lcd
setup_adc(ADC_CLOCK_DIV_8); // Configura clock da conversão
setup_adc_ports(an0_an1_an3); // Configura A/D
set_adc_channel(0); // Lê a entrada 0
delay_ms(10);
set_adc_channel(1);
delay_ms(10);
while(1)
{
{
//inicializa hw
lcd_locate(1,0);
printf(lcd_dado,"V=");
lcd_locate(1,6);
printf(lcd_dado,"A=");
//etc
for(;;)
{
leitura_tensao=read_adc();
leitura_conv=leitura_tensao;
lineariza_e_mostra();
}
}
for (i=100; i>0; i--)
{
sensorValue_aux = (read_adc()-511);
sensorValue += pow (2,sensorValue_aux);
sensorValue = (sqrt(sensorValue/500) * voltsporunidade);
currentValue = (sensorValue/66)*1000;
lcd_locate(1,8); //Posiciona o cursor na segunda linha
printf(lcd_dado,"%2f",currentValue);
}
}
}
//-----------------fim---------------//
carlucio escreveu:Minha duvida agora persiste em saber de que maneira eu declaro para o microcontrolador fazer a leitura de 2 canais analogicos
set_adc_channel(0); // Lê a entrada 0
delay_ms(10);
set_adc_channel(1);
delay_ms(10);
unsigned int adc_read(unsigned char channel)
{
ADCON0 = (channel << 3) + 0x81; // enable ADC, fosc/32
delay(20);
ADGO = 1;
while(ADGO)
continue; // wait for conversion complete
return ADRESH*256 + ADRESL;
}
...
//p.ex.
corrente=(adc_read(0)*50)/x;
tensao=(adc_read(1)*50)/y;
temperatura=(adc_read(2)*50)/z;
...
//-----------------------fuses do pic-----------------------//
#include <16F876A.h>
#device adc=10
#include "lcd.c"
#use delay(clock=4000000)
#fuses xt,nolvp,nowdt
#include <math.h>
//--------------variaveis globais---------------------------//
unsigned int16 leitura_tensao;//global
unsigned int16 leitura_conv;
//int i;
#define sensor_corrente pin_a1
float sensorValue_aux =0;
float sensorValue =0;
float currentValue =0.00;
float voltsporunidade = 0.0048828125;
//-------------constantes de conversão----------------------//
float fm = 0.393;
float fm1 =0.393;
float fm2 =0.382;
float fm3 =0.380;
float fm4 =0.373;
float fm5 =0.370;
float fm6 =0.366;
float fm7 =0.365;
float fm8 =0.364;
float fm9 =0.362;
float fm10=0.365;
float fm11=0.365;
float fm12=0.368;
float fm13=0.368;
//--------------------funções------------------//
void lineariza_e_mostra(void)
{
leitura_tensao=read_adc();
if((leitura_tensao>=562)){ //maior que 220v
leitura_conv=(read_adc() * fm);goto fim;}
if ((leitura_tensao<=561) && (leitura_tensao>=544)){ // 220 a 210v
leitura_conv=(read_adc()* fm1);goto fim;}
if ((leitura_tensao<=543)&& (leitura_tensao>=526)){ //210 a 200v
leitura_conv = (read_adc()* fm2);goto fim;}
if ((leitura_tensao<=525) && (leitura_tensao>=509)){ // 200 a 190v
leitura_conv=(read_adc()* fm3);goto fim;}
if ((leitura_tensao<=508) && (leitura_tensao>=487)){ // 190 a 180v
leitura_conv= (read_adc()* fm4);goto fim;}
if ((leitura_tensao<=486)&& (leitura_tensao>=464)) { //180 a 170v
leitura_conv = (read_adc()* fm5);goto fim;}
if ((leitura_tensao<=463)&& (leitura_tensao>=438)) { // 170 a 160v
leitura_conv = (read_adc()* fm6);goto fim;}
if ((leitura_tensao<=437)&& (leitura_tensao>=411)) { // 160 a 150v
leitura_conv = (read_adc()* fm7);goto fim;}
if ((leitura_tensao<=410)&& (leitura_tensao>=385)) { // 150 a 140v
leitura_conv = (read_adc()* fm8);goto fim;}
if ((leitura_tensao<=386)&& (leitura_tensao>=359)) { //140 a 130v
leitura_conv = (read_adc()* fm9);goto fim;}
if ((leitura_tensao<=358)&& (leitura_tensao>= 329)) { //130 a 120v
leitura_conv = (read_adc()* fm10);goto fim;}
if ((leitura_tensao<=328)&& (leitura_tensao>= 301)) { //120 a 110v
leitura_conv = (read_adc()* fm11);goto fim;}
if ((leitura_tensao<=300)&& (leitura_tensao>=272)) { // 110 a 100v
leitura_conv = (read_adc()* fm12);goto fim;}
if (leitura_tensao<=271) { // menor que 100v
leitura_conv = (read_adc()* fm13);goto fim;}
//etc ...
fim:
//----------------apresentação do display----------------//
delay_ms(2000); //
lcd_locate(1,2); //Posiciona o cursor na segunda linha
printf(lcd_dado,"%3lu",leitura_conv); //Mostra a tensão medida
}
void corrente (void){
int i;
for (i=100; i>0; i--)
{
sensorValue_aux = (read_adc()-511);
sensorValue += pow (2,sensorValue_aux);
sensorValue = (sqrt(sensorValue/500) * voltsporunidade);
currentValue = (sensorValue/66)*1000;
lcd_locate(1,8); //Posiciona o cursor na segunda linha
printf(lcd_dado,"%2.2f",currentValue);
}
}
//-------------------programa principal-----------------//
void main(void)
{
inicializa_lcd(); //Chama função de inicialização lcd
setup_adc(ADC_CLOCK_DIV_8); // Configura clock da conversão
setup_adc_ports(an0_an1_an3); // Configura A/D
// set_adc_channel(0); // Lê a entrada 0
// delay_ms(10);
// set_adc_channel(1);
// delay_ms(10);
while(1)
{
{
//inicializa hw
lcd_locate(1,0);
printf(lcd_dado,"V=");
lcd_locate(1,6);
printf(lcd_dado,"A=");
//etc
for(;;)
{
set_adc_channel(0); // Lê a entrada 0
delay_ms(10);
leitura_tensao=read_adc();
leitura_conv=leitura_tensao;
lineariza_e_mostra();
delay_ms(250);
set_adc_channel(1);
delay_ms(10);
corrente();
}
}
ADC conversion started before wait time has expired following previous conversion or channel change
// Constants used in SETUP_ADC_PORTS() are:
#define NO_ANALOGS 7 // None
#define ALL_ANALOG 0 // A0 A1 A2 A3 A4
#define AN0_AN1_AN2_AN4_VSS_VREF 3 // A0 A1 A2 A4 VRefh=A3
#define AN0_AN1_AN3 4 // A0 A1 A3
#define AN0_AN1_VSS_VREF 5 // A0 A1 VRefh=A3
#define AN0_AN1_AN4_VREF_VREF 0x08 // A0 A1 A4 VRefh=A3 VRefl=A2
#define AN0_AN1_VREF_VREF 0x0D // A0 A1 VRefh=A3 VRefl=A2
#define AN0 0x0E // A0
#define AN0_VREF_VREF 0x0F // A0 VRefh=A3 VRefl=A2
#define ANALOG_RA3_REF 0x1 //!old only provided for compatibility
#define RA0_RA1_RA3_ANALOG 0x4 //!old only provided for compatibility
#define RA0_RA1_ANALOG_RA3_REF 0x5 //!old only provided for compatibility
#define ANALOG_RA3_RA2_REF 0x8 //!old only provided for compatibility
#define RA0_RA1_ANALOG_RA3_RA2_REF 0xD //!old only provided for compatibility
#define RA0_ANALOG 0xE //!old only provided for compatibility
#define RA0_ANALOG_RA3_RA2_REF 0xF //!old only provided for compatibility
//-------------------programa principal-----------------//
void main(void)
{
inicializa_lcd(); //Chama função de inicialização lcd
setup_adc(ADC_CLOCK_DIV_8); // Configura clock da conversão
setup_adc_ports(an0_an1_an3); // Configura A/D
while(1)
{
{
//inicializa hw
lcd_locate(1,0);
printf(lcd_dado,"V=");
lcd_locate(1,6);
printf(lcd_dado,"A=");
//etc
for(;;)
{
set_adc_channel(0); // Lê a entrada 0
delay_ms(10);
leitura_tensao=read_adc();
leitura_conv=leitura_tensao;
lineariza_e_mostra();
delay_ms(250);
set_adc_channel(1);
delay_ms(10);
corrente();
delay_ms(250);
}
}
ADC conversion started before wait time has expired following previous conversion or channel change
//-----------------------fuses do pic-----------------------//
#include <16F876A.h>
#device adc=10
#include "lcd.c"
#use delay(clock=4000000)
#fuses xt,nolvp,nowdt
#include <math.h>
//--------------variaveis globais---------------------------//
unsigned int16 leitura_tensao;//global
unsigned int16 leitura_conv;
//int i;
#define sensor_corrente pin_a1
float sensorValue_aux =0;
float sensorValue =0;
float currentValue =0.00;
float voltsporunidade = 0.0048828125;
//-------------constantes de conversão----------------------//
float fm = 0.393;
float fm1 =0.393;
float fm2 =0.382;
float fm3 =0.380;
float fm4 =0.373;
float fm5 =0.370;
float fm6 =0.366;
float fm7 =0.365;
float fm8 =0.364;
float fm9 =0.362;
float fm10=0.365;
float fm11=0.365;
float fm12=0.368;
float fm13=0.368;
//--------------------funções------------------//
void lineariza_e_mostra(void)
{
leitura_tensao=read_adc();
if((leitura_tensao>=562)){ //maior que 220v
leitura_conv=(read_adc() * fm);goto fim;}
if ((leitura_tensao<=561) && (leitura_tensao>=544)){ // 220 a 210v
leitura_conv=(read_adc()* fm1);goto fim;}
if ((leitura_tensao<=543)&& (leitura_tensao>=526)){ //210 a 200v
leitura_conv = (read_adc()* fm2);goto fim;}
if ((leitura_tensao<=525) && (leitura_tensao>=509)){ // 200 a 190v
leitura_conv=(read_adc()* fm3);goto fim;}
if ((leitura_tensao<=508) && (leitura_tensao>=487)){ // 190 a 180v
leitura_conv= (read_adc()* fm4);goto fim;}
if ((leitura_tensao<=486)&& (leitura_tensao>=464)) { //180 a 170v
leitura_conv = (read_adc()* fm5);goto fim;}
if ((leitura_tensao<=463)&& (leitura_tensao>=438)) { // 170 a 160v
leitura_conv = (read_adc()* fm6);goto fim;}
if ((leitura_tensao<=437)&& (leitura_tensao>=411)) { // 160 a 150v
leitura_conv = (read_adc()* fm7);goto fim;}
if ((leitura_tensao<=410)&& (leitura_tensao>=385)) { // 150 a 140v
leitura_conv = (read_adc()* fm8);goto fim;}
if ((leitura_tensao<=386)&& (leitura_tensao>=359)) { //140 a 130v
leitura_conv = (read_adc()* fm9);goto fim;}
if ((leitura_tensao<=358)&& (leitura_tensao>= 329)) { //130 a 120v
leitura_conv = (read_adc()* fm10);goto fim;}
if ((leitura_tensao<=328)&& (leitura_tensao>= 301)) { //120 a 110v
leitura_conv = (read_adc()* fm11);goto fim;}
if ((leitura_tensao<=300)&& (leitura_tensao>=272)) { // 110 a 100v
leitura_conv = (read_adc()* fm12);goto fim;}
if (leitura_tensao<=271) { // menor que 100v
leitura_conv = (read_adc()* fm13);goto fim;}
//etc ...
fim:
//----------------apresentação do display----------------//
delay_ms(500); //
lcd_locate(1,2); //Posiciona o cursor na segunda linha
printf(lcd_dado,"%3lu",leitura_conv); //Mostra a tensão medida
}
void corrente (void){
int i;
for (i=100; i>0; i--)
{
currentValue = (read_adc()-512)*0.059;
//sensorValue_aux = (read_adc()-511);
//sensorValue += pow (2,sensorValue_aux);
//sensorValue = (sqrt(sensorValue/500) * voltsporunidade);
//currentValue = ((sensorValue/66)*1000);
//sensorValue_aux = currentValue;
lcd_locate(1,8); //Posiciona o cursor na segunda linha
printf(lcd_dado,"%2.2f",currentValue);
//sensorValue=0;
delay_ms(150);
}
}
//-------------------programa principal-----------------//
void main(void)
{
inicializa_lcd(); //Chama função de inicialização lcd
setup_adc(ADC_CLOCK_DIV_8); // Configura clock da conversão
setup_adc_ports(an0_an1_an3); // Configura A/D
// set_adc_channel(0); // Lê a entrada 0
// delay_us(20);
// set_adc_channel(1);
// delay_us(20);
while(1)
{
{
//inicializa hw
lcd_locate(1,0);
printf(lcd_dado,"V=");
lcd_locate(1,6);
printf(lcd_dado,"A=");
//etc
for(;;)
{
set_adc_channel(0); // Lê a entrada 0
delay_ms(30);
leitura_tensao=read_adc();
leitura_conv=leitura_tensao;
lineariza_e_mostra();
delay_ms(250);
set_adc_channel(1);
delay_ms(30);
corrente();
delay_ms(250);
}
}
//for (i=100; i>0; i--)
//{
//sensorValue_aux = (read_adc()-511);
//sensorValue += pow (2,sensorValue_aux);
//sensorValue = (sqrt(sensorValue/500) * voltsporunidade);
//currentValue = (sensorValue/66)*1000;
//lcd_locate(1,8); //Posiciona o cursor na segunda linha
//printf(lcd_dado,"%2f",currentValue);
//}
}
}
//-----------------fim---------------//
carlucio escreveu:ADC conversion started before wait time has expired following previous conversion or channel change
if ((leitura_tensao<=410)&& (leitura_tensao>=385)) { // 150 a 140v
leitura_conv = (read_adc()* fm8);goto fim;}
if ((leitura_tensao<=386)&& (leitura_tensao>=359)) { //140 a 130v
leitura_conv = (read_adc()* fm9);goto fim;}
//-----------------------fuses do pic-----------------------//
#include <16F876A.h>
#device adc=10
#include "lcd.c"
#use delay(clock=4000000)
#fuses xt,nolvp,nowdt
#include <math.h>
//--------------variaveis globais---------------------------//
unsigned int16 leitura_tensao;//global
unsigned int16 leitura_conv;
//int i;
#define sensor_corrente pin_a1
float sensorValue_aux =0;
float sensorValue =0;
float currentValue =0.00;
float voltsporunidade = 0.0048828125;
//-------------constantes de conversão----------------------//
float fm = 0.393;
float fm1 =0.393;
float fm2 =0.382;
float fm3 =0.380;
float fm4 =0.373;
float fm5 =0.370;
float fm6 =0.366;
float fm7 =0.365;
float fm8 =0.364;
float fm9 =0.362;
float fm10=0.365;
float fm11=0.365;
float fm12=0.368;
float fm13=0.368;
//--------------------funções------------------//
void lineariza_e_mostra(void)
{
leitura_tensao=read_adc();
if((leitura_tensao>=562)){ //maior que 220v
leitura_conv=(read_adc() * fm);goto fim;}
delay_ms(1);
if ((leitura_tensao<=561) && (leitura_tensao>=544)){ // 220 a 210v
leitura_conv=(read_adc()* fm1);goto fim;}
delay_ms(1);
if ((leitura_tensao<=543)&& (leitura_tensao>=526)){ //210 a 200v
leitura_conv = (read_adc()* fm2);goto fim;}
delay_ms(1);
if ((leitura_tensao<=525) && (leitura_tensao>=509)){ // 200 a 190v
leitura_conv=(read_adc()* fm3);goto fim;}
delay_ms(1);
if ((leitura_tensao<=508) && (leitura_tensao>=487)){ // 190 a 180v
leitura_conv= (read_adc()* fm4);goto fim;}
delay_ms(1);
if ((leitura_tensao<=486)&& (leitura_tensao>=464)) { //180 a 170v
leitura_conv = (read_adc()* fm5);goto fim;}
delay_ms(1);
if ((leitura_tensao<=463)&& (leitura_tensao>=438)) { // 170 a 160v
leitura_conv = (read_adc()* fm6);goto fim;}
delay_ms(1);
if ((leitura_tensao<=437)&& (leitura_tensao>=411)) { // 160 a 150v
leitura_conv = (read_adc()* fm7);goto fim;}
delay_ms(1);
if ((leitura_tensao<=410)&& (leitura_tensao>=385)) { // 150 a 140v
leitura_conv = (read_adc()* fm8);goto fim;}
delay_ms(1);
if ((leitura_tensao<=386)&& (leitura_tensao>=359)) { //140 a 130v
leitura_conv = (read_adc()* fm9);goto fim;}
delay_ms(1);
if ((leitura_tensao<=358)&& (leitura_tensao>= 329)) { //130 a 120v
leitura_conv = (read_adc()* fm10);goto fim;}
delay_ms(1);
if ((leitura_tensao<=328)&& (leitura_tensao>= 301)) { //120 a 110v
leitura_conv = (read_adc()* fm11);goto fim;}
delay_ms(1);
if ((leitura_tensao<=300)&& (leitura_tensao>=272)) { // 110 a 100v
leitura_conv = (read_adc()* fm12);goto fim;}
delay_ms(1);
if (leitura_tensao<=271) { // menor que 100v
leitura_conv = (read_adc()* fm13);goto fim;}
delay_ms(1);
//etc ...
fim:
//----------------apresentação do display----------------//
delay_ms(500); //
lcd_locate(1,2); //Posiciona o cursor na segunda linha
printf(lcd_dado,"%3lu",leitura_conv); //Mostra a tensão medida
}
void corrente (void){
int i;
for (i=100; i>0; i--)
{
currentValue = (read_adc()-512)*0.059;
//sensorValue_aux = (read_adc()-511);
//sensorValue += pow (2,sensorValue_aux);
//sensorValue = (sqrt(sensorValue/500) * voltsporunidade);
//currentValue = ((sensorValue/66)*1000);
//sensorValue_aux = currentValue;
delay_ms(1);
lcd_locate(1,8); //Posiciona o cursor na segunda linha
printf(lcd_dado,"%2.2f",currentValue);
//sensorValue=0;
delay_ms(150);
}
}
//-------------------programa principal-----------------//
void main(void)
{
inicializa_lcd(); //Chama função de inicialização lcd
setup_adc(ADC_CLOCK_DIV_8); // Configura clock da conversão
setup_adc_ports(an0_an1_an3); // Configura A/D
while(1)
{
{
//inicializa hw
lcd_locate(1,0);
printf(lcd_dado,"V=");
lcd_locate(1,6);
printf(lcd_dado,"A=");
//etc
for(;;)
{
set_adc_channel(0); // Lê a entrada 0
delay_ms(30);
leitura_tensao=read_adc();
leitura_conv=leitura_tensao;
lineariza_e_mostra();
delay_ms(250);
set_adc_channel(1);
delay_ms(30);
corrente();
delay_ms(250);
}
}
}
}
//-----------------fim---------------//
Usuários navegando neste fórum: Google [Bot] e 1 visitante