7- cегментный дисплей для arduino

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

protone77 пишет:

 если резисторы там для ограничения напряжения( или нет?) а я выставлял напряжение немного ниже их рабочего

Или нет. Они там для ограничения тока.

Ну. завтра. как померяете падение, скажите. 

Только когда будет резистор - не жмотьтесьЮ ставьте 12В. Скажете мне тогда напряжение источника, сопротивление резистора и падение на резисторе. Хотя, сдайтся мне ... 6 там у Вас светодиодов. И у нас проблема, чем это питать. Во время отладки можно Вашим БП, а потом надо будет искать что-то. В продаже-то навалом всего, но что Вам нужно (размер там и т.п.)? В общем будем думать. Пока промерьте и сообщите завтра.

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

protone77 пишет:

 если резисторы там для ограничения напряжения( или нет?) а я выставлял напряжение немного ниже их рабочего

Или нет. Они там для ограничения тока.

Ну. завтра. как померяете падение, скажите. 

Только когда будет резистор - не жмотьтесьЮ ставьте 12В. Скажете мне тогда напряжение источника, сопротивление резистора и падение на резисторе. Хотя, сдайтся мне ... 6 там у Вас светодиодов. И у нас проблема, чем это питать. Во время отладки можно Вашим БП, а потом надо будет искать что-то. В продаже-то навалом всего, но что Вам нужно (размер там и т.п.)? В общем будем думать. Пока промерьте и сообщите завтра.

6 светодиодов там точно я видел, как они горели.

А для чего нужно узнавать падение напряжения. Постараюсь завтра измерить

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

protone77 пишет:

А для чего нужно узнавать падение напряжения. Постараюсь завтра измерить

Для двух вещей

1. чтобы точно знать падение напряжения на Ваших светодиодах. Оно равно напряжению источника - падение на резисторе.

2. Если поделить падение напряжения на сопротивление резистора, получим ток, который Вы почему-то никак измерить не можете :)

bizzon
Offline
Зарегистрирован: 29.03.2016

Резисторы ограничивают ТОК ! Всегда! Напряжение- никогда. Светодиоды умирают от большого тока в прямом направлении и от большого напряжения в обратном. 

bwn
Offline
Зарегистрирован: 25.08.2014

bizzon пишет:

Резисторы ограничивают ТОК ! Всегда! Напряжение- никогда. Светодиоды умирают от большого тока в прямом направлении и от большого напряжения в обратном. 

Умирают, но не сдаются. Если напряжение не позволяет достичь предельного тока, все будет ОК. Что и наблюдаем у ТС. Характеристика все таки не скачкообразная.
Не соглашусь и со вторым утверждением. АЛ107+резистор в 1мОм уже лет пятнадцать работают в качестве индикатора в выключателях, живые.
Когда приблизимся к крайним токам, все станет намного хуже.
Для ТС, резистор ставьте всегда, пока не начнете осознавать, где это можно не делать.

protone77
Offline
Зарегистрирован: 02.10.2016

Падение напряжения 1.293В. Резистор был 1кОм Напряжение на источнике 12 Вольт Рассчитал я ток и получилось 1.3ма 

protone77
Offline
Зарегистрирован: 02.10.2016

Я уже понял, что без резисторов никуда) Все мои познания в физике закончились 11 классом и были успешно забыты

bwn
Offline
Зарегистрирован: 25.08.2014

protone77 пишет:

Я уже понял, что без резисторов никуда) Все мои познания в физике закончились 11 классом и были успешно забыты

В принципе средняя школа, это все (в основной массе случаев), что нужно знать про физику. Вот вспомнить ее придеться.

auditordik
auditordik аватар
Offline
Зарегистрирован: 19.11.2016

Дисплеи быват разные по току . Нужно методом тыка . Я проверяю дисплеи на термометре , сокеты вывел . Некоторые нормально светятся , ток от 5mA , и супер ярко светятся , а некоторые Ардуинка даже не зажигает . Переломал с помойки много плат с дисплеями , и пришёл к выводу , читайте даташит на дисплей .

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

protone77 пишет:

Падение напряжения 1.293В. Резистор был 1кОм Напряжение на источнике 12 Вольт Рассчитал я ток и получилось 1.3ма 

Отлично, значит падение напряжения на светодиодах получается 10,71 В. Помните, мы с Вами считали теоретическое падение 10,8 В ? Так и есть. разницу в 0.1 спишем на погрешность резистора (они у Вас 5%) и погрешность измерения.

В общем, будем исходить из падения на светодиодах в 10,8 вольта и не париться.

Теперь Вам надо понять какой будет источник питания в окончательном устройстве. 12В? Я просто не понимаю Ваших требований по компактности и прочему.

Если 12В, то давайте делать так. Резистор Вы теперь расчитывать умеете. Падение на резисторе 12В - 10,8 В = 1,2В  делми его на желаемый ток 1,2 / 0.01 = 120 Ом.

Двоеточие - цепляем два светодиода последовательно и выводим их прямо на питание через другой резистор (падение напряжения 1,8 х 2 = 3,6 В. Резистор (12-3,6) / 0,01 = 840 Ом) Ближайший по ряду - 910 Ом).

Если в оконечном изделии будет не 12В, то надо всё пересчитать.

Теперь можно подобрать резисторы поточнее или оставить расчётные - в общем-то нормально всё будет.

Но, не спешите покупать, есть одна беда. Ваш сдвиговый регистр 12В не потянет. У него абсолютный максимум - 7В (см. даташит).

Как думаете выходить из положения? Идеи есть? Свои я потом предложу, давайте Ваши.

 

 

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

protone77 пишет:

Падение напряжения 1.293В. Резистор был 1кОм Напряжение на источнике 12 Вольт Рассчитал я ток и получилось 1.3ма 

Отлично, значит падение напряжения на светодиодах получается 10,71 В. Помните, мы с Вами считали теоретическое падение 10,8 В ? Так и есть. разницу в 0.1 спишем на погрешность резистора (они у Вас 5%) и погрешность измерения.

В общем, будем исходить из падения на светодиодах в 10,8 вольта и не париться.

Теперь Вам надо понять какой будет источник питания в окончательном устройстве. 12В? Я просто не понимаю Ваших требований по компактности и прочему.

Если 12В, то давайте делать так. Резистор Вы теперь расчитывать умеете. Падение на резисторе 12В - 10,8 В = 1,2В  делми его на желаемый ток 1,2 / 0.01 = 120 Ом.

Двоеточие - цепляем два светодиода последовательно и выводим их прямо на питание через другой резистор (падение напряжения 1,8 х 2 = 3,6 В. Резистор (12-3,6) / 0,01 = 840 Ом) Ближайший по ряду - 910 Ом).

Если в оконечном изделии будет не 12В, то надо всё пересчитать.

Теперь можно подобрать резисторы поточнее или оставить расчётные - в общем-то нормально всё будет.

Но, не спешите покупать, есть одна беда. Ваш сдвиговый регистр 12В не потянет. У него абсолютный максимум - 7В (см. даташит).

Как думаете выходить из положения? Идеи есть? Свои я потом предложу, давайте Ваши.

 

 

на выходы регистра поставить микросхему uln2003. 

Или просто отдельно питать анод от 12в,а пины сегментов от регистра, но я не знаю будет так работать вообще или нет

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

protone77 пишет:

на выходы регистра поставить микросхему uln2003. 

Это хороший вариант. Заодно позволяет избавиться от ограничения на то и подавать на сегменты честные 20мА, чтоб на полную яркость светились.

Другое дело, что там может чуть-чуть напряжения не хватить. Это пробовать надо. Она у Вас есть? Как её покдлючать знаете? 

protone77 пишет:

Или просто отдельно питать анод от 12в,а пины сегментов от регистра, но я не знаю будет так работать вообще или нет

Зажечь-то зажжёт, а вот погасить до конца может и не получится, т.к. таким способом мы сможем менять напряжение на сегменте не 12В - 0В, а только 12В - 7В. А он гад при семи может ещё немножко светиться :)

 

 

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

protone77 пишет:

на выходы регистра поставить микросхему uln2003. 

Это хороший вариант. Заодно позволяет избавиться от ограничения на то и подавать на сегменты честные 20мА, чтоб на полную яркость светились.

Другое дело, что там может чуть-чуть напряжения не хватить. Это пробовать надо. Она у Вас есть? Как её покдлючать знаете? 

protone77 пишет:

Или просто отдельно питать анод от 12в,а пины сегментов от регистра, но я не знаю будет так работать вообще или нет

Зажечь-то зажжёт, а вот погасить до конца может и не получится, т.к. таким способом мы сможем менять напряжение на сегменте не 12В - 0В, а только 12В - 7В. А он гад при семи может ещё немножко светиться :)

 

 

нет нету, а какие ещё есть варианты?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ну, для начала, можно купить другие сдвиговые регистры, которые выдерживают такие напряжения. Например, TPIC6A596, TPIC6B595 или UCN5910, MIC5891, MIC5822, MIC5821, MIC5841 и т.д. - их до чёрта всяких. Бывают не на 8, а на 16 бит, таких надо 2, а не 4. Бывают и на 32 бита. Таким вообще одним можно обойтись. Например, HV5308B - 32 бита, т.е. нужна всего одна микросхема на 4 цифры, но HV5308B бывают только в корпусах PQFP, PLCC - я лично их паять не умею.

Если купить высоковольтные сдвиговые регистры, то в проекте ничего не меняется.

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

Cмотрите. При использовании ULN (любой) Вам нужно 4 микросхемы (по одной на разряд) и 28 резисторов (по одному на сегмент) + резистор для двоеточия. А если делать из рассыпухи, то вместо 4 микросхем нужно ставить 28 транзисторов и столько же резисторов (это собственно и есть начинка микросхемы).

Можно отказаться от статической индикации и делать динамическую (хотя и не хотелось бы). При динамической индикации потребуется всего одна микосхема ULN + 4 транзистора и 4 резистора. Ну, или если на рассыпухе, то 11 транзситоров и столько же резисторов (двлечтоие я тут не считаю - там всё ясно - один резистор нужен).

Ну, как-то так.

protone77
Offline
Зарегистрирован: 02.10.2016

я сегодня уезжаю на денек, где не будет доступа к интрнету, но в вск напишу свое решение,спасибо за инфу

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Кстати, можно в принципе попробовать и существующим регистром. Може он и не будет светиться при 7В. Я бы попробовал. Оно, конечно, лишний ток будет идти (не свтится. а ток тиак идёт, напряжение-то 7В есть), но там такие копейки

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

Кстати, можно в принципе попробовать и существующим регистром. Може он и не будет светиться при 7В. Я бы попробовал. Оно, конечно, лишний ток будет идти (не свтится. а ток тиак идёт, напряжение-то 7В есть), но там такие копейки

раз можно, давайте попробуем. Мне надо купить резисторов по 120 ом наверно сьезжу, как получится. И ещё надо где-то взять 12в ? 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, Вы же пару дней назад где-то брали? Опять на балкон засунунли? :)

Ну, раздербаньте старый компьютерный корпус в котором блок питания живой. Там и 5, и 3,3, и 12, и -12 есть. А если совсем старый. то и -5.

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

Ну, Вы же пару дней назад где-то брали? Опять на балкон засунунли? :)

Ну, раздербаньте старый компьютерный корпус в котором блок питания живой. Там и 5, и 3,3, и 12, и -12 есть. А если совсем старый. то и -5.

это понятно, но у него же размеры очень большие 

protone77
Offline
Зарегистрирован: 02.10.2016

получается подключить +( от блока питания) на общий анод надо , а - на землю на плате  получается?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да. 

Я ж Вас как-то просил схему рисовать. Халтурите, а теперь вот вопросы такие :)

protone77
Offline
Зарегистрирован: 02.10.2016

я нарисую.  Есть такая програ чтобы там были сразу все элементы с пинами( ардуина и регистры)? я скачивал splan и tinitycad в последней есть, но там только мега. 

https://www.google.by/search?q=%D1%81%D1%85%D0%B5%D0%BC%D0%B0+%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D1%8F+74hc595&espv=2&biw=1920&bih=901&source=lnms&tbm=isch&sa=X&ved=0ahUKEwi2-K2NqfbQAhWRKiwKHZx_BzcQ_AUICCgB#imgrc=qme5oqXnaUfeZM%3A вот я примерную схему нашел, только тут у сегментов похоже общий катод, в моем случае надо их всех вывести на питание 12в и датчик какой-то, но он мне не нужен

protone77
Offline
Зарегистрирован: 02.10.2016

вот нарисовал схему. Не смог найти там ардуину и сегменты поэтому подписал сам все вывода

protone77
Offline
Зарегистрирован: 02.10.2016

сохранить файл не смог потому  что это бета программы, а в ней сохранять нельзя 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ну, не смог так не смог, но хотя бы не уменьшайте картинку, а то мне очень трудно её разглядывать. если сайт не позволяет больших размеров, положите на файлообменник, но размер экрана сохраните.

В целом схема как схема. Есть только одно замечание. Вы в качестве SS использовали ардуиновский пин 8. Лучше используйте стандартный - 10. А то Вы и восьмой заняли и 10 толком использовать нельзя.

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

Соберите и посмотрите как повдёт себя индикатор. Гореть-то он будет стопудово, а вот будет ли до конца гаснуть - не знаю. Попробуйте.

protone77
Offline
Зарегистрирован: 02.10.2016

Я ещё хотел спросить а общий анод же тоже надо подключать через резисторы? или нет. Я просто не совсем понимаю, как это будет работать. Сегменты будут питаться от 5в ардуины. анод от 12в.

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

ну, не смог так не смог, но хотя бы не уменьшайте картинку, а то мне очень трудно её разглядывать. если сайт не позволяет больших размеров, положите на файлообменник, но размер экрана сохраните.

В целом схема как схема. Есть только одно замечание. Вы в качестве SS использовали ардуиновский пин 8. Лучше используйте стандартный - 10. А то Вы и восьмой заняли и 10 толком использовать нельзя.

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

Соберите и посмотрите как повдёт себя индикатор. Гореть-то он будет стопудово, а вот будет ли до конца гаснуть - не знаю. Попробуйте.

я пока не понимаю разницы между цифровым 8 и 10 выводом, схему собрать пока не могу- нету резисторов. Как куплю или найду соберу и протестирую

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

protone77 пишет:

Я ещё хотел спросить а общий анод же тоже надо подключать через резисторы? 

Нет. Смысл резистора - ограничить ток. Если то через каждый сегмент ограничет, то черз общий анод будет протекать ток в точности равный сумме токов включённых сегментов и никакой другой.

protone77 пишет:

Сегменты будут питаться от 5в ардуины. анод от 12в.

Нет. Не так. Сегменты от 5 В не заработают.

Когда Вам надо включить сегмент, Вы должны подать на него LOW, т.е. по сути соединить с землёй. Сегмент питается по линии +12В - светодиод - земля. А когда Вам надо выключить сегмент, Вы по идее должны подать на него +12В. Тогда у светодиода со стороны анода будет 12В и со стороны катода тоже 12В. Разницы в потенциалах нет, ток через светодиод не течет и он не светится.

Но наш регистр не умеет подавать +12В, поэтому мы попробуем подавать +5В в надежде на то, что разницы потенциалов в 12-5=7В не хватит чтобы диод засветился и он светится не будет. Если будет - надо возвращаться к идеям, которые мы раньше обсуждали (другие регистры или транзисторы).

Т.е. ещ раз. На андо всегда есть +12 В

В идеале должно быть так:

На катоде земля - сегмент светится; на катоде 12В - сегмент не светится.

Мы же пробуем так

На катоде земля - сегмент светится; на катоде 12В - сегмент не светится (надеемся).

Понятно?

Не покупайте лишних резисторов, лучше купите несколько разных или, ещё лучше, подстроечные на 500 ом. Мы с его помощью подберём какие разисторы нужны, а потом уж будете покупать.

 
protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

protone77 пишет:

Я ещё хотел спросить а общий анод же тоже надо подключать через резисторы? 

Нет. Смысл резистора - ограничить ток. Если то через каждый сегмент ограничет, то черз общий анод будет протекать ток в точности равный сумме токов включённых сегментов и никакой другой.

protone77 пишет:

Сегменты будут питаться от 5в ардуины. анод от 12в.

Нет. Не так. Сегменты от 5 В не заработают.

Когда Вам надо включить сегмент, Вы должны подать на него LOW, т.е. по сути соединить с землёй. Сегмент питается по линии +12В - светодиод - земля. А когда Вам надо выключить сегмент, Вы по идее должны подать на него +12В. Тогда у светодиода со стороны анода будет 12В и со стороны катода тоже 12В. Разницы в потенциалах нет, ток через светодиод не течет и он не светится.

Но наш регистр не умеет подавать +12В, поэтому мы попробуем подавать +5В в надежде на то, что разницы потенциалов в 12-5=7В не хватит чтобы диод засветился и он светится не будет. Если будет - надо возвращаться к идеям, которые мы раньше обсуждали (другие регистры или транзисторы).

Т.е. ещ раз. На андо всегда есть +12 В

В идеале должно быть так:

На катоде земля - сегмент светится; на катоде 12В - сегмент не светится.

Мы же пробуем так

На катоде земля - сегмент светится; на катоде 12В - сегмент не светится (надеемся).

Понятно?

Не покупайте лишних резисторов, лучше купите несколько разных или, ещё лучше, подстроечные на 500 ом. Мы с его помощью подберём какие разисторы нужны, а потом уж будете покупать.

 

http://belchip.by/fil/section/?var=filter_var&selected_section=00708&lim... на 500ом есть только один резистор, сколько штук купить 1 хватит?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

С таким резистором Вы намучаетесь, наматеритесь и толком ничего не настроите. Его чуть шевельнёшь, а он рывком меняется на хрен знает сколько сразу.

Возьмите по одному вот этих. 

 
Думаю, что на самом деле хватит 220, но на всякий случай. чтобы второй раз не ждать, возьмите оба - не разоритесь.
 
Как с их помощью подбирать нужный резистор по току знаете знаете?
 
-----------------------
 
Отдельный вопрос:
 
Вы уже попробовали собрать схему из одной цифры и сдвигового регистра и засветить один единственный сегмент с любым резситором? Под любым я понимая от 100 Ом до 1 кОм? Если нет попробуйте. Светиться-то он должен. Вопрос. выключается ли. когда погасишь. Если нет, то предётся либо искать другие реоистры (я давал список) или решать вопрос как-то через транзисторы или ещё как.
 
Мы ж давно собирались попробовать, так попробуйте. чего тянуть-то!
protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

С таким резистором Вы намучаетесь, наматеритесь и толком ничего не настроите. Его чуть шевельнёшь, а он рывком меняется на хрен знает сколько сразу.

Возьмите по одному вот этих. 

 
Думаю, что на самом деле хватит 220, но на всякий случай. чтобы второй раз не ждать, возьмите оба - не разоритесь.
 
Как с их помощью подбирать нужный резистор по току знаете знаете?
 
-----------------------
 
Отдельный вопрос:
 
Вы уже попробовали собрать схему из одной цифры и сдвигового регистра и засветить один единственный сегмент с любым резситором? Под любым я понимая от 100 Ом до 1 кОм? Если нет попробуйте. Светиться-то он должен. Вопрос. выключается ли. когда погасишь. Если нет, то предётся либо искать другие реоистры (я давал список) или решать вопрос как-то через транзисторы или ещё как.
 
Мы ж давно собирались попробовать, так попробуйте. чего тянуть-то!

я вроде собрал на макетке, получается мне сейчас нужно в ардуину скетч загрузить, чтобы один сегмент засветить? и помограть им

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, да. Засветите один сегмент через какой-нибудь резистор. Типа там 200 ом. А как только появится подстроечный так сразу подобрать правильный ток и ещё раз посмотреть полностью ли сегмент гаснет. Если полностью, можно подбирать правильные резисторы (они будут разными для точек, обычных сегментов и двоеточия) и собирать конструкцию, если нет, надо думать.

protone77
Offline
Зарегистрирован: 02.10.2016

Вопрос. выключается ли. когда погасишь. вот ваша фраза, я не понял немного я сейчас подключил через резистор 1ком сегмент и сразу выставил на бп 12в он горел отлично и начал уменьшать постепенно на 9.6-9.5 вольтах он полностью погас,но я всё делал это без скетча и включенной ардуины.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Это понятно, но надо с регистром попробовать обязательно. Чтобы не было непряитных неожиданностей, когда всё спаяете.

А чего Вы не поняли? Вы в принципе понимате принцип управления землёй или надо обяснить?

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

Это понятно, но надо с регистром попробовать обязательно. Чтобы не было непряитных неожиданностей, когда всё спаяете.

А чего Вы не поняли? Вы в принципе понимате принцип управления землёй или надо обяснить?

нет, не понимаю

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ладно, сейчас, напишу, для этого надо надо пару схем нарисовать. Сейчас.

protone77
Offline
Зарегистрирован: 02.10.2016

я попробовал через ардуино, нашел какойто скетч, там цифры 2 и 1 менятся через секунду должны, я удалил цифру 1 и подключил и в итоге мой сегмент засветился( я f использовал) сейчас ещё 1 резистор попробую найти чтобы еденицу сделать

protone77
Offline
Зарегистрирован: 02.10.2016

нашел резистор 750ом, подключил ко 2 сегменту, но они просто оба загораются( семегнты с и f)

 
void SPI_out(char data);
 
int main(void)
{
 //PORT
 DDRB=0xFF; //порт B работает как выход
 //SPI
 SPCR=0b01110011; //прерывания запрещены, SPI включен, младший бит передается первым, МК ведущий, импульсы положительной полярности, скорость CLK/128
 
    while(1)
    {
 //        abcdefgh (цифра 1)
        SPI_out(0b01100000); //вывод цифры
 _delay_ms(1000); //ждем 1с
 //        abcdefgh (цифра 2)
 SPI_out(0b11011010);
 _delay_ms(1000);
    }
}
 
void SPI_out(char data) //функция вывода цифры на индикатор
{
 SPDR=data; //запись в регистр данных SPI
 while(!(SPSR & (1<<SPIF))) //ждем окончания передачи по SPI
 PORTB |= 0x01; //подаем импульс положительной полярности на вход SHCP сдвигового регистра
 _delay_us(100); //ждем 100мкс
 PORTB &= ~0x01; //снимаем импульс положительной полярности со входа SHCP сдвигового регистра
}
 вот скетч, который нашел
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Для начала, Вам следует чётко уяснить понятие напряжение не на бытовом. А на инженерном уровне. Если Вы помните из школы, правильный термин для напряжения – «разность потенциалов». Для разности нужны две величины, т.к. разность она всегда между чем-то и чем-то – правильно?

Так вот, когда мы говорим о напряжении, то мы говорим о разности между электрическими потенциалами двух точек. Всегда. Обычно в схеме выделяют некую условную точку, потенциал которой считается нулём. И все напряжения в схеме считаются от этой точки. Эту точку называют «землёй» (ground). Если мы говорим, что в некотором месте напряжение, например 12В, это означает, что разность потенциалов между этим местом и точкой, выбранной в качестве земли – 12В. Земля – это условная точка. Можно выбрать любую точку схемы. Часто (но далеко не всегда) в качестве земли выбирают минусовой вывод источника питания, но это необязательно. В общем случае в качестве «земли» выбирается такая точка, при которой расчёт схемы получается наиболее простым.

При этом можно измерять напряжения между любыми точками схемы. Например, если в одной точке у нас напряжение 5В (относительно земли), а в другой 12В (тоже относительно земли), то если мы поднесём щупы мультиметра к этим двум точкам, мультиметр покажет 7В – разность потенциалов между нашими точками.

Еще раз. Земля – точка с нулевым потенциалом. Точку разработчик выбирает произвольно. Напряжение в любой точке схемы – это разность потенциалов между этой точкой и землёй. Можно измерить напряжение между любыми двумя точками схемы (ни одна из которых не является землёй) и оно будет равно разности напряжений в этих точках относительно земли.

Разность потенциалов между точками, ни одна из которых не является землёй часто называют «падением напряжения между этими точками».

Два примера:

Каковы напряжения в точках, обозначенных на схемах?

Левый рисунок:
в точке С равно 0, т.к. она непосредственно соединена с землёй
;
в точке А равно 12В, т.к. она соединена с батареей, минуc которой на земле;
в точке
B равно 8В – легко считается по закону Ома;
падение напряжения между
A и B – 12-8=4В.

Правый рисунок:
в точке
D равно 12В, т.к. она соединена с батареей, минуc которой на земле;
в точке
F равно -12В, т.к. она соединена с минусом батареи, полюс которой на земле;
в точке
E равно 4В – легко считается по закону Ома;
падение напряжения между
D и F – 12-(-12)=24В;
падение напряжения между
D и E – 12-4=8В;
падение напряжения между
E и F – 4-(-12)=16В.

Здесь всё понятно? Понятно, откуда цифры берутся?

Теперь очень важный момент: для того, чтобы между двумя точками потёк ток, необходимо, чтобы между ними была разность потенциалов. Если потенциалы двух точек одинаковы, ток между ними не течёт.

Теперь давайте про индикаторы. На рисунке слева подключение с общим катодом, а справа – с общим анодом (я нарисовал три светодиодна, а не восемь, как в индикаторе).

На схемах опущены токоограничивающие резисторы, чтобы не загромождать, но в реальной схеме они необходимы!!!

Смотрим на левую схему (общий катод). В точке В потенциал всегда 0 (она соединена с землёй). Если выключатель находится в правом положении (как у крайних светодиодов), то анод светодиода тоже соединён с землёй. Стало быть, между анодом и катодом светодиода нулевая разность потенциалов и ток через светодиод не течёт – светодиод не светится! А если выключатель находится в левом положении (как у среднего светодиода), то к аноду светодиода приложено напряжение питания! Значит, разность потенциалов между анодом и катодом светодиода равна напряжению питания. Ток течёт через светодиод по пути D->C->B->A и светодиод светится!

Таким образом, при включении с общим катодом, для того, чтобы зажечь светодиод на его анод нужно подать напряжение питания, а чтобы погасить – подать землю. Про такую схему говорят «управление питанием».

Теперь смотрим на правую схему (с общим анодом). На анодах светодиодов всегда есть напряжение питания (т.к. они прямо соединены с плюсом батареи).  Если выключатель находится в правом положении (как у крайних светодиодов), то катод светодиода тоже соединён с питанием. Значит на аноде и на катоде одинаковое напряжение равное напряжению питания. Разности потенциалов никакой нет (нулевая) и ток через светодиод не течёт – светодиод не светится! А если выключатель находится в левом положении (как у среднего светодиода), то к катоду светодиода приложено напряжение земли (0В по определению)! Но ведь на аноде всегда напряжение питания! Значит, разность потенциалов между анодом и катодом светодиода равна напряжению питания. Ток течёт через светодиод по пути A->B->C->D и светодиод светится!

Таким образом, при включении с общим анодом, для того, чтобы зажечь светодиод на его катод нужно подать землю (0В), а чтобы погасить – подать напряжение питания! Про такую схему говорят «управление землёй».

Уфффф …

Ну, и к нашим баранам. У нас общий анод. Стало быть: хотим включить – подаём на катод землю, хотим выключить – подаём на катод напряжение питания. Только вот беда – наш регистр не умеет подавать 12В, а умеет только 5. Посмотрите на схему – если у нас на аноде 12В, а на катод мы подадим 5В, какова будет разность потенциалов между анодом и катодом? Правильно, 12-5=7В. И меньше эту разность мы сделать не можем. Устраивает ли нас это? ХЗ! Если наш сегмент при такой разности потенциалов совсем не будет светиться, то устраивает, а если хоть немного будет – то не устраивает.

Вот это и надо проверить.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

protone77 пишет:

нашел резистор 750ом, подключил ко 2 сегменту, но они просто оба загораются( семегнты с и f)

 
void SPI_out(char data);
 
int main(void)
{
 //PORT
 DDRB=0xFF; //порт B работает как выход
 //SPI
 SPCR=0b01110011; //прерывания запрещены, SPI включен, младший бит передается первым, МК ведущий, импульсы положительной полярности, скорость CLK/128
 
    while(1)
    {
 //        abcdefgh (цифра 1)
        SPI_out(0b01100000); //вывод цифры
 _delay_ms(1000); //ждем 1с
 //        abcdefgh (цифра 2)
 SPI_out(0b11011010);
 _delay_ms(1000);
    }
}
 
void SPI_out(char data) //функция вывода цифры на индикатор
{
 SPDR=data; //запись в регистр данных SPI
 while(!(SPSR & (1<<SPIF))) //ждем окончания передачи по SPI
 PORTB |= 0x01; //подаем импульс положительной полярности на вход SHCP сдвигового регистра
 _delay_us(100); //ждем 100мкс
 PORTB &= ~0x01; //снимаем импульс положительной полярности со входа SHCP сдвигового регистра
}
 вот скетч, который нашел

Вы меня не уивайте, я только что написал Вам охрененно много букв и что вижу ....

1. Вы пихаете в SPI сначала 0b01100000, а потом зачем-то 0b11011010 ... это шозанах? Перечитайте мо предыдущий пост. У Вас общий анод. Что Вам нужно подавать на те сегменты, которые НЕ должны светится? 0 или 1? А на те. что должны светится?

2. У Вас схема была заточена на аппаратный SPI. Нафига Вы используете программый?

Пишите нормальный скетч - там блин три строчки Вам надо-то.

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

Вы меня не уивайте, я только что написал Вам охрененно много букв и что вижу ....

1. Вы пихаете в SPI сначала 0b01100000, а потом зачем-то 0b11011010 ... это шозанах? Перечитайте мо предыдущий пост. У Вас общий анод. Что Вам нужно подавать на те сегменты, которые НЕ должны светится? 0 или 1? А на те. что должны светится?

2. У Вас схема была заточена на аппаратный SPI. Нафига Вы используете программый?

Пишите нормальный скетч - там блин три строчки Вам надо-то.

длинный пост я понял

здесь  сложней, но судя из прочитанного 0 надо на те которые должные светится ,1 на те которые не должны светится,если я правильно понимаю что такое 0 и 1

protone77
Offline
Зарегистрирован: 02.10.2016

0b01100000 вот с этими цифрами я похоже разобрался. Всё, что идет после b это вывода регистра, которые подсоединяются к сегментам? тоесть 1 цифра- сегмент A 2 цифра-сегмент B  и тд? тоесть допустим, чтобы зажеч еденицу нужно 0b10011111?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

protone77 пишет:

0b01100000 вот с этими цифрами я похоже разобрался. Всё, что идет после b это вывода регистра, которые подсоединяются к сегментам? тоесть 1 цифра- сегмент A 2 цифра-сегмент B  и тд? тоесть допустим, чтобы зажеч еденицу нужно 0b10011111?

Я не знаю как именно Вы соединили регистр с индикатором. У регистра вывода пронумерованы с нулевого по 7-ой 7 так? В записи 0b01010101 - нулевой - самый правый, седьмой - самой левый

protone77
Offline
Зарегистрирован: 02.10.2016
int latchpin = 10;
int clockpin = 13;
int datapin = 11;
 

 
void setup() {
  pinMode(clockpin, OUTPUT);
  pinMode(datapin, OUTPUT);
  pinMode(latchpin, OUTPUT);
 
}
 
void loop() {
  digitalWrite(latchpin, LOW);
  shiftOut(datapin, clockpin, LSBFIRST, 0b11011111);
  digitalWrite(latchpin, HIGH);
}
 


 

 
 
protone77
Offline
Зарегистрирован: 02.10.2016

вот код, всё работает светится только один сегмент, хотя включены 2. Второй сегмент не светится вообще, даже в темноте. Жаль резисторов только 2штуки, так бы все цифры вместе засветил, проверил как горит

protone77
Offline
Зарегистрирован: 02.10.2016

нашел парочку резисторов ещё

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Судя по фото, у Вас три сегмента светятся.

Теперь так.

1. Строки 15-17 перенесите в setup. loop оставьте пустым. ничего не должно поменяться. Проверьте

2. Переходите на аппаратный SPI и делайте вывод функцией.

---------------------

Самое важное, для чего всё делалось.

1. после перенесённый в setup строк 15-17 поставьте делэй на пяток секунд, а потом погасите сегменты (все единицы впендюрьте туда).

2. Внимательно осмотрите индикатор - не светится ли он хот чуть-чуть.

Если не свтиется, то нам пока повезло.

"Пока" потому, что это не окончательный результат. Окончательный будет, когда Вы проверите тоже самое с правильным резистором.

Кстати, купили?

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

Судя по фото, у Вас три сегмента светятся.

Теперь так.

1. Строки 15-17 перенесите в setup. loop оставьте пустым. ничего не должно поменяться. Проверьте

2. Переходите на аппаратный SPI и делайте вывод функцией.

---------------------

Самое важное, для чего всё делалось.

1. после перенесённый в setup строк 15-17 поставьте делэй на пяток секунд, а потом погасите сегменты (все единицы впендюрьте туда).

2. Внимательно осмотрите индикатор - не светится ли он хот чуть-чуть.

Если не свтиется, то нам пока повезло.

"Пока" потому, что это не окончательный результат. Окончательный будет, когда Вы проверите тоже самое с правильным резистором.

Кстати, купили?

1 перенес, луп остался пустым но как-то слабее стали гореть сегменты

2 я не совсем понимаю, о чем вы. Только сейчас читаю на сайте, как \то программировать и что обозначает каждая надпись.

3 сделал делей, ничего не горит при всех еденицах

резисторы пока не купил, завтра/послезавтра будут

protone77
Offline
Зарегистрирован: 02.10.2016

 int latchpin = 10;
int clockpin = 13;
int datapin = 11;
 

 
void setup() {
  pinMode(clockpin, OUTPUT);
  pinMode(datapin, OUTPUT);
  pinMode(latchpin, OUTPUT);
  digitalWrite(latchpin, LOW);
  shiftOut(datapin, clockpin, LSBFIRST, 0b10000000);  
  digitalWrite(latchpin, HIGH);
   delay(5000);
   digitalWrite(latchpin, LOW);
  shiftOut(datapin, clockpin, LSBFIRST, 0b11111111);  
  digitalWrite(latchpin, HIGH);
}
 
void loop() {
  
 

  }
 

вот код хотя там почти ничего не изменилось

protone77
Offline
Зарегистрирован: 02.10.2016
#include <SPI.h>
int latchpin = 10;
int clockpin = 13;
int datapin = 11;

void setup() {
   SPI.begin();
   SPI.setBitOrder(LSBFIRST);
   pinMode(clockpin, OUTPUT);
   pinMode(datapin, OUTPUT);
   pinMode(latchpin, OUTPUT);
}

void loop() {
    digitalWrite(latchpin, LOW); 
    SPI.transfer(latchpin,0x8E); 
    digitalWrite(latchpin, HIGH); 

}

не знаю, почитал я про spi на этом сайте, вот что-то попытался написать. Я не понимаю, как передавать биты при помощи вот этих наборов цифр 0x8E. с нулями и еденицами было понятней. Чтобы я не вводил в спи.трансфер загораются все сегменты