9. ATtiny2313A и управление матрицей 8x8

Re: 9. ATtiny2313A и управление матрицей 8x8

Сообщение VVZ » 18 авг 2014, 01:46

15. Матричный индикатор вместо светодинамического экрана.

Модуль 8x8_60mm (из предыдущего сообщения этой темы) располагается в правой части изображения :

Изображение

В левой части изображения расположен модуль, который в соответствующих схемах этой темы может заменять собой светодинамический экран. Соответственно выходной разъём модуля подключается вместо шлейфа от экрана в 16-ти контактный разъём модуля 2313_8x8 :

Изображение

или (если без модуля 2313_8x8) в соответствующий 16-ти контактный разъём на макетке :

Изображение

Получается вот так :

Изображение

Вид на макетку без матричного индикатора :

Изображение

Очень важно отметить ! Модуль 8x8_60mm имеет два варианта установки относительно выходного разъёма модуля 2313_8x8. Вариант установки зависит от электрических схем (здесь модуля 2313_8x8), кода программы и типа используемого матричного индикатора. Текущее положение модуля предполагает использование схем темы (выводы PORTB обращены к анодам матрицы) и установку в нём матричного индикатора, у которого в строках объединены аноды светодиодов (в правой части следующего изображения). При использовании матричного индикатора, схема которого из левой части изображения, модуль 8x8_60mm достаточно развернуть на 180 градусов относительно выходного разъёма модуля 2313_8x8 :

Изображение

Печатная плата модуля односторонняя, красным цветом на следующем изображении (правая нижняя часть) обозначены необходимые перемычки. Чтобы не было замыканий между перемычками, как минимум две из них должны быть изолированными (правая верхняя часть - !):

Изображение

При изготовлении модуля используются двухрядный разъём PBD -2x8 и пара однорядных разъёмов PBS-08R. Расстояние между разъёмами PBS-08R зависит от типа матричного индикатора (параметра L).
Вложения
8x8_60mm.zip
Файл печатной платы (lay6)
(3.24 KiB) Скачиваний: 787
VVZ
 
Сообщений: 589
Зарегистрирован: 28 апр 2011, 09:44

Re: 9. ATtiny2313A и управление матрицей 8x8

Сообщение VVZ » 19 авг 2014, 05:19

16. Простой светодиодный матричный экран.

В предыдущем сообщении говорилось о модуле для стандартного матричного индикатора 8x8, а в этом сообщении говорится о печатной плате для небольшого светодинамического экрана с матричной схемой включения светодиодов 8x8 :

Изображение

Электрическая схема экрана аналогична схеме любого матричного индикатора 8x8, но светодиоды в матрице экрана (их столбцы) как бы развёрнуты по окружности, образуя восьми лучевую звезду.


Фрагмент песни "Иллюзии" - Константин Никольский.

Печатная плата модуля односторонняя, в файле топологии представлена вторым слоем (при изготовлении ориентир по тексту) :

Изображение

При изготовлении модуля используется разъём PBD-16R (угловой, двухрядный 2x8, розетка) или BH-16R (угловой, 2x8, вилка). Розетка PBD-16R устанавливается, если модуль необходимо напрямую соединить с модулем 2313_8x8 (как на первом изображении сообщения), а вилка BH-16R устанавливается, если модули надо соединить отдалённо с помощью шлейфа (вместо экрана). На изображении показано критичное расстояние (!) при установке модуля с разъёмом PBD-16R.

Очень важно отметить ! При изготовлении модуля необходимо использовать светодиоды с близким значением падения напряжения. Обычно в пачках светодиодов с Uvd близким к величине 2v (обычно красные, но бывают и зелёные) разброс напряжений меньше, чем у светодиодов с Uvd близким к величине 3v (обычно синие, белые, бывают и зелёные). При распайке светодиодов экрана (первое изображение сообщения) светодиоды специально не отбирались, просто брались из пачек.

Полезная информация из темы "Отдельные упражнения для начинающих", в сообщении : Падение напряжения на светодиоде.
Вложения
8x8_zv.zip
Файл печатной платы (lay6)
(44.54 KiB) Скачиваний: 840
VVZ
 
Сообщений: 589
Зарегистрирован: 28 апр 2011, 09:44

Re: 9. ATtiny2313A и управление матрицей 8x8

Сообщение VVZ » 20 авг 2014, 17:01

17. Вариант программы.

Программный автомат смены светодинамических рисунков по аналогии автомата на логических микросхемах из темы : "Первые шаги - Задание 6. Управление светодиодной матрицей". В программе тактирование выполняется от таймера микроконтроллера. Состояние фьюзов - по-умолчанию (при покупке микроконтроллера, ничего не меняется).

Код: выделить все
//мк ATtiny2313
//F_CPU = 1000000

#include <avr/io.h>
#include <avr/interrupt.h>

#define NEW_MODE (mode & 0b00111111) == 0 // Проверка на начало нового режима
typedef unsigned char uchar;              // объявление что unsigned char это то же самое что и uchar
uchar PORTZ;                              // здесь хранится состояние виртуального порта,
                                          // значение этой переменной должно меняться ТОЛЬКО с помощью функции set_virt_port()
int mode = 0;
//   описание битов mode:
//   0-3 bit - этап (4 бита, 16 тактов одного рисунка)
//   4 bit - направление (влево/вправо)
//   5 bit - счет/сдвиг
//   6 bit -   движение по строке/диагонали
//   7 bit - столбцу/диагонали
//   8-10 bit - стартовая позиция

// Массив стартовых позиций для режима сдвига
uchar start_pos[] = {0b00000001,
                     0b00001111,
                     0b00010001,
                     0b00011111,
                     0b01111111};

void set_virt_port(uchar port);   // Запись байта в "виртуальный" порт
void next_step(void);             // Перейти к следующему "шагу" в светодинамическом рисунке.
uchar make_move(uchar port);      // Определение режима: сдвиг или счет.

uchar shift(uchar port);          // Определение направления сдвига
uchar shift_left(uchar port);     // Сдвиг влево
uchar shift_right(uchar port);    // Сдвиг вправо

uchar count(uchar port);          // Определение направления счета
uchar count_left(uchar port);     // Счет влево
uchar count_right(uchar port);    // Счет вправо

ISR(TIMER1_COMPA_vect) {
    next_step();                  // Перейти к следующему "шагу" в светодинамическом рисунке.
}

//========================> функция main() <==========================
int main(void)
{
   DDRA = 0b00000011;
   PORTA = 0b11111100;
   DDRD = 0b01111110;
   PORTD = 0b10000001;
   DDRB = 0b11111111;
   PORTB = 0xFF;             //аноды
   set_virt_port(0xFF);      //катоды

// Тактирование от таймера
// Частота тактирования (clock) вычисляется по следующей формуле:
// clock = F_CPU / tim_pre / (OCR1A + 1), где tim_pre - предделитель таймера.
// В нашем случае F_CPU = 1000000, tim_pre = 256, и OCR1A = 1024:
// clock = 1000000 / 256 / (1024+1) = 3.8 Гц

   TCCR1A = 0b00000000;
   TCCR1B = 0b00001100;      // Режим сброс по совпадению, предделитель на 256
   TCCR1C = 0b00000000;
   OCR1A = 1024;
   TIMSK = 0b01000000;       // Прерывание по совпадению

   sei();
   while (1) {}
}

//Запись байта в "виртуальный" порт
void set_virt_port(uchar port) {
   PORTZ = port;                           //В PORTZ хранится актуальное состояние "виртуального" порта
   port^= 0xFF;
   PORTA |= 0b00000011;
   PORTD |= 0b01111110;
   PORTD &= (port << 1) | 0b11111101;      // PZ0 == PD1
   PORTA &=  port | 0b11111101;            // PZ1 == PA1
   PORTA &= (port >> 2) | 0b11111110;      // PZ2 == PA0
   PORTD &= (port >> 1) | 0b10000011;      // PZ3-PZ7 == PD2-PD6
}

// Перейти к следующему "шагу" в светодинамическом рисунке.
void next_step(void)
{
   if(bit_is_clear(mode,6)) {                   // Движение по столбцам
      if( NEW_MODE ) {                          // Если новый режим, то установить начальное значение
         PORTB = 0xFF;
         set_virt_port( start_pos[mode>>8] );   // mode >> 8 - индекс массива стартовых позиций
      }
      else
         set_virt_port( make_move(PORTZ) );
   }
   else if(bit_is_clear(mode,7)) {              // Движение по строкам
      if( NEW_MODE ) {                          // Если новый режим, то установить начальное значение
         set_virt_port(0xFF);
         PORTB = start_pos[mode>>8];            // mode >> 8 - индекс массива стартовых позиций
      }
      else
         PORTB = make_move(PORTB);
   }
   else {                                       // Движение по строкам и столбцам
      if( NEW_MODE ) {                          // Если новый режим, то установить начальное значение
         set_virt_port(0xFF);
         PORTB = start_pos[mode>>8];            // mode >> 8 - индекс массива стартовых позиций
         set_virt_port( start_pos[mode>>8] );
      }
      else {
         set_virt_port( make_move(PORTZ) );
         PORTB = make_move(PORTB);
      }
   }
   mode++;
   if(mode == 1280)      // Зацикливание рисунков (когда все режимы показаны - повторить снова)
      mode = 0;
}

// Определение режима: сдвиг или счет.
uchar make_move(uchar port) {
   if(bit_is_clear(mode, 5)) {      // если 5 бит в mode == 0, то режим сдвига
      if((mode & 0b00011111) == 31) // вместо 32 шага сдвига - установка порта в 0 (чтобы режим счета начинался с нуля)
         return 0;
      else
         return shift(port);
   }
   else
      return count(port);           // если 5 бит в mode == 1, то режим счета
}

// Режим счета
uchar count(uchar port) {
   if(bit_is_set(mode, 4))
      return count_right(port);     // если 4 бит в mode == 1, то режим счета вправо
   else
      return count_left(port);      // если 4 бит в mode == 0, то режим счета влево
}

// Счет вправо
uchar count_right(uchar port) {
   port >>= 1;                     // сдвиг вправо
   if(bit_is_clear(mode, 3))         
      port |= 0b10000000;
   return port;
}

// Счет влево
uchar count_left(uchar port) {
   port <<= 1;                     // сдвиг влево
   if(bit_is_clear(mode, 3))
      port |= 0b00000001;
   return port;
}

// Режим сдвига
uchar shift(uchar port) {
   if(bit_is_set(mode, 4))
      return shift_right(port);      // сдвиг вправо, если 4 бит в mode единица
   else
      return shift_left(port);      // иначе сдвиг влево
}

// Сдвиг влево
uchar shift_left(uchar port) {
   if(bit_is_set(port, 7)) {   // если самый левый бит единица, то после сдвига в единицу нужно установить самый правый бит
      port <<= 1;            // сдвиг влево на 1
      port |= 0b00000001;
   }
   else
      port <<= 1;
   return port;
}

// Сдвиг вправо
uchar shift_right(uchar port) {
   if(bit_is_set(port, 0)) {   // если самый правый бит единица, то после сдвига в единицу нужно установить самый левый бит
      port >>= 1;            // сдвиг вправо на 1
      port |= 0b10000000;   
   }
   else
      port >>= 1;
   return port;
}

Дмитрий Лиман (студент 1 курса НИЯУ МИФИ)
Вложения
8x8_zv.zip
Архив с файлами (c, hex...) для WinAVR
(29.66 KiB) Скачиваний: 907
VVZ
 
Сообщений: 589
Зарегистрирован: 28 апр 2011, 09:44

Re: 9. ATtiny2313A и управление матрицей 8x8

Сообщение VVZ » 20 авг 2014, 18:57

18. Сравнение сборок на логических микросхемах и с микроконтроллером.

На изображении показана сборка автомата на логических микросхемах из темы :
"Первые шаги - Задание 6. Управление светодиодной матрицей".

Изображение

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

Изображение

Программа из предыдущего сообщения применима во всех устройствах этой темы :

Изображение

В этом варианте программы тактирование выполняется от таймера микроконтроллера. Чтобы тактирование было от внешнего управляемого генератора (как на следующих изображениях и видео), надо подумать и изменить эту программу или написать изначально собственную.

Изображение

Изображение

Изображение

На видео два светодинамических экрана, один квадратной формы 83x83 см (128 светодиодов, две матрицы 8x8), второй прямоугольной 40x160 см (256 светодиодов, четыре матрицы 8x8) :


Варианты сборок от светодинамических экранов с видео :

Изображение

Изображение

Подробности о сборках и об использовании модулей смотрите в сообщениях этой темы.
VVZ
 
Сообщений: 589
Зарегистрирован: 28 апр 2011, 09:44

Re: 9. ATtiny2313A и управление матрицей 8x8

Сообщение VVZ » 13 окт 2014, 19:07

19. 8-ми лучевая звезда (варианты ZV-2313PU, ZV-2313SU, ZV-2313X).

8-ми лучевая звезда является вариантом светодинамического экрана с матричной схемой включения светодиодов и представляет собой сборную конструкцию, состоящую из двух видов печатных плат (основы и восьми лучей) :

Изображение

Основное отличие 8-ми лучевой звезды – это гораздо менее плотный монтаж и возможность изготовить экран большого размера. Размах лучей экрана на изображении – около 300 мм (расстояние между светодиодами – 10 мм), но при желании его размеры можно увеличить до одного метра и даже более (увеличивается длина плат лучей, используются яркие светодиоды большого размера, специальные отражатели).

Электрическая схема 8-ми лучевой звезды аналогична схеме печатной платы из первого сообщения данной темы :

Изображение

D1 Attiny2313A; С1-C30,1 мкФ; R1-R310 кОм; R светодиода в лучах экрана – 1-10 кОм; зависит от яркости светодиодов VD, но при токе через светодиод не более 3 мА. KBO – микропереключатель, устанавливается при установке батарейного отсека (X1); разъёмы X2 -DJK-02A; X3 - PBD12R; X4BH-10R; X_1 - X_8 - PBS10, в лучах установлены PLS10.

Далее рассматриваются три варианта :

1. ZV-2313PU – в основе используется мк Attiny2313A-PU (корпус DIP20),
2. ZV-2313SU - в основе используется мк Attiny2313A-SU (вариант SMD, корпус SOIC20),
3. ZV-2313X – этот вариант предполагает разработку собственной платы управления. На два 10-ти контактных разъёма выведены основные сигналы устройства (назначение их контактов соответствуют выводам мк Attiny2313A-PU).
VVZ
 
Сообщений: 589
Зарегистрирован: 28 апр 2011, 09:44

Re: 9. ATtiny2313A и управление матрицей 8x8

Сообщение VVZ » 13 окт 2014, 19:08

19-1. 8-ми лучевая звезда на ZV-2313PU.

В основе этого варианта используется мк Attiny2313A-PU (корпус DIP20). На плате микроконтроллер установлен на панельке DIP20 :

Изображение

Изображение

Печатная плата устройства односторонняя, разведена во втором слое (bottom, вид сквозь стеклотекстолит). Зелёным цветом на изображении обозначены необходимые перемычки. В архиве для скачивания также находится печатная плата луча (расстояние между светодиодами 10 мм).

zv_2313pu.zip
Два файла печатных плат (lay6, основа и луч)
(71.4 KiB) Скачиваний: 811

Изображение

На фото Александр Расюк и Руслан Воровченко (7А, гимназия N 1569 “Созвездие”).
VVZ
 
Сообщений: 589
Зарегистрирован: 28 апр 2011, 09:44

Re: 9. ATtiny2313A и управление матрицей 8x8

Сообщение VVZ » 13 окт 2014, 19:10

19-2. 8-ми лучевая звезда на ZV-2313SU.

В основе этого варианта используется мк Attiny2313A-SU (вариант SMD, корпус SOIC20).

Изображение

Изображение

Печатная плата устройства односторонняя, разведена во втором слое (bottom, вид сквозь стеклотекстолит). Зелёным цветом на изображении обозначены необходимые перемычки. В архиве для скачивания также находится печатная плата луча (расстояние между светодиодами 10 мм).
Вложения
zv_2313su.zip
Два файла печатных плат (lay6, основа и луч)
(54.61 KiB) Скачиваний: 753
VVZ
 
Сообщений: 589
Зарегистрирован: 28 апр 2011, 09:44

Re: 9. ATtiny2313A и управление матрицей 8x8

Сообщение VVZ » 13 окт 2014, 19:10

19-3. 8-ми лучевая звезда на ZV-2313X.

Этот вариант предполагает разработку собственной платы управления. На два 10-ти контактных разъёма PBS-10R в центре платы выведены основные сигналы устройства. Назначение их контактов соответствуют выводам мк Attiny2313A-PU. На правом изображении (на плате) в эти разъёмы установлен дополнительный модуль на основе мк Attiny2313A-PU.

Изображение

!!! Вместо установки двух однорядных разъёмов PBS-10R топология печатной платы предполагает установку разъёма BHS-20 (к нему например, можно будет подключить шлейф).

Изображение

Печатная плата устройства односторонняя, разведена во втором слое (bottom, вид сквозь стеклотекстолит). Зелёным цветом на изображении обозначены необходимые перемычки. В архиве для скачивания также находится печатная плата луча (расстояние между светодиодами 10 мм).
Вложения
zv_2313x.zip
Файлы печатных плат (lay6, основа и луч)
(36.46 KiB) Скачиваний: 764
VVZ
 
Сообщений: 589
Зарегистрирован: 28 апр 2011, 09:44

Re: 9. ATtiny2313A и управление матрицей 8x8

Сообщение VVZ » 15 окт 2014, 02:38

20. Плата модуля X_2313A для экрана ZV-2313Х.

Электрическая схема, которая обеспечивается при установке модуля :

Изображение

Печатная плата модуля односторонняя, разведена во втором слое (bottom, вид сквозь стеклотекстолит).

Изображение

При изготовлении модуля используется разъём PLH-40 (межплатный, два отрезка по 10 контактов) и панелька под корпус DIP20.

X_2313A.zip
Файл печатной платы (lay6)
(4.17 KiB) Скачиваний: 746

Дополнительно : Особенность монтажа разъёма PLH на односторонней плате.
VVZ
 
Сообщений: 589
Зарегистрирован: 28 апр 2011, 09:44

Re: 9. ATtiny2313A и управление матрицей 8x8

Сообщение VVZ » 15 окт 2014, 02:39

21. Плата модуля X_DS8x8 для экрана ZV-2313Х.

Электрическая схема, которая обеспечивается при установке модуля :

Изображение

Печатная плата модуля односторонняя, разведена во втором слое (bottom, вид сквозь стеклотекстолит).

Изображение

При изготовлении модуля используется разъём PLH-40 (межплатный, два отрезка по 10 контактов) и два восьмипозиционных переключателя DS-08

X_DS8x8.zip
Файл печатной платы (lay6)
(5.79 KiB) Скачиваний: 775

Дополнительно : Особенность монтажа разъёма PLH на односторонней плате.
VVZ
 
Сообщений: 589
Зарегистрирован: 28 апр 2011, 09:44

Пред.След.

Вернуться в Микроконтроллеры - Оборудование (программаторы, схемы с МК)

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2