Обсуждаем контроллеры компании Atmel.
Ответить

Re: Светодиодный тетрис для кота

Пт авг 03, 2018 22:46:48

на первый взгляд ничего криминального в коде незаметил
разве что написано как инопланетянином но и не такие заскоки бывают в процессе изучения программирования
код для поворота к слову в исходнике есть
если вдруг будет свободное время портирую под си написанную в студенческие времена версию тетриса
Вложения
Project1.zip
(189.42 KiB) Скачиваний: 142

Re: Светодиодный тетрис для кота

Вс авг 12, 2018 17:17:32

Господа, я сваял тестовую программу, чтобы по очереди каждая из строк подсвечивалась и... я в шоке!



На всякий случай сам код:

Код:
#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);
      }
}

Re: Светодиодный тетрис для кота

Пн авг 13, 2018 21:49:08

Вот в этом месте:
Код:
      PORTA=0b01111111;
      _delay_ms(100);
      PORTC=0b01111111;
Вы устанавливаете полоску через порт C, но забываете сбросить полоску для порта A. Правильно надо так:
Код:
      PORTA=0b01111111;
      _delay_ms(100);
      PORTA=0b11111111;
      PORTC=0b01111111;

Аналогичная ситуация в других местах, где полоска переходит порта к порту. Если я не ошибаюсь, то таких место всего должно быть три (так как используется три порта: А, С и D).

Re: Светодиодный тетрис для кота

Пт авг 17, 2018 11:38:51

А вообще, если ОЧЕНЬ внимательно присмотреться (вы бы сделали, чтобы полоски ещё быстрее переключались!!!), то можно заметить, что светодиоды, подключенные к портам A и D работают нормально, а для порта C правильно работают только 4 полоски, 1 всегда светится и 3 не загораются вообще. Чтобы это лучше разглядеть, поправьте тестовую программу, как я написал выше, и увеличьте паузу между переключениями хотя бы до 300 мс.

Re: Светодиодный тетрис для кота

Ср дек 12, 2018 13:59:45

Коллеги, если кому-то интересна данная тема, то я готов поделиться печатными платами. За цену доставки.

Re: Светодиодный тетрис для кота

Пт дек 28, 2018 23:31:37

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...
Из последнего теста мне подсказывает что то, что странное свечение линии плюс несвечение другой - проделки жтага...
Ответить