Página 1 de 1

CONVERSÃO AD PELO JEITO MAIS DIFICIL

MensagemEnviado: 10 Jun 2015 12:26
por Pask
Amigos, eu uso o compilador MikroC que também dispõe de uma biblioteca interna para se trabalhar com o conversor AD dos microcontroladores. No entanto, se essa biblioteca não existisse ou se eu não quisesse usá-la e fazer tudo da forma "mais difícil", digamos assim, como eu poderia ler o resultado em 10bits da conversão AD nos registradores ADRESH e ADRESL do pic de modo a guardar este resultado numa variável de 16bits?

Por exemplo: imaginem que, após uma conversão, o valor obtido foi 945 digital que é representado na forma binária como: 11.1011.0001 => 10 bits
Também, suponhamos que o resultado foi justificado à esquerda tendo os 8 bits mais significativos em ADRESH e os 2 bits menos significativos em ADRESL. Então...
ADRESH = 1011.0001 => esta sequência representa o número 177.
ADRESL = 1100.0000 => esta sequência representa o número 192.

A pergunta é: como juntar ou usar algum recurso da linguagem C para unir os resultados numa única variável que mostrará o valor 945 obtido nesta conversão?


Aguardo uma ajuda.

Re: CONVERSÃO AD PELO JEITO MAIS DIFICIL

MensagemEnviado: 10 Jun 2015 12:27
por tcpipchip
union struct

Re: CONVERSÃO AD PELO JEITO MAIS DIFICIL

MensagemEnviado: 10 Jun 2015 12:28
por tcpipchip
ou multplica um por 256 (H) e soma com o outro (L)

Programa fica maior :(

Re: CONVERSÃO AD PELO JEITO MAIS DIFICIL

MensagemEnviado: 10 Jun 2015 12:29
por Pask
:? Fiquei na mesma.

Re: CONVERSÃO AD PELO JEITO MAIS DIFICIL

MensagemEnviado: 10 Jun 2015 12:47
por barboza
Código: Selecionar todos
u16 u16_ADValue;
u16 u16_ADDecimalValue;

  // Salve the AD value from the register
  u16_ADValue = ((ADRESH << 8) | (ADRESL << 0));

  // If left shifted, right shift them. 6 is 16 - 10 (ad resolution)
  u16_ADDecimalValue = (u16_ADValue >> 6);

  // Your output is "AD is 945"
  printf("AD is %d", u16_ADDecimalValue );

Re: CONVERSÃO AD PELO JEITO MAIS DIFICIL

MensagemEnviado: 10 Jun 2015 14:11
por ze
Que tal isso...
Código: Selecionar todos
unsigned int adcread(unsigned char channel)
{
   ADCON0 = (channel << 3) + 0xC1;      // enable ADC, RC osc.
   ADGO = 1;
   while(ADGO)
      continue;   // wait for conversion complete
return ADRESH*256+ADRESL;
}
//...
unsigned int an0,an1,an2;
an0=adcread(0);
//...
an1=adcread(1);
//...
an2=adcread(2);

Sugiro sujar um pouco as mãos com dando uma olhadela no datashit.
Não esqueça de lavar depois...

Re: CONVERSÃO AD PELO JEITO MAIS DIFICIL

MensagemEnviado: 10 Jun 2015 15:31
por Pask
Obrigado, Barboza, pela sua ajuda. Valeu e funcionou legal.

A propósito DWord, não se escreve "datashit" mas sim "datasheet" do "inglês correto" que significa "folha de dados". Quando eu leio datasheets e não datashits, eu não sujo as mãos. Apenas entendo e aprendo aquilo que leio. Não sei se você entendeu, mas não tenho problemas com datasheets. A minha dúvida era sobre como escrever um trecho de código de uma forma pouco usual.

Re: CONVERSÃO AD PELO JEITO MAIS DIFICIL

MensagemEnviado: 10 Jun 2015 16:20
por ze
perdão amigo mas vc não entendeu a mensagem subliminar (isso é normal). "conversão ad pelo jeito mais difícil" subentendi que é algo duro de fazer. ou seja hard. Do jeito que sugeri seria um acesso direto ao hardware. E realmente acessar direto o hw (o que eu 'carinhosamente' chamo de sujar as mãos, ver datasheets e etc) também é algo pouco usual pra geração ccs/arduíno (sei que não é seu caso).
Um dia perceberás que a solução que propus transcende um pouco o que pediu. Na ocasião, hás de considerar portanto que a sugestão para passar os olhos pelo d.s. era pra vc entender melhor os nomes dos registros (em maiúsculo) e sua função. Ouça portanto um virtual "de nada" antecipado e, de novo, um tardio "perdão meu amigo"

e por falar em msg subliminar...

Foi mal
Orientei-te como pude
Desculpa, não fui melhor
Agora não posso mais
-
Sou incapaz
Enfim, boa sorte

Ah e obrigado por me corrigir o inglês. É que sempre escrevo o que tenho na cabeça.

relaxa... Jesus te ama

Re: CONVERSÃO AD PELO JEITO MAIS DIFICIL

MensagemEnviado: 10 Jun 2015 17:39
por EvandrPic
Relaxa ze... ele falou com o "Dword"... :mrgreen: :lol:

ze escreveu:perdão amigo mas vc não entendeu a mensagem subliminar (isso é normal). "conversão ad pelo jeito mais difícil" subentendi que é algo duro de fazer. ou seja hard. Do jeito que sugeri seria um acesso direto ao hardware. E realmente acessar direto o hw (o que eu 'carinhosamente' chamo de sujar as mãos, ver datasheets e etc) também é algo pouco usual pra geração ccs/arduíno (sei que não é seu caso).
Um dia perceberás que a solução que propus transcende um pouco o que pediu. Na ocasião, hás de considerar portanto que a sugestão para passar os olhos pelo d.s. era pra vc entender melhor os nomes dos registros (em maiúsculo) e sua função. Ouça portanto um virtual "de nada" antecipado e, de novo, um tardio "perdão meu amigo"

e por falar em msg subliminar...

Foi mal
Orientei-te como pude
Desculpa, não fui melhor
Agora não posso mais
-
Sou incapaz
Enfim, boa sorte

Ah e obrigado por me corrigir o inglês. É que sempre escrevo o que tenho na cabeça.

relaxa... Jesus te ama