Пытаюсь сделать бегущий огонёк, или просто вывод на светодиоды.
Задача такова: есть 8 сдвиговых регистров 74HC595 (8 - это не предел, хочу 20 поставить), соединенных цепочкой, к ним подключены 64 светодиода. Мк - Атмега8.
Как заставить один светодиод зажигаться по очереди на всех 64 светодиодах????
У меня получается только 32 светодиода пройти (по одному зажигать), дальше цепочка почему-то дублируется (вспыхивает еще один светодиод и бежит уже с №33 по 64).
Если можно, то приведите кусок кода. Пишу в CVAVR.
Файл прошивки и протеуса пригалаю для наглядности. Кнопка S1 должна быть нажата.
p.s. В протеусе все страшно ))
Код: Выделить всё
#define DATA 1 // Подключаем к порту PD0 ножку данных сдвигового регистра
#define CLK 0 // Подключаем к порту PD1 ножку тактовых импульсов сдвигового регистра
#define Latch 0 // Подключаем к порту PD2 ножку защёлки сдвигового регистра
long int z, a, x=0;
void send_data (long int data){
unsigned char i=0;
for (i=0;i<32;i++){
// Выставляем данные на PD0
if ((data&0x80000000)==0x00) {PORTD&=~(DATA);}
else PORTD.0=(DATA);
# asm("nop");
PORTD.1=(CLK); // Импульс на CLK
# asm("nop");
PORTD.1=~(CLK);
# asm("nop");
data=(data<<1);
}
PORTD.2=(Latch); // Импульс на Latch clock
# asm("nop");
PORTD.2=~(Latch);
}
void main(void)
{
while (!PINB.1) {
x++;
if (x==32) {x=0;};
z=0b00000001;
delay_ms (40);
send_data (z<<x);};
}
