на первый взгляд ничего криминального в коде незаметил
разве что написано как инопланетянином но и не такие заскоки бывают в процессе изучения программирования
код для поворота к слову в исходнике есть
если вдруг будет свободное время портирую под си написанную в студенческие времена версию тетриса
Светодиодный тетрис для кота
- Реклама
- kotarnold
- Нашел транзистор. Понюхал.
- Сообщения: 157
- Зарегистрирован: Пн мар 14, 2016 15:38:50
- Откуда: Питер
Re: Светодиодный тетрис для кота
Господа, я сваял тестовую программу, чтобы по очереди каждая из строк подсвечивалась и... я в шоке!
На всякий случай сам код:
На всякий случай сам код:
Код: Выделить всё
#include <avr/io.h>
#define F_CPU 8000000
#include <util/delay.h>
int main(void)
{
DDRA = 0xff;
PORTA = 0xff;
DDRB = 0xff;
PORTB = 0xff;
DDRC = 0xff;
PORTC = 0xff;
DDRD = 0xf0;
PORTD = 0xff;
while (1)
{
PORTA=0b11111110;
_delay_ms(100);
PORTA=0b11111101;
_delay_ms(100);
PORTA=0b11111011;
_delay_ms(100);
PORTA=0b11110111;
_delay_ms(100);
PORTA=0b11101111;
_delay_ms(100);
PORTA=0b11011111;
_delay_ms(100);
PORTA=0b10111111;
_delay_ms(100);
PORTA=0b01111111;
_delay_ms(100);
PORTC=0b01111111;
_delay_ms(100);
PORTC=0b10111111;
_delay_ms(100);
PORTC=0b11011111;
_delay_ms(100);
PORTC=0b11101111;
_delay_ms(100);
PORTC=0b11110111;
_delay_ms(100);
PORTC=0b11111011;
_delay_ms(100);
PORTC=0b11111101;
_delay_ms(100);
PORTC=0b11111110;
_delay_ms(100);
PORTD=0b01111111;
_delay_ms(100);
PORTD=0b10111111;
_delay_ms(100);
PORTD=0b11011111;
_delay_ms(100);
PORTD=0b11101111;
_delay_ms(100);
}
}
- B@R5uk
- Собутыльник Кота
- Сообщения: 2896
- Зарегистрирован: Сб ноя 13, 2010 12:53:25
- Откуда: приходит весна?
Re: Светодиодный тетрис для кота
Вот в этом месте:
Вы устанавливаете полоску через порт C, но забываете сбросить полоску для порта A. Правильно надо так:
Аналогичная ситуация в других местах, где полоска переходит порта к порту. Если я не ошибаюсь, то таких место всего должно быть три (так как используется три порта: А, С и D).
Код: Выделить всё
PORTA=0b01111111;
_delay_ms(100);
PORTC=0b01111111;
Код: Выделить всё
PORTA=0b01111111;
_delay_ms(100);
PORTA=0b11111111;
PORTC=0b01111111;
- B@R5uk
- Собутыльник Кота
- Сообщения: 2896
- Зарегистрирован: Сб ноя 13, 2010 12:53:25
- Откуда: приходит весна?
Re: Светодиодный тетрис для кота
А вообще, если ОЧЕНЬ внимательно присмотреться (вы бы сделали, чтобы полоски ещё быстрее переключались!!!), то можно заметить, что светодиоды, подключенные к портам A и D работают нормально, а для порта C правильно работают только 4 полоски, 1 всегда светится и 3 не загораются вообще. Чтобы это лучше разглядеть, поправьте тестовую программу, как я написал выше, и увеличьте паузу между переключениями хотя бы до 300 мс.
- kotarnold
- Нашел транзистор. Понюхал.
- Сообщения: 157
- Зарегистрирован: Пн мар 14, 2016 15:38:50
- Откуда: Питер
Re: Светодиодный тетрис для кота
Коллеги, если кому-то интересна данная тема, то я готов поделиться печатными платами. За цену доставки.
- Реклама
- GoldenAndy
- Поставщик валерьянки для Кота
- Сообщения: 1925
- Зарегистрирован: Чт июл 28, 2016 07:58:37
- Откуда: Kyiv, UA
- Контактная информация:
Re: Светодиодный тетрис для кота
kotarnold, а посмотрите-ка фьюзы у меги....
Если это мега 32, то у ней на порту С сидит ЖТАГ. И по умолчанию он включен. И контроллеру глубоко по боку, что вы туда выводите, там у него ЖТАГ.
PC5 TDI (JTAG Test Data In)
PC4 TDO (JTAG Test Data Out)
PC3 TMS (JTAG Test Mode Select)
PC2 TCK (JTAG Test Clock)
Проверьте в High fuse byte состояние бита JTAGEN...
Из последнего теста мне подсказывает что то, что странное свечение линии плюс несвечение другой - проделки жтага...
Если это мега 32, то у ней на порту С сидит ЖТАГ. И по умолчанию он включен. И контроллеру глубоко по боку, что вы туда выводите, там у него ЖТАГ.
PC5 TDI (JTAG Test Data In)
PC4 TDO (JTAG Test Data Out)
PC3 TMS (JTAG Test Mode Select)
PC2 TCK (JTAG Test Clock)
Проверьте в High fuse byte состояние бита JTAGEN...
Из последнего теста мне подсказывает что то, что странное свечение линии плюс несвечение другой - проделки жтага...





