пятница, 20 июня 2014 г.

Как подключить микросхему по SPI

RUS:

http://microsin.ru/content/view/1276/44/

http://www.echemist.in.ua/2012/04/%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-atmega8-%D1%81-ads1286/

http://avrproject.ru/publ/poleznaja_informacija/configuration_spi_bascom_avr/4-1-0-66

http://easymcu.ru/publ/11-1-0-78

http://chipenable.ru/index.php/programming-avr/item/138-avr-spi-module-part2.html

http://samou4ka.net/page/podkljuchenie-vneshnego-acp-po-spi-k-mikrokontrolleru-avr

 

http://www.embed.com.ua/komplektuyushhie/tsifrovoy-potentsiometr-ad8402/

реализация программного SPI для подключения микросхемы потенциометра:

#include  <avr/io.h>           
#include <util/delay.h>   #define PORT_SPI PORTD/*назначения портов и сигналов*/
#define DDR_SPI DDRD
#define PIN_SPI PIND
#define SDO PD0
#define CKL PD1
#define CS PD2
#define SHDN PD3
#define RS PD4   void init_SPI (void)//функция инициализации программного SPI
{
DDR_SPI |= (1< <SDO) | (1<<CKL) | (1<<CS) | (1<<SHDN) | (1<<RS);//все сигналы выходы
PORT_SPI |= (1<<CS) | (1<<SHDN) | (1<<RS);//с лог. 1
PORT_SPI &= ~(1<<SDO);//и лог. 0
PORT_SPI &= ~(1<<CKL);//
}   void set_resistance (unsigned char addr, unsigned char value)//функция записи
{
unsigned char i;//переменная для цикла
unsigned int addr_value;//промежуточная переменная для вычисления управляющего слова   addr_value = ((unsigned int) (addr<<8)) | ((unsigned int) value);//формируем управляющее слово из двух бит адреса и байта сопротивления
PORT_SPI &= ~(1<<CS);//выбор микросхемы   for(i=0; i < 10; i++)//для 10 бит управляющего слова
{ if(0x0001 & (addr_value>>(9-i))) PORT_SPI |= (1< <SDO);//если бит-единица, то и выставляем единицу
else PORT_SPI &= ~(1<<SDO);//иначе - выставляем ноль
PORT_SPI |= (1<<CKL);//фронт синхроимпульса
PORT_SPI &= ~(1<<CKL);//спад синхроимпульса
}
PORT_SPI |= (1<<CS);//не выбираем микросхему
}   int main (void)//главная функция
{
unsigned char q;//переменная для цикла   init_SPI();//инициализируем программный SPI   while (1)//в бесконечном цикле
{
for(q=0;q < 255; q++)//для всех 256 значений сопротивления
{
set_resistance(0x01, q);//поочередно устанавливаем для 1-го потенциометра
//_delay_ms(500);//это для наладки, можно смотреть омметром изменение сопротивления 1-го потенциометра
}
}
}

ENG:

Комментариев нет:

Отправить комментарий