Регистровый сдвиг

Обсуждаем контроллеры компании Atmel.
Ответить
nozyl
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Пн дек 24, 2012 18:32:07
Откуда: Беларусь, Гомель

Регистровый сдвиг

Сообщение nozyl »

Доброго времени суток!

Пытаюсь собрать электронное табло. И все никак не получается добавить регистровый сдвиг.
цифры просто заменяют друг друга. Подскажите как сделать движущуюся строку.

Спойлер#include <avr/io.h>
#define F_CPU 8000000UL
#include <util/delay.h>
#include <avr/pgmspace.h>

#define PIN_SCK PORTB5
#define PIN_MOSI PORTB3
#define PIN_SS PORTB2


#define ON 1
#define OFF 0

#define MAX7219_LOAD1 PORTB |= (1<<PIN_SS)
#define MAX7219_LOAD0 PORTB &= ~(1<<PIN_SS)

#define MAX7219_MODE_DECODE 0x09
#define MAX7219_MODE_INTENSITY 0x0A
#define MAX7219_MODE_SCAN_LIMIT 0x0B
#define MAX7219_MODE_POWER 0x0C
#define MAX7219_MODE_TEST 0x0F
#define MAX7219_MODE_NOOP 0x00

unsigned char i;
unsigned char j;
unsigned char k;

const uint8_t disp1[][8] PROGMEM ={


{0B00111000,0B01000100,0B01001100, 0B01010100, 0B01100100, 0B01000100, 0B00111000, 0B00000000}, //0
{0B00010000, 0B00110000, 0B00010000, 0B00010000, 0B00010000, 0B00010000, 0B00111000, 0B00000000},//1
{0B00111000, 0B01000100, 0B00000100, 0B00001000, 0B00010000, 0B00100000, 0B01111100, 0B00000000}, //2
{0B01111100, 0B00001000, 0B00010000, 0B00001000, 0B00000100, 0B01000100, 0B00111000, 0B00000000}, //3
};


void spiSendByte (uint8_t databyte)
{
// Daten Kopieren in die SPI-Datenregister
SPDR = databyte;
// Warten bis die ?bertragung abgeschlossen ist
while (!(SPSR & (1 << SPIF)));
}

void MAX7219_writeData1(uint8_t data_register, uint8_t data)
{
spiSendByte(data_register);
spiSendByte(data);
}

void max7219_init()
{
MAX7219_LOAD0;
MAX7219_writeData1(MAX7219_MODE_DECODE, 0x00);
MAX7219_LOAD1;
_delay_ms(5);
MAX7219_LOAD0;
for(k=0;k<2;k++)
MAX7219_writeData1(MAX7219_MODE_SCAN_LIMIT, 0x07);
MAX7219_LOAD1;
_delay_ms(5);
MAX7219_LOAD0;
for(k=0;k<2;k++)
MAX7219_writeData1(MAX7219_MODE_INTENSITY, 0x0f);
MAX7219_LOAD1;
_delay_ms(5);
MAX7219_LOAD0;
for(k=0;k<2;k++)
MAX7219_writeData1(MAX7219_MODE_POWER, ON);
MAX7219_LOAD1;

}

void output()
{
for(j=0;j<3;j++)
{
for(i=1;i<9;i++)
{

MAX7219_LOAD0;
MAX7219_writeData1(i,pgm_read_byte(&disp1[j][i-1]));
MAX7219_LOAD1;
_delay_ms(5);
}
_delay_ms(100);
}
}
int main(void)
{
DDRB |= (1 << PIN_SCK) | (1 << PIN_MOSI) | (1 << PIN_SS) ;
SPCR |= (1 << SPE) | (1 << MSTR)| (1<<SPR1);
max7219_init();
while (1)
{
output();
}


}


Заранее спасибо.
Аватара пользователя
B@R5uk
Собутыльник Кота
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Re: Регистровый сдвиг

Сообщение B@R5uk »

Хоть бы объяснили на чём и как вы делаете. В чём идея вашего метода и что именно не получается. Никто не будет разбираться в неправильном коде с попыткой понять, что же он должен на самом деле был делать.
nozyl
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Пн дек 24, 2012 18:32:07
Откуда: Беларусь, Гомель

Re: Регистровый сдвиг

Сообщение nozyl »

Сейчас попробую объяснить...

Делаю светодиодное табло, С использованием 8шт матриц 8х8 и 8шт Max7219. На данный момент проблема обстоит в том что никак не получается добавить эффект движущийся строки. Элементы просто заменяют друг друга.

Метод:
Есть двумерный массив элементов (disp1) который содержит в себе элементы для вывода на матрицу.
Функция (output) производит вывод элементов массива.
Остальное настройка самой max7219.

Atmel studio 6
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: Регистровый сдвиг

Сообщение Pnjom-Penb »

nozyl писал(а):Подскажите как сделать движущуюся строку.

Процедура spiSendByte всегда задвигает в регистр 8 бит-точек, потому строка и движется шагами по 8 пикселов. Хотите плавного сдвига - либо меняйте количество сдвигающих тактов, либо сдвигайте выводимые данные.
nozyl
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Пн дек 24, 2012 18:32:07
Откуда: Беларусь, Гомель

Re: Регистровый сдвиг

Сообщение nozyl »

А каким образом менять количество тактов ? Я гугл помучал не нашел.
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: Регистровый сдвиг

Сообщение Pnjom-Penb »

А как был сформулирова вопрос гуглу?
Аватара пользователя
smacorp
Друг Кота
Сообщения: 3472
Зарегистрирован: Вт окт 22, 2013 04:37:23
Откуда: Казань

Re: Регистровый сдвиг

Сообщение smacorp »

Pnjom-Penb писал(а):как был сформулирова вопрос гуглу?
"регистровый сдвиг нада пажалста!" :)))
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Ответить

Вернуться в «AVR»