Sabbah писал(а):
Думаю 3.2 не стоит пока, 3.1 то не совсем готов
Тоже думаю - не стоит.
Пусть пока ногодрыгом работает.
Доведем прошивку до ума на 3.1
А драйвер поменять - пара минут делов то.
Драйвер для сдвигового с использованием аппаратного SPI.
Но нужно вместо MISO подключить к шилдику SS (44 нога контроллера).
На более высокой скорости начинаются глюки.
Тут тактирование = частота кварца/64 (250 КГц)
Код:
#define SPI_DDR DDRB
#define SPI_PORT PORTB
#define SPI_SS PB4
#define SPI_MOSI PB5
#define SPI_MISO PB6
#define SPI_SCK PB7
void init_shift_register( void )
{
//настраиваем выводы MOSI, SCL, SS на выход
SPI_DDR = ( 1 << SPI_MOSI) | ( 1 << SPI_SCK) | ( 1 << SPI_SS ) ;
//выставляем SS в 1
SPI_PORT |= ( 1 << SPI_SS );
// разрешаем SPI, Master, режим 0, частота 1/64 от F_CPU, LSB first
SPCR = ( 1 << SPE ) | ( 1 << MSTR ) | (1 << SPR1) ;
// SPSR = ( 1 << SPI2X ); //удвоение частоты SPI
}
void shift_register_set_data(volatile uint8_t shift_data)
{
unsigned char ret;
SPI_PORT &= ~(1 << SPI_SS ); //сбрасываем SS в 0
SPDR = shift_data; //передаваемые данные
while( !( SPSR & ( 1 << SPIF ) ) ); //ждем окончания передачи
ret = SPDR; //считываем принятые данные
SPI_PORT |= ( 1 << SPI_SS ); //выставляем SS в 1
}
void shift_register_clean(void){
shift_register_set_data(0);
}