Отдельный ATmega 2560 - включение одного светодиода - устранение неполадок

У меня есть собственная печатная плата с "некоторыми вещами" на нем, и сначала я хочу, чтобы он запускал простое «включение светодиода».

Моя установка:

  • Атмега 2560
  • Светодиод подключен к PE4 (D2 на языке Arduino) => PE4 - светодиод - резистор 1К - 5В
  • керамический резонатор (CSTCE16M0V53-R0 16 МГц), подключенный к XTAL1 + XTAL2 с резистором 1 МОм между ними
  • все VIN подключены к GND конденсаторами

VIN резонатора GND СХЕМА СБРОСА индикаторы состояния

Загрузка выполняется через ICSP (MISO, MOSI, SCK, RESET, 5V, GND) с USBasp

Вот мой скетч Arduino, который я загружаю через ПО Arduino:

void setup() {
  pinMode(2, OUTPUT);
}

void loop() {
  digitalWrite(2, LOW);    
}

Я также проверил предохранители на Atmega:

avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D8
avrdude: safemode: efuse reads as FD
avrdude: safemode: Fuses OK (H:FD, E:D8, L:FF)

avrdude успешно загружает: (вывод усечен!)

avrdude: auto set sck period (because given equals null)
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude: Device signature = 0x1e9801
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: auto set sck period (because given equals null)
avrdude: writing flash (1518 bytes):
Writing | ################################################## | 100% 5.47s
avrdude: 1518 bytes of flash written
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 3.45s
avrdude: verifying ...
avrdude: 1518 bytes of flash verified

avrdude done.  Thank you.

Проблема: светодиод не работает. Он все время выключен.

Есть идеи, почему это не работает?

, 👍0

Обсуждение

Вы забыли упомянуть, в чем проблема., @Ignacio Vazquez-Abrams

Ты прав. Я отредактировал свой пост. Светодиод не мигает., @jblaze

Вы измеряли напряжение на пинах?, @Ignacio Vazquez-Abrams

Когда вы говорите, что он не мигает, можете ли вы уточнить: он все время включен или все время выключен?, @Nick Gammon

он все время выключен. @НикГаммон // какой пин вы имеете в виду, @jblaze

На контакте, который должен мигать., @Ignacio Vazquez-Abrams

Попробуйте контакт D52 (контакт SCK), так как мы знаем, что он работает, иначе вы не смогли бы загрузить скетч с самого начала., @Nick Gammon

Все на печатной плате уже жестко подключено, и я не могу изменить. Могу попробовать протянуть временный кабель от D52 к светодиоду. Я попробую // Я также проверю сам светодиод (просто подайте 5 В) и измерю напряжение, когда уберу мигание и просто включу светодиод. Вернусь позже!, @jblaze

Ну, у вас должен быть доступ к контакту SCK, потому что вы используете его для программирования. Это то, к чему вы подключаете кабель ICSP., @Nick Gammon

Я обновил исходный вопрос: мне нужно переключить выходной контакт на НИЗКИЙ уровень, чтобы светодиод работал (PE4 - светодиод - резистор 1 кОм - 5 В). Когда я кладу кабель между PE4 и GND, светодиод работает. У меня нет светодиода, подключенного к SCK, но я могу подключить его к заголовку ICSP, где у меня есть соединение с выводом SCK. Отличная идея! @НикГаммон, @jblaze

Вы не упомянули какие-либо конденсаторы - ни один из *необходимых* развязывающих конденсаторов на контактах питания, *критические* конденсаторы на кристалле и т. д. Также вы не упомянули, на что похожа ваша схема сброса - вы нажимаете кнопку RESET? вывод HIGH через резистор? **Покажите свою полную схему**, @Majenko

Я упомянул конденсаторы контактов питания в своем первоначальном вопросе. Все они подключены к GND с помощью конденсатора 100 нФ. У кристалла есть внутренние колпачки, а RESET вытягивается на ВЫСОКИЙ уровень с помощью резистора 10K. @Маженко, @jblaze

@jblaze Это не кристалл, это керамический резонатор - совсем другой зверь., @Majenko

@Majenko Хорошо, извини, ты прав. Это взято прямо из эталонного дизайна Arduino2560., @jblaze

@Majenko Я добавил соответствующие схемы к исходному вопросу., @jblaze

@jblaze У тебя есть осциллограф? Вы видите, колеблется ли резонатор на частоте 16 МГц? (Совет: установите щуп на 10x), @Majenko

@Majenko извините, у меня нет осциллографа, @jblaze

@jblaze Тогда вам действительно следует подумать о его приобретении - даже о дешевом древнем аналоге на eBay, который вы можете получить практически бесплатно. Они являются *необходимым* элементом оборудования для диагностики цепи., @Majenko

@Majenko Спасибо за подсказку. Если возникнут проблемы с кристаллическим/керамическим резонатором, смогу ли я запрограммировать Atmega?, @jblaze

@jblaze Вполне вероятно, да - я не могу вспомнить подробности о чипах Atmel, но либо он использует входящий SCK в качестве системных часов, либо переключается на внутренние часы RC 1 МГц, я не помню, что - это позволяет вам установить предохранители независимо от того, что делает остальная часть цепи., @Majenko

«Мне нужно перевести выходной контакт в состояние LOW, чтобы светодиод заработал», — понятно. Но не мигает? Это не будет с вашим измененным скетчем., @Nick Gammon

@NickGammon Я хочу, чтобы он включался только для первого выстрела., @jblaze

Я теряю след от твоей проблемы. Судя по тому, как вы его подключили, насколько я могу судить, вы *ожидаете*, что он включится, если вы напишете на него цифровым сигналом LOW. Сначала вы сказали, что он не мигает, а затем вы сказали: «Мне нужно перевести выходной контакт в НИЗКИЙ уровень, чтобы светодиод заработал», — так что он работает, как и ожидалось. Чего именно вы ожидаете?, @Nick Gammon


1 ответ


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

0

Вы говорите, что светодиод загорается, если вы напишете ему LOW.

Мне нужно перевести выходной контакт в состояние LOW, чтобы светодиод заработал

Это именно то, что вы ожидаете.

Проводка светодиодов

Поскольку другой конец светодиода подключен к +5 В, вам нужно подать на контакт низкий уровень, чтобы на светодиоде была разница напряжений и чтобы он загорелся.


Я дважды проверил Atmega, и это ATmega2560V, рассчитанный на 8 МГц. Есть ли шанс исправить это с существующей печатной платой? Изменить предохранители, чтобы использовать внутренние часы?

Да, я предлагаю вам это сделать.

Посмотрите на Калькулятор предохранителей Engbedded Atmel AVR®, чтобы узнать, на что их установить. Я предлагаю внутренний генератор 8 МГц.

,

Да, я должен потянуть его НИЗКО, но ничего не происходит., @jblaze

Ну, это не должно занять много времени, чтобы изменить скетч, чтобы он ссылался на контакт 52 (SCK), загрузить его, подключить светодиод к контакту SCK и протестировать., @Nick Gammon

К сожалению, это не работает :-(, @jblaze

Пожалуйста, измерьте контакт мультиметром. Загрузите свой предыдущий скетч "blink". Посмотрите, меняет ли контакт напряжение., @Nick Gammon

Штырь установлен на НИЗКИЙ уровень и измерен относительно GND, сопротивление бесконечно. Когда я устанавливаю вывод на высокий уровень, напряжение колеблется в пределах 5-8 мВ., @jblaze

Можешь выложить фото, где ты измеряешь эту вывод? Я не могу поверить, что вы можете загрузить новый код, но контакт SCK не может вести себя как обычный вывод., @Nick Gammon

Вот он: [measure1](https://www.dropbox.com/s/mttin6g10dmr9eu/Foto%2014.07.15%2007%2010%2053.jpg?dl=0) и [measure2](https://www .dropbox.com/s/5bnd4wv896pfi3m/Foto%2014.07.15%2007%2011%2027.jpg?dl=0) — я отключил SCK и 5V и измерил между обоими контактами, @jblaze

Обычно напряжения измеряются относительно GND. Итак, я ожидаю, что вы запустите скетч и, пока на плату подается питание, измерьте расстояние между контактом SCK и плоскостью GND., @Nick Gammon

Хорошо, позвольте мне описать подробно: сначала я установил SCK на HIGH и измерил относительно GND: 5-8 мВ. После этого установите SCK на LOW и измерьте по отношению к 5V: 0V., @jblaze

Я дважды проверил Atmega, и это ATmega2560V, рассчитанный на 8 МГц. Есть ли шанс исправить это с существующей печатной платой? Изменить предохранители, чтобы использовать внутренние часы?, @jblaze

Смотрите измененный ответ., @Nick Gammon

Хорошо спасибо. Подходят ли эти предохранители? "-U lfuse:w:0xc2:m -U hfuse:w:0x99:m -U efuse:w:0xff:m", @jblaze

это работает!! Спасибо всем участникам!, @jblaze