ATtiny85 не загрузится, если PIN2 не будет вытянут высоко

У меня были некоторые проблемы с настройкой рабочего ATtiny85 вне его совета разработчиков.
Соединение на моем макете:

pulled high (10K R)  -- 1  PIN 8  -- VCC (+5V)
     trouble here!!  -- 2  PIN 7  --
                     -- 3  PIN 6  -- LED
               GND   -- 4  PIN 5  --

как вы можете догадаться, контакты относятся к перечислению фактических контактов чипа.
Мой простой тестовый код:

void setup() {
  pinMode(1, OUTPUT);
}
void loop() {
  if (analogRead(A1) > 512) {
    digitalWrite(1, HIGH);
    delay(250);
    digitalWrite(1, LOW);
    delay(250);
  } else {
    digitalWrite(1, HIGH);
    delay(1000);
    digitalWrite(1, LOW);
    delay(1000);
  }
}

Я использую Arduino IDE v1.8.13 с digistump avrboards v1.6.7.

Я прошил загрузчик t85_default micronucleus v2.5 в моей микросхеме с предохранителями, установленными в lfuse:0xe1, hfuse:0xdd, efuse:0xfe.
Проблема в том, что если я включу микросхему с PIN2 не вытащил высоко, она не начнет выполнение кода, она не будет мигать. Если он запущен с высокой высоты, он начнет код примерно через 5 секунд после включения питания. Если он запущен, вытащенный низкий код не будет выполняться, пока не будет вытянут высокий. Когда я потяну высоко, даже на секунду, PIN2 начнет мигать и выполнять код.

Это нормально? Кажется, я что-то упустил.

, 👍1


2 ответа


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

3

Ну, я кое-чего добился. Я надеюсь обновить это чем-то более полезным, хотя.

У меня нет digispark или даже правильных зенерных диодов, чтобы воспроизвести необходимые части этого. Тем не менее, я установил t85_default.hex на ATtiny85 с некоторыми изменениями в шестнадцатеричном файле, чтобы разместить инструкции по разрыву в нескольких стратегических местах. А потом я запустил против него алчность/debugwire.

Основная проблема заключается в том, что он пытается настроить внутренний генератор против USB - фреймов, глядя на D-pin. В основном, он застрял в tuneoscal.

988  00001d06 <tuneOsccal>:
   1     1d06:       b3 9b           sbis    0x16, 3 ; 22
   2     1d08:       fe cf           rjmp    .-4             ; 0x1d06 <tuneOsccal>
   3     1d0a:       07 d0           rcall   .+14            ; 0x1d1a <countFrame>
...

Поэтому , если вы хотите избежать этого, вам нужно скомпилировать с этой функцией, и для этого есть функция.

Я еще не запустил один с этой функцией отключенной. Но я скомпилировал t85_default один раз, используя make CONFIG=t85_default и счел необходимым удалить START_WITHOUT_PULLUP из первой строки файла t85_default/bootloaderconfig.h.

Код упоминает о существовании OSCCAL_SAVE_CALIB, который позволяет вам указать собственное значение OSCCAL, предполагая, что заводское значение для чипа недостаточно хорошо по какой-либо причине. Но, кажется, нет никаких указаний о том, как вы должны хранить его или где. Глядя на код, хотя, если он включен, вы можете увидеть, что он загружает значение OSCCAL непосредственно перед началом загрузчика.

Простой способ поместить его туда, не связываясь с командными строками и скриптами компоновщика, состоял бы в том, чтобы просто отредактировать t85_default.hex, который является результатом построения с включенным OSCCAL_SAVE_CALIB, и добавить дополнительную запись для установки значения osccal по правильному адресу, который, я думаю, будет 0x19FA, так что:

:0119FA00XXSS

Где XX - это то , что вы определили своим значением OSCCAL, а SS-это значение контрольной суммы, или 0x100 - ((0x14 + XX) & 0xFF) в этом случае. Или, если вы хотите быть ленивым, положите все, что вы хотите для SS, и пусть AVRDude complain скажет вам, что это должно быть, когда он пытается загрузить .hex файл. Он сообщит ожидаемое значение в десятичном формате, которое вы можете преобразовать в шестнадцатеричный и патч в файл, и снова запустите AVRDude.

,

Вау, это очень сложно для моего уровня понимания, но благодаря ссылкам, которые вы указали в ответе, я понял суть. Мне было бы довольно сложно редактировать код, учитывая, что я не знаю ассемблера и обладаю поверхностными знаниями c++. На данный момент я думаю, что просто начну с высокого уровня pin2, а затем попытаюсь исправить шестнадцатеричный файл, как вы предложили. Кстати, я думаю, что вы проделали отличную работу с этим ответом. Спасибо., @Zeno Dalla Valle

Я рассмотрю некоторые краткие инструкции. Вам вообще не нужно будет знать сборку. Первым шагом было бы просто использовать стандартные калибровки osccal и посмотреть, справится ли это с задачей, которая вообще не включала бы редактирование шестнадцатеричного файла. Я могу попытаться настроить подключение к USB, что может занять довольно много времени. Дольше, чем вы думаете., @timemage

@ZenoDallaValle, у меня есть то, что составляет клон digispark (или, скорее, комплект), в котором используется ATtiny85 с гнездом. Когда я получу его (что может занять некоторое время) и соберу, я посмотрю, как обновить ответ с помощью используемого процесса., @timemage


1

У меня была такая же проблема, я перешел на прошивку micronucleus-1.11-upgrade.hex (с 2.3 на 1.11) и она была решена, вы можете найти ее здесь https://github.com/micronucleus/micronucleus/tree/v1.11/upgrade/releases

,