#include <avr/io.h>
#include <util/delay.h>
int main (void) {
//Set PORTB to all outputs
DDRB = 0xFF;
//turns B4 LOW
PORTB &= ~(1 << 4);
//PAUSE 5 seconds
_delay_ms(5000);
//turns B4 HIGH
PORTB |= (1 << 4);
}
Далее, отсоединяю микроконтроллер от программатора, подключаю питание, поставив параллельно электролитический (47 uF) и керамический (104) конденсаторы, далее, подключаю к PB4 резистор 220 Ом, и последовательно к резистору, анод светодиода, катод подключаю к минусу питания. В итоге, светодиод не мигает Подключаю его к программатору, и он уже определяет сигнатуру микроконтроллера как 0x000000.
Получается микроконтроллер сгорел? Если да, то почему?
Z_h_e, пояснение понял (нет цикла), однако, это значит что на B4 будет тогда Vcc, или тоже нет? Других вариантов даже представить не могу...
Тактовую частоту пишу в main.h: #define F_CPU 9600000UL.
Еще не правильно, что проверял без RESET'а, но вроде тоже не должно поломать микроконтроллер. Хотя, за много ошибок уже надо себе сделать строгий выговор...
Когда прошивали код, записывали фьюз-биты? А перед тем как записать - считывали? Знаете какую точно конфигурацию бит записали? Приведите тут. Могли отключить RESET, внутрисхемное программирование, переключить источник тактирования на внешний. Все это может быть причиной невозможности дальнейшего программирования.
Новый т13 по умолчанию работает на частоте 9.6 / 8МГц, а то, что вы в программе прописали F_CPU, без выставления фьюз только рассчитывает задержки для функции delay, подразумевая, что тактирование действительно идет на такой частоте.
Ну про отсутствие цикла в программе вы в курсе...
И еще. При использовании внутрисхемного программирования на контроллер нужно подавать питание ШТАТНЫМ способом. Контакт VCC в интерфейсе внутрисхемного программирования служит для согласования уровней МК и программатора, а не для питания МК. Ну и ресет конечно надо подтянуть к +питания, если этого не сделано ранее.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Engineer_Keen писал(а):При использовании внутрисхемного программирования на контроллер нужно подавать питание ШТАТНЫМ способом. Контакт VCC в интерфейсе внутрисхемного программирования служит для согласования уровней МК и программатора, а не для питания МК.
Не считаю верным подавать одновременно два питания и нормально у меня всегда программировалось с питанием всей схемы от программатора.
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
По мне, лучше наоборот питать программатор от программируемого устройства. Например, мой программатор потребляет 50 мА и работает в диапазоне от3 до 5V, а плата в которой стоит контроллер 200 мА.
Если у программатора есть переключатель "внешнее/внутреннее питание", то никто 2 питания одновременно подавать и не будет. У меня в программаторе например, пока питание целевой платы не включишь программатор ругаться будет, что питания контроллера нет (AVRISP II). В некоторых схемах USBASP насколько я знаю, стоит джампер на питание рядом с разъемом программирования.
Последний раз редактировалось Engineer_Keen Пн ноя 14, 2016 10:34:30, всего редактировалось 1 раз.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
#include <avr/io.h>
#define F_CPU 9600000UL
#include <avr/delay.h>
int main(void)
{
DDRB = (1 << PB0);
PORTB = (1 << PB1);
while(1)
if (!(PINB & (1 << PB1))) //если нажата кнопка
{
_delay_ms(50); //задержка, для пропуска дребезка контактов кнопки
if (!(PINB & (1 << PB1))) //если кнопка всё ещё нажата
PORTB ^= (1 << PB0); //изменить значение на PB0 противоположным
while(!(PINB & (1 << PB1))); //ждать, пока не будет отжата кнопка
}
return 0;
}
Он скомпилировался и прошился. Не знаю, чем он, по сравнению с колом выше, так отличается пробовал использовать avr библиотеку delay и добавить return 0, но ко все равно записываться не хотел.
В итоге, снова сделал hex и второго кода, и он опять записался. Сделал запрос сигнатуры, дабы убедиться что микроконтроллер "жив", и проверять его работу на втором коде, получил 0x000000.
В итоге, не знаю, толи руки нужно "выпрямлять", толи микроконтроллеры попались такие.
Engineer_Keen писал(а): Контакт VCC в интерфейсе внутрисхемного программирования служит для согласования уровней МК и программатора, а не для питания МК.
Поясните тогда что Вы имели ввиду этой фразой.
Добавлено after 1 minute 27 seconds:
divisоr писал(а):Компилируется, а вот прошить этим hex не получается.
Наверное программатор на что-то ругается?
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Как это прошить конкретный hex не получается? От самого HEX файла это зависеть не может (ну разве что размер не влез, если он разный получается, но для такого кода это врядли). Сигнатура либо читается всегда, либо не читается никак (как и возможность прошить любой hex-файл). Если сигнатура не читается, или читается с ошибками, возможно дело в скорости программатора. Нужно попробовать поставить минимальную, вообще она должна быть не выше 1/4 тактовой, т.е. для новой тиньки не более 300кГц. Когда будет 100% читаться сигнатура, тогда можно уже и с кодом разбираться.
Z_h_e, Atmel вроде как так задумали, но потом появилась куча других программаторов, где питание берется от самого программатора.
Последний раз редактировалось Engineer_Keen Пн ноя 14, 2016 10:51:58, всего редактировалось 3 раза.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Может попроще сделать - прошей какую-нибудь чужую тестовую прошивку, заведомо проверенную.
Тем самым отделим неисправность кристалла/программатроа от ошибок в прожке.
Да на заведомо проверенных железе и прожке-оболочке самого программатора.
СОМ - порт на компе имеется (интегрированный у материнку)?
и какая "форточек" установлена (ХР, семерка 32 или 64 разрядная)?