Ds2408 - от модели в протеусе до библиотеки lcd.

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Ariadna-on-Line, 27 авг 2023.

  1. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Ардуино ИДЕ. Штатный пример к библиотеке OneWire. DS2408_switch. Компилируется нормально. Запускаю в Протеусе. Для этого пришлось в свойствах модели 2408 уменьшить ресет-интервал с 680мкС до 480 мкс (именно столько формирует симулятор). Симулятор видит девайс, читает идентификатор. Но не управляет выходами. Соответственно и читает с них только bx11111111. Кому удалось победить модель сего девайса ? С уважением.

    ПС. Перебирая наугад библиотеки и скетчи - удалось-таки увидеть требуемое. Так что дело - в софте. Протеусная модель DS2408 - работает исправно.

    ППС. Не нашел 1-проводной библиотеки типа ShiftRegLCD123, но под стандартный OneWire протокол. На DS2408 разработать конвертор под штатный LCD модуль - делов пол-часа. Хочу попробовать написАть и отладить библиотеко-подобный код. Отсюда и тема ветки. .
     
    Последнее редактирование: 27 авг 2023
  2. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Конечно проще всего взять листинг последовательности байт для всех команд. Но что-то не находится в удобно-читаемом виде. Поэтому пошел по пути безысходности, то бишь снифферинга. Накатал на Протеусе типа виртуальный Логический анализатор. Просмотрел работу штатной проги для LiquidCrictal_I2C. Содрал команд - lcd.begin / cursor / noCursor / blink / noBlink/ Прогнал сквозь виртуальный DS2408 - работают. Так они выглядят -
    #include <DS2408.h>
    #include <OneWire.h>

    DS2408 ds(1);
    Devices devices;

    uint8_t device_count;
    //========================================
    void setup(){

    Serial.begin(9600);
    device_count = ds.find(&devices);
    Serial.print ("Found - ");
    Serial.println(device_count, HEX);

    delay(64000); // Пауза после подачи питания 1 Секунда !!!!!!!!!!!!!!!
    LCD_begin();
    delay(128000); // Именно столько, не меньше
    }
    //========================================
    void loop(){
    LCD_cursor();
    // LCD_blink();
    Serial.println("Cursor ON");
    delay(128000); // Именно столько, не меньше
    LCD_noCursor();
    // LCD_noBlink();
    Serial.println("Cursor OFF");
    delay(128000); // Именно столько, не меньше
    }
    //========================================
    void LCD_begin() {
    ds.set_state(devices[0],0x08); // Перевод в исходное состояние всех линий
    delay(3000); // Пауза по даташиту
    ds.set_state(devices[0],0x3C);
    ds.set_state(devices[0],0x38);
    delay(16000); // Cделано эмпирически по виду осциллограммы
    ds.set_state(devices[0],0x3C);
    ds.set_state(devices[0],0x38);

    ds.set_state(devices[0],0x3C);
    ds.set_state(devices[0],0x38);

    ds.set_state(devices[0],0x2C);
    ds.set_state(devices[0],0x28);

    ds.set_state(devices[0],0x2C);
    ds.set_state(devices[0],0x28);

    ds.set_state(devices[0],0x8C);
    ds.set_state(devices[0],0x88);

    ds.set_state(devices[0],0x0C);
    ds.set_state(devices[0],0x08);

    ds.set_state(devices[0],0xCC);
    ds.set_state(devices[0],0xC8);

    ds.set_state(devices[0],0x0C);
    ds.set_state(devices[0],0x08);

    ds.set_state(devices[0],0x1C);
    ds.set_state(devices[0],0x18);
    delay(5400);
    ds.set_state(devices[0],0x0C);
    ds.set_state(devices[0],0x08);

    ds.set_state(devices[0],0x6C);
    ds.set_state(devices[0],0x68);
    }
    //------------------------
    void LCD_cursor() {
    ds.set_state(devices[0],0x0C); // выставляем данные и поднимаем строб
    ds.set_state(devices[0],0x08); // Опускаем строб (Запись)
    ds.set_state(devices[0],0xEC); // выставляем - CursorON и поднимаем строб
    ds.set_state(devices[0],0xE8); // Опускаем строб (Запись)
    }
    //------------------------
    void LCD_noCursor() {
    ds.set_state(devices[0],0x0C); //
    ds.set_state(devices[0],0x08); //
    ds.set_state(devices[0],0xCC); //
    ds.set_state(devices[0],0xC8); //
    }
    //------------------------
    void LCD_blink() {
    ds.set_state(devices[0],0x0C); //
    ds.set_state(devices[0],0x08); //
    ds.set_state(devices[0],0xDC); //
    ds.set_state(devices[0],0xD8); //
    }
    //------------------------
    void LCD_noBlink() {
    ds.set_state(devices[0],0x0C); //
    ds.set_state(devices[0],0x08); //
    ds.set_state(devices[0],0xCC); //
    ds.set_state(devices[0],0xC8); //
    }
    На очереди остальные. Если найдется желающий присоединиться - буду рад. Тема конечно мало-полезная, но можно будет создать еще одну библиотеку. Может кому сгодится. Если, конечно, раньше не найдется готовая библа LCD для 1-Wire !!! )))). С уважением.
    ПС. Поскольку 1-Wire устройства - адресуемые, можно навешивать кучу дисплеев на один провод.
    Продолжение :
    //------------------------
    void LCD_clear() {
    ds.set_state(devices[0],0x0C);
    ds.set_state(devices[0],0x08);
    ds.set_state(devices[0],0x1C);
    ds.set_state(devices[0],0x18);
    }
    //------------------------
    void LCD_home(); {
    ds.set_state(devices[0],0x0C);
    ds.set_state(devices[0],0x08);
    ds.set_state(devices[0],0x2C);
    ds.set_state(devices[0],0x28);
    }
    //------------------------
    void LCD_scrollDisplayLeft() {
    ds.set_state(devices[0],0x1C);
    ds.set_state(devices[0],0x18);
    ds.set_state(devices[0],0xCC);
    ds.set_state(devices[0],0xC8);
    }
    //------------------------
    void LCD_scrollDisplayRight() {
    ds.set_state(devices[0],0x1C);
    ds.set_state(devices[0],0x18);
    ds.set_state(devices[0],0x8C);
    ds.set_state(devices[0],0x88);
    }
    //------------------------
    void LCD_leftToRight() {
    ds.set_state(devices[0],0x0C);
    ds.set_state(devices[0],0x08);
    ds.set_state(devices[0],0x6C);
    ds.set_state(devices[0],0x68);
    }
    //------------------------
    void LCD_rightToLeft() {
    ds.set_state(devices[0],0x0C); // выставляем данные и поднимаем строб
    ds.set_state(devices[0],0x08); // Опускаем строб (Запись)
    ds.set_state(devices[0],0x4C); // выставляем данные и поднимаем строб
    ds.set_state(devices[0],0x48); // Опускаем строб (Запись)
    }
    //------------------------
    void LCD_autoscroll() {
    ds.set_state(devices[0],0x0C);
    ds.set_state(devices[0],0x08);
    ds.set_state(devices[0],0x7C);
    ds.set_state(devices[0],0x78);
    }
    //------------------------
    void LCD_noAutoscroll() {
    ds.set_state(devices[0],0x0C);
    ds.set_state(devices[0],0x08);
    ds.set_state(devices[0],0x6C);
    ds.set_state(devices[0],0x68);
    }
    //------------------------
    void LCD_display(); {
    ds.set_state(devices[0],0x0C);
    ds.set_state(devices[0],0x08);
    ds.set_state(devices[0],0xCC);
    ds.set_state(devices[0],0xC8);
    }
    //------------------------
    void LCD_noDisplay() {
    ds.set_state(devices[0],0x0C);
    ds.set_state(devices[0],0x08);
    ds.set_state(devices[0],0x8C);
    ds.set_state(devices[0],0x88);
    }
    //------------------------
     

    Вложения:

    • VLA.png
      VLA.png
      Размер файла:
      27,2 КБ
      Просмотров:
      60
    Последнее редактирование: 1 сен 2023