Напряжение на 7-сегментном индикаторе

Вопросы от новичков
BBKing
Рядовой
Сообщения: 8
Зарегистрирован: 02 мар 2019, 12:18
Имя: Станислав

Напряжение на 7-сегментном индикаторе

Сообщение BBKing »

Привет всем!
Решил собрать свой первый проект - велоспидометр на беговел сыну. Будет состоять из про мини, 2-разрядного 7-сегментного индикатора и датчика Холла. В ФЛПрог собрал скетч. Всё работает отлично, вот только тускловат индикатор. На улице видно не будет. Решил померить на одном из его элементов напряжение, но вольтметр показал какую-то белиберду, что-то около 0.4 В. Тогда поставил паралельно элементу конденсатор на 10 мкф и увидел более реальные показания 1.68-1.7 В. Правда это с защитным резистором на 220 Ом. И это при питании от 5.4 В. Ну в общем поставил со стороны анода и катода по транзистору и подал напряжение 7.5 в. Яркость не изменилась. Меряю напряжение на элементе индикатора, а там значения не изменились. Тогда решил убрать защитный резистор и получил приемлемую яркость и напряжение на элементе 1.88-1.9 В. При питании от 5 В, тоже самое. Конечно не 2.1 В но уже более-менее... Вроде бы проблема решена, но во-первых, как-то стрёмно без защитных резисторов, а во-вторых есть мысли добавить ещё кое-какие функции, что может повлиять на яркость индикатора. Как я понимаю суть проблемы? Вероятно программа подаёт сигнал на индикатор на какое-то время, затем выключает. И так много раз в цикле. Получилось что-то наподобие шим-сигнала. Кто-то сталкивался с такой проблемой и как её решили?
Аватара пользователя
eugeneb
Лейтенант
Сообщения: 486
Зарегистрирован: 15 авг 2016, 11:20
Откуда: Нижний Новгород
Имя: Евгений
Благодарил (а): 1 раз

Напряжение на 7-сегментном индикаторе

Сообщение eugeneb »

Нет тут проблем, всё пройдено. Покажите схему и программу.
С уважением,
Евгений Бобков
BBKing
Рядовой
Сообщения: 8
Зарегистрирован: 02 мар 2019, 12:18
Имя: Станислав

Напряжение на 7-сегментном индикаторе

Сообщение BBKing »

Вот программа
[spoiler]unsigned long rpm_149117821_1;
volatile unsigned long temp_149117821_1;
volatile unsigned long time_149117821_1=61000000;
float in_19267442_1;
int out_19267442_1;
float _gtv1 = 0.00108;
int _sido1TB = 0;
String _sido1TSN;
bool _sido1a1 = 0;
bool _sido1b1 = 0;
bool _sido1c1 = 0;
bool _sido1d1 = 0;
bool _sido1e1 = 0;
bool _sido1f1 = 0;
bool _sido1g1 = 0;
bool _sido1dp = 0;
bool _sido1r1 = 0;
bool _sido1r2 = 0;
int _sido1Raz = 1;
unsigned long _sido1STi = 0UL;
bool _sido1Mod = 0;
void setup()
{
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);

pinMode(2, INPUT);
attachInterrupt(0, tacho_149117821_1, RISING );

}
void loop()
{




//Плата:1
const unsigned long max_time_2=60000000UL / 16;
if ( (temp_149117821_1+max_time_2) < micros() ) {rpm_149117821_1=0;}
else{rpm_149117821_1 = 60000000UL / time_149117821_1;}

in_19267442_1 = ((rpm_149117821_1)*(_gtv1))*(60);
out_19267442_1 = round ( in_19267442_1 );
if(_isTimer(_sido1STi, 1 )) {
_sido1STi = millis();
if (_sido1Raz > 2) {_sido1Raz = 1;}
if(_sido1Mod){
_sido1a1 =1;
_sido1b1 =1;
_sido1c1 =1;
_sido1d1 =1;
_sido1e1 =1;
_sido1f1 =1;
_sido1g1 =1;
_sido1r2 =0;
_sido1r1 =0;
_sido1Mod=0;} else {
_sido1TSN = String (out_19267442_1);
_sido1TB = _IntToSevenSegment(_charFromStringForIndex(_sido1TSN,_sido1Raz));
_sido1a1 =! bitRead(_sido1TB, 0);
_sido1b1 =! bitRead(_sido1TB, 1);
_sido1c1 =! bitRead(_sido1TB, 2);
_sido1d1 =! bitRead(_sido1TB, 3);
_sido1e1 =! bitRead(_sido1TB, 4);
_sido1f1 =! bitRead(_sido1TB, 5);
_sido1g1 =! bitRead(_sido1TB, 6);
_sido1r2 = (_sido1Raz==1);
_sido1r1 = (_sido1Raz==2);
if(_sido1Raz == 2) {_sido1dp = ! (0);}
if(_sido1Raz == 1) {_sido1dp = ! (0);}
_sido1Raz = _sido1Raz +1; _sido1Mod=1;} }
digitalWrite(13, _sido1r2);
digitalWrite(12, _sido1r1);
digitalWrite(11, _sido1g1);
digitalWrite(10, _sido1f1);
digitalWrite(9, _sido1e1);
digitalWrite(8, _sido1d1);
digitalWrite(7, _sido1c1);
digitalWrite(6, _sido1b1);
digitalWrite(5, _sido1a1);




}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
}
byte _IntToSevenSegment(int value)
{
if (value==48) {return 63;}
if (value==49) {return 6;}
if (value==50) {return 91;}
if (value==51) {return 79;}
if (value==52) {return 102;}
if (value==53) {return 109;}
if (value==54) {return 125;}
if (value==55) {return 7;}
if (value==56) {return 127;}
if (value==57) {return 111;}
if (value==45) {return 64;}
if (value==65) {return 119;}
if (value==67) {return 57;}
if (value==99) {return 88;}
if (value==100) {return 94;}
if (value==69) {return 121;}
if (value==70) {return 113;}
if (value==72) {return 118;}
if (value==104) {return 116;}
if (value==76) {return 56;}
if (value==79) {return 63;}
if (value==111) {return 92;}
if (value==80) {return 115;}
if (value==114) {return 80;}
if (value==83) {return 109;}
if (value==116) {return 120;}
if (value==85) {return 62;}
if (value==117) {return 28;}
if (value==110) {return 84;}
return 0;
}
int _charFromStringForIndex(String val, int idx)
{int lengt=val.length();
if(lengt < idx) return 0;
return val.charAt(lengt-idx);
}
void tacho_149117821_1()
{
time_149117821_1 = micros() - temp_149117821_1;
temp_149117821_1 = micros();


}[/spoiler]

Отправлено спустя 5 минут 11 секунд:
Схему долго рисовать, но в общих чертах...
Двухзначный 7-сегментный индикатор с общим анодом. Аноды на 12,13 пины, катоды с 5 по 11. На 2 пине прерывания и датчик холла.
Последний раз редактировалось BBKing 02 мар 2019, 21:44, всего редактировалось 1 раз.
Аватара пользователя
eugeneb
Лейтенант
Сообщения: 486
Зарегистрирован: 15 авг 2016, 11:20
Откуда: Нижний Новгород
Имя: Евгений
Благодарил (а): 1 раз

Напряжение на 7-сегментном индикаторе

Сообщение eugeneb »

Программу, которая в FLProg, в картинках :)
С уважением,
Евгений Бобков
BBKing
Рядовой
Сообщения: 8
Зарегистрирован: 02 мар 2019, 12:18
Имя: Станислав

Напряжение на 7-сегментном индикаторе

Сообщение BBKing »

В ФЛПрог использовал два пользовательских блока, тахометр и время, дата, числа. Первый измеряет интервал между импульсами, второй для округления.
Аватара пользователя
eugeneb
Лейтенант
Сообщения: 486
Зарегистрирован: 15 авг 2016, 11:20
Откуда: Нижний Новгород
Имя: Евгений
Благодарил (а): 1 раз

Напряжение на 7-сегментном индикаторе

Сообщение eugeneb »

А индикацию Вы как организовали? Пристегните файл flp сюда. Внизу есть кнопка "Добавить файлы".
С уважением,
Евгений Бобков
BBKing
Рядовой
Сообщения: 8
Зарегистрирован: 02 мар 2019, 12:18
Имя: Станислав

Напряжение на 7-сегментном индикаторе

Сообщение BBKing »

Изображение

Отправлено спустя 2 минуты 21 секунду:
Файл программы
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
eugeneb
Лейтенант
Сообщения: 486
Зарегистрирован: 15 авг 2016, 11:20
Откуда: Нижний Новгород
Имя: Евгений
Благодарил (а): 1 раз

Напряжение на 7-сегментном индикаторе

Сообщение eugeneb »

Всё правильно. Но не есть хорошо навешивать индикаторы на контроллер.
Общий ток по всем выходам не должен превышать 40 мА.
Примените буфер - либо два регистра типа 595, либо одну микросхему MAX7219.
Второе проще - резисторы не нужны.
С уважением,
Евгений Бобков
BBKing
Рядовой
Сообщения: 8
Зарегистрирован: 02 мар 2019, 12:18
Имя: Станислав

Напряжение на 7-сегментном индикаторе

Сообщение BBKing »

Я ставил транзисторы на аноды и катоды. Потребление от платы микроамперы...
Аватара пользователя
eugeneb
Лейтенант
Сообщения: 486
Зарегистрирован: 15 авг 2016, 11:20
Откуда: Нижний Новгород
Имя: Евгений
Благодарил (а): 1 раз

Напряжение на 7-сегментном индикаторе

Сообщение eugeneb »

Непонятно. Схема нужна.
С уважением,
Евгений Бобков
BBKing
Рядовой
Сообщения: 8
Зарегистрирован: 02 мар 2019, 12:18
Имя: Станислав

Напряжение на 7-сегментном индикаторе

Сообщение BBKing »

приблизительно так, только ещё со стороны катодов транзисторы обратной полярности
Изображение
Александр_Светлый
Лейтенант
Сообщения: 355
Зарегистрирован: 12 окт 2016, 19:03
Откуда: Краснодар

Напряжение на 7-сегментном индикаторе

Сообщение Александр_Светлый »

Нехорошо то не хорошо, но порты вполне справляются с прямым подключением 7-ми сегментных индикаторов, проверено лично, держат даже в TQFP корпусах (хоть и не спорю, это полное извращение и издевательство над МК). Резисторы 125-220 Ом и ток будет лежать в пределах 30-40 мА при этом яркость практически или максимальная. Схема простейшая, общий катод индикатора на землю (GND) без всяких ухищрений и на a b c d e f g через резисторы выходы МК. Буферные микросхемы и драйвера с транзисторами хорошо, но в данном случае думаю излишне. Советую индикатор заклять тонировочной плёнкой, тогда лучше видно на солнце индикаторы просвечивающие через тонировку.
Я не флудер , просто мне есть что сказать =)
BBKing
Рядовой
Сообщения: 8
Зарегистрирован: 02 мар 2019, 12:18
Имя: Станислав

Напряжение на 7-сегментном индикаторе

Сообщение BBKing »

Транзисторов не жалко. Я использовал кт315 и кт361, их у меня много. Проблема в слишком коротких импульсах с контроллера на индикатор. Даже увеличение напряжения на 2 вольта никак не повлияло на яркость. Импульсы на столько коротки, что светодиод не успевает разгореться. Наверное таки придётся ставить сдвиговые регистры. Они должны понизить частоту и расширить импульс. Ну так я думаю, хотя я в этом почти ничего не понимаю.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

Напряжение на 7-сегментном индикаторе

Сообщение Sancho »

Александр_Светлый писал(а): 02 мар 2019, 22:27Советую индикатор заклять тонировочной плёнкой, тогда лучше видно на солнце индикаторы просвечивающие через тонировку.
Отличный совет!!! Проверенный.
Для его теста просто накройте индикатор белой бумагой.
Ключевое слово - контраст.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13 апр 2017, 11:57
Имя: noname

Напряжение на 7-сегментном индикаторе

Сообщение pan »

eugeneb писал(а): 02 мар 2019, 21:12Общий ток по всем выходам не должен превышать 40 мА.
поправлю, 40ма на один пин, но не более 200ма по всем
Brand2
Лейтенант
Сообщения: 450
Зарегистрирован: 26 фев 2018, 21:27
Откуда: Haifa
Имя: Alex
Благодарил (а): 2 раза
Поблагодарили: 5 раз

Напряжение на 7-сегментном индикаторе

Сообщение Brand2 »

[ref]BBKing[/ref], я бы поставил OLED Display 1,3 '',можно вывести большие цифры,и подключение проще.
Аватара пользователя
eugeneb
Лейтенант
Сообщения: 486
Зарегистрирован: 15 авг 2016, 11:20
Откуда: Нижний Новгород
Имя: Евгений
Благодарил (а): 1 раз

Напряжение на 7-сегментном индикаторе

Сообщение eugeneb »

pan писал(а): 03 мар 2019, 11:17поправлю, 40ма на один пин, но не более 200ма по всем
Да, Вы правы.
Но это стрессовые цифры, не рекомендуемые.
BBKing писал(а): 02 мар 2019, 21:34приблизительно так, только ещё со стороны катодов транзисторы обратной полярности
Не нравится мне эта схема...
Нарисуйте Вы уже свою схему, карандашом на бумаге и сфотайте.

А насчёт коротких импульсов, это предположение или Вы осциллографом проверили?
Сейчас соберу, где-то у меня завалялся индикатор.
С уважением,
Евгений Бобков
Аватара пользователя
eugeneb
Лейтенант
Сообщения: 486
Зарегистрирован: 15 авг 2016, 11:20
Откуда: Нижний Новгород
Имя: Евгений
Благодарил (а): 1 раз

Напряжение на 7-сегментном индикаторе

Сообщение eugeneb »

Собрал без всяких буферов по Вашей словесной схеме.
Яркость субъективно нормальная. Но это не на улице.
[spoiler]
p1.jpg
[/spoiler]

Скважность так себе:

при двух разрядах - 23%
[spoiler]
p2.jpg
[/spoiler]



при трёх разрядах - 15%
[spoiler]
p3.jpg
[/spoiler]

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

И обратите внимание как меняется частота при двух разрядах и при трёх, то есть при программной нагрузке. У Вас ведь ещё прерывания есть.
Я бы советовал всё таки регистры.
Либо статическая индикация, либо на MAX7219 - там яркость можно менять на ходу.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
С уважением,
Евгений Бобков
BBKing
Рядовой
Сообщения: 8
Зарегистрирован: 02 мар 2019, 12:18
Имя: Станислав

Напряжение на 7-сегментном индикаторе

Сообщение BBKing »

Подрисовал схему, правда второй транзистор только для одного элемента индикатора, но думаю будет понятно.
[spoiler]
7_seg (1).jpg
[/spoiler]
Вот моя осцилограма снятая прямо с элемента индикатора
[spoiler]
1.jpg
[/spoiler]
1,8 в, но если замкнуть защитный резистор подымается до 2,4в. Но скважность :(

Отправлено спустя 4 минуты 12 секунд:
Вчера подумал про малую длину импульса потому, что при повышении питания на 2 вольта яркость оставалась прежней. И я так понял, что програмно скважность не поправить?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
eugeneb
Лейтенант
Сообщения: 486
Зарегистрирован: 15 авг 2016, 11:20
Откуда: Нижний Новгород
Имя: Евгений
Благодарил (а): 1 раз

Напряжение на 7-сегментном индикаторе

Сообщение eugeneb »

Если предположить напряжение насыщения транзисторов по 0.5В, падение на сегменте - 2.5В, то чтобы получить пиковый ток в сегменте 20 мА, балластное сопротивление должно быть (5В - 0.5В - 0.5В - 2.5В) / 0.02мА = 75Ом.
А при скважности 25% можно и до 40мА догнать (с конденсаторами), то есть R=39Ом.
С уважением,
Евгений Бобков
Ответить

Вернуться в «Начинающим»

Кто сейчас на конференции

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