Гм. Даже интересно стало - сгрузил вышезаявленную LiquidCristal, посмотрел что в ней. Вполне ожидаемо, процедура отправки данных выделена в отдельную подпрограмму. Переписать ее на что-то другое ни разу не проблема. У меня встречный вопрос к ТС - вы настолько ленивый, что сидите и ждете халявы уже 1.5 дня, вместо того, чтоб потратить пол часа и всё написать? Или вам трудно понять, как работает ваша схема? ... простите, зачем тогда вы вообще ее взяли?
2. OKF-у - На ВТОРОЙ картинке работает код, который я выложил. Там библиотека OneWire и передача работает. Че тут вам еще непонятного ?
Да, действительно не разобрался. За наезд извиняюсь.) Посмотрел oneWire. Результат reset() (presence) можно не использовать. Ну если через oneWire передача работает и хочется LiquidCrystal_I2C использовать, то нужно только send() переделать и вместо wire подключить oneWire.
Гм. Даже интересно стало - сгрузил вышезаявленную LiquidCristal, посмотрел что в ней. Вполне ожидаемо, процедура отправки данных выделена в отдельную подпрограмму. Переписать ее на что-то другое ни разу не проблема. У меня встречный вопрос к ТС - вы настолько ленивый, что сидите и ждете халявы уже 1.5 дня, вместо того, чтоб потратить пол часа и всё написать? Или вам трудно понять, как работает ваша схема? ... простите, зачем тогда вы вообще ее взяли?
IMHO, ТС не достоин помощи.
1. Мммдя. Ну хорошо - ткните носом в каком файле библиотеки и в каком месте находится процедура отправки данных. Попытаюсь переписать. Попытаюсь - потому что я ни разу не программист, а - схемотехник. 2. Схему нигде не брал, а разработал. Вернее - доработал из Интернета. И как она работает ессно понимаю. И критичные ее места тоже знаю. И как еще усовершенствовать знаю. Так что не раздувайте щеки, а покажите что вы не п***бол. С уважением. ПС. Похоже по вашей безаппеляционности - вы наверняка он и есть. Будет много слов, много эмоций - и н**я помощи на выходе.
Последний раз редактировалось Ariadna-on-Line Ср авг 09, 2023 09:56:01, всего редактировалось 2 раз(а).
Для Сишного адуринко переделывать (или пытаться "выкусывать" их составляющие) библиотеки что для OneWire, что для Adafruit_NeoPixel без детальных знаний применяемой в компиляторе версии ассемблера одинаковый садомазохизьм.
А вот насчет переделки под более "тихоходные" однопроводные протоколы (физический уровень) типа ИК или чего подобного вполне можно и самому все написать (даже "в рамках "референса""). Но тогда адаптер у индикатора придется заново переделывать уже под конкретику выбранного протокола.
Самыми лучшими параметрами по энергоемкости, сроку хранения, температурному диапазону и номинальному напряжению обладают батарейки литий-тионилхлоридной электрохимической системы. Но при длительном хранении происходит процесс пассивации. Разберем в чем плюсы и минусы, как можно ее избежать или уменьшить последствия и как проводить депассивацию батареек на примере продукции и рекомендаций компании FANSO EVE Energy.
2. OKF-у - На ВТОРОЙ картинке работает код, который я выложил. Там библиотека OneWire и передача работает. Че тут вам еще непонятного ?
Да, действительно не разобрался. За наезд извиняюсь.) Посмотрел oneWire. Результат reset() (presence) можно не использовать. Ну если через oneWire передача работает и хочется LiquidCrystal_I2C использовать, то нужно только send() переделать и вместо wire подключить oneWire.
ds.write(Sdata); // Выводим данные в конвеер сдвига ds.reset(); // Перегружаем из конвеера в выходной регистр
Если вы про этот reset - это команда формирования временного интервала, который приводит к срабатыванию схемы и появлению данных на выходе. И ничего более. Аппаратно и программно он ничего не "ресетит"- в этом нет нужды. Но это все не главное - главное - как внедрить этот код в библиотеку LCD модуля. Потому что с нуля написать новую библу - неподьемная задача.
К 2029 году в России прогнозируется увеличение числа зарядных станций до 40 000. При этом отечественный рынок электротранспорта имеет климатические, потребительские и географические особенности. Для успешной разработки и построения инфраструктуры станций заряда в России идеальным вариантом является использование решений и электронных компонентов китайских производителей – лидеров индустрии электротранспорта и возобновляемой энергетики, которые уже представлены в КОМПЭЛ.
Но это все не главное - главное - как внедрить этот код в библиотеку LCD модуля. Потому что с нуля написать новую библу - неподьемная задача.
Весь вопрос в том, что вы хотите. Что? "Библа" - это универсальная библиотека на все случаи, это удобно. Но часто нужны только отдельные функции этой библиотеки. И ведь как то же люди жили без Ардуино и её библиотек! И даже жили без Ардуино, с его классами и пр. Да и сейчас живут. Не везде же С++ имеется.
Но это все не главное - главное - как внедрить этот код в библиотеку LCD модуля. Потому что с нуля написать новую библу - неподьемная задача.
Весь вопрос в том, что вы хотите. Что? "Библа" - это универсальная библиотека на все случаи, это удобно. Но часто нужны только отдельные функции этой библиотеки. И ведь как то же люди жили без Ардуино и её библиотек! И даже жили без Ардуино, с его классами и пр. Да и сейчас живут. Не везде же С++ имеется.
Код:
//1-Wire to Parallel converter
#include <OneWire.h> OneWire ds(0); // on pin 0 (a 4.7K resistor is necessary)
int Sdata = 0; //===== void setup() {
Serial.begin(9600); //LCD_begin(); // Дисплей должен быть инициализирован } //===== void loop() {
Serial.print("Sdata= "); Serial.println(Sdata);
LCD_backlight(); delay(64000); // Странно, но это значение дает 1 секунду.
LCD_noBacklight(); delay(64000); // Странно, но это значение дает 1 секунду. } //============= void Data_Transf(int Sdata) { // Рабочая лошадка всего алгоритма ds.write(Sdata); // Загружаем биты данных на конвеер ds.reset(); // Выгружаем данные с конвеера в выходной регистр (байт) delay(1); // Делаем паузу для успокоения переходных процессов } //============= void LCD_begin() { // Здесь должна быть череда посылок для инициализации // То что здесь сейчас - только для примера. Data_Transf(B00110000); delayMicroseconds(4200); Data_Transf(B00110000); delayMicroseconds(150); Data_Transf(B00110000);
Data_Transf(B00100000); // Function Set - 4 bits mode delayMicroseconds(37); Data_Transf(B00101000); // Function Set - 4 bits(Still), 2 lines, 5x8 font delayMicroseconds(37); } //============= void LCD_backlight() { Sdata = (Sdata | B00010000); Data_Transf(Sdata); delay(1); // Делаем паузу для успокоения переходных процессов } //============= void LCD_noBacklight() { Sdata = (Sdata & B11101111); Data_Transf(Sdata); delay(1); // Делаем паузу для успокоения переходных процессов } //=============
Вот смотрите - код, который не касается самого LCD, а только мигает подсветкой. Там есть функция Data_Transf(data), которая будет главной. LCD первым делом должен - инициализироваться. Подпрограмма LCD_begin() для этой цели. Точнее "рыба" под нее. Вам надо - поставить нужные числа. И все остальные команды библиотеки дисплея будут выглядеть точно так же. Умеете ? Напишите хотя бы код инициализации дисплея для 4-битовой шины обмена (как I2C на PCF8574) !!!
Вы какой то странный... Я спрашиваю что вы хотите, а вы указываете что мне нужно сделать...) И нужно ли?) Код инициализации LCD_begin() уже готов и уже написан. Его менять не нужно. Это я вам говорю, что ВАМ нужно сделать.)
1/ OKF-у. То что мне надо - является названием этой ветки. 2/ В библиотеке LiquidCristal_I2C видимо надо менять не функцию send(), а функцию wire(). 3/ Выложенный крайний код - я думал вы знаете 'назубок" процесс инициализации LCD и вмомент впИшите нужные данные, а я - поучусь.
Меняется транспортный протокол физического уровня. Или соответствующая часть функции более высокого уровня. (Хорошо, если в библиотеке они разделены). И опять же... Выдать из МК можно чего угодно... А вот принять исключительно аппаратно-схемотехнической реализацией в том виде, что ожидается в "хотелках" - это уже надо чего-то очень простого (никак не uLan) применять. Ибо в конце то ожидается развертка под требования 595го регистра - данные, строб продвижки и строб перезаписи в регистр. А uLan это подобие UART - без наличия синхроимпульсов. Как уже говорил ранее - надо какой-то вариант со смесью синхроимпульсов и данных делать. То ли ШИМ, то ли ФИМ (то-ли чегось от пультов ИК, NRZ). И "плясать" от аппаратной схемки дешифровки, что возле дисплея обеспечивает функционал 595го регистра.
ShiftRegLCD123 - 1,2 and 3-wire shiftregister-based HD44780 compatible LCD library for Arduino Connects a Hitachi HD44780 compatible LCD using 1, 2 or 3 pins from the Arduino via an 8-bit shift register (SR from now on). HW compatible with LCD3Wire and old ShiftRegLCD libraries.
Для схемы с 595 без диод в ShiftRegLCD123.cpp закомментировал строчку:
Код:
... // Comment out next line if not charging quicker via diodes. #define LCD_SLIGHTLY_FASTER_1_WIRE ...
Есть некоторая неточность/необходимость внесения поправок/ с print (версии Arduino IDE?, другое?), но за несколько минут тестирования не стал искать причину. Печать посимвольно работает.
Код:
// Print a message to the LCD. // srlcd.print("HELLO, WORLD!");
Спасибо дорогой. Это именно то что я хотел. Печать фразами тоже работает, но только в Диджиспарке (те в АТтини85). В Уно действительно печатает только посимвольно. Видимо какой-то программный затык. Гуру разберутся. Спаяю приблуду аналогичную I2C, но уже для 1-Wire. Чтоб подключать к Диджиспарку. Дешево и по делу. Тема исчерпана, всем спасибо. ПС. В схеме не задействован Вывод 595-ки Q0. Это бесцельное расходование ресурса. Есть возможность его включить в работу. Но требуется модернизация библиотеки.
Эти схемы были актуальны раньше. Теперь с I2c при низкой стоимости напр. на PCF8574 можете включить, например. 8 LCD (с разными показаниями, расширители с разными адресами) I2c по 2 проводам, или до 64 цифровых входов и/или выходов. A eсли замените expander на напр. MCP23017, входов/выходов уже возможно 128. В медленных процессах (и не только) работает безотказно, вне зависимости от клока МК например. Но предпочитаю для случая "следующий" тип МК - с достаточным количеством выводов для буд. конструкции, а мне минимизация интересна с точки зрения возможных решений и напр. на случай непредвиденных обстоятельств (напр. плата сделана, нет 6 св. выхода МК, а хотим добавить LCD). Так что все в руках конструктора .
Эти схемы были актуальны раньше. Теперь с I2c при низкой стоимости напр...
Совершенно с вами согласен. Как говорится - делать атомные бомбы совершенно не обязательно. Обязательно - УМЕТЬ их делать. Теперь я спокоен, зная что смогу "выкрутиться" из ситуации даже при единственном свободном пине МК. ПС. С первого же взгляда на исходную схему понятно, что выход Q0 всегда будет "0", те непригодным для использования. Задний нарастающий фронт интервала стробирования раньше приведет к срабатыванию регистра сдвига и появлению в младшем бите Q0 "дикого нуля". Небольшая доработка с введением RC цепи (100ом, 150пФ) позволяет блокировать этот эффект. У нас появляется дополнительный выход. Например для активного зуммера. Пока думаю как модернизировать библиотеку чтоб его задействовать.
Сумел-таки модернизировать библиотеку, чтобы задействовать ВСЕ биты регистра 595. Но после анализа библы - пришлось изменить схему. А поскольку появился дополнительный пин - добавил в библу пару функций buzzerOn() / buzzerOff() чтобы управлять им. Подразумевается что ЖК модуль можно "озвучить". Когда разработаю печатку - выложу плату и библиотеку. Всем спасибо. Тема исчерпана.
Широко известна приблуда I2C_LCD конвертера, позволяющая экономить ноги процессора. И библиотека под нее - LiquidCristal_I2C. То бишь вместо 6 ног использовать только две. Вопрос - существует ли приблуда для одной ноги. Ну типа 1-Wire_LCD конвертер. Интересует не столько железо (оно довольно простое), сколько готовая библиотека под него. Которую можно использовать в Arduino IDE. ПС. Номиналы деталей RC цепочек нарисованы для ручного управления в Протеусе. В реале емкости конденсаторов - 10nF.
У даласа есть спец конвертор 1Wire -> 8 цифровых ног (обратный преобразователь не помню есть или нет), марку микросхемы не помню, помню что использовал когда то лет 8 назад, но ценник был не из дешевых, но поищите малоли что произошло за столько лет.
Давно знаю. Спасибо что напомнили. DS2408S. Двунаправленный конвертор. Заказал пяток на Али. Дай бог если пришлют микры, а не кирпичики с ножками. НО - Мне надо управлять не микрой, а дисплейным модулем через эту микру. А это - другое. Коль все придумано до нас - попробую поискать готовую библу для начала. С уважением.
Ардуино ИДЕ. Штатный пример к библиотеке OneWire. DS2408_switch. Компилируется нормально. Запускаю в Протеусе. Для этого пришлось в свойствах модели 2408 уменьшить ресет-интервал с 680мкС до 480 мкс (именно столько формирует симулятор). Симулятор видит девайс, читает идентификатор. Но не управляет выходами. Соответственно и читает с них только bx11111111. Кому удалось победить модель сего девайса ? С уважением. ПС. Перебор наугад библиотек и скетчей позволил-таки увидеть работу выходов на модели DS2408. Дело оказалось именно в софте. Протеус в очередной раз не подкачал.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения