|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
27.09.2015, 12:39 | #1 (permalink) |
Новичок
Регистрация: 27.09.2015
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Arduino Uno и семисегментный индикатор с общим анодом
Знаю о выводах GND, но мне нужно или подавать землю, или убирать его для отображения различных цифр, а здесь земля постоянная. |
27.09.2015, 12:39 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
В схожих темах должны встречаться полезные советы Вопрос по Arduino Усилительный каскад с общим эмиттером Семисегментный индикатор |
27.09.2015, 15:42 | #3 (permalink) |
Новичок
Регистрация: 27.09.2015
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Если бы нашел, и не спрашивал бы. Не получается подать на цифровые потенциал земли. В поиске только варианты подключения сегментного индикатора с общим катодом. Видел еще что-то с использованием драйверов, но такими не располагаю.
|
27.09.2015, 17:09 | #4 (permalink) |
падаван
Регистрация: 23.01.2013
Сообщений: 739
Сказал(а) спасибо: 307
Поблагодарили 27 раз(а) в 3 сообщениях
Репутация: 10792
|
плохо искал.
так это программно, а не схемотехнически делается! курить азы по AVR срочно! на EasyElectronics например, там есть курс по AVR. код на ассемблере, правда, но там есть разделы о том что такое порты ввода-вывода и зачем они нужны. |
24.01.2016, 05:58 | #5 (permalink) |
Новичок
Регистрация: 24.01.2016
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Сам столкнулся с такой проблемой, думал сначала использовать транзисторы как ключи и ими включать светодиоды в семисегментнике, искал на просторах интернета решение сией проблемы, толком ничего и не нашел, варианты были через сдвиговый регистр, таким сам не располагаю пока, все решилось куда проще.
Вот программа секундомера для С.И. с общим КАТОДОМ (-) #define FIRST_SEGMENT_PIN 2 #define SEGMENT_COUNT 7 byte numberSegments[10] = { 0b00111111, 0b00001010, 0b01011101, 0b01011110, 0b01101010, 0b01110110, 0b01110111, 0b00011010, 0b01111111, 0b01111110, }; void setup() { for (int i = 0; i < SEGMENT_COUNT; ++i) pinMode(i + FIRST_SEGMENT_PIN, OUTPUT); } void loop() { int number = (millis() / 1000) % 10; int mask = numberSegments[number]; for (int i = 0; i < SEGMENT_COUNT; ++i) { boolean enableSegment = bitRead(mask, i); digitalWrite(i + FIRST_SEGMENT_PIN, enableSegment); } } в случае когда С.И. с общим анодом, все следует подключать аналогичным образом, но подсоединяем не к земле общий анод, а к 13му пину, к примеру, в программе прописываем #define LED_PIN 13 3й строчкой, в void setup () добавляем pinMode(LED_PIN, OUTPUT); и в void loop() digitalWrite(13, HIGH); и самое главное теперь, меняем цифры в комбинациях сегментов на противоположные значения, получилось так { 0b01000000, 0b01110101, 0b00100010, 0b00100001, 0b00010101, 0b00001001, 0b00001000, 0b01100101, 0b00000000, 0b00000001,} в итоге программа выглядит так: #define FIRST_SEGMENT_PIN 2 #define SEGMENT_COUNT 7 #define LED_PIN 13 byte numberSegments[10] = { 0b01000000, 0b01110101, 0b00100010, 0b00100001, 0b00010101, 0b00001001, 0b00001000, 0b01100101, 0b00000000, 0b00000001, }; void setup() { for (int i = 0; i < SEGMENT_COUNT; ++i) pinMode(i + FIRST_SEGMENT_PIN, OUTPUT); pinMode(LED_PIN, OUTPUT); } void loop() { digitalWrite(13, HIGH); int number = (millis() / 1000) % 10; int mask = numberSegments[number]; for (int i = 0; i < SEGMENT_COUNT; ++i) { boolean enableSegment = bitRead(mask, i); digitalWrite(i + FIRST_SEGMENT_PIN, enableSegment); } } |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
22.02.2019, 08:39 | #7 (permalink) |
Новичок
Регистрация: 22.02.2019
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
С.И. с общим анодом (ELD-436GWB\S411) + arduino uno.
Здравствуйте! Попался под руки семисегментный индикатор(ELD-436GWB\S411) от стиралки, с общим анодом. Подключил его одну секцию к портам arduino uno через резистор 330 Ом:
A-2; B-3; C-4; D-5; E-6; F-7; G-8; Общ.Анод-13. И по совету Висмута написал код (перебирает числа) Задержка delay задаёт интервал перебора. Код громоздкий, но для понимания, думаю, самое то... И ещё, в моём случае при такой конфигурации максимальный ток потребляет около 35 мА, что не совсем полезно ардуине, так что расчеты производите по своим данным. Код:
#define Aa 2 #define Bb 3 #define Cc 4 #define Dd 5 #define Ee 6 #define Ff 7 #define Gg 8 int zn; int i; void setup() { for(i=0; i<8; i++) { pinMode(i+1, OUTPUT); } pinMode(13, OUTPUT); digitalWrite(13, HIGH); zn = -1; } void loop() { for(;;) { zn++; if(zn > 9) { zn = 0; } switch (zn) { case 0: digitalWrite(Aa, 0); digitalWrite(Bb, 0); digitalWrite(Cc, 0); digitalWrite(Dd, 0); digitalWrite(Ee, 0); digitalWrite(Ff, 0); digitalWrite(Gg, 1); break; case 1: // Aa=1; Bb=0; Cc=0; Dd=1; Ee=1; Ff=1; Gg=1; digitalWrite(Aa, 1); digitalWrite(Bb, 0); digitalWrite(Cc, 0); digitalWrite(Dd, 1); digitalWrite(Ee, 1); digitalWrite(Ff, 1); digitalWrite(Gg, 1); break; case 2: // Aa=0; Bb=0; Cc=1; Dd=0; Ee=0; Ff=1; Gg=0; digitalWrite(Aa, 0); digitalWrite(Bb, 0); digitalWrite(Cc, 1); digitalWrite(Dd, 0); digitalWrite(Ee, 0); digitalWrite(Ff, 1); digitalWrite(Gg, 0); break; case 3: // Aa=0; Bb=0; Cc=0; Dd=0; Ee=1; Ff=1; Gg=0; digitalWrite(Aa, 0); digitalWrite(Bb, 0); digitalWrite(Cc, 0); digitalWrite(Dd, 0); digitalWrite(Ee, 1); digitalWrite(Ff, 1); digitalWrite(Gg, 0); break; case 4: // Aa=1; Bb=0; Cc=0; Dd=1; Ee=1; Ff=0; Gg=0; digitalWrite(Aa, 1); digitalWrite(Bb, 0); digitalWrite(Cc, 0); digitalWrite(Dd, 1); digitalWrite(Ee, 1); digitalWrite(Ff, 0); digitalWrite(Gg, 0); break; case 5: // Aa=0; Bb=1; Cc=0; Dd=0; Ee=1; Ff=0; Gg=0; digitalWrite(Aa, 0); digitalWrite(Bb, 1); digitalWrite(Cc, 0); digitalWrite(Dd, 0); digitalWrite(Ee, 1); digitalWrite(Ff, 0); digitalWrite(Gg, 0); break; case 6: // Aa=0; Bb=1; Cc=0; Dd=0; Ee=0; Ff=0; Gg=0; digitalWrite(Aa, 0); digitalWrite(Bb, 1); digitalWrite(Cc, 0); digitalWrite(Dd, 0); digitalWrite(Ee, 0); digitalWrite(Ff, 0); digitalWrite(Gg, 0); break; case 7: // Aa=0; Bb=0; Cc=0; Dd=1; Ee=1; Ff=1; Gg=1; digitalWrite(Aa, 0); digitalWrite(Bb, 0); digitalWrite(Cc, 0); digitalWrite(Dd, 1); digitalWrite(Ee, 1); digitalWrite(Ff, 1); digitalWrite(Gg, 1); break; case 8: // Aa=0; Bb=0; Cc=0; Dd=0; Ee=0; Ff=0; Gg=0; digitalWrite(Aa, 0); digitalWrite(Bb, 0); digitalWrite(Cc, 0); digitalWrite(Dd, 0); digitalWrite(Ee, 0); digitalWrite(Ff, 0); digitalWrite(Gg, 0); break; case 9: // Aa=0; Bb=0; Cc=0; Dd=0; Ee=1; Ff=0; Gg=0; digitalWrite(Aa, 0); digitalWrite(Bb, 0); digitalWrite(Cc, 0); digitalWrite(Dd, 0); digitalWrite(Ee, 1); digitalWrite(Ff, 0); digitalWrite(Gg, 0); break; } delay(2000); } } |
22.02.2019, 08:46 | #8 (permalink) |
Новичок
Регистрация: 22.02.2019
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Datasheet ELD-436GWB\S411
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|