Сегодня пробовал другие прошить, фиг вам называется.
два с большим током 16F84А -04I/P , сразу выкинул, я их сжег еще в начале .
два других 16F84А -04/P один считывается не пишется, другой не считывается не пишется ток на БП 0.01А
по ходу им нужен PICKIT2/
Тот единственный который шьется ток на БП 0.01А, Понипрог ругается "ошибка-24", но я ставлю "игнор" и зашиваю. и он выдает долгожданное.
На марсоходе смотрел в первую очередь, но там речь о синхронном сбросе. В упор не вижу синхронного счёта.
А вот про куски у квартуса можно поподробнее? Чего ему подсунуть?
Всем привет. Встала задача обрабатывать нажатия кнопки особым образом. При вкл МК светодиод просто горит. Нажимаем и отпускаем кнопку, диод начинает мигать. Еще раз нажимаем и отпускам - горит ровно. И так далее.
Чет запутался. от код:
Спойлерwhile(1)
{
while(state)
{
button_state = GPIO_ReadInputPin(GPIOA, GPIO_PIN_1);
if(!button_state)
{
state = !state;
}
while(delay--)
{
nop();
}
delay = 10000;
GPIO_WriteReverse(GPIOB, GPIO_PIN_5);
}
Во первых вы должны (либо в голове, либо на бумаге) нарисовать схему происходящего.
Дальше решится когда выполняется действие - при нажатии кнопки или при ее отпускании.
А потом уже перейти к самому процессу написания программы.
Например мы решаем что действие будет выполнятся при отпускании. Тогда настраиваем выполнение прерывания "кнопки" при таком фронте сигнала когда у нас кнопка отпускается.
За ранее мы должны определить некую глобальную переменную например "mode", которая будет принимать значение от 0 до 255
(unsigned char). И мы будем знать что 0 - это первое действие, 1 - второе, 2 - третье, 3 - 4 действие.
В обработке нажатия кнопки пишем простой код.
mode++;
if (mode>3) {mode=0;}
мы инкреминтируем mode.
И сбрасываем его в ноль если значение больше 3.
Таким образом значение mode будет 0, 1, 2, 3.
Теперь уже в основном цикле программы то есть в "main" пишем наш код который управляет светодиодом.
А точнее мы пишем все 4 сценария и в зависимости от значения переменной mode выполняем нужный сценарий.
Если не хотим использовать прерывание, тогда можем в самой функции main сделать блок который обрабатывает нажатие кнопки и меняет значение переменной mode или лучше написать функции обработчик кнопки и функцию просто добавить в main.
И еще один совет - каждое вложение надо сдвигать на пару символов в право, чтоб программа была читабельнее.
Остальное не комментирую, ибо защита от дребезга формируется просто интервалом опроса (прерывание от кнопки вообще не требуется), а нажатие-отжатие иным способом, нежели описано в цитате.
Алгоритм должен оставлять свободными почти все ресурсы ресурсы контроллера.
То есть при добавлении нового функционала он должен продолжать работать как будто он остался единственным.
Для этого берут какой нибудь захудалый таймер и делают его СИСТЕМНЫМ. То есть организуют на нем системный тик, который сводится к некоему периоду входа в прерывания по этому таймеру, где и организуют опрос кнопок, мигания светодиодами и всякую прочую медленную хрень.
Интервал опроса кнопок должен быть БОЛЬШЕ, чем их дребезг. Обычно хватает 20...30 мс.
Одновременно в этом же прерывании организуют программный счетчик времени нажатия (или отпускания). По каждому событию (нажатие или отпускание) счетчик сбрасывают и затыкают его при некоем таймауте (когда время слишком велико, чтобы он не сбросился при переполнении).
Сами события фиксируют в прерывании по системному таймеру следующим образом:
//после опроса button =1 - нажатая кнопка, button = 0 - отпущенная
if (button) {statButton = ((statButton<<1) + 1) & 0x3;} else {statButton = (statButton<<1) & 0x3;}
switch (statButton) {
case 1:
if (timerButton> N) { исполнение кода при нажатой кнопке после времени N}
timerButton = 0;
case 2:
if (timerButton> N) { исполнение кода при отпущенной кнопке после времени N}
timerButton = 0;
default:
if (timerButton<TIMEOUT) {timerButton++;}
}
Это просто пример, в кейсах можно делать все что заблагорассудится и не обязательно по таймеру.
statButton - это всего два разряда. Старший - это прежнее положение кнопки, а младший - текущее.
Ветка default может быть разделена на 0 - удерживается отпущенной и 3 - удерживается нажатой.
Здравствуйте, я новичок в программировании микроконтроллеров, пока только все изучаю и пробую на практике. Уже собрал несколько простых устройств и сам полностью написал программу.
Есть идея собрать самому устройство "POV часы" ("Часы пропеллер") вообщем примерно как тут "https://www.youtube.com/watch?v=Z6e4S2ArEJU". Хотелось бы взять микроконтроллер AVR.
Вот такие вопросы:
1. Как узнать, хотя бы примерно, какую надо выбрать тактовую частоту микроконтроллера для своего проекта?
2. И чем плохо выбирать максимальную тактовую частоту?
3. И какая тактовая частота нужна для такого проекта?
Ратмир писал(а):Сегодня пробовал другие прошить....
проблема может быть именно в переходнике. надо бы попробовать на настоящем сом порте, я пробовал когда-то с проллификом, похожая байда получалась. потом в большинства программ-шеллов есть движок задержки, рядом с настройками. его можно подвигать. а еще можно поизучать материнку, иногда там есть потайной сом порт, только не выведен на разъем, одни ноги торчат. твой программатор именуется как JDM
Шекспир сказал: Судить меня -дано лишь Богу, другим я укажу дорогу... https://natribu.org/
Я его полностью поддерживаю.
Программирую на Fuse AtmelAVR.
Списываются куча UPS с МК на плате управления. Образуется ~
40шт - 72F324J6T5 TQFP44
15шт - 72F63BK4M1 SO34
На что они годны? Имеет смысл браться за их изучение?
Обычные 8-битные МК с достаточно скудной периферией и протоколом программирования ISP. Первые имеют на борту по 32 кБ флэш. Для простеньких свистоперделок пойдут. Среда разработки - STMовская STVD, для программирования - STVP. В принципе, при желании можно и поковырять.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего ) MrYuran: Самые ортодоксальные — это PICудеи ) Katz: Не, 51-ники. )
Где что не так?
А ещё у меня что то МК в ресет уходит раз в 200-300 мс. Это вижу по контрольному светодиоду на пине PF4. Может я его перегрел когда ставил? Маловероятно. Такого циклического сброса не происходило на первой макетке с STM32F030F4P6.
Разбираюсь с DMA.
Если я задействую DMA для работы, например с SPI, то я ведь не смогу задействовать его для работы например с внешней памятью? Только переконфигурировав?