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

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

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

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

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

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

Сообщение Chettuser »

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

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

Сообщение hybroid »

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

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

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

Сообщение Chettuser »

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

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

Сообщение hybroid »

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

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

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

Сообщение Chettuser »

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

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

Сообщение hybroid »

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

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

Сообщение 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;
}

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

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

Сообщение 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.

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

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

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

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

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

mode++;
if (mode>3) {mode=0;}



Можно компактнее:

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

mode++;
mode &= 0x03;

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

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

Сообщение 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 раз больше. Вроде норм)
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25125
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

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

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

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

Сообщение kadenca »

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

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

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

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

Сообщение oleg63m »

Ратмир писал(а):Сегодня пробовал другие прошить....

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

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

Сообщение Arachna »

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

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

Сообщение SubDia »

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

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

Сообщение Chettuser »

Всё! Сдаюсь!
Пытаюсь запустить STM32F030R8 от внутреннего HSI:
Спойлер

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

    RCC->CR = 0;
    RCC->CR |= RCC_CR_HSION;
    while((RCC->CR &RCC_CR_HSIRDY)==0){}

    RCC->CR &=~(RCC_CR_PLLON);              // Отключаем PLL
    while((RCC->CR & RCC_CR_PLLRDY) == 1){}

    RCC->CFGR &=~(RCC_CFGR_SW_PLL | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL);  // Обнуление CFGR
    RCC->CFGR |= RCC_CFGR_SW_PLL;
    RCC->CFGR |= RCC_CFGR_PLLMUL2;         // Умножить частоту PLL_MUL (2...16)

    RCC->CR |= RCC_CR_PLLON;                // Запустить PLL
    while((RCC->CR &RCC_CR_PLLRDY)==0){}    // Ожидание готовности PLL

    RCC->CFGR &= ~(RCC_CFGR_SW);            // Очистить биты SW0 и SW1
    RCC->CFGR |= RCC_CFGR_SW_PLL;           // Тактирование с выхода PLL
    while((RCC->CFGR & RCC_CFGR_SW) != RCC_CFGR_SW_PLL) {}  // Ожидание переключения на PLL

Где что не так?
А ещё у меня что то МК в ресет уходит раз в 200-300 мс. Это вижу по контрольному светодиоду на пине PF4. Может я его перегрел когда ставил? Маловероятно. Такого циклического сброса не происходило на первой макетке с STM32F030F4P6.
Chettuser

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

Сообщение Chettuser »

Мучаю HAL. В нём есть HAL_Delay(ms);
Keil почему то не воспринимает ms больше 300. ЧЯДНТ?
Аватара пользователя
Jeka_M
Встал на лапы
Сообщения: 101
Зарегистрирован: Пт окт 03, 2014 14:50:06

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

Сообщение Jeka_M »

Chettuser писал(а):Keil почему то не воспринимает ms больше 300

Прям так и пишет: "Я не воспринимаю ms больше 300"?
Chettuser

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

Сообщение Chettuser »

Разбираюсь с DMA.
Если я задействую DMA для работы, например с SPI, то я ведь не смогу задействовать его для работы например с внешней памятью? Только переконфигурировав?
Ответить

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