Comunicação SPI(Serial Peripheral Interface )
A Serial Peripheral Interface é um protocolo de dados seriais
síncronos utilizado em microcontroladores para comunicação entre o
microcontrolador e um ou mais periféricos. Também pode ser utilizado
entre dois microcontroladores.
A comunicação SPI sempre tem um Master, isto é, sempre um será o Master e o restante será Slave. Por exemplo, o PIC é o Master e os
outros periféricos são Slave. Esta comunicação contém 4 conexões:
- MISO (Master IN Slave OUT) - Dados do Slave para Master;
- MOSI (Master OUT Slave IN) - Dados do Master para Slave;
- SCK (Serial Clock) - Clock de sincronização para transmissão de dados entre o Master e Slave;
- SS (Slave Select) - Seleciona qual escravo receberá os dados.
Alguns periféricos são apenas Slave, por exemplo, cartão SD, memória flash e alguns sensores.
Geralmente estes periféricos contém a mesma pinagem que acima ou a pinagem abaixo:
- SDI (Slave Data IN) - Pino de dados de entrada;
- SDO - (Slave Data OUT) - Pino de dados de saída;
- CS - Seleção de Chip;
- SCK - Clock de sincronização.
Vantagens:
- Comunicação full duplex;
- Flexibilidade protocolo completo para os bits transferidos;
- Não se limita a 8-bit palavras;
- Escolha arbitrária do tamanho da mensagem, conteúdo e finalidade Interface de hardware extremamente simples;
- Normalmente mais baixos requisitos de energia do que I2C devido a menos circuitos;
- Não necessita de resistores de pull-up;
- Escravos usar relógio do mestre, e não precisam de osciladores de precisão;
- Os escravos não precisa de um endereço único;
Fonte: wikipedia
Desvantagens:- Requer mais pinos do CI;
- Sinais de out-of-band Chip Select são obrigatórios nos barramentos comuns;
- Sem controle de fluxo de hardware pelo escravo (mas o mestre pode atrasar o clock seguinte para diminuir a taxa de transferência);
- Não há reconhecimento do escravo (o mestre poderia estar transmitindo a lugar nenhum e não saberiamos);
- Suporta apenas um dispositivo mestre;
- Nenhum protocolo de verificação de erros é definido;
- Geralmente propenso a causar picos de ruído em comunicação defeituoso;
- Sem um padrão formal, validar a conformidade não é possível;
- Lida apenas com curtas distâncias em relação ao RS-232, RS-485, ou CAN-BUS;
- Muitas variações existentes, o que torna difícil encontrar ferramentas de desenvolvimento, como adaptadores de host que suportam essas variações;
Fonte: wikipedia
Exemplo:
Este exemplo controla o potenciômetro Digital AD5206. Possui 6 canais, isto é, 6 potenciômetros. Possui os seguintes pinos: A1, W1, B1 ... A6, W6, B6.
Código: Exemplo com PIC
MikroC PRO PIC
sbit CS0 at RC0_bit; sbit CS0_Direction at TRISC0_bit; void AD5206_write(short channel, short value){ CS0 = 0; //seleciona o periferico SPI1_Write(channel); //envia o endereço de um dos potenciometros(0 - 5) SPI1_Write(value); //envia o valor de posicao do potenciometro(0 - 255) CS0 = 1; //deseleciona o periferico } void main() { int i; CS0_Direction = 0; //define pino cs como saida CS0 = 1; SPI1_Init(); while(1){ //este loop faz alterar o valor do potenciometro do canal 0 for(i=0; i<255; i++){ AD5206_Write(0, i);//incrementa de 0 a 255 delay_ms(100); } //este loop faz alterar o valor do potenciometro do canal 0 for(i=255; i>=0; i--){ AD5206_Write(0, i);//decrementa de 255 a 0 delay_ms(100); } } }
Código: Exemplo com Arduino
Arduino IDE
Esse código foi feito em qual programa?
ResponderExcluirO primeiro foi feito no MikroC PRO PIC e o outro foi na IDE do Arduino.
ExcluirOlá, no codigo em C, onde estão as rotinas SPI1_Init e SPI1_Write? Obrigada
ResponderExcluirSPI1_Write e SPI1_Init são da biblioteca SPI, do próprio MikroC PRO PIC.
Excluirvc tem alguma coisa semelhante pro compilador HITECH? Obrigada pela ajuda
ExcluirOlá Tiago será que você pode me ajudar com o CI ISD1730? é um ci para gravação e reprodução de faixas de áudio, ele trabalha com comunicação SPI, porém não estou conseguindo fazer o microcontrolador acessar a faixa de memória exata que gravei a mensagem e no tempo certo de reprodução. meu e-mail é henrique-sousa1994@hotmail.com
ResponderExcluirÉ possível fazer a comunicação spi com o pic 16f628A?
ResponderExcluirVc teria algum exemplo usando o RTC DS1302?