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

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


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

Блин, заблокировалась тини13а после того как распрограммировал фьюз CKDIV8, это вообще реально?

Другие фьюзы не трогал, частота установлена 9,6МГц

Программатор не может прочитать сигнатуру

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

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

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

Уменьшить частоту тактирования.

По пятницам мы с коллегой мучаем старые платы (ненужные или не рабочие). Они либо горят либо взрываются.

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

доброго времени суток. Подскажите пожалуйста, может кто сталкивался.. Иногда, во время работы в Atmel Studio 6 перестает работать отладка. Что через симулятор, что через jtag отладчик, все одно.. Когда отладка работает, то подсвечивается желтым строка, которая собирается быть выполненной, и брейкпоинты работают как положено. А иногда по непонятным причинам, перестает подсвечиваться строка и брейкпоинты не работают даже в 100% местах где код будет идти. Как решить такую проблему?

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

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

Уменьшить частоту тактирования.

А как ее уменьшить, через программу вроде можно фьюзы вслепую менять, только стоит ли это делать?
Или имеете ввиду скорость интерфейса мк с программатором, ее уменьшил в минимум, не помогло.
Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

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

13 часа назад, ARV сказал:

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

А прерывания отключать? В даташите, кажется, есть пример где отключают... А вот про оптимизацию там ни слова.

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

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

Вообще atomic block как раз отключает прерывания, restore state восстанавливает состояние флага пр-й после выполнения атомарного блока atomic block.

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

@MillyVolt2 , ясно, спасибо! Только, наверное, ATOMIC_RESTORESTATE, а не ATOMIC_RESTORE_STATE.

А еще детсадовский вопрос:

Если исходные данные следующие:

unsigned char uchData = 0b00000100;
#define ACT_LEV 0
//Тогда вот такая проверка нормально работает, ибо ACT_LEV=0:
if ((uchData & (1<<PB2)) == ACT_LEV)){/*...*/}

 

А вот если сменить ACT_LEV=1, т.е.

unsigned char uchData = 0b00000100;
#define ACT_LEV 1
//Тогда следующее условие не выполнится никогда
if ((uchData & (1<<PB2)) == ACT_LEV)){/*...*/}
//ибо, как я понял, результатом операции "uchData & (1<<PB2)" будет целый байт "0b00000100"=4, а не бит "1".

Так что ли?

 

Писать условие в виде:

if ((uchData & (1<<PB2)) == (ACT_LEV<<PB2)){/*...*/}

как-то громоздко... А как упростить - не соображу. :(

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

Только что, Lerik-Co сказал:

ATOMIC_RESTORESTATE

Я пишу по памяти с андроида, извините за ошибку.

Только что, Lerik-Co сказал:

Мне надо проверить совпадение второго бита в байте uchData со значением ACT_LEV.

сделать можно разными способами, например, так:

if (!!(uchData & (1<<PB2)) == ACT_LEV)){/*...*/}

Два восклицательных знака творят магию: делают из любого ненулевого числа 1, а ноль оставляют нулём.

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

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

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

10 минут назад, ARV сказал:

Я пишу по памяти с андроида

Респект и уважуха! :)

 

11 минуту назад, ARV сказал:

Два восклицательных знака творят магию

Я в магическом шоке! :D

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

Товарищи, а я правильно понимаю, что на ATtiny13A я могу таймер использовать не только в качестве ШИМ (скажем на PB0), но и в качестве обычного таймера по переполнению? Одновременно?

Т.е. как-то так:

//Сначала настраиваем ШИМ, он будет дрыгать ножкой PB0:
TCCR0A	|=	(1<<COM0A1)	| (0<<COM0A0)		//сброс вывода OC0A в 0 при совпадении с A во время увеличения значения счетчика, установка  вывода OC0A в 1  при совпадении с A во время уменьшения значения счетчика
		| (0<<COM0B1) | (0<<COM0B0)		//вывод OC0B не функционирует
		| (1<<WGM01) | (1<<WGM00);		//Режим ШИМ
TCCR0B	|= (0<<FOC0A) |(0<<FOC0B)			//Ничего принудительно устанавливать не будем
		| (0<<WGM02)				//Не используется в нашем режиме 
		| (1<<CS02) | (0<<CS01) |(1<<CS00);	//делитель N = 1024

OCR0A = 100;   // Значение регистра определяет скважность

//А тут запускаем таймер с той же частотой, что и ШИМ
TIMSK0 = (1 << OCIE0A); // Разрешаем прерывание по совпадению таймера
sei(); // Включаем механизм прерываний

//...

//А этот обработчик будет вызываться таймером
ISR (TIM0_COMPA_vect)
{
	//что-то делаем
}

Так делать можно?

А разную частоту  на ШИМ и на таймер установить нельзя?

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

49 минут назад, Lerik-Co сказал:

Так делать можно?

А как же! Можно.

49 минут назад, Lerik-Co сказал:

А разную частоту  на ШИМ и на таймер установить нельзя?

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

//А этот обработчик будет вызываться таймером
ISR (TIM0_COMPA_vect)
{
		
  //что-то делаем
}

 

Блин, не могу вставить правильный код! Там не хватает перед "что-то делаем" следующего:

static uint8_t cnt = 25;
if(--cnt) return;
cnt = 25;

 

В этом случае "что-то" будет делаться в 25 реже, чем переполняется таймер.

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

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

Господа программисты ! ответьте пожалуйста ! все #define    и    #include   выучить не реально помоему . для начинающего для меня это вообще головоломка. подскажите как определять что когда объявлять, есть может где нибудь список! инфа конкретно по этому моменту

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

Только что, Grampus сказал:

все #define    и    #include   выучить не реально

Вы не можете выучить эти 2 ключевых слова? Или о чем речь?

То, что при помощи  define и include делается, это исключительно ваше дело. Что напишите, то и будет. А учить тут нечего.

Для типового проекта требуется, как правило, подключить несколько "стандартных"  заголовочных файла, не больше 5. Разве это проблема? Ну так можно 1 раз сделать шаблон с этими инклюдами, и потом просто дописывать своё - и запоминать ничего не придется (хотя страшнее тупого программиста только раненый в мошонку слон).

Например, для AVR в 99% случаев достаточно следующих строк:

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <util/delay.h>

Первая строчка должна быть всегда без вариантов.

Вторая - если используются прерывания.

Третья - для хранения констант не в ОЗУ, а во flash.

Четвертая для работы с EEPROM.

Пятая для программных задержек.

Ничего страшного не будет, если все 5 строк будут всегда в наличии. Остальные "инулюды" нужны в особых случаях, пока вы не поймете смысл и назначение вышеперечисленного, вам нет смысла браться за проекты, где эти особые случаи требуются. Соответственно, и спрашивать нет о них смысла, и объяснять тоже.

Рекомендую почитать книги по языку Си.

P.S. всё вышесказанное верно для компилятора avr-gcc, для других инклюды будут другими. Ну и категоричность моих утверждений рассчитана на начинающего, профи прошу не возбуждаться.

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

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

20 минут назад, ARV сказал:

Вы не можете выучить эти 2 ключевых слова? Или о чем речь?

То, что при помощи  define и include делается, это исключительно ваше дело. Что напишите, то и будет. А учить тут нечего.

Для типового проекта требуется, как правило, подключить несколько "стандартных"  заголовочных файла, не больше 5. Разве это проблема? Ну так можно 1 раз сделать шаблон с этими инклюдами, и потом просто дописывать своё - и запоминать ничего не придется (хотя страшнее тупого программиста только раненый в мошонку слон).

Например, для AVR в 99% случаев достаточно следующих строк:

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <util/delay.h>

Первая строчка должна быть всегда без вариантов.

Вторая - если используются прерывания.

Третья - для хранения констант не в ОЗУ, а во flash.

Четвертая для работы с EEPROM.

Пятая для программных задержек.

Ничего страшного не будет, если все 5 строк будут всегда в наличии. Остальные "инулюды" нужны в особых случаях, пока вы не поймете смысл и назначение вышеперечисленного, вам нет смысла браться за проекты, где эти особые случаи требуются. Соответственно, и спрашивать нет о них смысла, и объяснять тоже.

Рекомендую почитать книги по языку Си.

P.S. всё вышесказанное верно для компилятора avr-gcc, для других инклюды будут другими. Ну и категоричность моих утверждений рассчитана на начинающего, профи прошу не возбуждаться.

я понимаю ваше недовольство, но вот момент какой, я начал изучать AVR и функция delay.h не работает. 

в atmelstudio 6.0 при написание выводиться подсказка в поиске есть 3 варианта записи этой функции. ПОЧЕМУ РАБОТЕТ ТОЛЬКО <util/delay.h> а остальные не работают.

Вот как это можно выявить изначально!?

Читаю книгу, выяснил что для выяснения состояния используется регистр SREG 

как его записать в СИ ??? 

28 минут назад, ARV сказал:

Вы не можете выучить эти 2 ключевых слова? Или о чем речь?

То, что при помощи  define и include делается, это исключительно ваше дело. Что напишите, то и будет. А учить тут нечего.

Для типового проекта требуется, как правило, подключить несколько "стандартных"  заголовочных файла, не больше 5. Разве это проблема? Ну так можно 1 раз сделать шаблон с этими инклюдами, и потом просто дописывать своё - и запоминать ничего не придется (хотя страшнее тупого программиста только раненый в мошонку слон).

Например, для AVR в 99% случаев достаточно следующих строк:

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <util/delay.h>

Первая строчка должна быть всегда без вариантов.

Вторая - если используются прерывания.

Третья - для хранения констант не в ОЗУ, а во flash.

Четвертая для работы с EEPROM.

Пятая для программных задержек.

Ничего страшного не будет, если все 5 строк будут всегда в наличии. Остальные "инулюды" нужны в особых случаях, пока вы не поймете смысл и назначение вышеперечисленного, вам нет смысла браться за проекты, где эти особые случаи требуются. Соответственно, и спрашивать нет о них смысла, и объяснять тоже.

Рекомендую почитать книги по языку Си.

P.S. всё вышесказанное верно для компилятора avr-gcc, для других инклюды будут другими. Ну и категоричность моих утверждений рассчитана на начинающего, профи прошу не возбуждаться.

если есть книги толковые скиньте пожалуйста, буду признателен!

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

Подскажите,  инициализация таймера у меня производится только один раз перед главным циклом.

Обязательно ли при инициализации таймера выполнять такие строки?

TCNT0=0x00;    //Обнуляем счетный регистр
OCR0A=0x00;    //Обнуляем регистр сравнения A
OCR0B=0x00;    //Обнуляем регистр сравнения B

А то у меня место в памяти заканчивается, а эти команды отъедают  0,6% памяти, что не мало...

 

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

1 минуту назад, Lerik-Co сказал:

Обязательно ли при инициализации таймера выполнять такие строки?

Ну вообще, Вам должно быть виднее, обнулять эти регистры или нет. Программа то Ваша.
 

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

@Alex , я ж написал "условия задачи"! :)

При старте/рестарте МК (по питанию, ресету или по WDT) эти регистры по дефолту уже обнулены или их надо обязательно обнулять самостоятельно?

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

 

@Grampus , delay.h это не функция, а файл. Рекомендую как следует изучить книгу классиков Язык Си

Чтобы понять, что к чему у компилятора и библиотек, следует изучать документацию компилятора и библиотеки libc, если мы имеем ввиду AVR и компилятор avr-gcc (именно он встроен в АтмелСтудию), то читать документацию на avr-libc. Это все есть и на русском, даже я грешен - писал свой вариант описания, но сейчас из-за всяких уродов мой сайт недоступен и дать ссылку не могу.

44 минуты назад, Lerik-Co сказал:

При старте/рестарте МК (по питанию, ресету или по WDT) эти регистры по дефолту уже обнулены или их надо обязательно обнулять самостоятельно?

Слабо даташит почитать? Эти регистры обнуляются при сбросе аппаратно.

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

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

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

Слабо даташит почитать? Эти регистры обнуляются при сбросе аппаратно.
Да, даташит прочитать слабо, хотя я и пытаюсь. :) Никто на русский не переводил?
Хотя табличку с битами по регистру видел, и начальные значения там находил.
Но я лучше всё-таки еще раз переспрошу, чем буду потом глюки вылавливать.
А Вас искренне благодарю за помощь! :)
Ссылка на комментарий
Поделиться на другие сайты

Странный какой-то народ пошёл, им читать лень, а другие должны за них это сделать :)
С такой ленью не стОит браться за программирование :)


 

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

Не надо путать лень и неуверенность в переводе даташита с английского. :)

 

ЗЫ: Чтобы пресечь дальнейший офтопик скажу сразу: да, родной язык для меня русский, и не надо меня упрекать в незнании английского. :)

ЗЗЫ: С действиями и мнением администрации и модераторов полностью  солидарен. Не обсуждаю и не оспариваю, ибо наказуемо. :)

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

11 час назад, Lerik-Co сказал:

Хотя табличку с битами по регистру видел, и начальные значения там находил.

Это нуждается в переводе ? Вы же прекрасно знаете, где можно найти эту информацию :)

 

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

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

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

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

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

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

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

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

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

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

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

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