Página 1 de 1
Ajuda Comunicação SPI Max6675 x Atmega8

Enviado:
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.

Enviado:
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.

Enviado:
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

Enviado:
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.

Enviado:
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;

Enviado:
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

Enviado:
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.

Enviado:
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