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

corpse

New member
Добрый день! Пытаюсь завести на 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

Код:
from machine import Pin, SPI

spi = SPI(1, baudrate=1000000, polarity=0, phase=0)
spi.write(b'\xff')
Вопрос номер раз: при подаче питания иногда один или несколько пинов на сдвиговом регистре в состоянии HIGH. Это нормально?

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

qwertynoon

New member
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 микросхемы - это разрешение выходов.
подачи питания сначала выставляешь регистр как надо, а потом разрешаешь выходы сигналом на микруху
 

corpse

New member
void DOUT(int16_t value)
{
shiftOut(Dat_Pin_out, clockPin_out, MSBFIRST, value >> 8);
Насчёт ноги - спасибо, на досуге попробую. Как заставить работать сдвиговый регистр напрямую в лоб, я представляю. Можно писать туда по биту, параллельно дёргая пин синхронизации поочерёдно вверх и вниз, а потом дёрнуть latch. Проблема в том, что я хотел завести именно аппаратный spi под пайтоном, это было бы оптимальнее с точки зрения ресурсов.
 

qwertynoon

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