Variaveis no AD do MC9S08QG8 (migrado)

Software e Hardware para uC da Qualcomm, NXP, FreeScale e Motorola

Moderadores: 51, guest2003

Variaveis no AD do MC9S08QG8 (migrado)

Mensagempor Fábio Pereira » 17 Out 2006 17:33

Loser
Professor


Brazil
297 Posts Posted - 04/01/2006 : 09:36:11
--------------------------------------------------------------------------------
Beleza pessoal estou com uma duvida de quem não conhece muito(alias muito pouco de C),estou utilazando o AD do MCU MC9S08QG8 e não sei como juntar os dois registradores do AD (ADCRH e ADCRL) de 8 bits em apenas uma variavel de 16 bits( VALOR_AD) ou seja juntar dois registradores de 8 bits em um de 16 , seria apenas uma soma ou tem um jeito mais correto de juntar duas variaveis?

Falou

LOSER

Fabio Pereira
Conselheiro


Brazil
2205 Posts Posted - 04/01/2006 : 11:39:56
--------------------------------------------------------------------------------
Bom,

Isso tem no meu livro ...

Tópico 1.2, tópico 6.7.2.1, exemplo 6-10.

De qualquer forma, basta utilizar o símbolo ADCR, por exemplo: VALOR_AD = ADCR;

Até +

Fábio Pereira
ScTec - Automação e Projetos Especiais
www.sctec.com.br


Edited by - Fabio Pereira on 04/01/2006 11:44:39

Loser
Professor


Brazil
297 Posts Posted - 04/01/2006 : 12:18:56
--------------------------------------------------------------------------------
Fabio o ADCR não existe como registrador Hardware ele é uma variavel de programa de 16 bits que esta relacionada aos doi registradores do AD certo? Se for isso o meu problema esta solucionado.
Muito obrigado

LOSER

Fabio Pereira
Conselheiro


Brazil
2205 Posts Posted - 04/01/2006 : 13:02:10
--------------------------------------------------------------------------------
Bom,

Na verdade o ADCR existe sim, considerando que uma variável de 16 bits (num sistema de 8) é composta de dois bytes consecutivos e considerando ainda que os registradores ADCRH e ADCRL estão localizados em endereços consecutivos, uma variável de 16 bits alocada no endereço 0x0012 irá retornar o resultado da conversão. Isto é exatamente o que o símbolo ADCR faz, na verdade, o ADCR é uma variável de 16 bits alocada no endereço 0x0012 (o endereço do ADCRH).

Quando você faz uma atribuição de um inteiro como em RES16 = ADCR, o compilador irá fazer a leitura dos dois bytes que compoem a variável ADCR.

Até +

Fábio Pereira
ScTec - Automação e Projetos Especiais
www.sctec.com.br


Loser
Professor


Brazil
297 Posts Posted - 04/01/2006 : 18:35:23
--------------------------------------------------------------------------------
La vai outra duvida estupida , liquei um trimpot no pta1 e configurei ele como ad mudando o valor do trimpot o ADCR muda de valor tambem o problema e que ele fica variando quando vario o trimpot com um valor que pode chegar a 2900 em decimal sendo que 10 bits so permitem ir ate 1023 onde posso estar errando dessa vez

//CONFIG INIT AD
ADCSC1=33;
ADCSC2=0;
ADCCFG=21;
APCTL1=2;

result=ADCR;

LOSER

Fabio Pereira
Conselheiro


Brazil
2205 Posts Posted - 05/01/2006 : 08:02:54
--------------------------------------------------------------------------------
Não vejo nada de errado no trecho de programa que você postou.

Mas o funcionamento que você relata é realmente anormal.

Até +

Fábio Pereira
ScTec - Automação e Projetos Especiais
www.sctec.com.br


Loser
Professor


Brazil
297 Posts Posted - 09/01/2006 : 06:58:12
--------------------------------------------------------------------------------
Beleza

Descobri por que o meu programa não estava rodando de forma correta , a um equivoco na descrição do funcionamento do AD na pagina 146 do sue livor Fabio no item 6.7.2.7 o bite MODE esta escrito de forma equivocada

Livor MICROCONTOLADORES HCS08
00 resultato de 8 bits
01 resultado de 10 bits
10 reservado
11 reservado

Data MC9S08QG8
00 resultato de 8 bits
01 reservado
10 resultado de 10 bits
11 reservado

Apos Escrever conforme o Data MC9S08QG8 o programa funcionou normalmente e pude simular o AD sem nenhum problema.
Valeu pessoal
Falou

LOSER

Edited by - loser on 09/01/2006 07:01:52

Fabio Pereira
Conselheiro


Brazil
2205 Posts Posted - 09/01/2006 : 09:22:08
--------------------------------------------------------------------------------
Realmente,

A informação do livro está incorreta, houve um problema de revisão neste item :-( . Vou incluir esta informação na errata.

De qualquer forma, o arquivo hcs08.h está correto e se utilizar os símbolos que eu tive o cuidado de criar para o livro, seu programa funcionará sem problemas.

Até +

Fábio Pereira
ScTec - Automação e Projetos Especiais
www.sctec.com.br
Fábio Pereira
embeddedsystems.io
Avatar do usuário
Fábio Pereira
Word
 
Mensagens: 674
Registrado em: 16 Out 2006 09:07
Localização: Kitchener, ON

Mensagempor lafourcade » 20 Out 2006 08:39

(Aproveitando o assunto)
O que eu vou mencionar agora pode parecer ridiculo, mas... Eu configurei o ad do meu QG4 para 10 bits, Quando eu faço a emulação eu vou ler na variavel que eu guardo o valor de 10 bits e la tem 12bits. Explico: Inicialmente eu estava lendo 10 bits fiz uma logica and para isolar os 10 bits, para pegar somente os dois primeiros bits do High, mas eu reparei que ele chegava em 1023 e eu continuava movimentando o trimpot e ele começava do 0 e ia subindo. Ai eu fiz o teste: isolei os 4bits mais significativos do High e continuei lendo os outros: quando estou na metade do trimpot eu tenho 2047 e quando eu chego no final tem 4095. Tem uma explicação logica para isso? Mesmo que por acaso eu tivesse configurado errado meu ad não teria esplicação para esta resposta ser linear. E se eu configurei errado... Sempre que eu precisar de precisão, vou configurar errado. Isso Ja aconteceu com alguém?
lafourcade
Byte
 
Mensagens: 123
Registrado em: 20 Out 2006 06:40

Mensagempor Fábio Pereira » 20 Out 2006 09:32

Coloque o seu programa aqui para podermos analisar.

Até +
Fábio Pereira
embeddedsystems.io
Avatar do usuário
Fábio Pereira
Word
 
Mensagens: 674
Registrado em: 16 Out 2006 09:07
Localização: Kitchener, ON

Mensagempor fenix3 » 20 Out 2006 11:38

lafourcade escreveu:(Aproveitando o assunto)
Quando eu faço a emulação eu vou ler na variavel que eu guardo o valor de 10 bits e la tem 12bits.


Ola,
Estou sem o manual aqui, mas parece uma questao de alinhamento/centralizacao dos dados das variaveis ADCRL e ADCRH, que acabei consultando o manual e nao tem esta opcao, entao pode ser que o conversor tenha 12 bits entao!, ou ainda existe um erro na sua mascara para leitura dos valores de AD...
Luis Fenix
Maaaaraaaaviiilhaaaaaa! (Bem devagar para irritar a todos).
Avatar do usuário
fenix3
Byte
 
Mensagens: 317
Registrado em: 12 Out 2006 03:46
Localização: Minha sala, ora pois!

Mensagempor lafourcade » 20 Out 2006 14:15

Esta rotina esta acontecendo no meu "main" e aqui eu leio tres canais de AD. A variavel temperatura recebe um valor que varia de 0 a 4095. O outro canal eu leio na interrupção.

ADCSC2 = 0B00000000;
ADCSC1 = 0B00000001;

while(!ADCSC1_COCO); //Lê o valor da Analogica das teclas
teclas = ADCRL;

ADCCFG = 0B00000111;
ADCSC1 = 0B00000110;

while(!ADCSC1_COCO); //Lê o valor da Analogica da temperatura
temperatura = ((ADCRH & 0B00001111) * 256) + ADCRL;

ADCCFG = 0B00000011;
ADCSC2 = 0B00110000;
ADCSC1 = 0B01100100;

Eu setei o valor de 2500, para a minha analogica "temperatura", como nível máximo de tensão, e ele chega e passa desse valor.

deem uma olhada ai!
lafourcade
Byte
 
Mensagens: 123
Registrado em: 20 Out 2006 06:40

Mensagempor fenix3 » 20 Out 2006 15:29

lafourcade escreveu: while(!ADCSC1_COCO); //Lê o valor da Analogica da temperatura
temperatura = ((ADCRH & 0B00001111) * 256) + ADCRL;


Porque voce esta multiplicando por 256?

Com esta multiplicacao sempre que o valor passar de 8 bits, os bits exedentes irao ser multiplicados por 256, eh isto mesmo que voce quer?
Luis Fenix
Maaaaraaaaviiilhaaaaaa! (Bem devagar para irritar a todos).
Avatar do usuário
fenix3
Byte
 
Mensagens: 317
Registrado em: 12 Out 2006 03:46
Localização: Minha sala, ora pois!

Mensagempor lafourcade » 20 Out 2006 15:59

Fenix3
Na verdade eu faço isso para transformar este byte no mais significativo.

ex: 1 * 256 = 256;
0x01 * 0xFF = 0x1FF;

ex2: ( (0B00000001) * 256) + 0B00000001 = 257; ou seja
0B 00000001 00000001;

entendeu?
lafourcade
Byte
 
Mensagens: 123
Registrado em: 20 Out 2006 06:40

Mensagempor fenix3 » 20 Out 2006 17:28

lafourcade escreveu:entendeu?

A bom!

Mas entao, se os valores estao variando de (b00000000|b00000000) ate (b00001111|b11111111) entao ta dando 12 bits, estranho...
Luis Fenix
Maaaaraaaaviiilhaaaaaa! (Bem devagar para irritar a todos).
Avatar do usuário
fenix3
Byte
 
Mensagens: 317
Registrado em: 12 Out 2006 03:46
Localização: Minha sala, ora pois!

Mensagempor Renie » 20 Out 2006 17:57

Olá Lafourcade!

O que parece é que a configuração está errada mesmo, ao invés de 10 bits está com 12 bits, já reveu o ponto do seu programa onde configura
para os 10 bits?
Renie
Word
 
Mensagens: 732
Registrado em: 11 Out 2006 22:35
Localização: RJ - Niterói - Brasil

Mensagempor lafourcade » 23 Out 2006 07:35

Renie escreveu:Olá Lafourcade!

O que parece é que a configuração está errada mesmo, ao invés de 10 bits está com 12 bits, já reveu o ponto do seu programa onde configura
para os 10 bits?


Quando eu seto o bit 3 e 2 com 01 no registrador ADCCFG ele fica configurado para AD de 10 bits. se eu colocar 00 fica configurado para 8 bits.
ADCCFG = 0B00000111;

É muito estranho.
lafourcade
Byte
 
Mensagens: 123
Registrado em: 20 Out 2006 06:40

Mensagempor eletroinf » 09 Mar 2007 13:44

Sem querer dar uma de coveiro, mas achei esse tópico procurando outra coisa, então resolvi testar. Com um QG8, o AD configurado pra 10 bit ele funciona @ 12bits!! Será que estão errados os datasheets ? :mrgreen: :mrgreen:
Alguém chegou a alguma conclusão ?!
Avatar do usuário
eletroinf
Word
 
Mensagens: 948
Registrado em: 12 Out 2006 14:59
Localização: Santa Maria - RS

Mensagempor eletroinf » 12 Mar 2007 20:50

Oops! Tá lá na errata do Livro do Fábio. Os bits <3:2> do registrador ADCCFG: para o AD funcionar no modo 10bit devem estar em "10" e não em "01".
Pelo menos descobri essa dos 12 bit, até que não é nada mau... resta saber se funciona bem mesmo, heheheh.
Avatar do usuário
eletroinf
Word
 
Mensagens: 948
Registrado em: 12 Out 2006 14:59
Localização: Santa Maria - RS


Voltar para NXP (ex-FreeScale (ex-Motorola))

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x