Página 1 de 1

Trabalho com ADC 12bits paralelo

MensagemEnviado: 19 Mai 2007 11:18
por Flaviofrc
Olá,

Estou trabalhando num circuito com um PIC16F877 para ler um ADC de 12bits com saída paralela, os 8 bits menos significativos estão conectados ao PortB e os 4 bits MSB estão conectados ao PortA.

Minha duvida é, com eu faço a aquisição desses dados e junto tudo para ter um valor inteiro de 12bits?
Eu sei como fazer a leitura dos ports em separado mas não sei como se junta MSB e o LSB.

Estou programando em C CCS para facilitar minha vida.....

Desde já agradeço a ajuda.

MensagemEnviado: 19 Mai 2007 12:53
por Maia
É só multiplicar a parte alta por 256 e somar à parte baixa. O resultado tem que ir pra uma variável que suporte os 16 bits.( não sei se no CCS é int).

int RESULTADO;
char MSB, LSB;

RESULTADO = (MSB * 256) + LSB;

Abraços,
Maia

MensagemEnviado: 19 Mai 2007 13:31
por takapy
Faz um deslocamento no MSB de oito bits à esquerda (MSB<<8 ) e faz uma lógica OR com o LSB.

int LSB;
long int DADO,MSB;
DADO=((MSB<<8 )|LSB);

Espero que funcione...

MensagemEnviado: 19 Mai 2007 17:23
por TEC_AUTOMAÇÃO
Vamos mudar iso ? e se de colocarmos um ad i2c ou spi e economizarmos 10 pinos ?

MensagemEnviado: 19 Mai 2007 21:14
por Red Neck Guy
Olha, sem querer ser chato, mas essas dúvidas são referentes a linguagem C e não a microcontroladores pic...
Outrora, como além de chato gosto de ficar ostentando que eu sei um pouco mais do que a média que acessa o fórum, responderei aqui e logo em seguida ficarei me achando o cara:

Assim ó:
-Supondo que tu quer juntar duas variaveis de 8 bits numa de 16...
(Embora só os 12 bits sejam significativos...O compilador não tem tipo de 12 bits....)
...
unsigned char cont1,cont2;
unsigned int total;

cont1 = getPortA(); //abstração de algo que Lê um port genérico
cont2 = getPortB() && 0xFF;
total = cont1<<8 | cont2;


Olha:
Agora pra pegar algo que vem seriado é só ir shiftando conforme vai lendo...


Cara, eu sou muito metido, tá loco! :oops:

MensagemEnviado: 19 Mai 2007 22:01
por takapy
cont2 = getPortB() && 0xFF; Me corrijam se eu tiver errado:

getPotB() && 0xFF = getPortB(), ou seja, essa máscara não tá fazendo nada, uma vez que essa palavra é de 8 bits e o resultado é a própria variável sem alteração.

unsigned int total; a variável total precisa ser de 16 bits (pois não tem 12 bits), logo, teria que ser:
unsigned long int total;

T + ver.

MensagemEnviado: 20 Mai 2007 01:18
por Flaviofrc
Olá pessoal,

Já entendi como se faz... Obrigado a todos...

E prá você Aquino, sem falsa modestia e sem puxar o saco de ninguem....

EU SÓ POSTO MINHAS DUVIDAS AQUI PORQUE SEI TEM FERAS NO ASSUNTO COMO VOCÊ.... E isso é para todos....

Lá se vai o ego do Aquino hehehe
:D :D :D :D :D :D :D :D

MensagemEnviado: 20 Mai 2007 16:09
por KrafT
Bah, o Aquino é meu, ninguem tasca!!! Hehehehe...

Eu mapearia os dois caras numa struct do tipo:


union {
unsigned int _converte;
struct {
byte Alta :8;
byte Baixa :8;
} ADSTR;
} AD_UNION;

#define Var16 AD_UNION._converte
#define Var8Lo AD_UNION.ADSTR.Baixa
#define Var8Hi AD_UNION.ADSTR.Alta


Assim basta jogar os valores em Var8Hi e Var8Lo e ler em Var16.

MensagemEnviado: 21 Mai 2007 08:21
por fabim
Kraft. igualim eu fazio.. Em pascal tem um comando pareceido. :)


fabim

MensagemEnviado: 21 Mai 2007 08:46
por Flaviofrc
Olá Kraft,

Interessante esse sistema, não tinha pensado em usar uma struct, acho que preciso estudar mais sobre C :D

Abraço

MensagemEnviado: 25 Abr 2009 10:55
por scheleder
Maia escreveu:É só multiplicar a parte alta por 256 e somar à parte baixa. O resultado tem que ir pra uma variável que suporte os 16 bits.( não sei se no CCS é int).

int RESULTADO;
char MSB, LSB;

RESULTADO = (MSB * 256) + LSB;


Como faria isso em Assembly?
Qual variável suporta 16 bits?

MensagemEnviado: 25 Abr 2009 12:10
por Vonnilmam
Cara, não seria mais facil vc utilizar o ADC do proprio pic?

É claro estou entendendo que o que vc precisa de precisão poderia ser engolido pelo ADC do pic, Ok...antes que alguém contradiga!

Outra coisa como eu sou o mais inexperiente deste forum, nem comentarei o que o aquino disse! Mas vale lembrar que aquí é forum sobre microcontroladores, quer seja duvidas sobre hardware ou SOFTWARE, não importa a limguagem e sim o intuito de ajudar os amigos,

É que eu penso quando eu imagino o que deva ser um FORUM....

Sei lá,

Ao caro scheleder eu aconselho vc dar uma olhada no livro do fabio ou no livro conectando o pic, lá tem uma forma de vc fazer o que deseja em assembler...