Страница 4 из 9

Re: 7seg на hc595 4digit

Добавлено: Пт фев 16, 2024 20:39:08
BOB51
В данном случае можно и простыми Сишными файликами обойтись. Однако неплохая тренировка по созданию класса (это особенность ардуино С++).
Разница там в занимаемом месте в окне IDE - Сишные файлики видны да и в папке проекта обязаны присутствовать, а библиотека (с классом) может быть вынесена. В принципе - кому как удобнее..
Для самодельной функции вывода в случае приложения к MAX7219 в принципе особой разницы нет - там ведь только пересылка данных - регенерацию дисплей сам делает. Да и разницы между самоделкой и встроенной функцией shiftOut особо нету - оная также программным способом выполняется. Плюс перестраховка...
Касательно "обратного знакогенератора" - понадобиться может для ускоренной обработки данных, уже выведенных на дисплей.
К примеру быстрый анализ статуса меню по "беглому курсору" и текущему префиксу - кракозябре (в том же K145M).
Относительно простого знакогенератора - облегчает жизнь при предобработке данных. Использовать или нет - то уже от замысла в основной программе зависит (выводим цифирки или символы/кракозябры).
А вот насчет двух буферных массивов... при "полноценной динамике" на одном МК без обвязки (или с минимальной обвязкой на простейшей "рассыпухе") нужны оба - и "видеопамять" и "предобработка", а для спецконтроллеров только "предобработка" - буфер для вывода содержат сами спецконтроллеры.
То уже несколько иная тема.
Пока что у меня была цель "дистанционно" по схемке да в рамках "референса" ардуино повторить версию алгоритма, хорошо отработанного под ассемблером. Вроде удачно получилось - но "для ограниченной области применений" - адуринка таки для неспешной обработки данных больше годиться, в компании с периферийными спецконтроллерами (от готовых изделий до самодельных из "подоручных" малолапых МК).
8)

Re: 7seg на hc595 4digit

Добавлено: Пт фев 16, 2024 21:01:56
Starichok51
понятно, что-то сделано на перспективу - а вдруг когда-то и где-то понадобится.
но ты не сказал, зачем ты сделал такие большие и совсем не нужные задержки.
лично мне проще прямо в тексте сделать необходимый минимум, а не выносить одинаковые действия в библиотеку. когда понадобится еще раз, мне проще скопировать нужный блок кода.

Re: 7seg на hc595 4digit

Добавлено: Пт фев 16, 2024 21:33:06
BOB51
Это если маленький проект или необходимо повысить быстродействие - встраиваем в соответствующие места по тексту. В остальном - лучше в отдельной функции сделать.
Разница та же, что и в ассемблере относительно подпрограмм - те места меньше занимают, но по времени еще и вызов/возврат со стековыми операциями добавляется.
По большим задержкам... перестраховка больше. да и средствами референса получить информацию о времени исполнения довольно сложно. Разве что по симулятору или минимум по времени исполнения для нанки/про-мини или уно от Гайвера (тогда я эту инфу еще не видел). Вариант непосредственной работы с регистрами/командами в рамках ассемблера GCC - это "для профессионалов" (или для дальнейшего нескорого изучения) - но концепция ардуино такой подход не приветствует - там несколько разных семейств в обобщенном варианте референса используются - в каждом семействе МК свой спец нужен, доолгоо осваивать надо.
8)

Re: 7seg на hc595 4digit

Добавлено: Пт фев 16, 2024 22:22:11
Starichok51
я проекты делаю для себя, для домашних нужд. поэтому можно назвать их маленькими.
мои самые большие проекты - чуть более 4 кБ кода.
как я говорил ранее, пишу только на ассемблере. с написанием для ардуино я вообще не знаком - мне это не нужно.

Re: 7seg на hc595 4digit

Добавлено: Сб фев 17, 2024 10:50:19
BOB51
На таком же принципе динамическая развертка и в этом проекте на аттини2313 под ассемблером сделана:
extdi_2313.zip
(49.2 КБ) 58 скачиваний
использованы возможности таймера Т1 и его дополнительных регистров.
Индикатор работает сам по себе, а основная программа сама по себе. Использовал эту самоделку в одном из проектов как "внешний удаленный дисплей".
8)

Re: 7seg на hc595 4digit

Добавлено: Сб фев 17, 2024 13:57:13
Martian
Мне для маленьких домашних проектов понравилась RTOS OSA Виктора Тимофеева.

Re: 7seg на hc595 4digit

Добавлено: Сб фев 17, 2024 16:31:10
BOB51
Это только для ПИКовых...
8)

Re: 7seg на hc595 4digit

Добавлено: Сб фев 17, 2024 18:26:27
Martian
Не, у него есть вариант и для STM8, AVR: http://www.pic24.ru/doku.php/osa/ref/in ... 1%80%D1%8B

Re: 7seg на hc595 4digit

Добавлено: Сб фев 17, 2024 20:33:27
Ser60
[uquote="Martian",url="/forum/viewtopic.php?p=4544398#p4544398"]понравилась RTOS OSA Виктора Тимофеева.[/uquote]Эта тема меня интересует и я прочитал несколько страниц на их сайте. Однако, нигде не нашёл сколько она требует RAM/Flash памяти в какой-либо минимальной конфигурации и сравнения чем она отличается, хотя-бы от той-же FreeRTOS. Есть у Вас ссылки где это можно почитать?

Re: 7seg на hc595 4digit

Добавлено: Сб фев 17, 2024 20:41:39
BOB51
Martian
Большинство прикладных - бытовых самоделок обычно с одной задачей.
Разве что динамическая индикация без совмещения с обработчиком кнопок может идти "псевдо параллельным" процессом.
Многофункционалки не слишком хорошо воспринимаются домашним потребителем - слишком моного действий (выбор режима, настройки значений и прочие...) перед употреблением снижает полезность с точки зрения "хозяек домашнего очага" (в отличии от авторов таких конструкций).
8)
А делать какой-либо аналог бытового "псевдокомпьютера" при огромном наличи обычных устройств (начиная с мобилки и далее...) на сегодня желающих весьма мало. Тем более после разгромно - ошеломляющего "оглушения адуринкой", когда стало возможным и "несведущему школяру" создать без труда сложные устройства (часто за счет плагиата).
Вот п приходится (кому из спортивна интересу, кому "через начально негативно восприятие") с той адуринкой таки знакомиться. Да уже не со школярским подходом - но то ведь время нужно на освоение (хотя бы на уровне "продвинутого пользователя").
:wink: :beer:

Re: 7seg на hc595 4digit

Добавлено: Сб фев 17, 2024 20:45:58
Martian
Ser60, не помню уже, но вроде где-то там была информация по ресурсам. Вот здесь есть немного: http://we.easyelectronics.ru/os-rtos/zn ... -stm8.html

Добавлено after 2 minutes 38 seconds:
BOB51, соглашусь, в каком-то градуснике или часах 1-2 задачи и это 90% поделок, но дело в том, что с RTOS интереснее, мы ведь всё-таки не ардуинщики ;) Для меня ОСА стало ещё одним интересным методом, с удовольствием разбирался что это и как это.

Re: 7seg на hc595 4digit

Добавлено: Сб фев 17, 2024 20:52:00
BOB51
Ну уж в таком случае интереснее для каждого своего изделия соответствующий вариант "операционной системы" (или диспетчера/распределителя задач) самому написать.
Иногда даже не зная о том, что создал "операционную систему" или еще чего красиво называемого.
8)
Кстати... адуринка в этом неплохо мозги тренировать заставляет, ежли не копипастом заниматься, а самому искать решения в жестко заданных рамках типового ее "референса".
:roll:

Re: 7seg на hc595 4digit

Добавлено: Сб фев 17, 2024 20:57:13
veso74
То, что делается с помощью RTOS, можно сделать и без RTOS :). Снижает "мышление" по управленя (и время создания проекта). Потерянный ресурс невелик, но его стоит предвидеть (PIC-C Compiler и STM32 HAL, пробовал несколько раз, в основном для динамической индикации и проверки датчика).

Re: 7seg на hc595 4digit

Добавлено: Сб фев 17, 2024 21:06:23
BOB51
Опять мы от исходной темы отклонились.
:tea:
Надо бы поглядеть, можно ли для решения исходной задачи таймером Т1 пожертвовать (чего при этом потеряю в рамках функций "референса")...
Та же тест-прожка с движком динамической индикации, но в приложении к устройству на аттини2313 или атмега8 и прерывании от Т1.
Да и схемку "удавить" - без внешних регистров но с дополнительным обработчиком кнопок (вроде там их 4 штуки поставить можно).
То уже попозже наверно попробую...
:roll:

Re: 7seg на hc595 4digit

Добавлено: Сб фев 17, 2024 22:50:14
olegue
я тут было хотел с часов на индикатор вывести, но вот беда ничего не выводится. Может кто-то навскидку скажет в чем проблема:
Спойлер

Код: Выделить всё

#include "RTClib.h"
RTC_DS1307 rtc;

#include <GyverNTC.h>
GyverNTC therm(0, 10000, 3950);
//---- ПИНЫ ----
byte SCLK = 7;
byte RCLK = 6;
byte DIO = 5;
//---- ПИНЫ ----

#include <TM74HC595Display.h>
#include <TimerOne.h>
TM74HC595Display disp(SCLK, RCLK, DIO);
unsigned char SYM[18];
unsigned long dispIsrTimer, countTimer;

void setup() {
  
}
//char displayTime[4];
void loop() {
  
  if (millis() - countTimer > 1000) {   // каждые 50 миллисекунд ("прозрачный" аналог delay)
    
     DateTime now = rtc.now();
      int displaytime = ((now.hour() * 100) + now.minute());

  disp.digit4(displaytime); 


    countTimer = millis();            // сбросить таймер
  }

  disp_isr();                         // динамическая индикация
}

void disp_isr() {
  if (micros() - dispIsrTimer > 300) {       // таймер динамической индикации (по-русски: КОСТЫЛЬ!)
    disp.timerIsr();                         // "пнуть" дисплей
    dispIsrTimer = micros();                 // сбросить таймер
  }
}

Код: Выделить всё

  int displaytime = ((now.hour() * 100) + now.minute());

  disp.digit4(displaytime); 
не выводит часы миниты, вообще на экране ни одно сегмента не горит
предполагается что now.hour() и now.minute() типа int
если просто пишу

Код: Выделить всё

disp.digit4(2024); 
нормально выводит

порядок работы с библиотекой:
/*
Основные методы библиотеки:
disp.set(X, port); // вывести 16 ричный код X в порт port (либо элемент массива SYM!!!)

// вывести двухзначное число value на порт port (0 - первый и второй порт, 2 - 2 и 3, 3 - 3 и 4 порты))
disp.digit2(value, port);

disp.digit4(value); // вывести число value
disp.digit4showZero(value); // вывести число value с нулями СЛЕВА

disp.float_dot(value, pos); // вывести float число value с точкой СПРАВА по счёту pos
disp.int_dot(value, pos); // вывести int число value с точкой СПРАВА по счёту pos

disp.clear(); // очистить дисплей
*порты идут справа налево! (3 2 1 0)
*/
в сериалпорт время нормально выводит.

Добавлено after 7 minutes 5 seconds:
может есть мысли как подобраться к решению, в чем может быть проблем, что попробовать, чем проэкспериментировать?

Добавлено after 1 hour 5 minutes 1 second:
Блин,от баран. Понимаю ж сам что чудес не бывает:
забыл дописать:

Код: Выделить всё

rtc.begin();
Добавлено after 22 minutes 20 seconds:
теперь надо как-то заставить мигать dp, ну типа тчо бы было похоже на часы

Re: 7seg на hc595 4digit

Добавлено: Сб фев 17, 2024 23:13:48
Martian
напомню, что там есть два посадочных места под диоды, для имитации двоеточия часов (требуется небольшое рассверливание напротив них корпусов индикатора)

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

Добавлено after 8 minutes 41 second:
то есть в событии таймера:

Код: Выделить всё

secundot ^= 1;
в выводе времени:

Код: Выделить всё

if (!secundot)
{
   disp.digit4(displaytime); 
}
else
{
   disp.int_dot(value, 2);
}
Добавлено after 5 minutes 41 second:
можно без таймера:

Код: Выделить всё

#define HALFSEC 5000 // или сколько там составит примерное время свечения

int secundot = HALFSEC;

.....

int displaytime = ((now.hour() * 100) + now.minute());

secund = now.secund();

if (oldsecund != secund )
{
   oldsecund = secund;
   secundot = HALFSEC;
}


if (secundot)
{
   secundot--;
   disp.int_dot(value, 2);
}
else
{
   disp.digit4(displaytime);
}

Re: 7seg на hc595 4digit

Добавлено: Вс фев 18, 2024 10:20:20
BOB51
С секундной точкой достаточно ее инвертирование по прерыванию от RTC задать.
Но то довольно медленно работает. удачнее инверсия раз в 0,5 секунды - к сожалению такой вариант заметно сложнее - зависит от организации отсчета выводимых показаний.
:roll:

Re: 7seg на hc595 4digit

Добавлено: Вс фев 18, 2024 11:36:48
veso74
[uquote="Martian",url="/forum/viewtopic.php?p=4544553#p4544553"]... для мигания точки или двоеточия ...[/uquote]
С использованием 1 сек сигнала SWQ и прерывание по изменению состояния пина (pin change Interrupt).
Мигает по фронт, т.е. 0,5 сек вкл / 0,5 сек выкл.

Re: 7seg на hc595 4digit

Добавлено: Пн фев 19, 2024 22:47:51
olegue
Помогите разобраться , запутался в 3х проводах.
Допустим, подключаю датчик NTC 10k, А0-Резистор 10к-GND- NTC 10r- 5V.
Насколько критично, что бы было именно 5Вольт?
ДОпустим, если по usb от Powerbank подключу ардуино то 5.18 , а если по ISP к компьютеру то 4.78в. Ну и показания прилично так плывут
Получается,что надо обеспечить адекватную прецизионность это напряжения?

Добавлено after 6 minutes 21 second:
или может снизить это напряжение, взять скажем с платы 3.3 или поставить отдельный стабилитрон на tl431, lm336?

Re: 7seg на hc595 4digit

Добавлено: Пн фев 19, 2024 22:54:50
veso74
Как показания ADC [0..1023] - нет, так как AVCC подключен к VCC.
Напряжение с делителя плывут, но:
1. стабилизируйте до меньшем питания (проверьте Brown-out Detection где установлен: def 2.7V?)
2. переключите ADC к внутренний источник 1,1V
3. к AREF включите внешний прецизионный источник и переключите ADC на него