Как установить скорость SPI для ATmega1284P?
Я использую MightyCore и platformio. Мой конфигурационный файл выглядит следующим образом
Мои предохранители установлены следующим образом:
E:FD
H:D6
L:8F
У меня контроллер работает на частоте 16 МГц, а частота SCK - 8 МГц. Мой дисплей показывает белый цвет, и это все. Я знаю, что для того, чтобы он функционировал должным образом, я должен использовать тактовую частоту SPI 1 МГц. Если я запрограммирую предохранитель CKDIV8, мой контроллер не запустится. Не знаю почему, но для меня там творится какая-то черная магия. Мой недостаток знаний здесь не поможет.
Я попытался использовать следующие приемы:
Настройка скорости SPI с помощью библиотеки TFT
// ранее в main.cpp
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
// позже в setup()
tft.setSPISpeed(1000000); // не влияет на SCK
Попытка установить его непосредственно через экземпляр класса SPI:
// в setup()
SPI.setClockDivider(SPI_CLOCK_DIV128); // нет эффекта
Или статически:
// в setup()
SPIClass::setClockDivider(SPI_CLOCK_DIV128); // по-прежнему нет эффекта
Также я попытался передать флаг
сборки DEFAULT_SPI_FREQ с предустановленной частотой.
У меня закончились идеи.
Схема здесь:
@zoonman, 👍0
Обсуждение1 ответ
В соответствии с этой проблемой setSPISpeed должен быть сделан после initR следующим образом:
tft.initR(INITR_BLACKTAB);
tft.setSPISpeed(1000000);
init инициализирует SPI и, конечно же, устанавливает значение по умолчанию. вы можете изменить его только после этого, @Juraj
@Juraj Я понятия не имею, что происходило в голове инженеров Adafruit. Дисплей не может выполнить инициализацию при частоте 8 МГц, потому что SPI слишком быстр для этого. Он должен быть инициализирован на частоте 1 МГц, тогда он должен функционировать должным образом., @zoonman
- Как использовать SPI на Arduino?
- Как увеличить скорость записи на SD-карту в Ардуино
- Как считывать данные с помощью Arduino SPI
- Как передать более 1 байта сразу по шине SPI?
- OVF в последовательном мониторе вместо данных
- Как отправить строку с подчиненного устройства Arduino с помощью SPI?
- Проблема совместного использования MISO с несколькими RFID-считывателями RC522
- Путаница между SPI и I2C для SSD1306 OLED
является ли
setSPISpeed
послеinit
?, @Juraj"Если я запрограммирую предохранитель CKDIV8, мой контроллер не запустится". Как вы это определяете?, @timemage
@Juraj нет. Это было раньше. Я поместил его позже, и теперь он работает., @zoonman
@timemage У меня есть некоторые манипуляции с выводом позже в setup(), и они не происходят., @zoonman
зачем вам размещать его раньше? init инициализирует SPI, а затем, конечно, устанавливает значение по умолчанию., @Juraj