Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 8884
Зарегистрирован: Чт янв 20, 2011 19:54:19
Откуда: Уфа

Сообщение Ратмир »

Один PIC прошил :) мать ее за ногу :kill: прошил 8)
с индексом 16F84A 20P через адаптер USB-COM и говеный кит NV9215
"Мы так жить будем, что наши внуки нам завидовать будут" В.С. Черномырдин
Изображение
Реклама
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Сообщение alex_ »

Прошил, всё таки, ну это неплохой результат, а в чём дело то было?
Кстати где то видел может и ошибаюсь, что если в программаторе поставить тип камня без буквы А а камень с А то вроде тоже шить не будет. Я шью обычным экстрапиком и IC-PROG'ом, не идеал но проблем с ним не было.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 8884
Зарегистрирован: Чт янв 20, 2011 19:54:19
Откуда: Уфа

Сообщение Ратмир »

По ходу тот PIC который мучил был дохлый, завтра попробую ещё один прошить, если прошьется, напишу что и как.
Единственно не задача ,вставил прошитый PIC. В устройство, все показывает, считает. Но каждые 2 сек. МК презагружается. Может фьюзы коряво прошли. Х.З.
"Мы так жить будем, что наши внуки нам завидовать будут" В.С. Черномырдин
Изображение
Chettuser

Сообщение Chettuser »

А я 18F2550 для PICkit 2 прошивал через PICPgm. С остальными не получалось ни в какую.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 8884
Зарегистрирован: Чт янв 20, 2011 19:54:19
Откуда: Уфа

Сообщение Ратмир »

Сегодня пробовал другие прошить, фиг вам называется.
два с большим током 16F84А -04I/P , сразу выкинул, я их сжег еще в начале :wink: .
два других 16F84А -04/P один считывается не пишется, другой не считывается не пишется :) ток на БП 0.01А
по ходу им нужен PICKIT2/
Тот единственный который шьется ток на БП 0.01А, Понипрог ругается "ошибка-24", но я ставлю "игнор" и зашиваю. и он выдает долгожданное.
Вложения
success.JPG
(185.95 КБ) 480 скачиваний
"Мы так жить будем, что наши внуки нам завидовать будут" В.С. Черномырдин
Изображение
Реклама
Chettuser

Сообщение Chettuser »

Пните кусками verilog'а для синхронных и асинхронных счётчиков, плиз. Кому не жалко. Поизучать хочу. Спасибо.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Сообщение hybroid »

Если используется Altera, то Quartus II может выдать куски.

Ну и гугл богат...
http://marsohod.org/verilog/158-verilogpictcnt
Chettuser

Сообщение Chettuser »

На марсоходе смотрел в первую очередь, но там речь о синхронном сбросе. В упор не вижу синхронного счёта. :oops: :dont_know:
А вот про куски у квартуса можно поподробнее? Чего ему подсунуть?
Друг Кота
Аватара пользователя
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Сообщение hybroid »

Два первых примера на марсоходе - это что?
Во втором - самый наасинхроннейший сброс.

А про квартус: у него есть примеры кода.
http://quartushelp.altera.com/14.1/merg ... mplate.htm
Chettuser

Сообщение Chettuser »

Мне не нужен сброс, мне нужен счёт - синхронный и асинхронный.
Друг Кота
Аватара пользователя
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Сообщение hybroid »

Мучитель микросхем
Аватара пользователя
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Сообщение FireProoF »

Всем привет. Встала задача обрабатывать нажатия кнопки особым образом. При вкл МК светодиод просто горит. Нажимаем и отпускаем кнопку, диод начинает мигать. Еще раз нажимаем и отпускам - горит ровно. И так далее.
Чет запутался. от код:
Спойлер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);
}

GPIO_WriteLow(GPIOB, GPIO_PIN_5);
button_state = GPIO_ReadInputPin(GPIOA, GPIO_PIN_1);
if(!button_state)
{
state = !state;
}

}
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

Сообщение amd9800 »

Я думаю что тут нет ничего особенно в обработке.

Во первых вы должны (либо в голове, либо на бумаге) нарисовать схему происходящего.
Дальше решится когда выполняется действие - при нажатии кнопки или при ее отпускании.

А потом уже перейти к самому процессу написания программы.

Например мы решаем что действие будет выполнятся при отпускании. Тогда настраиваем выполнение прерывания "кнопки" при таком фронте сигнала когда у нас кнопка отпускается.

За ранее мы должны определить некую глобальную переменную например "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.

И еще один совет - каждое вложение надо сдвигать на пару символов в право, чтоб программа была читабельнее.
Друг Кота
Аватара пользователя
Сообщения: 26007
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

amd9800 писал(а):
В обработке нажатия кнопки пишем простой код.

Код: Выделить всё

mode++;
if (mode>3) {mode=0;}
Можно компактнее:

Код: Выделить всё

mode++;
mode &= 0x03;
Остальное не комментирую, ибо защита от дребезга формируется просто интервалом опроса (прерывание от кнопки вообще не требуется), а нажатие-отжатие иным способом, нежели описано в цитате.
Мучитель микросхем
Аватара пользователя
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Сообщение FireProoF »

Ну я так и делаю:
Спойлер

Код: Выделить всё

while(1)
    {
      if(!GPIO_ReadInputPin(GPIOA, GPIO_PIN_1) & button_state)//if button is pressed
      {
        while(pause--)       
        {
          nop();
        }
        pause = 1000;
        
        if(!GPIO_ReadInputPin(GPIOA, GPIO_PIN_1) & button_state)
        {
          while(GPIO_ReadInputPin(GPIOA, GPIO_PIN_1));
          while(pause--)       
          {
            nop();
          }
          pause = 1000;
          
          state = !state;
          button_state = 0;
        }
      }
      
      if(state)
      {
         while(delay--)       
         {
           nop();
         }
         delay = 10000;
         GPIO_WriteReverse(GPIOB, GPIO_PIN_5);
         while(delay--)       
         {
           nop();
         }
         delay = 10000;
         GPIO_WriteReverse(GPIOB, GPIO_PIN_5);
         
         button_state = 1;
      }
      
      else      
      {
        GPIO_WriteLow(GPIOB, GPIO_PIN_5);
        button_state = 1;
      }
  }
Только запустить мигания могу, а выйти из него - нет.
Где-то с раза 20го удается остановить миганаие.
Поставил антидребезг в 5 раз больше. Вроде норм)
Друг Кота
Аватара пользователя
Сообщения: 26007
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Алгоритм должен оставлять свободными почти все ресурсы ресурсы контроллера.
То есть при добавлении нового функционала он должен продолжать работать как будто он остался единственным.
Для этого берут какой нибудь захудалый таймер и делают его СИСТЕМНЫМ. То есть организуют на нем системный тик, который сводится к некоему периоду входа в прерывания по этому таймеру, где и организуют опрос кнопок, мигания светодиодами и всякую прочую медленную хрень.
Интервал опроса кнопок должен быть БОЛЬШЕ, чем их дребезг. Обычно хватает 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 - удерживается нажатой.
Родился
Аватара пользователя
Сообщения: 8
Зарегистрирован: Пн май 18, 2015 17:41:09

Сообщение kadenca »

Здравствуйте, я новичок в программировании микроконтроллеров, пока только все изучаю и пробую на практике. Уже собрал несколько простых устройств и сам полностью написал программу.
Есть идея собрать самому устройство "POV часы" ("Часы пропеллер") вообщем примерно как тут "https://www.youtube.com/watch?v=Z6e4S2ArEJU". Хотелось бы взять микроконтроллер AVR.

Вот такие вопросы:

1. Как узнать, хотя бы примерно, какую надо выбрать тактовую частоту микроконтроллера для своего проекта?
2. И чем плохо выбирать максимальную тактовую частоту?
3. И какая тактовая частота нужна для такого проекта?
Друг Кота
Аватара пользователя
Сообщения: 20132
Зарегистрирован: Чт сен 01, 2011 12:53:27
Откуда: ТьмуТаракания. Почетный житель подмостовья

Сообщение oleg63m »

Ратмир писал(а):Сегодня пробовал другие прошить....
проблема может быть именно в переходнике. надо бы попробовать на настоящем сом порте, я пробовал когда-то с проллификом, похожая байда получалась. потом в большинства программ-шеллов есть движок задержки, рядом с настройками. его можно подвигать. а еще можно поизучать материнку, иногда там есть потайной сом порт, только не выведен на разъем, одни ноги торчат. твой программатор именуется как JDM
Шекспир сказал: Судить меня -дано лишь Богу, другим я укажу дорогу... https://natribu.org/
Я его полностью поддерживаю.
Программирую на Fuse AtmelAVR.
Контактная информация:
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 38
Зарегистрирован: Ср апр 02, 2014 11:14:54
Откуда: Югорск, ХМАО

Сообщение Arachna »

Списываются куча UPS с МК на плате управления. Образуется ~
40шт - 72F324J6T5 TQFP44
15шт - 72F63BK4M1 SO34
На что они годны? Имеет смысл браться за их изучение?
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

Обычные 8-битные МК с достаточно скудной периферией и протоколом программирования ISP. Первые имеют на борту по 32 кБ флэш. Для простеньких свистоперделок пойдут. Среда разработки - STMовская STVD, для программирования - STVP. В принципе, при желании можно и поковырять.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Ответить

Вернуться в «Разные вопросы по МК»