Ad externo ligado ao msp430f169

Software e Hardware para uC Texas

Moderadores: andre_luis, 51

Ad externo ligado ao msp430f169

Mensagempor Luiz511 » 06 Nov 2006 09:58

Bom dia a todos!

Bem, eu estou iniciando no msp430f169 e tenho uma dúvida: Eu tenho uma conversor AD externo de 12 bits ligado a duas portas do msp430f169 (na verdade o esquema é conversor - fifo - msp) e tenho que colocar os dados provenientes da fifo em um vetor de 1024, então serão 1024 bits menos significativos e 1024 bits mais significativos, formando um vetor de 1024 palavras de 16 bits.

Eu vi que no sistema deste controlador os bytes menos significativos são alocados em posições pares e os mais significativos em posições ímpares no mapa de memória. Como eu faço para especificar este tipo de alocação (dizer onde um byte deverá ficar) e como faço pra dizer para o compilador que o vetor formado é de 16 birs? (eu estou programando em C).

Muito obrigado (e me desculpe pela extensão do texto)!

Luiz
Luiz511
 
Mensagens: 1
Registrado em: 06 Nov 2006 08:59

Re: Ad externo ligado ao msp430f169

Mensagempor andre_luis » 06 Nov 2006 10:33

O 'C' permite um certo grau de abstracao da implementacao do código.
Basta voce se referir ao byte mais/menos significativo da variável para acessá-lo.

Por exemplo, para um long :
Mais signif. ( Variavel >> 8 )
Menos signif. ( Variavel % 256 )

Se for usar ponteiro de 8 bits em um vetor de variaveis de 16 bits, o mais signifiactivo é o primeiro, o menos o segundo e por aí vai.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor gibim » 08 Nov 2006 23:43

Pra falar a verdade, você não precisa se preocupar com isso. A menos que queira fazer alocação em endereços ímpares, mas se está programando em C, o próprio compilador se encarrega de não deixar você fazer isso. Podendo também depois conferir no assembler o que o compilador fez com seu código.

Eu tentaria assim.

int main(void)
{
unsigned int Dado;
unsigned int Buffer[1024];
unsigned int Indice = 0;
unsigned int i;

while(i<1024)
{
// Fazer leitura das portas. Se todas as portas estiverem alinhadas
Dado = P0IN; /* Esta portas leem o dado menos sigificativo*/
Dado |= (unsigned int)P1IN << 8; /*Estas portas leem o dado mais significativo*/

// Armazenar na fila
Buffer[i] = Dado;

i++;
}

// Por exemplo, transmite pela serial

for(i=0; i<1024; i++)
{
SendSerial(Buffer[i]);
}

}

return 0;
}
Avatar do usuário
gibim
Byte
 
Mensagens: 117
Registrado em: 08 Nov 2006 21:40
Localização: Londrina - PR

Mensagempor Fábio Pereira » 09 Nov 2006 07:27

Não entendi algumas coisas:

1) Porquê usar conversor externo de 12 bits se o MSP já possui um interno com a mesma resolução ?

2) Você pretende ocupar 2048 bytes da RAM do 169 ? Isto quer dizer que irão sobrar 0 (zero) bytes de memória para a pilha e aplicação ...

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 andre_luis » 09 Nov 2006 08:31

Fábio Pereira escreveu:...Porquê usar conversor externo... ?


Bem lembrado Fábio, Além do mais ele possui vários canais.

Fábio Pereira escreveu:Isto quer dizer que irão sobrar 0 (zero) bytes de memória para a pilha e aplicação ...


Não é algo elementar, mas poderia ser feito o seguinte : Por ser uma arquitetura Harward, ele poderia criar uma função para armazenar na Flash - ao ivéz da RAM, correto ?


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ


Voltar para Texas

Quem está online

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

x