Котуинко

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 15795
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Любой опрос в цикле - хорош только для тех случаев, где размер цикла явно меньше интервала индикации.
В ином случае будут сдвиги в произвольные моменты времени. Мы же не знаем, чего еще помимо обслуживания дисплея прожка делать будет, а те задачки могут бысть весьма громоздкими.
Независимый процесс на прерывании заметно стабильнее работает.
Относительно вывода - при "байтовой" структуре порта там вообще проблем не имеется. Только вот таких МК на сегодня не так уж много да и раскладка выводов у адуриньи УЖЕ сделана без учета линейной "байтовости".
А в моем примере вообще "чехардень" из выводов, относящихся к разным портам МК (так уж ранее разводка выполнялась - влом менять для "поиграться").
Цикл на счетчике в таком случае заметно хуже, чем перебор восьми комбинаций пересылки бита по фиксированным значениям.
Касательно переброса через массивы - смотрится неплохо, только нерационально - минимум два массива, да сопровождение.
В принципе под ассемблером там всего-то биты перегоняются, а вот под Си или аж 12 байт с содержимым 1/0 или еще чего (структура с битовыми полями)...
Как бы общий размер используемых ресурсов заметно больше не оказался.
Добавить последующие "рожки" кои повылазят при выводе фрагмента в отдельный файл/библиотеку...
То уже можно вылизывать лишь в готовом тексте, который работает.
8)
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

Любой опрос в цикле - хорош только для тех случаев, где размер цикла явно меньше интервала индикации.
а чего там еще в часах да и других задачах делать в цикле больше миллисекунды - например между миллисекундой прекрасно опрашивается DS18B20 (добавить в часы термометр самое то). Даже термопарный полином быстрее считается. Цель то каковая была:
Главное на моей "паутинной монтаЖОПе" вполне себе красивенько циферки гоняет...
Цикл на счетчике в таком случае заметно хуже, чем перебор восьми комбинаций пересылки бита по фиксированным значениям.
все тоже самое, только проще - в массиве те же фиксированные значения. И "чехардень" очень красиво причесывается.
только нерационально - минимум два массива, да сопровождение.
шо так константы, шо так, а сопровождать удобнее - вжух и в масиве в одной строчке нужное поменял.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15795
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Массив это рядок данных(переменных) в ОЗУ, а их считать ещё надо.
А константа входит в состав команды.
Хотя... Как там компилятор все перекручивает - смотреть при обеих вариантах результат надо...
8)
Мне более интерес к "выноске" полученного в библиотечку.
А там уже и "причесать" можно будет.
:roll:
Касательно возможных нюансов прикладной программы - это вопрос довольно сложный - лучше сразу на максимум проблем рассчитывать - потом легче будет.
:beer:
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

Это ж массив стандартных пинов ардуино - что там считать то. Впервые слышу про какой-то счет массивов.
Почитал - согласно ардуиновому референсу для констант во флэши используем PROGMEM:
https://www.arduino.cc/reference/en/lan ... s/progmem/
Как перекручивает, проведем упрощенный тест - тут перечислены родные ардуиновые пины, опять строго согласно референсу:

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

#include "Arduino.h"
// список выводов Arduino для подключения к разрядам a-g
// семисегментного индикатора
const uint8_t pins[8] PROGMEM = {9, 13, 4, 6, 7, 10, 3, 5};

int main()
{
    while (1)
    {
        // зажечь сегмент
        for (int i = 0; i < 7; i++)
            digitalWrite(pins[i], HIGH);
    }
}
Смотрим листинг, и видно, как красивенько берет из флэша (2 команды загрузка адреса и 3 команды в цикле):

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

- это наш масив, во флэши конечно
00000076 <_ZL4pins>:
  76:	09 0d 04 06 07 0a 03 05 

- это загрузка адреса  
   46c:	c6 e7       	ldi	r28, 0x76	; 118
 46e:	d0 e0       	ldi	r29, 0x00	; 0
 
- это просто цикл
    while (1)
    {
        // зажечь сегмент
        for (int i = 0; i < 7; i++)
            digitalWrite(pins[i], HIGH);
 470:	61 e0       	ldi	r22, 0x01	; 1
 472:	89 91       	ld	r24, Y+
 474:	15 de       	rcall	.-982    	; 0xa0 <digitalWrite>
 
по расходам у нас получилось:
AVR Memory Usage
----------------
Device: atmega8

Program: 266 bytes (3.2% Full)
(.text + .data + .bootloader)

Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)

ROM = 266, ОЗУ = 0
з.ы. с опцией компилятору -flto - еще меньше

Насчет возможных "нюансов прикладной программы" - опрос флагов или засыпание в основном цикле с пробуждением от прерывания таймера/ацп/ватчдога/усарта/кнопки и пр. это стандартная практика в программировании микроконтроллеров и при правильном применении - никаких нюансов.
см. тут Важные замечания:
https://arduinomaster.ru/program/preryv ... interrupt/
В обработчике вы можете лишь устанавливать флаг события, а в loop – проверять флаг и обрабатывать его
а тут как ардуинисто спать:
https://tsibrov.blogspot.com/2018/02/ar ... -down.html

"выноска" полученного в библиотечку - лучше сразу на максимум проблем рассчитывать - потом легче будет.(с)
насчет как правильно использовать таймер0 и прерывание по совпадению оного написано тут:
https://voltiq.ru/wiki/interruptions-in-arduino/
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18793
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

oleg110592 по сути является версией Google "с доставкой на дом" :))) по любому вопросу 100500 ссылок на то, что уже есть готовенького. я даже удивляюсь: вот я, например, больше 20 лет программирую, а 99,999% этих ссылок ни разу даже не видел! когда программировать-то, если все читать?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

тож этих ссылок раньше не видел - просто типа как в песне "русский матрос всегда задать умеет правильный вопрос"(с) гуглу
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15795
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Меня варианты "вылизывания" в данном случае не столь уж и волновали.
Для начала хотя бы "черновик" работоспособный сделать при условии, что функция обработки прерывания слопает кусманчик или в виде объекта метода внешнего класса или в лучшем случае удастся ее упаковать вместе с файлами того класса...
Т.е. содержимое функции обработчика прерывания находится во внешних файлах проекта, а функция вызова прерывания - в основном (или посложнее - в тех же "внешних" файлах).
Примерно воть так первый примитив выглядит:
Спойлер

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

void setup() 
{
  // put your setup code here, to run once:
// Serial.begin(9600); // для сообщений тест-контроля

test_ksd.init_csd4(); // инициализация ККД

}
//------------------------------------------------
void loop() 
{
  // put your main code here, to run repeatedly:

  //..........
}


//***************************************************
//              ПОДВАЛ С ФУНКЦЯМИ
//***************************************************

//------------------------------------------------
// ОБРАБОТЧИК ПРЕРЫВАНИЯ (режим совпадения по OCR0A)
// (по факту дублер системной миллисекунды)
// в качестве функции выполняется метод sdr_prog()
// объекта test_ksd класса ksd4

SIGNAL(TIMER0_COMPA_vect)
{
  test_ksd.sdr_prog();
}

// область функционала ККД завершена
а вот упрятать

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

SIGNAL(TIMER0_COMPA_vect)
{
  test_ksd.sdr_prog();
}
во внутренность файлика ksd4.cpp поока не удалось...
:(
Когда все в одном главном файле - это всегда без проблем работает, но уж больно гормоздко.
8)
Вроде первый вариант кой-как получился...
ksd4_rtl.zip
(8.91 КБ) 179 скачиваний
Корявенько... но таки работает...
:wink:
УФФ...
Малость надо дать мозгам и компу отдых...
:sleep:
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

с нетерпеньем жду продолжения - согласно начальной схеме в программе вроде еще не задействована DS1307 и еще 2 шт. MOC3063 (наверное по будильникам что-то включают). Очень интересно - не будут ли мешать проведенные манипуляции с тамером0 работе часовой микросхемы по и2цэ.
Друг Кота
Аватара пользователя
Сообщения: 15795
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Была бы какая-то польза от того....
:sleep:
А I2C (для ведущего шины) у меня ПРОГРАММНЫЙ (лаподрыгом выполнен) на любые лапки выводится.
Там никакой разницы где, чего и как может быть "приторможено" - собственно сам протокол из тех, где ведущий может остановить обмен на неопределенное время, без вреда для данных.
mxiic.zip
(4.38 КБ) 171 скачивание
Баловался как-то с 1307 и адуринкой.
Кстати тогда и обратил внимание на имевшую место ранее ошибку алгоритма, которую устранил в данной библиотечке.
8)
И... таким же образом - через SIGNAL(name_vector){} можно и прерывания по INT0/INT1 для платформ на AVRках обрабатывать...
А где б те правильные имена векторов сыскать..? Неумудренному АВРкиным Си...
:roll:
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

польза - проверить ардуино на вшивость. А часики с гибким фунционалом, ну например с 485 интерфейсом, возможно нашли бы применение в народном хозяйстве и даже промышленности. У меня, например спрашивали производственники часы большие, с показом температуры произведенных блоков поролона - возможны возгорания без контроля. Сейчас втыкают китайские термометры для духовки и ходят, ходят, каждый осматривают. Индикаторы большие можно сделать на ws2812 (библиотека ардуиновая есть) как тут:
https://www.radiokot.ru/forum/viewtopic ... 2&t=153087
з.ы. созрела идея - в часы работы часы светят красным, за 15 минут до окончания работы - желтым, в конце работы - зеленым :)))
Друг Кота
Аватара пользователя
Сообщения: 15795
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Я проверяю или действующей схемой ( если устройство для домашней прикладного использования) или имеющимся набором макет-заготовок.
Этот "примитив" (х4 с совмещённый кноподавой) хорошо компонуется с простейшими конструкциями с МК имеющими "рядную" разводка портов - в частности с at89cX051 или аттини2313. Но там уже давно все под ассемблером перекручено. А для адуринки такое решение экономически неэффективно (по многим причинам).
Большой дисплей на основе чего угодно - от ламп накаливания до светодиодных лент размерами в ковырнадцать метров тоже скучновато...
Творческое спадо однако.... Осеннее...
:(
Подразжится парой динамичков да приемничек замутить...
:roll:
Может ещё последовательный обмен по 232му асинхроннику покручу...
:dont_know:
:sleep:
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

[uquote="BOB51",url="/forum/viewtopic.php?p=3919688#p3919688"]Подразжится парой динамичков да приемничек замутить...[/uquote]
дык у ардуиновым часам, ардуиновый приемник прикрутить и на радиокоте будут часы с будильнико-приемником, там все просто:

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

#include "Wire.h"
#include "TEA5767Radio.h"

TEA5767Radio radio = TEA5767Radio();
void setup()
{
Wire.begin();
radio.setFrequency(105.0); //Здесь укажите частоту вещания
принимаемой радиостанции в МГц
}
void loop()
{
}
Друг Кота
Аватара пользователя
Сообщения: 15795
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

НЕ...
В наличии лишь RDA5807 (уже порядком подзалежалась)...
За силабьи... только помечтамс...
:sleep:
Да и прожку предпочтительно самому нашкарябать - там ничего особого нету, чтоб чужие библиотеки ставить.
Обычный I2C да немножко мутноватое описание и питание от 3 вольтей...
:roll:
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

глянул в интернет-киоске возле мясного - "TEA5767-MODUL" 1.5$, "Модуль RDA5807M FM радиоприемник Arduino" 30 центов, а писать уж точно - самому там нечего

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

void TEA5767Radio::setFrequency(float frequency)
{
  	unsigned int frequencyB = 4 * (frequency * 1000000 + 225000) / 32768; 
	byte frequencyH = frequencyB >> 8;
	byte frequencyL = frequencyB & 0XFF;
	Wire.beginTransmission(_address); 
	Wire.write(frequencyH);
	Wire.write(frequencyL);
	Wire.write(0xB0);
	Wire.write(0x10);
	Wire.write(0x00);
	Wire.endTransmission();
	delay(100);  
}
https://github.com/kelubo/MyHome/blob/m ... 7Radio.cpp
OKF
Это не хвост, это антенна
Сообщения: 1456
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

[uquote="ARV",url="/forum/viewtopic.php?p=3918968#p3918968"]oleg110592 по сути является версией Google "с доставкой на дом" :))) по любому вопросу 100500 ссылок на то, что уже есть готовенького. я даже удивляюсь: вот я, например, больше 20 лет программирую, а 99,999% этих ссылок ни разу даже не видел! когда программировать-то, если все читать?![/uquote]
Ну как же! Сначала посмотрел как у людей, а затем написал по своему, может даже лучше.)
Друг Кота
Аватара пользователя
Сообщения: 15795
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Без "подсмотрел" на сегодня никак не обходится - те же книжи как по компиляторам, так и по железу. Крайне редко попадаются пошагово "разжеванные" примеры описаные на понятном языке (у каждого ведь свой уровень понимания - зависит и от опыта и от привычной подачи материала с неизменно присутствующим компонентом "а Вы это уже знаете")...
Правда есть некоторая разница - или "на побыстрее" соорудить на основе чужих библиотек (о стандартном минимуме, входящем в набор компилятора или адуринкина референса речь не идет) или научиться самому делать собственные софтинки на основе "стандартного минимума" входящих в состав компилятора(референса) средств да документации на железко - но то заметно дольше да и сложнее.
Зато результат для себя приятнее и в дальнейшем с софтинкой можно чего захочется сотворить (изменить/доработать). Плюс понимание работы того, чего нашкарябал.
8)
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

книжи как по компиляторам, так и по железу не особо нужны - достаточно родной документации. В линуксе например набираешь в терминале "man gcc" и получаешь информацию и не надо даже интернета.
Насчет библиотек - прошли те времена, когда не было интернета и когда только появились авр пик и были только примеры от производителя на CD и то ассеблер. Сейчас есть GitHub - крупнейший веб-сервис для хостинга IT-проектов и их совместной разработки. Полно готовых хороших документированых библиотек и производители микроконтроллеров иногда не остают и выкладывают качесвенные сниппеты. Типа FatFs от Чена сейчас врядли кто-то с нуля писать будет. Иногда подсматривал и ардуиновые библиотеки и переделывал на чистый Си. Сейчас, благодаря дискусии - вижу можно задействовать компилятор С++ и напрямую использовать исходники без переделок. Сделал мэйкфайл (на основе скопированного с гитхаба), который автоматом перемалывает все исходники ассемблера Си С++ в папке проекта и с этого всего получается единый elf а из эльфа уже хекс. Да еще этот мэйкфайл может прошивать, форматировать исходник, отправлять прошивку по почте...
з.ы. велосипеды изобретать скучно :))
Друг Кота
Аватара пользователя
Сообщения: 15795
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Воть и хорошо, что имеется альтернативный вариант представления информации - однако по возникающим к оному вопросам придется таки Вам ответы добавлять - я ни линуксом ни мэйкфайлами не пользуюсь - посему ничего ни прокомментировать ни проверить/ответить не смогу (в отличии от того, что сам выкладываю). В принципе вполне нормальный вариант предоставления материала получиться может...
:beer:
Насчет оффлайнового хэлпа...
Не всегда полный вариант изготовитель выкладывает - у той же ардуиноIDE часть описания библиотек встроена в оффлайн, а часть уже на сайт посылает. И такое довольно часто встречается ибо чем позднее редакция, тем больший упор на то, что пользователь непрерывно в инете сидит...
А это не есть хорошо... Может сегодня и привычно для молодежи - но я предпочитаю "хкардкор" в виде распечатанной книжи/листочков где можно карандашиком и иными "палками-писалками" отметки сделать.
Чего подправить, чего добавить по мере необходимости (у каждого по своему)...
Да и сидеть за компом не одно и то же, что развалившись (во кресле или на диване или еще где) размышлять (возможно с пивасиком или чем повкуснее)... И ГЛАЗКИ меньше напрягаются...
:wink:
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

вот ответ - этот мэйкфайл, он будет работать и в виндовс причем любом, даже древнем, в принципе и даже в дос, если есть компилятор
https://gist.github.com/rynr/72734da4b8c7b962aa65
он простой - легко переделывается под другие микроконтроллеры, я теперь, например, могу ардуиновые библиотеки и для пилюльки и пр. стмовых без переделок использовать в обычном проекте
з.ы. бывают очень удобные компьютерные кресла и хорошие мониторы 8), а заметки удобнее (имхо) в файлик и на гитхаб - для будущих поколений - это вам не залитые пивасом и закапаные рыбьим жиром бумажки :)
Друг Кота
Аватара пользователя
Сообщения: 15795
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Все хорошо в меру и во взаимодополнении.
8)
Ответить

Вернуться в «Разные вопросы по МК»