Обсуждаем контроллеры компании Atmel.
Ответить

Re: 7seg на hc595 4digit

Пт фев 16, 2024 20:39:08

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

Re: 7seg на hc595 4digit

Пт фев 16, 2024 21:01:56

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

Re: 7seg на hc595 4digit

Пт фев 16, 2024 21:33:06

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

Re: 7seg на hc595 4digit

Пт фев 16, 2024 22:22:11

я проекты делаю для себя, для домашних нужд. поэтому можно назвать их маленькими.
мои самые большие проекты - чуть более 4 кБ кода.
как я говорил ранее, пишу только на ассемблере. с написанием для ардуино я вообще не знаком - мне это не нужно.

Re: 7seg на hc595 4digit

Сб фев 17, 2024 10:50:19

На таком же принципе динамическая развертка и в этом проекте на аттини2313 под ассемблером сделана:
extdi_2313.zip
(49.2 KiB) Скачиваний: 12

использованы возможности таймера Т1 и его дополнительных регистров.
Индикатор работает сам по себе, а основная программа сама по себе. Использовал эту самоделку в одном из проектов как "внешний удаленный дисплей".
8)

Re: 7seg на hc595 4digit

Сб фев 17, 2024 13:57:13

Мне для маленьких домашних проектов понравилась RTOS OSA Виктора Тимофеева.

Re: 7seg на hc595 4digit

Сб фев 17, 2024 16:31:10

Это только для ПИКовых...
8)

Re: 7seg на hc595 4digit

Сб фев 17, 2024 18:26:27

Не, у него есть вариант и для STM8, AVR: http://www.pic24.ru/doku.php/osa/ref/in ... 1%80%D1%8B

Re: 7seg на hc595 4digit

Сб фев 17, 2024 20:33:27

понравилась RTOS OSA Виктора Тимофеева.
Эта тема меня интересует и я прочитал несколько страниц на их сайте. Однако, нигде не нашёл сколько она требует RAM/Flash памяти в какой-либо минимальной конфигурации и сравнения чем она отличается, хотя-бы от той-же FreeRTOS. Есть у Вас ссылки где это можно почитать?

Re: 7seg на hc595 4digit

Сб фев 17, 2024 20:41:39

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

Re: 7seg на hc595 4digit

Сб фев 17, 2024 20:45:58

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

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

Re: 7seg на hc595 4digit

Сб фев 17, 2024 20:57:13

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

Re: 7seg на hc595 4digit

Сб фев 17, 2024 21:06:23

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

Re: 7seg на hc595 4digit

Сб фев 17, 2024 22:50:14

я тут было хотел с часов на индикатор вывести, но вот беда ничего не выводится. Может кто-то навскидку скажет в чем проблема:
Спойлер
Код:
#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

напомню, что там есть два посадочных места под диоды, для имитации двоеточия часов (требуется небольшое рассверливание напротив них корпусов индикатора)

Ну, для мигания точки или двоеточия необходимо получить событие секунд. Я бы завёл таймер с периодом 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

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

Re: 7seg на hc595 4digit

Вс фев 18, 2024 11:36:48

... для мигания точки или двоеточия ...

С использованием 1 сек сигнала SWQ и прерывание по изменению состояния пина (pin change Interrupt).
Мигает по фронт, т.е. 0,5 сек вкл / 0,5 сек выкл.

Re: 7seg на hc595 4digit

Пн фев 19, 2024 22:47:51

Помогите разобраться , запутался в 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

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