Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Ответить

Re: Подключить LCD к МК по 1-проводному интерфейсу.

Вт авг 29, 2023 15:21:13

Принцип применим и в других случаях: ниже: 8-LED 7-SEG дисплеем на MAX7219 управляю по 2 пина.
Сл. один пин MC остается свободным для использования в будущем :music: .

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

Изображение,
Изображение

Re: Подключить LCD к МК по 1-проводному интерфейсу.

Чт авг 31, 2023 19:55:33

Продолжаем экономить на спичках.
Речь об DS2408. О подключении LCD по стандартному 1-Wire протоколу. Конечно проще всего взять листинг последовательности байт команд HD44780. Но что-то не находится он в удобно-читаемом виде. Поэтому пошел по пути безысходности, то бишь снифферинга. Накатал на Протеусе типа виртуальный Логический анализатор. Просмотрел работу штатной проги для LiquidCrictal_I2C. Содрал команд - lcd.begin / cursor / noCursor / blink / noBlink/ Прогнал сквозь виртуальный DS2408 - работают. Так они выглядят - см. скетч.

На очереди остальные. Если найдется желающий присоединиться - буду рад. Тема конечно мало-полезная, но можно будет создать еще одну библиотеку. Может кому сгодится. Если, конечно, раньше не найдется готовая библа LCD для 1-Wire !!! )))). С уважением.
ПС. Поскольку 1-Wire устройства - адресуемые, можно навешивать кучу дисплеев на один провод.
Вложения
More functions.txt
(1.96 KiB) Скачиваний: 16
VLA.png
(27.17 KiB) Скачиваний: 19
DS2408_Alternative.ino.txt
(3.47 KiB) Скачиваний: 22

Re: Подключить LCD к МК по 1-проводному интерфейсу.

Пт сен 01, 2023 15:28:49

Все ближе и ближе подходим к моей любимой схеме: 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

Моя идея оказалась фикс по банальной причине - продавец вздул цену за эту сраную DS2408 выше фантастики. Но мой труд не бесполезен. Знать код "ногодрыгов" управления чем-либо - полезное дело. Так что продолжу до победного конца. Обязательно полюбопытствую вашу тему. Есть уже рабочая прога 1-Wire ---> LCD конвертора для PIC-а (или Тини - они ничем не хуже) ? У меня их немало валяется. Работал с ними успешно до Ардуин. Но тогда мне эта тема как-то в голову не приходила.

Re: Подключить LCD к МК по 1-проводному интерфейсу.

Пт сен 01, 2023 17:28:21

Использую 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

...Выбирайте свой МК и пишите код как диспл. драйвер по 1-wire. Только ... дешевле по I2c на PCF8574 не будет :).
Благодаря Вам, дешевое решение я уже нашел. Которое на 74HC595. Причем готовое с библиотекой !!! Дешевле по-моему там уже просто некуда. То что на линию больше одного LCD там не посадишь. Вот это - недостаток ! )))))
ПС. Но похоже не все так печально. Попозже отпишусь.

Re: Подключить LCD к МК по 1-проводному интерфейсу.

Сб сен 02, 2023 08:18:23

С 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

Все-таки МК для 1-Wire --> LCD конвертора - расточительно и сложно по сравнению с 74HC595. Более того - в библиотеке <ShiftRegLCD123.h> теперь есть управление двумя свободными пинами - backlightOn / backlightOff и buzzerOn / buzzerOff. Небольшое усложнение схемы конвертора позволяет посадить до 4 LCD в одну линию. Конечно это решение не для распределенной системы, но в локальной системе - вполне прокатит.
Вложения
1Wire.png
(33.95 KiB) Скачиваний: 30

Re: Подключить LCD к МК по 1-проводному интерфейсу.

Вс сен 03, 2023 14:31:56

В последнее время даже для хобби предпочитаю МК с множеством пинов. И новые МК намного дешевле старых типов, со многими вн. ресурсами для будущего использования.

Re: Подключить LCD к МК по 1-проводному интерфейсу.

Вс сен 03, 2023 15:00:13

В последнее время даже для хобби предпочитаю МК с множеством пинов. И новые МК намного дешевле старых типов, со многими вн. ресурсами для будущего использования.
Это точно. Я как увидел цену на допотопную DS2408 - согласен с вами без сомнений.

Re: Подключить LCD к МК по 1-проводному интерфейсу.

Пн сен 25, 2023 13:02:54

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

Код:
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

Пишу библиотеку одно-проводного 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").
Последний раз редактировалось Ariadna-on-Line Пн сен 25, 2023 19:41:16, всего редактировалось 1 раз.

Re: Подключить LCD к МК по 1-проводному интерфейсу.

Пн сен 25, 2023 19:39:41

LCD16x2 Interfacing with AVR ATmega16/ATmega32
Interfacing LCD16x2 with AVR ATmega16/ATmega32 in 4-bit mode

Возьмите из кода то, что хотите, а поместите "упакованным" в библиотеку на потом, после нормальной работы. Все уже сделано, особенно с этими часто используемыми устройствами.

Re: Подключить LCD к МК по 1-проводному интерфейсу.

Пн сен 25, 2023 20:10:30

Возьмите из кода то, что хотите, а поместите "упакованным" в библиотеку на потом, после нормальной работы. Все уже сделано, особенно с этими часто используемыми устройствами.
Мне из железного кода ничего не надо. Уже всё есть. Нужно заставить работать функцию с текстовым аргументом

Re: Подключить LCD к МК по 1-проводному интерфейсу.

Пн сен 25, 2023 20:17:52

... Нужно заставить работать функцию с текстовым аргументом

Строка 62:
Код:
void LCD_String (char *str)   /* Send string to LCD function */
...

Re: Подключить LCD к МК по 1-проводному интерфейсу.

Вт сен 26, 2023 19:48:46

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

Ужос.
Код:
void LCD_print(char* str) {
  while (*str)
    LCD_Write(*str++);
}

Re: Подключить LCD к МК по 1-проводному интерфейсу.

Ср сен 27, 2023 14:29:54

Спасибо. Работает. Где вы раньше были ))).

Re: Подключить LCD к МК по 1-проводному интерфейсу.

Сб янв 06, 2024 15:25:06

В декабре сделал гербер-файлы и заказал в Китае печатки для переходников о которых данная тема. Сегодня получил. 24 дня от заказа да еще в НГ праздники. Выглядят замечательно. Осталось найти свои косяки. )))))) Потом выложу впечатления.
Ответить