Ir ao conteúdo
  • Cadastre-se

Duvida SPI


Francisco. F

Posts recomendados

Implemente um dos dois por Software.

Observe que quando um Micro tem alguns pinos que podem ser usados para algum hardware,não siginifica que voce tem que usá-los.

Eu não costumo implementar RS232 e I2C por Hardware,pois geralmente eles usam PORTs diferentes,e se eu quiser usar um PORT inteiro,fica comprometido,e além do mais,I2C e RS232 não é uma implementação crítica.

Link para o comentário
Compartilhar em outros sites

Para interfaces síncronas (como spi, i2c) é bem fácil desenvolver uma rotina para implementar essas comunicações via software.

Interfaces assíncronas, como RS232, são mais complicadas para se emular por software, já que exigem tempo crítico, e ocupam muito tempo do processador.

Link para o comentário
Compartilhar em outros sites

Fazer "bit-banging" de uma SPI é algo de certa forma simples, os tempos envolvidos não são tão críticos por ser uma interface sincrona.

Pensemos, a SPI envia 8bits ou 16 (vamos considerar 8 para ser mais simples) de dados seguidos de 8 pulsos de clock, e tem um estado de "Idle" para indicar quando o barramento está livre.

Um modo de se fazer o bit-banging SPI pode ser da seguinte forma em pseudo-código:



pino SCK bit
pino SDI bit
pino SDO bit
pino CS bit

bufferSPI byte

SCK := 1 %fica em idle state

transmitirSPI:
bufferSPI := dadode8bits

CS := 0
SCK := 0 %tira o bus de idle state

para I := 0 até I:= 7 faça
SDO := ((bufferSPI AND 0x80) >> 8) %cospe 1bit do dado em SDO
bufferSPI := bufferSPI << 1 %desloca o proximo bit
geraatrasodemeiotbit
SCK := 1
geraatrasodemeiotbit
SCK := 0
fimpara

SCK := 1 %bus livre
CS := 1 % libera o escravo
fimtransmistirSPI

Estou meio sem tempo de estruturar o bit-banging da recepção, use o mesmo raciocionio ai e tente estruturar, e qualquer problema da um toque.

Assim que eu folgar aqui no trampo estruturo a faltante ok, mas isso nao te insenta de pesquisar um pouquinho e tentar fazer o caminho inverso do algoritmo acima.

Abs.

Link para o comentário
Compartilhar em outros sites

agradeço as dicas mas ainda nao consegui comunicar.

Acho que já implementei o SPI por software mas nao encontro um codigo que me ajude, nunca trabalhei com este tipo de comunicaçao.

Quem tiver um codigo exemplo que possa postar aqui agradecia.

Para já o que fiz foi isto:

#define CS PIN_C3

#use spi(DI=PIN_A5, DO=PIN_A4, CLK=PIN_A1, ENABLE=PIN_A3, BITS=16)

void ad5231()

{

output_high(CS);

spi_xfer(0b00100000);

spi_xfer(0x02);

spi_xfer(0x00);

output_low(CS);

}

Sugestoes para o que fiz mal?!

Link para o comentário
Compartilhar em outros sites

Francisco, tomemos cuidado para não confundirl, ao usar as rotinas da SPI do CCS você forca que o microcontrolador use o modulo SPI via hardware, desse modo fica impossivel implementar um bit-bang (ou via software).

Da uma pensada naquele meu algoritmo no post anterior e tente converte-lo e testar em linguagem C, não é muito difícil.

Abs.

Link para o comentário
Compartilhar em outros sites

Filipe repare na ajuda do CCS,

Ao usar #use spi(DI=PIN_A5, DO=PIN_A4, CLK=PIN_A1, ENABLE=PIN_A3, BITS=16) eu estou a forçar o micro a usar o spi nos pinos que me interessam.

A usar #use spi(FORCE_HW, BITS=16, stream=SPI_STREAM) aí sim, estou a forçar o micro a usar o hardware. (force_hw= force hardware)

Pelo que li acho que estou correcto.

Mas vou tentar colocar o seu algoritmo em linguagem C depois se conseguir posto para veres.

Abraço

Link para o comentário
Compartilhar em outros sites

Filipe repare na ajuda do CCS,

Ao usar #use spi(DI=PIN_A5, DO=PIN_A4, CLK=PIN_A1, ENABLE=PIN_A3, BITS=16) eu estou a forçar o micro a usar o spi nos pinos que me interessam.

A usar #use spi(FORCE_HW, BITS=16, stream=SPI_STREAM) aí sim, estou a forçar o micro a usar o hardware. (force_hw= force hardware)

Pelo que li acho que estou correcto.

Mas vou tentar colocar o seu algoritmo em linguagem C depois se conseguir posto para veres.

Abraço

Está correto.

Com que hardware você está tentando se comunicar?

Uma coisa, tente definir o baudrate, em 100000


#use spi(DI=PIN_A5, DO=PIN_A4, CLK=PIN_A1, ENABLE=PIN_A3, BITS=16, BAUD=100000)

Link para o comentário
Compartilhar em outros sites

o hardware que estou a tentar comunicar é o AD5231, é um potenciometro digital.

O pic é o 16f690.

Já experimentei mudar o baudrate e continuo com os mesmos problemas.

Nao sei se será dos registos pois o potenciometro varia de resistencia sempre que altero os dados.

Mas para valores que nao seriam os esperados.

Acham que está a comunicar com o AD5231?

Link para o comentário
Compartilhar em outros sites

A comunicação deve estar ocorrendo, apenas pode ser algum problema no comando de escrita.

Estas a obedecer os comandos da tabela dada no datasheet do mesmo?

Da uma olhada na pagina 14:

http://www.analog.com/static/imported-files/data_sheets/AD5231.pdf

Veja que para escrever um dado você deve respeitar a seguinte ordem:

Bytedecomando | Bytededados1 | Bytededados0

Eu sugeriria a você para usar a SPI no modo 8bits, fica mais fácil de controlaor os bytes assim,

Exemplo para escrita do valor 0x100:



//escreve 0x100 no AD5231

spi_xfer (0x0B); //envia comando
spi_xfer (0x01); //envia high byte
spi_xfer(0x00); //envia low byte

Talvez o fato de usares a SPI em 16bits esteja causando o efeito indesejado no seu AD5231.

faça os testes e qualquer probleema da um toque.

Abs.

Link para o comentário
Compartilhar em outros sites

A comunicaçao está a ocorrer, confirmei isso no osciloscopio.

Tinha sinal de clock no clk, tinha pulsos no sdo do micro.

Na Sdi do micro vi uma coisa que nao sei se é estranha ou nao, Tinha 5 volts e dava os pulsos para baixo ??!

Alem disso desmontei e voltei a montar o hardware e continua igual.

alguma sugestão?

Tambem já tinha experimentado trabalhar a 8 bits como me sugeriu filipe e enviei a sequencia correcta como esta no datasheet mas continua sem funcionar.

Já nao sei de onde pode vir o problema.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!