Страница 3 из 4
Re: Подключить LCD к МК по 1-проводному интерфейсу.
Добавлено: Вт авг 29, 2023 15:21:13
veso74
Принцип применим и в других случаях: ниже: 8-LED 7-SEG дисплеем на MAX7219 управляю по 2 пина.
Сл. один пин MC остается свободным для использования в будущем

.
Что мне не нравится: номиналы элементов RC-цепь и/или время паузы между импульсами в коде зависят от тактовой частоты. Но после нескольких попыток - работает и на симуляторе, и на реальном устройстве.

,

Re: Подключить LCD к МК по 1-проводному интерфейсу.
Добавлено: Чт авг 31, 2023 19:55:33
Ariadna-on-Line
Продолжаем экономить на спичках.
Речь об DS2408. О подключении LCD по стандартному 1-Wire протоколу. Конечно проще всего взять листинг последовательности байт команд HD44780. Но что-то не находится он в удобно-читаемом виде. Поэтому пошел по пути безысходности, то бишь снифферинга. Накатал на Протеусе типа виртуальный Логический анализатор. Просмотрел работу штатной проги для LiquidCrictal_I2C. Содрал команд - lcd.begin / cursor / noCursor / blink / noBlink/ Прогнал сквозь виртуальный DS2408 - работают. Так они выглядят - см. скетч.
На очереди остальные. Если найдется желающий присоединиться - буду рад. Тема конечно мало-полезная, но можно будет создать еще одну библиотеку. Может кому сгодится. Если, конечно, раньше не найдется готовая библа LCD для 1-Wire !!! )))). С уважением.
ПС. Поскольку 1-Wire устройства - адресуемые, можно навешивать кучу дисплеев на один провод.
Re: Подключить LCD к МК по 1-проводному интерфейсу.
Добавлено: Пт сен 01, 2023 15:28:49
veso74
Все ближе и ближе подходим к моей любимой схеме: LCD на одном проводе ... только в схеме дисплей еще ... и без питания

.
One wire brings power & data to LCD module
https://www.radiolocman.com/shem/schema ... ?di=153552
Re: Подключить LCD к МК по 1-проводному интерфейсу.
Добавлено: Пт сен 01, 2023 16:56:46
Ariadna-on-Line
Моя идея оказалась фикс по банальной причине - продавец вздул цену за эту сраную DS2408 выше фантастики. Но мой труд не бесполезен. Знать код "ногодрыгов" управления чем-либо - полезное дело. Так что продолжу до победного конца. Обязательно полюбопытствую вашу тему. Есть уже рабочая прога 1-Wire ---> LCD конвертора для PIC-а (или Тини - они ничем не хуже) ? У меня их немало валяется. Работал с ними успешно до Ардуин. Но тогда мне эта тема как-то в голову не приходила.
Re: Подключить LCD к МК по 1-проводному интерфейсу.
Добавлено: Пт сен 01, 2023 17:28:21
veso74
Использую 1wire.c. (Иногда и отключаю прерывания во время выполнения).
из интернет: DS18B20 1-wire Driver for CCS C
http://solar-blogg.blogspot.com/2009/04 ... ccs-c.html
Выбирайте свой МК и пишите код как диспл. драйвер по 1-wire. Только ... дешевле по I2c на PCF8574 не будет

.
Re: Подключить LCD к МК по 1-проводному интерфейсу.
Добавлено: Пт сен 01, 2023 23:50:26
Ariadna-on-Line
[uquote="veso74",url="/forum/viewtopic.php?p=4471412#p4471412"]...Выбирайте свой МК и пишите код как диспл. драйвер по 1-wire. Только ... дешевле по I2c на PCF8574 не будет

.[/uquote]Благодаря Вам, дешевое решение я уже нашел. Которое на 74HC595. Причем готовое с библиотекой !!! Дешевле по-моему там уже просто некуда. То что на линию больше одного LCD там не посадишь. Вот это - недостаток ! )))))
ПС. Но похоже не все так печально. Попозже отпишусь.
Re: Подключить LCD к МК по 1-проводному интерфейсу.
Добавлено: Сб сен 02, 2023 08:18:23
veso74
С 1-wie из предыдущего сообщения: передаю по TX и получаю номер в RX и печат на LCD.
С некоторыми изменениями о задержках можно использовать. Для упрощения теста нет ID и команд.
Но бы добавил проверку целостности данных, напр. CRC.

,
TX:
Код: Выделить всё
void main() {
while (TRUE) {
onewire_reset();
onewire_write(123);
delay_ms(1000);
}
}
RX:
Код: Выделить всё
void main() {
lcd_init();
while (TRUE) {
if (!input(ONE_WIRE_PIN)) {
onewire_reset();
int8_t c = onewire_read();
lcd_gotoxy(1, 1);
printf(lcd_putc, "%u", c);
lcd_putc(' ');
lcd_putc(' ');
}
}
}
В помощь:
Wikipedia: 1-Wire
Microchip: AN3699, Using ATtiny817 to Emulate a 1-Wire® Device
Re: Подключить LCD к МК по 1-проводному интерфейсу.
Добавлено: Вс сен 03, 2023 13:00:39
Ariadna-on-Line
Все-таки МК для 1-Wire --> LCD конвертора - расточительно и сложно по сравнению с 74HC595. Более того - в библиотеке <ShiftRegLCD123.h> теперь есть управление двумя свободными пинами - backlightOn / backlightOff и buzzerOn / buzzerOff. Небольшое усложнение схемы конвертора позволяет посадить до 4 LCD в одну линию. Конечно это решение не для распределенной системы, но в локальной системе - вполне прокатит.
Re: Подключить LCD к МК по 1-проводному интерфейсу.
Добавлено: Вс сен 03, 2023 14:31:56
veso74
В последнее время даже для хобби предпочитаю МК с множеством пинов. И новые МК намного дешевле старых типов, со многими вн. ресурсами для будущего использования.
Re: Подключить LCD к МК по 1-проводному интерфейсу.
Добавлено: Вс сен 03, 2023 15:00:13
Ariadna-on-Line
[uquote="veso74",url="/forum/viewtopic.php?p=4472261#p4472261"]В последнее время даже для хобби предпочитаю МК с множеством пинов. И новые МК намного дешевле старых типов, со многими вн. ресурсами для будущего использования.[/uquote]Это точно. Я как увидел цену на допотопную DS2408 - согласен с вами без сомнений.
Re: Подключить LCD к МК по 1-проводному интерфейсу.
Добавлено: Пн сен 25, 2023 13:02:54
Ariadna-on-Line
void setup() {
LCD_print("Ariadna");
}
//======
void loop() {
}
//======
void LCD_print(string) {
Serial.print(string);
......
for (i =0; i<stringLength; i++) {
LCD_Write(byte(i));
}
}
Уважаемые гуру. Как синтаксически правильно передать текстовый аргумент ("Ariadna") в функцию void LCD_print(string) ? А если не затруднит - приведите требуемый код. С уважением.
Re: Подключить LCD к МК по 1-проводному интерфейсу.
Добавлено: Пн сен 25, 2023 14:41:18
veso74
Код: Выделить всё
void LCD_print(String str) {
Serial.print(str);
for (i = 0; i < str.length(); i++) {
LCD_Write(byte(i));
}
}
---
За print внутр. библиотеку
LiquidCrystal() и
клас String к lcd и Serial.print почему бы не использовать?
Код: Выделить всё
void LCD_print(String str) {
Serial.print(str);
lcd.print(str);
}
Re: Подключить LCD к МК по 1-проводному интерфейсу.
Добавлено: Пн сен 25, 2023 18:57:53
Ariadna-on-Line
Пишу библиотеку одно-проводного LCD. Мы общались на эту тему. С вашей помощью тогда нашел схему (74НС595, резисторы, диоды, конденсаторы) и отличную библу под нее. Точно такая как стандартная. Но схема медленная и ненадежная. А библиотека только под нее. Сейчас хочу сделать на одновибраторах. Она намного быстрее, надежнее, и нисколько не дороже. Но надо библиотеку. Написал функции низкого уровня. В том числе функцию вывода ОДНОГО символа.
//------------------------
void LCD_Write(uint8_t ASCII_code) {
uint8_t CurrAtr = ASCII_code & 0xF0; // Обнуляем младшую тетраду
ds.write(CurrAtr | 0x0D); // установка кода символа. Старшая тетрада. Сигнал E=HIGH
delay(DelTime); // Пауза для отработки строба 74HC595
ds.write(CurrAtr | 0x09); // установка кода символа. Старшая тетрада. Сигнал E=LOW
delay(DelTime); //
CurrAtr = ASCII_code << 4; //Выделяем младшую тетраду
ds.write(CurrAtr | 0x0D); // установка кода символа. Младшая тетрада. Сигнал E=HIGH
delay(DelTime); //
ds.write(CurrAtr | 0x09); // установка кода символа. Младшая тетрада. Сигнал E=LOW
delay(DelTime); //
}
//------------------------
Теперь надо более сложные. Здесь главное - чтоб было однотипно как в стандартной библиотеке. Именно поэтому мне и надо чтоб работало стандартное LCD_print("xxxxxxx").
Re: Подключить LCD к МК по 1-проводному интерфейсу.
Добавлено: Пн сен 25, 2023 19:39:41
veso74
LCD16x2 Interfacing with AVR ATmega16/ATmega32
Interfacing LCD16x2 with AVR ATmega16/ATmega32 in 4-bit mode
Возьмите из кода то, что хотите, а поместите "упакованным" в библиотеку на потом, после нормальной работы. Все уже сделано, особенно с этими часто используемыми устройствами.
Re: Подключить LCD к МК по 1-проводному интерфейсу.
Добавлено: Пн сен 25, 2023 20:10:30
Ariadna-on-Line
[uquote="veso74",url="/forum/viewtopic.php?p=4481146#p4481146"]Возьмите из кода то, что хотите, а поместите "упакованным" в библиотеку на потом, после нормальной работы. Все уже сделано, особенно с этими часто используемыми устройствами.[/uquote]Мне из железного кода ничего не надо. Уже всё есть. Нужно заставить работать функцию с текстовым аргументом
Re: Подключить LCD к МК по 1-проводному интерфейсу.
Добавлено: Пн сен 25, 2023 20:17:52
veso74
[uquote="Ariadna-on-Line",url="/forum/viewtopic.php?p=4481181#p4481181"]... Нужно заставить работать функцию с текстовым аргументом[/uquote]
Строка 62:
Код: Выделить всё
void LCD_String (char *str) /* Send string to LCD function */
...
Re: Подключить LCD к МК по 1-проводному интерфейсу.
Добавлено: Вт сен 26, 2023 19:48:46
Ariadna-on-Line
LCD_print("Ariadna"); // Использовать только двойные апострофы
//====
void LCD_print(char* str) { //Только так
char *ptrB = (char*)str;
for (int i = 0; i < strlen(str); i++) {
char z = *(ptrB + i);
LCD_Write(z);
}
}
//------------------------
Убил пол-дня. А оказалось не сложно.
Вопрос: Какие еще функции желательно добавить в библиотеку помимо стандартных ?
Re: Подключить LCD к МК по 1-проводному интерфейсу.
Добавлено: Ср сен 27, 2023 07:56:38
OKF
Ужос.
Код: Выделить всё
void LCD_print(char* str) {
while (*str)
LCD_Write(*str++);
}
Re: Подключить LCD к МК по 1-проводному интерфейсу.
Добавлено: Ср сен 27, 2023 14:29:54
Ariadna-on-Line
Спасибо. Работает. Где вы раньше были ))).
Re: Подключить LCD к МК по 1-проводному интерфейсу.
Добавлено: Сб янв 06, 2024 15:25:06
Ariadna-on-Line
В декабре сделал гербер-файлы и заказал в Китае печатки для переходников о которых данная тема. Сегодня получил. 24 дня от заказа да еще в НГ праздники. Выглядят замечательно. Осталось найти свои косяки. )))))) Потом выложу впечатления.