Использование Nodemcu для программирования Attiny85

У меня есть плата разработчика для моего attiny85. при подключении его к компьютеру я получаю сообщение "неизвестное USB-устройство (ошибка запроса дескриптора устройства)". хотя у меня есть необходимые драйверы, поэтому я подумал о том, чтобы попробовать использовать мой nodemcu. Попробовал подключить SPI (к nodemcu hmiso; hmosi; hcslk; hcs) и загрузить, используя "arduino как ISP" и совместимые настройки (https://www.hackster.io/arjun/programming-attiny85-with-arduino-uno-afb829). нажатие "записать загрузочный файл" с помощью этого способа приводит к ошибкам:

"avrdude: stk500_recv(): программатор не отвечает

avrdude: stk500_getsync() попытка 1 из 10: не синхронизировано: соответственно = 0x03

......

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() попытка 10 из 10: не синхронизировано: соответственно = 0x03

Ошибка при записи загрузчика ".

***РЕДАКТИРОВАТЬ:

После изменения строки (#define USE_OLD_STYLE_WIRING) в Arduino Sp (из примера) код ошибки немного изменился, и он появляется намного быстрее:

"Arduino: 1.8.13 (Windows Store 1.8.42.0) (Windows 10), плата: "ATtiny25 / 45 / 85, ATtiny85, внутренняя 8 МГц"

avrdude: stk500_getsync() попытка 1 из 10: не синхронизировано: соответственно = 0x04

avrdude: stk500_getsync() попытка 2 из 10: не синхронизировано: соответственно = 0x30

avrdude: stk500_getsync() попытка 3 из 10: не синхронизировано: соответственно = 0x61

avrdude: stk500_getsync() попытка 4 из 10: не синхронизировано: соответственно = 0x67

avrdude: stk500_getsync() попытка 5 из 10: не синхронизировано: соответственно = 0xc1

avrdude: stk500_getsync() попытка 6 из 10: не синхронизировано: соответственно = 0xc4

avrdude: stk500_getsync() попытка 7 из 10: не синхронизировано: соответственно = 0xc5

avrdude: stk500_getsync() попытка 8 из 10: не синхронизировано: соответственно = 0xa1

avrdude: stk500_getsync() попытка 9 из 10: не синхронизировано: соответственно = 0xcc

avrdude: stk500_getsync() попытка 10 из 10: не синхронизировано: соответственно = 0xe2

Ошибка при записи загрузчика ".

Любая помощь о том, как использовать nodemcu для программирования attiny85, будет большой благодарностью

, 👍3

Обсуждение

как вы предотвратили сброс NodeMCU? попробуйте другой контакт, затем io15 для сброса цели, @Juraj

Привет, спасибо за ответ, первое, что я попробовал, был GPIO5, но безуспешно: (, @tal itshak

как вы можете предотвратить автоматический сброс NodeMCU?, @Juraj

вы имеете в виду использование конденсатора от RST до GND? Я попробовал использовать конденсатор, хотя он и был 22 мкФ, но не сработал, @tal itshak

Использование 10 мкФ также не сработало и не пыталось перепрошить загрузчик с помощью cmd, @tal itshak


1 ответ


Лучший ответ:

3

Модификации скетча Arduino sp.ino

Я внес следующие изменения в файл ArduinoISP.ino, который существует в IDE версии 1.8.13, и загрузил его на плату NodeMCU.

Короче говоря, я прокомментировал (с помощью #if 0) сердцебиение, ошибку и т. Д., Связанные с этим. Невыполнение этого требования приводит к перезагрузке платы по причинам, которые, вероятно, были бы очевидны, если бы я исследовал это, но я этого не сделал, и поскольку я не планирую использовать светодиоды, а вы, возможно, и нет, я решил, что передам это вам раньше.

Я изменил RESET на SS, который на NodeMCU равен D8.

Почему код, связанный со светодиодом, вызывает сброс настроек

... Из любопытства я просто пошел и посмотрел спецификации ESP-12F и ESP8266EX. GPIO7, GPIO8, GPIO9 все отправляются на SPI-флэш-память ESP-12F (хранилище программ), поэтому якобы манипулирование ими мешает способности модулей продолжать выполнение из SPI-flash. Вероятно, по этой причине они не перенаправляются на контакты NodeMCU. Так что вот и ответ на этот вопрос.

Различия

@@ -70,7 +70,7 @@
 // Стандартная конфигурация контактов.
 #ifndef ARDUINO_HOODLOADER2
 
-#define RESET     10 // Используйте пин 10 для сброса целевого значения, а не SS
+#define RESET     SS // Используйте вывод 10 для сброса целевого значения, а не SS
 #define LED_HB    9
 #define LED_ERR   8
 #define LED_PMODE 7
@@ -216,15 +216,17 @@
 
 #endif
 
 void setup() {

   SERIAL.begin(BAUDRATE);
 
+#if 0
   pinMode(LED_PMODE, OUTPUT);
   pulse(LED_PMODE, 2);
   pinMode(LED_ERR, OUTPUT);
   pulse(LED_ERR, 2);
   pinMode(LED_HB, OUTPUT);
   pulse(LED_HB, 2);
+#endif
 
 }
 
@@ -276,6 +278,7 @@
 }
 
 void loop(void) {
+#if 0
   // активен ли pmode?
   if (pmode) {
     digitalWrite(LED_PMODE, HIGH);
@@ -291,6 +294,7 @@
 
   // зажечь индикатор сердцебиения
   heartbeat();
+#endif
   if (SERIAL.available()) {
     avrisp();
   }

Подключение NodeMCU к ISP ATtiny85 ISP

Плата подключается к ATtiny85 следующим образом:

NODEMCU 3.3V -> ATTINY85 PIN 8
NODEMCU GND  -> ATTINY85 PIN 4
NODEMCU D5   -> ATTINY85 PIN 7
NODEMCU D6   -> ATTINY85 PIN 6
NODEMCU D7   -> ATTINY85 PIN 5
NODEMCU D8   -> ATTINY85 PIN 1

На NodeMCU вы найдете все 6 из них вместе справа.

Проверка функционирования AVRDUDE

avrdude -P /dev/ttyUSB0 -c stk500v1 -b 19200 -p attiny85


Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e930b (probably t85)

avrdude: safemode: Fuses OK (E:FF, H:DF, L:71)

avrdude done.  Thank you.

Я играл с этим чипом, так что не удивляйтесь, что у меня нет таких же значений предохранителей, как у вас.

,

Большое спасибо! Комментирование светодиодных частей в коде привело к различию., @tal itshak

Хорошая сделка. Я подумывал о том, чтобы просто поместить только это, но хотел сделать его немного более полным. Чтобы было понятно, изменение определения контактов для светодиодов на не вызывающие проблем контакты также будет работать. Я могу отредактировать его позже, чтобы предложить и, возможно, добавить изображение проводки, если у меня будет время сделать чистое изображение., @timemage