| Ваш IP: 100.26.179.251 | Online(24) - гости: 7, боты: 17 | Загрузка сервера: 0.82 ::::::::::::

ATtiny2313 + восьми разрядный семисегментный индикатор на MAX7219 (Arduino)

MAX7219 – драйвер восьми разрядного индикатора с последовательным интерфейсом. Драйвер может управлять восемью семисегментными индикаторами с точкой, либо отдельно 64 светодиодами в LED панелях с общим катодом.

Драйвер MAX7219 управляется по трехпроводной последовательной шине Microwire (3-Wire). Каждый из разрядов индикатора имеет независимую адресацию и его содержимое может быть обновлен без необходимости перезаписи всего индикатора.

Основные характеристики:

  • Частота тактирования интерфейса SPI … 10 МГц
  • Напряжение питания … 4…5,5 В
  • Потребление по шине +5 В в спящем режиме … 150 мкА
  • Ток через один сегмент в импульсе … до 320 мА
  • Средний ток через один сегмент … до 40 мА
  • Частота следования импульсов включения символов … 500 Гц
  • Задержка вывода на индикатор … 2,2 мс

Управляется MAX7219 через 16 битные регистры, старшим битом вперёд. В регистре первые 8 бит отводится под адрес регистра (фактически используются только 4-е младшие бита), остальные под 8 бит под данные.

Регистры управления драйвером MAX7219

Описание регистров:

  • 0х00 — не используется
  • 0х01 … 0х08 — регистры знакомест (вывод данных на индикаторы, в таблице слева указаны биты в режиме декодирования, справа показаны биты при отключенном режиме декодирования)

  • 0х09 — режим декодирования (0х00 — отключен режим декодирования, 0xFF — режим декодирования активен)

  • 0х0А — интенсивность свечения (яркость 16 значений)

  • 0х0B — выбор кол-ва отображаемых знакомест

  • 0x0C — спящий режим (0 — OFF, 1 — ON)

  • 0x0F — тест

Для активации работы драйвера MAX7219 необходимо в регистрах указать следующие данные:

  • адрес 0x0F, данные 0x00 – тест выключен
  • адрес 0x0С, данные 0x01 – выйти из сна
  • адрес 0x0B, данные 0x07 – кол-во знакомест 8
  • адрес 0x09, данные 0xFF – дешифратор активирован
  • адрес 0x0A, данные 0x04 – яркость уровень 4 из 16

Плата MAX7219 с индикаторами помимо питания имеет три контакта: DIN, CS, CLK

При логической единице на входе CS драйвер MAX7219 начинает воспринимать команды, на вход CLK подаются синхроимпульсы, а на вход DIN биты данных, которые считываются при нарастающем фронте синхроимпульса.

Для работы с модулем индикации на основе драйвера MAX7219 под управлением Arduino существуют несколько библиотек, но при использовании  микроконтроллера ATtiny2313 использование библиотек не целесообразно из-за малого объема памяти (2 кБ). Поэтому я написал несколько функций реализующих управление трехпроводной последовательной шине Microwire (3-Wire) и вывод числового значения (long) на индикаторы.

Перед загрузкой скетча рекомендую ознакомится со статьей — ATtiny2313 + Arduino IDE

#define DIN PD2
#define CS  PD3
#define CLK PD4
 
void setup() {
  DDRD |= (1 << DIN) | (1 << CS) | (1 << CLK);
  PORTD |= (1 << CS);
  PORTD &= ~(1 << CLK) | (1 << DIN);
 
  WriteBit16(0x0F,0x00); // тест выкл.
  WriteBit16(0x0C,0x01); // вкл. индик.
  WriteBit16(0x0B,0x07); // кол-во разрядов
  WriteBit16(0x09,0xFF); // дешифраторы вкл.
  WriteBit16(0x0A,0x04); // яркость
}
 
void loop() {
  dec(12345678);
  }
 
void dec(long decimal){
  WriteBit16(0x08,decimal/10000000);
  WriteBit16(0x07,decimal/1000000%10);
  WriteBit16(0x06,decimal/100000%10);
  WriteBit16(0x05,decimal/10000%10);
  WriteBit16(0x04,decimal/1000%10);
  WriteBit16(0x03,decimal/100%10);
  WriteBit16(0x02,decimal/10%10);
  WriteBit16(0x01,decimal%10);
  }
 
void WriteBit16(byte reg, byte data){  
     PORTD &= ~(1 << CLK);PORTD &= ~(1 << CS);
     for(int i = 7; i >= 0; i--){
        if(((reg >> i) & 1) == 1){PORTD |= (1 << DIN);}else{PORTD &= ~(1 << DIN);}
        PORTD |=(1 << CLK);PORTD &= ~(1 << CLK);
        }
     for(int i = 7; i >= 0; i--){
        if(((data >> i) & 1) == 1){PORTD |= (1 << DIN);}else{PORTD &= ~(1 << DIN);}
        PORTD |=(1 << CLK);PORTD &= ~(1 << CLK);
        }
     PORTD |=(1 << CS);PORTD &= ~(1 << CLK);PORTD &= ~(1 << DIN);
  }

Скетч использует 430 байт (20%) памяти устройства. Всего доступно 2048 байт.
Глобальные переменные используют 9 байт (7%) динамической памяти, оставляя 119 байт для локальных переменных. Максимум: 128 байт.

Для примера использования платы восьми разрядного семисегментного индикатора на базе драйвера MAX7219 можно собрать простой частотомер (вход уровень TTL), с максимальной частотой измерения 9 МГц.

#define DIN PD2
#define CS  PD3
#define CLK PD4
#define T1  PD5
 
volatile int x;
unsigned int timer0;
float f;
float pop_k = 0.996237;
 
void setup() {
  DDRD |= (1 << DIN) | (1 << CS) | (1 << CLK);
  PORTD |= (1 << CS);
  PORTD &= ~(1 << CLK) | (1 << DIN);
  PORTD |= (1 << T1);
 
  WriteBit16(0x0F,0x00); // Тест выкл.
  WriteBit16(0x0C,0x01); // Вкл. индик.
  WriteBit16(0x0B,0x07); // кол-во разрядов
  WriteBit16(0x09,0xFF); // Дешифраторы вкл.
  WriteBit16(0x0A,0x04); // яркость
     cli(); 
// TIMER1    
  TCCR1A = 0;
  TCCR1B = 0;
  TCCR1B = (1 << CS12)|(1 << CS11)|(1 << CS10); 
  TIMSK |= (1 << TOIE1); 
// TIMER0
  TCCR0A = 0;   
  TCCR0B = 0;   
  OCR0A = 250;
  TCCR0A |= (1 << WGM01); 
  TCCR0B |= (1 << CS01);  
  TIMSK |= (1 << OCIE0A);  
   sei(); 
}
 
void loop() {}
 
void dec(long decimal){
  WriteBit16(0x08,15);
  WriteBit16(0x07,decimal/1000000%10+0x80);
  WriteBit16(0x06,decimal/100000%10);
  WriteBit16(0x05,decimal/10000%10);
  WriteBit16(0x04,decimal/1000%10+0x80);
  WriteBit16(0x03,decimal/100%10);
  WriteBit16(0x02,decimal/10%10);
  WriteBit16(0x01,decimal%10);
  }
 
void WriteBit16(byte reg, byte data){  
     PORTD &= ~(1 << CLK);PORTD &= ~(1 << CS);
     for(int i = 7; i >= 0; i--){
        if(((reg >> i) & 1) == 1){PORTD |= (1 << DIN);}else{PORTD &= ~(1 << DIN);}
        PORTD |=(1 << CLK);PORTD &= ~(1 << CLK);
        }
     for(int i = 7; i >= 0; i--){
        if(((data >> i) & 1) == 1){PORTD |= (1 << DIN);}else{PORTD &= ~(1 << DIN);}
        PORTD |=(1 << CLK);PORTD &= ~(1 << CLK);
        }
     PORTD |=(1 << CS);PORTD &= ~(1 << CLK);PORTD &= ~(1 << DIN);
  }  
 
 
ISR(TIMER0_COMPA_vect){
    timer0++;
  if(timer0 == 1){
    x = 0;TCNT1 = 0;
     TCCR1B = (1 << CS12)|(1 << CS11)|(1 << CS10);}
  if(timer0 == 10001){
     TCCR1B &= ~(1 << CS12)|(1 << CS11)|(1 << CS10); 
     f = ((x * 65535) + TCNT1)*pop_k; dec(f); timer0 = 0; }
  }  
 
ISR (TIMER1_OVF_vect){x++;}

Форум — http://forum.rcl-radio.ru/viewtopic.php?pid=3397#p3397

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Узел настройки УКВ-ЧМ приемника

    Узел настройки УКВ_ЧМ приемника представляет собой синтезатор напряжения для электронной настройки УКВ_ЧМ приемника и как дополнительное уст-во — электронную линейную шкалу напряжения для контроля напряжения подаваемого на варикапы приемника. Напряжение настройки приемника устанавливается при помощи полевого транзистора VT1, в его затворной цепи включен С1, при нажатии S1 или S2 С1 …Подробнее...
  • Стерео усилитель класса D 2*25Вт на базе TDA7490

    Стерео усилитель класса D 2*25Вт на базе TDA7490

    Микросхема TDA7490 имеет защиту от перенапряжения, тепловую и защиту от КЗ, так же микросхема имеет встроенные функции MUTE и STAND-BY. Усилитель на TDA7490 имеет следующие технические характеристики: Напряжение питания от +/-10В до +/-25В (номинальное напряжение +/-21В) Ток покоя от 70 до 120мА в зависимости от  напряжения питания Выходная мощность 25Вт …Подробнее...
  • Усилитель мощности звуковой частоты класса D на ИМС MAX9709

    Усилитель мощности звуковой частоты класса D на ИМС MAX9709

    Усилитель мощности звуковой частоты класса D на ИМС MAX9709 обеспечивает выходную мощность до 25Вт на канал (стерео) при нагрузке 8 Ом и 50Вт в режиме моно при нагрузке 4 Ом. ИМС MAX9709 обеспечивает высокую производительность (КПД 87%), при этом используется небольшой радиатор охлаждения. Напряжение питания усилителя от 10 до 22В. MAX9709  имеет …Подробнее...
  • Простой испытатель тиристоров

    Простой испытатель тиристоров

    Из подручных радиоэлементов можно собрать простой испытатель тиристоров, который состоит из трансформатора со вторичной обмоткой на 6,3В (0,5А), диода, конденсатора, лампы и трех переключателей. Выбор постоянного или переменного тока осуществляется переключателем SA2. Электроды тиристора подключаются при помощи зажимов, индикатор служит лампа накаливания 6,3Вх0,28А. Для проверки тиристора постоянным током переведите переключатель …Подробнее...
  • УМЗЧ на 50Вт на полевых MOSFET транзисторах

    УМЗЧ на 50Вт на полевых MOSFET транзисторах

    На рисунке показана схема 50 Вт усилителя с выходными полевыми MOSFET транзисторами. Первый каскад усилителя представляет собой дифференциальный усилитель на транзисторах VT1 VT2. Второй каскад усилителя состоит из транзисторов VT3 VT4. Оконечный каскад усилителя состоит из МОП-транзисторов IRF530 и IRF9530. Выход усилителя через катушку L1 соединен с нагрузкой 8 Ом. Цепь состоящий …Подробнее...