Перейти к содержанию

Вопросы от начинающих по МК


Рекомендуемые сообщения

Вот уже третий день бьюсь как подружить: программу прошивальщик, Win10 x64 и USBasp.

Ни одна из программ (а именно PonyProg, Khazama AVR Programmer, UniProf) не видят USBasp и МК.

А arduino IDE прекрасно шьёт мне Attiny13. Код я пишу в AtmelStudio 7 вставляю в Arduino IDE и прошиваю. Но фьюзы так мне не прошить(. Уже и виртуальную машину с ХР поставил не видит и всё. Может есть какой плагин для AtmelStudio 7 для прошивки МК? Я нашёл, но он для ардуино.

 

 

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов
  • Создана
  • Последний ответ

Топ авторов темы

@serega374 не в курсе, как на счет Win10 x64, но для USBasp есть еще AVRDUDE_PROG 3.3 и SinaProg2.1.1. Попробуй.

 

Мне необходимо вызывать разные функции с разной периодичностью: скажем, func10() мне надо вызывать каждые 10 мсек, func1000() мне надо вызывать каждую 1 сек, а func10000() мне надо вызывать каждые 10 сек.

Я завел таймер, он вызывает обработчик каждую 1мсек. В ней делаю так:

ISR(TIMER0_OVF_vect){//Функция вызывается каждую 1 мс

	static unsigned int count_to_1ms=0;		//Счетчик для прерывания
	count_to_1ms++;
	
	//10000мс
	if (0==count_to_1ms%10000)
	{	// Отсчитываем прерывание 10000 раз по 1мс, т.е. 10000мс (10 сек)
		count_to_1ms=0;	// В самом долгом периоде сбрасываем счётчик

		// тут пишем код, который выполняется раз в 10 секунд
		func10000();
	}

	//1000мс
	if (0==count_to_1ms%1000)
	{	// Отсчитываем прерывание 1000 раз по 1мс, т.е. 1000мс (1 сек)

		// тут пишем код, который выполняется раз в 1 секунду
		func1000();
	}

	//10мс
	if (0==count_to_1ms%10)
	{	// Отсчитываем прерывание 10 раз по 1мс, т.е. 10мс

		// тут пишем код, который выполняется раз в 10 миллисекунд
		func10();
	}
}

Это нормально, или есть что-то поэлегантнее? :)

Насколько трудоемка для МК операция "%"? Может лучше завести отдельные счетчики для каждого периода и просто сравнивать их с константой?

 

Изменено пользователем Lerik-Co
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Те программы и не знают про USBASP поэтому не видят. USBASP хорошо работает с AVRDUDE, который, вот же совпадение, используетсмя в составе Arduino IDE. Т.е. у тебя всё есть и рабочее, осталось только найти приличную оболочку(ох это и хлопотное дело! и хмасса в сети с одним названием непонятной нумерацией версий и совершенно разным функционалом) для консольной утилиты AVRDUDE и воспользоваться, либо изучить опции утилиты и забить всё в CMD-файл для прошивки одним нажатием индивидуально для каждого проекта.

 

Цитата

Насколько трудоемка для МК операция "%"

Да, очень ресурсоёмка. лучше всего завести каскадные счетчики, так тебе надо будет для каждого отдельного заводить longint, а в каскадном варианте можно обойтись легковесными однобайтовыми.

Первый счетчик будет считать до 10, второй счетчик будет считать до 100 переполнений первого, третий - до 100 переполнений второго. На каждый по байту и сильно упрощённую арифметику в коде.

А в вашем варианте, кроме всего прочего каждые 65536 миллисекунд будет происходить сбой и более короткие циклы если не обнулять на 10000.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Проблема с win10 x64 решена. Ставим VirtualBox, в него XP x86. Включаем в настройках VirtualBox порт usb, подключаем USBasp и всё в тех же настройках (чего я ранее не сделал) добавляем USBasp в список USB устройств. Запускаем виртуальную ОС и вуаля всё работает через SinaProg.

Отправлено с моего K4000 через Tapatalk

Ссылка на комментарий
Поделиться на другие сайты

К AVRDUDE ставишь графическую оболочку AVR Burn-O-Mat (только нужно настроить) и все работает. На этом же сайте есть настройка для Ubuntu, но для Win в принципе не сложно разобраться.

Ссылка на комментарий
Поделиться на другие сайты

Подскажите по работе прерывания по захвату, допустим на вход захвата поступает прямоугольный сигнал, захват по спад. фронту, так вот как только наступает спад . фронт срабатывает прерывание, а когда оно сработает след. раз? при восходящем фронте или уже при следующем спадающем фронте?

Ссылка на комментарий
Поделиться на другие сайты

@GalatZ, если внешнее прерывание настроено на срабатывание по заднему (спадающему) фронту, то и срабатывание будет происходить только по заднему фронту, а по переднему не будет. Другое дело, что ты можешь настроить прерывание и по другому, например только по переднему или по обеим (по изменению). Только учти, что не все настройки подходят для того, чтобы вывести МК из режима sleep (если ты его используешь). Более того, тебе сейчас расскажут, что ты, скорее всего, вообще зря используешь такие прерывания. :)

Кстати, с какой целью ты их используешь?

 

14 часа назад, Alexeyslav сказал:

лучше всего завести каскадные счетчики, так тебе надо будет для каждого отдельного заводить longint, а в каскадном варианте можно обойтись легковесными однобайтовыми.

Эмм.. почему long int? До 10'000 мне и обыный (short) int досчитает. Нет?

 

14 часа назад, Alexeyslav сказал:

А в вашем варианте, кроме всего прочего каждые 65536 миллисекунд будет происходить сбой и более короткие циклы если не обнулять на 10000.

Так я ж его (счетчик) как раз и обнуляю на 10'000. Почему должны быть сбои?

 

14 часа назад, Alexeyslav сказал:

Первый счетчик будет считать до 10, второй счетчик будет считать до 100 переполнений первого, третий - до 100 переполнений второго. На каждый по байту и сильно упрощённую арифметику в коде.

На самом деле количество вариантов у меня несколько больше. Если быть точным, то это 10 секунд, 5 секунд, 2 секунды, 1 секунда, 500мс, 100мс, 50мс, 10мс. И не факт, что завтра моя буйная фантазия не захочет ввести еще какой-нить таймер, скажем,  на 3 секунды. И с каскадными счетчиками тут как-то становится сложновато, ибо периоды не кратные друг другу...

Изменено пользователем Lerik-Co
Ссылка на комментарий
Поделиться на другие сайты

@Lerik-Co Мне надо считать длительность периода, т,е, длительность импульса и паузы перед следующим, вот и заступорился, как оно работает. Импульсы идут инвертированные поэтому и прерывание по спадающему фронту.

Получается все прерывания будут происходить только по итзменению 1-0 и на восходящие фронты реакции не будет.

Режим sleep не используется.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, GalatZ сказал:

все прерывания будут происходить только по итзменению 1-0 и на восходящие фронты реакции не будет

Так и должно быть при правильной настройке спецрегистров.

Изменено пользователем koms45

Так ку или не ку ?!

Ссылка на комментарий
Поделиться на другие сайты

@koms45 Спасибо.

 

Правильно ли я думаю, допустим мк работает на 8 МГц, предделитель таймера 64 то есть за секунду 125000 тиков, если длительность периода импульса, поступающего на вход захвата 9 мс, то тогда этому периоду будет соответствовать 0.009 сек * 125000=1125 тиков (захватили по спад. фронту, тикает таймер, по след спад. фронту стоп захвата и в итоге колич тиков за период импульса известно)

Прав я или что то не так?

@koms45 Спасибо.

 

Правильно ли я думаю, допустим мк работает на 8 МГц, предделитель таймера 64 то есть за секунду 125000 тиков, если длительность периода импульса, поступающего на вход захвата 9 мс, то тогда этому периоду будет соответствовать 0.009 сек * 125000=1125 тиков (захватили по спад. фронту, тикает таймер, по след спад. фронту стоп захвата и в итоге колич тиков за период импульса известно)

Прав я или что то не так?

Ссылка на комментарий
Поделиться на другие сайты

@Lerik-Co если нужно много функций с отложенным таймингом очень хорошо подойдёт диспетчер (псевдо RTOS), например DI HALT'овский

диспетчер

Делаешь один тик 1мс (я сделал 2мс, так вроде точнее отсчёт, но, может, я ошибаюсь), и очень просто делать нужные задержки, без привлечения аппаратных таймеров - до 65с.

На днях поднял его на ATtiny2313A.

Там в добавление к DI HALT'овскому коду прописал в дефайнах хидера для тини2313 регистр SREG, и в определениях некоторых функций добавил static, чтобы успокоить компилятор. 

 

Изменено пользователем MillyVolt2
Ссылка на комментарий
Поделиться на другие сайты

Подскажите, слева прошивка, которую я заливал в МК, справа прошивка, которую я после прошивки слил с МК.

В принципе видно, что прошивка одинаковая, но записана в каких-то разных форматах. Есть типовые инструменты, позволяющие перевести один формат в другой?

Безымянный.png

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, Геннадий сказал:

PonyProg например.

Именно PonyProg не видит мой USBasp. А в SinaProg2.1.1, AVRDUDEprog3.3,  Khazama AVR Programmer в окне сохранения файла можно выбрать только Тип "*.hex". И никаких бинов. :(

Ссылка на комментарий
Поделиться на другие сайты

12 часа назад, Геннадий сказал:

Файлы у Вас уже есть. Откройте их (hex) и сохраните как bin.

Спасибо, действительно в PonyProg есть возможность отрыть/сохранить файлы в разных форматах. Причем если открыть оба hex и сохранить оба снова в hex, то оба будут приведены к одинаковому формату.

А содержимое bin'ов - оно не наглядное, глазами сравнивать неудобно. :) А так - да, тоже становятся идентичными.

Изменено пользователем Lerik-Co
Ссылка на комментарий
Поделиться на другие сайты

@Геннадий, спасибо.

 

Объясние, плз, на ATtiny13 чем отличаются:

* режим ШИМ (WGM01=0, WGM00=1)

*режиме коррекции фазы ШИМ (WGM01=1, WGM00=1)

Хочу плавно зажигать лампу от нуля до 50% яркости. Частота шима нужна около 100Гц.

Какой вариант использовать?

Изменено пользователем Lerik-Co
Ссылка на комментарий
Поделиться на другие сайты

А зачем глазами сравнивать? для этого есть полно утилит, и есть например встроенная команда FC которая умеет сравнивать файлы в BIN. Раньше так прошивки БИОСов сравнивал.

В общем случае нельзя сказать что BIN хуже или лучше HEX-а. Просто BIN это как слепок области памяти, без каких-либо атрибутов, а в HEX могут быть включены только необходимые регионы памяти, типа патчей.

Прошивальщики для PIC используют эту особенность чтобы в один файл скинуть прошивку FLASH, EEPROM и слова конфигурации. Но стандарты по распределению "регионов" не прижились и теперь это вроде исключения.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

21 час назад, Alexeyslav сказал:

А зачем глазами сравнивать?

Просто для наглядности. Про cm_IntCompareFilesByContent в TC , FC и WinMerge знаю. :)

 

В 07.02.2017 в 09:50, Lerik-Co сказал:

Какой вариант использовать?

Решил использовать "режим ШИМ" (WGM01=0, WGM00=1). Хз почему.

 

Следующий вопрос: Для программного изменения предделителя тактового сигнала используется регистр CLKPR. Причем сначала его надо выставить в CLKPR=0x80, а потом изменить в нужное значение, в моем случае это CLKPR=0x00. Вдобавок эти две операции должны обязательно следовать друг за другом, поэтому этот участок кода даже исключают из оптимизации.

Так?

В имеющемся у меня исходние на CodeWizardAVR это было оформлено так:

#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

Как мне эти две строчки исключить из оптимизации в С/AtmelStudio ? И надо ли это делать вообще?

Изменено пользователем Lerik-Co
Ссылка на комментарий
Поделиться на другие сайты

7 часов назад, Lerik-Co сказал:

Как мне эти две строчки исключить из оптимизации в С/AtmelStudio ?

#include <util/atomic.h>
  
ATOMIC_BLOCK(ATOMIC_RESTORE_STATE){
	CLKPR=0x80;
	CLKPR=0x00;
}

 

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...