Página 1 de 1

Ajuda Comunicação SPI Max6675 x Atmega8

MensagemEnviado: 07 Mar 2009 22:45
por tmarchesi2
Olá Pessoal do forum !

Gostaria de saber se alguém poderia me ajudar com o protocolo de comunicação SPI programado no Codevision C.
Estou tentando comunicar o chip MAX6675 e pesquisando no help do codevision, não encontrei nenhum exemplo que esclarece-se as minhas dúvidas.

Como ele tem uma biblioteca spi.h depois do Codewizard gerado, eu acredito que é só chamar esta função dentro do programa principal, e é ai onde eu tenho mais dúvida, e peço ajuda !
O Max6675 é um condicionador de sinais temopar de 12bits, eu gostaria de receber o valor convertido em uma váriavel para poder dar sequencia no projeto.

Eu estou simulando o circuito no proteus, e os resultados da simulação são muito precisos e tem me ajudado a ganhar muito tempo na hora do desenvolvimento.

Gratos a todos.

MensagemEnviado: 08 Mar 2009 08:18
por brasilma
Marchesi,

Uma das pessoas que entendem bem do CodeVision é o Mauricio, porem infelizmente ele não está mais tão ativo por aqui, mas tenho certeza de que se contactá-lo diretamente vai te ajudar, como sempre o fez com todos.

Abraços,
MArcos.

MensagemEnviado: 08 Mar 2009 10:49
por tmarchesi2
Ok Brasilma;

Vou tentar entrar em contato por e-mail com ele !

Enquanto isso, fico no aguardo de mais ajuda.


Grato;

Tmarchesi

MensagemEnviado: 10 Mar 2009 18:10
por RobL
Não conheço essa particular função, mas spi terá que estar configurado, ou a sua função já o configura a cada chamada:

Veja se seu chip transmite LSB ou MSB como primeiro bit. Esta é uma simples encrenca. Veja na sua função como passar essa configuração para ela (ou confugurar por outra função).
Passar o clock se houver esse parâmetro na função, caso ao chamá-la ela configure o spi, ou configurar o spi por outra função.
Cuidado, respeitar o clock máximo permitido no seu chip.
Configurar ATM8 spi como master. Basicamente é isso.

O SPI do ATM8 comporta um byte por vez (spi), mas é possível ser chamada n vezes e trabalhar com 16, 24, 32, etc bits.
Se sua função tiver como determinar(configurar ou passar) o tipo ou número de bits, se inteiro, poderá concatenar 2 bytes, ou conforme for a definição de inteiro do Codevision.

Quanto à conversão de tipo, creio que deverá ser feito por outra função, através do resultado retornado, salvo se ela já tiver também essa opção.

MensagemEnviado: 11 Mar 2009 00:42
por tmarchesi2
Fala Robl !

Entendi o que você quis dizer, eu verifiquei o wizard do code vision e ja existe grande parte destas opções para configurar. Porém continuo perdido em como tratar os dados porque eu olhei no manual do codevision e tem um exemplo de SPI, e após gerar o esqueletão, fica uma biblioteca SPI.h carregada no corpo principal.
Eu to tentando descobrir quais comando esta biblioteca disponibiliza, e ai podera facilitar as coisas.

Pode ser que neste meio, dois três comandos, a comunicação seja realizada.


To na briga aqui, vamos ver o que acontece.

Grato;

MensagemEnviado: 12 Mar 2009 14:14
por RobL
Me interessei em ver o max6675. Ele é MSB first.
Muito cuidado com o atraso necessário após descer o nível CS de no mínimo 100ns, conforme o manual. Recomendo testar com 10x mais.
Encontrei essa discussão que tenho certeza que vai lhe ajudar:

http://www.avrfreaks.net/index.php?name ... 30&start=0

MensagemEnviado: 14 Mar 2009 17:38
por tmarchesi2
Muito bom o tópico RobL, eu pesquisei no avrfreaks mas não encontrei nada tão completo.

Eu dei uma parada de mexer neste projeto que é para fins particular, para dar prioridade no projeto do outro tópico "interpolar dados", que é um trabalho da facul com data marcada para a entrega.

Agora eu to desenhando um adaptador, porque o chip é soic8 e não quero danificar os terminais.


Grato pela ajuda, Robl.

obs: eu tenho o livro do Embedded C Programming and the Atmel AVR, que por sinal está emprestado, porém meu inglês está um pouco defasado ! rs.

MensagemEnviado: 14 Mar 2009 20:23
por Maurício
Salve, tmarchesi2. Tudo em paz?

A biblioteca SPI só tem a função SPI, não tem nenhuma outra.

A função spi escreve e lê simultaneamente. No caso desse seu AD, vc precisa fazer duas chamadas na função pra poder pegar os 12 bits do AD. A primeira chamada vem o MSB do AD. A segunda, o LSB. Depois, é só juntar os dois bytes em um inteiro de 16 bits.

Se é pra ler, vc pode codificar assim:

Código: Selecionar todos
void main ( void )
{
    char dado = 0;

    dado = spi (0);    // lê oito bits do SPI e escreve o valor ZERO no SPI
}


E se for pra escrever, vc pode usar assim:

Código: Selecionar todos
void main ( void )
{
    char dado = 0xAB;

    spi ( dado );
}


É necessário saber qual o modo de SPI que o seu escravo trabalha, pra vc poder configurar o AVR de forma igual.

[]'s