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

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


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

А зачем нужен массив с 161 значением?  если 80 достаточно, дважды заносите одни и те же значения. Ваш цикл for пролетает за доли секунды

В этой строчке тоже не вижу необходимости  if (A==161) A=0;

Сергей.

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

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

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

я не знаю как это сделать, знаю только что шим работает от CLKpll, и какой это таймер? какой то внутренний генератор на 64мгц! там еще делители настраиваются

PCNF2|=PSC2_FOUR_RAMP//Four Ramp Mode
	     |(1<<PCLKSEL2)//выбираем CLK PLL стр 162 таб.16-9

энкодер от первого таймера, 

и как синхронизировать эти таймеры? вот тактирует он от своего PLL импульсы а мы тут влазим...

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

28 минут назад, Дмитрий Вас сказал:

и как синхронизировать эти таймеры?

Они сихронизируются аппаратно: вы заносите в OCR0RA новое значение, оно пишется в промежуточный регистр, и ждет, пока аппаратная часть доделает начатый период ШИМ, а затем перегрузит это значение в рабочий регистр. Как-то так.

То есть вам не надо думать о синхронизации, но вы должны понимать, что если вы не даете МК времени на доделывание ШИМа, а постоянно обновляете регистр, момент синхронизации не наступает (или наступает очень редко), в итоге вы видите не то, что ожидаете.

31 минуту назад, Дмитрий Вас сказал:

я не знаю как это сделать

Очень просто: я же вам написал! Допустим, таймер0 настраиваете на прерывания 100 раз в секунду, в обработчике пишите своё 

OCR0RA = tab_sin[A];
if(++A >= 160) A = 0;

И все. А остальную писанину в регистры делаете один раз на этапе инициализации периферии в вашей программе. Ну, разве что еще переменная A у вас должна быть внутри обработчика объявлена static uint8_t A;

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

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

Сравнительное тестирование аккумуляторов 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

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

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

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

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

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

ISR(TIMER0_COMPA_vect)
{
	static uint8_t A;
	//static uint8_t B;
	//static uint8_t C;
	OCR0RA = tab_sin[A];
	OCR0SA = 50;
	OCR0RB = 0;
	OCR0SB = 0;
	if(++A >= 160) 
	    { 
		  OCR0RB = tab_sin [A];
		  OCR0SB = 50;
		  OCR0RA = 0;
		  OCR0SA = 0;
		  A = 0;
		};

Ошибка двух или более типов данных в спецификаторах объявлений, вот что пишет

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

  • 2 недели спустя...

Доброго дня! Подскажите пожалуйста , если  впомните вдруг. Нужно контроллер подобрать по корпусу СО-8. И ногам питания (не очень стандартным) 8-Vcc. 4-Vss.  (по олдовой геометрии ТТЛ в общем, если так можно выразится. Последняя нога" +" , и по диагонали" -")

По функционалу понадобятся I2C  и EEPROM.

Буду благодарен , если вспомнит кто-нибудь в распостраненном семействе. Либо вариант посоветует (не космического масштаба ) заказать небольшую партию известного образца с моей распиновкой 

 

РS: "аттини 13" нашел пока. Но слабенькая она совсем 

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

2 часа назад, Пришел в кедах сказал:

Но слабенькая она совсем

Да ладно, слабенькая! Нормальная для своих "лет" :) Есть её старшие сестрички attiny25 и attiny85. Сейчас есть и другие, но я не помню их по имени...

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

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

Вся задача как раз в готовые платы упихать. Там 1-й пин уже незамысловатый логический вход .. А так.. На ПИКе идеально было бы для меня

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

  • 3 недели спустя...

Добрый вечер.

В очередной раз пытаюсь постигнуть эту "магию " программирования.

Прошу совета.

Сейчас читаю  книги по автоматному программированию, автор Шалыто, понравилась логика и сама концепция .

Ну и возник вопрос,совета просить не у кого,

Возможно ли (почему нельзя) использовать конструкцию типа :

if(PINB0 & !PINB1)     //  если PINBO=1 а PINB1=0, то делаем что-то

{

do_something();

}

я понимаю что что-то тут не так, и если бы все было так просто то не использовались стандартные конструкции типа:

if((0 != (PINB & (1<<PINBO)) & (0 == (PINB & (1<<PINB1)))

{

do_something();

}

 

 

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

есть регистр запуска шим PCTL2 = (1<<PRUN2);. хочу кнопкой включать и выключать его.

ISR (TIMER1_COMPA_vect)
{
	//обработка кнопки
	if(!(PIND&(1<<5)))//если нажата кнопка
	{
	    PCTL2 ^= (1<<PRUN2);
	}

правильно ли я написал?

@pndbr через & нельзя только через запятую возможно. посмотрите как у меня в вопросе написанно

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

13 минут назад, Дмитрий Вас сказал:

правильно ли я написал?

Нет: таймер у вас сгенерирует прерывание явно много раз в секунду, и каждый раз, когда при этом кнопка все еще будет нажата, бит PRUN2 будет менять свое значение на противоположное, т.е. будет включаться и выключаться многократно, пока нажата кнопка.

 

14 минут назад, pndbr сказал:

Возможно ли (почему нельзя) использовать конструкцию типа

Возможно все, если все сделать правильно. В частности, применять оператор && (ЛОГИЧЕСКОЕ И) вместо & (БИТОВОЕ И). А остальное - дело техники: никто не запретит вам создать макросы и получить "конструкцию типа"

#define PIN_1	(!!(PINB & (1<<PB0)))
#define PIN_2	(!!(PINB & (1<<PB1)))
  
// "конструкция"
if(PIN_1 && !PIN_2) {
  // что-то там
}

 

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

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

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

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

 


#define PIN_1	(!!(PINB & (1<<PB0)))
#define PIN_2	(!!(PINB & (1<<PB1)))
  
// "конструкция"
if(PIN_1 && !PIN_2) {
  // что-то там
}

 

спасибо добрый человек

но возник новый вопрос:

(!!(PINB & (1<<PB0)))

С оператором "!" (НЕ) знаком,а оператор "!!" первый раз встречаю, что он значит?

 

 

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

Это 2 оператора !

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

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

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

 

логично,не спорю)

но попрошу Вас,если не сложно,немного подробнее написать, для недостаточно просветленных..ну или направить где я смогу найти описание действий оператора сдвоенного "НЕ"

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

Да что тут понимать...

Оператор НЕ превращает любое НЕНУЛЕВОЕ число в 0, а НОЛЬ превращает в 1. То есть после первого ! мы получим 0, если было не ноль, и 1, если был ноль. А после второго ! мы получим снова инверсию, то есть получим 1, если изначально было не ноль, и 0, если был и так ноль.

Иными словами двойное НЕ превращает любое ненулевое число в 1, а любой ноль не меняет.

Таким образом, можно сравнивать любые числа, как логические значения, что без двойного НЕ невозможно.

Например:

char A = 12;
char B = 30;

// простое сравнение
if(A == B) {
  // не сработает, т.к. числа разные
}

// "логическое" сравнение
if(!!A == !!B){
  // сработает, т.к. логически оба числа эквивалентны TRUE
}

Многие ошибочно пытаются сравнивать "значение бита в порту" с 1 или 0, а это не сработает, т.к., например, ТРЕТИЙ бит в порту это 0x04, что, естественно, единице не будет равно никогда. Если сделать НЕ-НЕ, то любой бит в порту превратится в 1 или 0, что уже можно сравнивать безошибочно

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

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

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

1 hour ago, ARV said:

Оператор НЕ превращает

С таким же успехом компилятор перед использованием оператора && превратит сначала оба операнда в логические величины, а затем уже произведёт логическую операцию. Поэтому тут двойное отрицание не нужно.

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

7 часов назад, Yurkin2015 сказал:

Поэтому тут двойное отрицание не нужно.

А если применять оператор == или !=, а тем более ^, он превратит операнды в логические или нет?

Я предлагаю решение, которое всегда дает гарантию результата, чтобы не надо было вспоминать, что там "по умолчанию" делают те или иные операторы. 

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

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

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

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

А если применять оператор == или !=, а тем более ^, он превратит операнды в логические или нет?

Конечно нет. Bool появляется ПОСЛЕ логической операции. Исходные операнды не имеют права изменяться.

Кстати, если подключить stdbool.h, то можно просто привести типы  (bool)A == (bool)B.

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

戦う前に相手のベルトの色に注目

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

22 минуты назад, my504 сказал:

Конечно нет.

Вопрос был риторическим.

22 минуты назад, my504 сказал:

то можно просто привести типы  (bool)A

Но писать больше букв :) 

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

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

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

Но писать больше букв :) 

Больше - не значит хуже. 

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

Никому в голову не придет сокращать имена переменных/функций до нечитабельного состояния с целью "меньше писать"... 

Ну и не факт, что компилятор оптимизирует двойное отрицание до приведения типа. 

戦う前に相手のベルトの色に注目

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

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

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

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

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

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

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

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

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

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

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

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