Возможно у кого то есть программа с хорошо расжованным обьяснением работы, для вывода на 1-3 трехзначных семисегментника через 74HC595. Те что находил были заточены под конкретное устройство.
Заголовок сообщения: Re: Помогите вывести значение на семисегментники через 74HC5
Добавлено: Чт мар 12, 2015 11:05:07
Модератор
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
djrec писал(а):
Те что находил были заточены под конкретное устройство
А чем они будут отличаться от тех, которые "возможно у кого то есть" ? Они также будут заточены под конкретную схему подключения, которую, кстати, Вы не показали. Или опять ищем экстрасенсов ?
любая задача разделяется на ряд подзадач. в частности, ваша делится на: 1. вывод информации на 595-е регистры. характер информации роли не играет, поэтому эта часть может быть взята из любого проекта и сводится в сущности к использованию аппаратного или программного SPI-подобного протокола. 2. преобразование числа в соответствующие символы. задача не связана с индикацией вообще. решается либо использованием стандартных функций типа itoa или sprintf, либо самодельных. решение этой задачи так же можно взять из любого проекта. 3. преобразование символа в соответствующие сегменты индикаторов. задача сводится к выбору из массива: в самом массиве хранятся представления символа в виде "сегментов" (т.е. байты, каждый бит которого отвечает за свечение определенного сегмента), номер элемента массива соответствует номеру соответствующего символа. для вывода чисел, соответственно хватит массива из 10 байтов. решение задачи очень простое, можно самому сделать, или поискать решения "два в одном" - для этого и предыдущего пункта одновременно. 4. последняя задача - вывод подготовленных байтов с сегментами в регистры. решение заключается в использоваии решения 1 пункта нужное количество раз для отправки в регистры байтов из решения 3-го пункта.
в чем проблема у вас? разве все, что я написал - непосильно?!
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Функцию которую можно было бы не сложно переделать под любые три ноги мк. То есть с комментариями. Схемы нет, сделал бы отдельно под предложенный вариант.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Заголовок сообщения: Re: Помогите вывести значение на семисегментники через 74HC5
Добавлено: Чт мар 12, 2015 11:22:50
Модератор
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Цитата:
в чем проблема у вас? разве все, что я написал - непосильно?!
А Вы посмотрите на его другие посты. Сплошные неоднозначные глупые вопросы, на которые нет однозначных ответов. Ни в одном вопросе нет описания конкретных проблем, только одни хотелки и сплошное "дайте" и "подайте". ТС, в чём у Вас КОНКРЕТНО проблема или затык ? Если не конкретизируете свои проблемы - тема полетит в помойку. Также, всех остальных подобных от Вас тем, ждёт та же учесть. Надоело уже одно и тоже твердить!
любая задача разделяется на ряд подзадач. в частности, ваша делится на: 1. вывод информации на 595-е регистры. характер информации роли не играет, поэтому эта часть может быть взята из любого проекта и сводится в сущности к использованию аппаратного или программного SPI-подобного протокола. 2. преобразование числа в соответствующие символы. задача не связана с индикацией вообще. решается либо использованием стандартных функций типа itoa или sprintf, либо самодельных. решение этой задачи так же можно взять из любого проекта. 3. преобразование символа в соответствующие сегменты индикаторов. задача сводится к выбору из массива: в самом массиве хранятся представления символа в виде "сегментов" (т.е. байты, каждый бит которого отвечает за свечение определенного сегмента), номер элемента массива соответствует номеру соответствующего символа. для вывода чисел, соответственно хватит массива из 10 байтов. решение задачи очень простое, можно самому сделать, или поискать решения "два в одном" - для этого и предыдущего пункта одновременно. 4. последняя задача - вывод подготовленных байтов с сегментами в регистры. решение заключается в использоваии решения 1 пункта нужное количество раз для отправки в регистры байтов из решения 3-го пункта.
в чем проблема у вас? разве все, что я написал - непосильно?!
Проблема наверное в плохом понимании работы регистров. при их изучении, вывод бегущего огонька, так и не смог добиться стабильной работы. По этому ищу проверенную функцию которой пользуются многие с описанием.
Проблема наверное в плохом понимании работы регистров.
Чего там понимать-то? ST_CP опустили, 8 тактов на SH_CP дали одновременно с ними на DS данные побитно выдали, ST_CP подняли, все первый переданный бит на Q7, последний на Q0. Тема по SPI у вас есть уже, можно было и ей обойтись...
djrec писал(а):
при их изучении, вывод бегущего огонька, так и не смог добиться стабильной работы. По этому ищу проверенную функцию которой пользуются многие с описанием.
Обычно показывают что набыдлокодили, тогда вам и покажут где криво сделано и как надо.
_________________ Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Первый 595 Q0-A Q1-B Q2-C Q3-D Q4-E Q5-F Q6-G Q7-DP
Второй 595
Q0-1 сегмент Q1-2 сегмент Q2-3 сегмент
По тому что я разрабатываю устройства с нуля, а не просто копирую как многие. По этому и получается много не ясностей, и в процессе обсуждения с Вами и рождается истина. Зачем же так пинать, ведь я так полагаю форум и сделан для того что бы не знающий смог разобраться, пойти по дороге которую многие уже давно знают, а не каждый раз изобретать велосипед. Спасибо за понимание.
Заголовок сообщения: Re: Помогите вывести значение на семисегментники через 74HC5
Добавлено: Чт мар 12, 2015 13:28:20
Модератор
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
На форуме есть множество разделов, в том числе и "Есть работа", в которую и обращаются со словами "Хочу", "Надо" и т.д... , со всеми высасываниями из Вас необходимой информации и хотелок. А тут - технический раздел ! Выкладывайте сами всю необходимую информацию - схемы, коды, и т.д... и объясняйте что конкретно у Вас не получается. Тогда будем разбираться.
По тому что я разрабатываю устройства с нуля, а не просто копирую как многие. По этому и получается много не ясностей, и в процессе обсуждения с Вами и рождается истина. Зачем же так пинать, ведь я так полагаю форум и сделан для того что бы не знающий смог разобраться, пойти по дороге которую многие уже давно знают, а не каждый раз изобретать велосипед. Спасибо за понимание.
это очень похвально, что вы идете своей дорогой - я сам такой, что бывает велосипед изобретаю, но зато самостоятельно. и тем не менее, советую более детально изучить проблему и показывать на форуме уже конкретные свои наработки, чтобы всем, кто готов вам помочь, было ясно, в чем у вас проблема. вот вам пример с этого же форума (не надо далеко ходить): viewtopic.php?f=61&t=112810 человек нарисовал схему
и ему по этой схеме помогают. в частности, можно рассказывать, какие сигналы куда идут и для чего - это про регистры. можно показывать кусочки кода, которые эти сигналы формируют. можно про алгоритмы для этой схемы говорить... а что у вас?
я, например, 100500 раз приводил примеры кода для последовательного вывода, но раз вы ими не воспользовались, значит, либо не потрудились найти, либо не смогли их понять. как я могу еще вам помочь, если не знаю, по какой причине у вас проблема? где куски кода, которые у вас не работают? о чем мы вообще говорим?
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Переделываю под схему что ниже . Не могу понять как загнать регистры трижды по два байта, после каждых двух байт что бы выдать на выхода. (Пробывал по разному через if, но каждый раз выдает непонятно что)
во-первых, код надо вставлять в сообщение при помощи тегов Code во-вторых, индикация у вас динамическая, т.е. вы просто обязаны постоянно и непрерывно обновлять состояние индикатора, зажигая поочередно все разряды, чтобы создавалась иллюзия одновременного свечения всех. то есть у вас алгоритм должен быть таким: 1. вывели сегменты 1-го разряда и соответственно включили его 2. подождали чуть-чуть 3. вывели сегменты 2-го разряда и соответственно включили его 4. подождали чуть-чуть 5. и так далее
причем никаких пауз в этом процессе быть не должно, иначе разряды будут мигать или неравномерно светиться. в общем, почитайте подробности про динамическую индикацию
лучше всего вышеописанный алгоритм реализуется по прерываниям от таймера. у вас, кстати, в коде есть команда разрешения прерываний, но никаких прерываний не используется. так вот, настройте любой таймер так, чтобы он генерировал прерывания примерно 30-100 раз в секунду, а в обработчике этого прерывания и занимайтесь выводом очередного разряда на индикатор. то есть в прерывании вы будете использовать вашу (кривенькую, правда) функцию write_display для вывода всего 2 байт: первый - это активация нужного разряда (в байте должен быть активным только 1 бит, подающий нужный уровень на общий анод или катод индикатора), а второй - это байт с нужными сегментами для этого разряда.
таким образом, прерывание выведет 2 байта, защелкнет их в регистры - и на индкаторе засветится, скажем, первый разряд. он будет светиться, пока не произойдет второе прерывание, которое выведет уже данные для 2-го разряда и включит его. затем третьего. затем снова первого и так далее.
а в основной программе вам надо будет только обновлять содержимое тех ячеек памяти, которые содержат данные о сегментах для разрядов. в общем, читайте вышеописанную статью и пробуйте!
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Заголовок сообщения: Re: Помогите вывести значение на семисегментники через 74HC5
Добавлено: Пт мар 13, 2015 08:15:51
Модератор
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
djrec писал(а):
// Отправляем данные на индикатор write_display(display,6); }
А почему 6 байт отправляете ? Регистров то всего 2, по одному байту. Вам нужно поочерёдно выводить на шину пачки по 2 байта. В первом будет бегать нолик по битам, во втором - данные, которые нужно вывести конкретно на этот индикатор. И это нужно делать в каком-нибудь периодично-повторяющемся месте, например, как уже сказали выше, в обработчике прерываний от таймера. С частотой. 30-100 Гц будет маловато. Частота вызовов должны быть не менее 50Гц * кол-во индикаторов. Т.е. в Вашем случае = 200 раз в секунду. Я обычно вывожу с частотой 1 Кгц. Совместно с системными тиками. И ещё, подшаманьте с функцией вывода данных, её у Вас можно хорошо пооптимизировать. Мало того, в Вашем случае нецелесообразно передавать в функцию кол-во байтов и перебирать их там в цикле, т.к. их у Вас всего 2. Логично сделать функцию вывода 1 байта и туда по-очереди передавать 2 байта. Т.е., приблизительно так :
write_data(aaaa); // Выводим байт со сдвинутым нулём на позицию, соответствующей текущему индикатору write_data(bbbb); // Выводим байт данных, соответствующих текущему индикатору
Защёлкивание можно сделать отдельно, и вызывать после передачи обоих байтов. Дабы данные выводились на индикаторы одновременно.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения