Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Нужна помощь ESP8266+74hc595/74hc195

Тема в разделе "MicroPython", создана пользователем corpse, 20 янв 2018.

  1. corpse

    corpse Новичок

    Сообщения:
    23
    Симпатии:
    1
    Добрый день! Пытаюсь завести на ESP-12 через SPI сдвиговый регистр. Информацию брал отсюда: class SPI – a Serial Peripheral Interface bus protocol (master side) — MicroPython 1.9.3 documentation
    Для определённости в текущий момент hardware SPI, выводы подключены по доку:
    MISO is GPIO12
    MOSI is GPIO13
    SCK is GPIO14

    Код (Text):
    1.  
    2. from machine import Pin, SPI
    3.  
    4. spi = SPI(1, baudrate=1000000, polarity=0, phase=0)
    5. spi.write(b'\xff')
    6.  
    Вопрос номер раз: при подаче питания иногда один или несколько пинов на сдвиговом регистре в состоянии HIGH. Это нормально?

    Вопрос номер два: при попытке добавить в параметры инициализации bits=8 что при создании объекта spi, что при ините руками - получаю ошибку:
    Код (Text):
    1.  
    2. >>> spi.init(bits=8)
    3. Traceback (most recent call last):
    4.   File "<stdin>", line 1, in <module>
    5. TypeError: extra keyword arguments given
    6.  
    Первая запись в регистр проходит успешно, например, spi.write(b'\xff'), но как закинуть байт в регистр второй раз? Последующая запись уходит в никуда, состояние регистра не меняется. Пробовал дёрнуть latch pin руками - не помогает. spi.deinit() или перегрузка repl - тоже. В регистре остаётся то значение, которое туда прилетело в первый раз вплоть до обесточивания ESP. Подскажите пожалуйста, что я делаю не так?
     
  2. qwertynoon

    qwertynoon Новичок

    Сообщения:
    57
    Симпатии:
    3
    void DOUT(int16_t value)
    {
    shiftOut(Dat_Pin_out, clockPin_out, MSBFIRST, value >> 8);
    shiftOut(Dat_Pin_out, clockPin_out, MSBFIRST, value & 255);
    digitalWrite(L_Pin_out, 1);digitalWrite(L_Pin_out, 0);
    }

    не нужен никакой SPI
    берешь любые ноги
    работает на ура
    чтобы при пуске были все нули или единицы, то gpio от ESP заводишь на ногу CE микросхемы - это разрешение выходов.
    подачи питания сначала выставляешь регистр как надо, а потом разрешаешь выходы сигналом на микруху
     
  3. corpse

    corpse Новичок

    Сообщения:
    23
    Симпатии:
    1
    Насчёт ноги - спасибо, на досуге попробую. Как заставить работать сдвиговый регистр напрямую в лоб, я представляю. Можно писать туда по биту, параллельно дёргая пин синхронизации поочерёдно вверх и вниз, а потом дёрнуть latch. Проблема в том, что я хотел завести именно аппаратный spi под пайтоном, это было бы оптимальнее с точки зрения ресурсов.
     
  4. qwertynoon

    qwertynoon Новичок

    Сообщения:
    57
    Симпатии:
    3
    Мои попытки как со входным так и с выходным резистором стандартно не получались. То пераый, то последний биты не адекватные были, пока не сделал на элементарном уровне. А на счет ресурсов ты зря беспокошься. Просто надо не по таймеру дергать регистр, а по изменениям состояний твоих выходов. Поменялись - дергай. И никакие ресурсы не пострадают..
     

Поделиться этой страницей