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

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


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

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

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

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

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

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

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

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

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

19 минут назад, dasZebra сказал:

А в чем вопрос?

 

05.09.2020 в 17:16, Дмитрий Вас сказал:

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

код выше постом. но чтобы отображалось lcd_putstring("stop"); нужно писать в main. как правильно сделать?

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

Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

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

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

Только что, Дмитрий Вас сказал:

как правильно сделать?

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

2. В прерывании таймера присваеваете глобальной переменной (пусть будет напривер bOneBeat) 1.

3. В функции main в бесконечном цикле опрашиваете состояние этой глобальной переменной, и если она равна 1, то вызываете вашу функцию, в которой выполняете все что вам нужно: антидребезг и проч.

4.После вызова вашей функции не забываете сбросить глобальную переменную в ноль.

 

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

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

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

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

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

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

Доброго времени суток, уважаемые форумчане!

Увлекаюсь контроллерами в свободное от работы время (хобби так сказать), но хотелось бы заниматься этим делом на более профессиональном уровне. Задался поиском учебного заведения с целью получения профессии в этом направлении. Но понял, что даже не знаю как правильно называется профессия человека, который занимается написанием ПО для микроконтроллеров. Если на форуме есть люди, которые обучаются/обучались/работают в сфере разработки электроники и написания прошивок для МК, подскажите пожалуйста как правильно называется данная специальность? (Программист микроконтроллеров? Наверное нет).

Сам когда-то обучался в железнодорожном университете и был у нас один семестр знакомства с PicMicro (Ассемблер). Но по профессии я связист и уровень знаний, который мне дали в универе, совсем никак с МК не связан. С тех пор методом самоучения более-менее усвоил AVR (Ассемблер/C), сейчас вот штудирую STM32 (Ассемблер/С).

Заранее спасибо всем, кто отозвался) 

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

Литиевые аккумуляторы EVE Energy и решения для управления перезаряжаемыми источниками тока (материалы вебинара)

Опубликованы материалы вебинара Компэл, посвященного литиевым аккумуляторам EVE Energy и решениям для управления перезаряжаемыми источниками тока.

На вебинаре мы представили информацию не только по линейкам аккумуляторной продукции EVE, но и по решениям для управления ею, что поможет рассмотреть эти ХИТ в качестве дополнительной альтернативы для уже выпускающихся изделий. Также рассмотрели нюансы работы с производителем и сервисы, предоставляемые Компэл по данной продукции. Подробнее>>

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

18.09.2020 в 18:34, dasZebra сказал:

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

вот тут не понял. если эта функция ISR(TIMER1_COMPA_vect) как я ее буду вызывать?

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

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

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

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

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

2 часа назад, Гость Виктор сказал:

Задался поиском учебного заведения с целью получения профессии в этом направлении.

начните с этого https://www.youtube.com/watch?v=qiSjLxeyNv4

 

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

18.09.2020 в 17:46, Дмитрий Вас сказал:

может кто подскажет? 

Вам нужно разделять процесс управления ШИМ-ом и процесс формирования ШИМа. Управление делается в главном цикле, без прерываний (как вариант), генерация же делается по прерываниям. Т.е. главный цикл вторичен, он не мешает формированию ШИМа, потому что может быть прерван в любой момент. Поэтому в главном цикле в можете прекрасно использовать любые "медленные" функции вроде printf, делать сколь угодно долгие "тупые задержки" (в циклах) и вообще тратить ресурсы, как угодно.

// где-то у вас есть код, где по прерываниям от таймера делаются выборки из массива синусов для управления ШИМ-ом
// а здесь только та часть, которая ШИМ-ом управлеяет.

uint8_t get_buton(void){
// в этой функции вы опрашиваете кнопки, давите дребезг
// и возвращаете код нажатой кнопки
}

// а вот так выглядит ваш главный цикл
while(1){
	switch(get_button()){
	case BTN_STOP: // кнопка "стоп"
        // здесь меняете переменные так, чтобы ШИМ выключился (или как вы там останавливаете)
        printf("STOP\n");
        break;
        
	case BTN_FORWARD: // кнопка "вперед"
        // здесь задаете параметры ШИМа для разгона в одну сторону
        printf("FORWARD\n");
        break;
        
	case BTN_REVERSE: // кнопка "назад"
        // здесь, очевидно, настраиваете ШИМ для вращения в обратную сторону
        printf("REVERSE\n");
        break;
	}
  // далее делаете остальное, что надо в главном цикле
}

Как-то так в общих чертах.

И никаких прерваний для кнопок, никаких printf-ов внутри обработчика прерываний, никаких задержек в прерываниях.

Да, еще логичнее по кнопкам менять состояния в автомате состояний, если вы понимаете, о чем я, ведь процесс смены направления вращения должен быть растянут во времени... Поэтому логично не просто настраивать ШИМ, а менять его параметры плавно, пока не будет достигнута нужная скорость.

Но это уже детали.

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

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

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

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

вот тут не понял. если эта функция ISR(TIMER1_COMPA_vect) как я ее буду вызывать?

#include....

#define...

Char bOneBit =0;

ISR(TIMER1_COMPA_vect) {bOneBit =1}; 

//в весторе прерввания больше ничего

Void MyVeryImportantFunction(void)

{ //здесь ваш код чего нужно}

void main(void)

{ // настроечный код  таймеров и проч

   { do while(1)

         { if(bOneBit) { MyVeryImportantFunction(); bOneBit =0;}

         }

     }

}

 

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

нашел тут платку а на ней мк sc901930fta но дш по нему не смог найти. вот страница https://www.ic-components.com/products/NXP-Semiconductors-Freescale/SC901930FTA.jsp а как дш скачать не пойму.

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

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

а на ней мк

Откуда уверенность что это МК? Это специализированная микросхема и по ней даташита в открытом доступе никогда не было и не будет, насколько я понимаю. И к тому же она жутко древняя. Примерно 2006 года издания.

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

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

я тут у себя касячок нашел... выполняться проверка будет по таймеру, но не получится ли что после if((!(PIND&(1<<5)))&&(direction==0)) в котором direction = 1; следующий if ((!(PIND&(1<<5)))&&(direction==1)) тоже будет выполняться

if (Flag_Timer1)
		{
			//lcd_gotoxy(0,0);
			//lcd_chisla(AMP0_read(11));
			Flag_Timer1 = 0;
			//---------------------обработка кнопки энкодера-----------------------------
			if((!(PIND&(1<<5)))&&(direction==0))
			{
				OmegaTe = speed;
				direction = 1;//ставим в 1 чтобы при следующем нажатии включился реверс
				//PCTL2 = (1 << PRUN2);
				lcd_gotoxy(0,0);
				lcd_putstring("forv");
				step++;
			}
			if ((!(PIND&(1<<5)))&&(direction==1))//реверс rev
			{
				OmegaTe = (~speed) + 1;
				direction = 0;//сбрасываем в ноль чтобы при повторном нажатии сработал
				//реверс и начало крутиться в "прямом, forv" направлении
				lcd_clear();
				lcd_gotoxy(0,0);
				lcd_putstring("rev");
				step++;
			}

 

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

Будет естественно. Правильнее будет сделать if и при его наступлении сделать case в зависимости от направления движения.

Текущий сетап: BBB-AD-H6.1-Nataly2014-AudioPro

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

lcd_clear(), как правило, при очистке дисплея уже ставит курсор в первую позицию первой строки, так что lcd_gotoxy(0, 0) не требуется. 

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

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

а еще такой вопрос. из примера кода по AVR495. с оф.сайта вопрос в том что если Omega_ref будет отрицательным 

if (Flag_IT_timer0)
       {

        ADC_start_conv();
        Flag_IT_timer0=0;
        //        генерирует шаги задания скорости в программном обеспечении
       Softcounter += 1 ;
        if (Softcounter ==  2500) {
          Omega_ref = -400 ;
         } //-128; }
        if (Softcounter == 5000)
         {
           Omega_ref= -200 ;
         }
        if (Softcounter == 7500)
         {
           Omega_ref= 200 ;
         }
        if (Softcounter == 10000)
         {
           Omega_ref= 400 ;
           Softcounter = 0 ;
         }

       }

далее по коду 

Command = Omega_ref ; //команда с сгенерированными шагами

и далее: как то странно получается сначало будет вращение в одну сторону, а затем в другую??

  if (Command > (S16)(0) ) {
           direction = 0 ;
           OmegaTe = Command;
         }
          else {
            direction = 1 ;
            OmegaTe = (~Command) + 1;
         }

Omega_Te участвует в функции генерирования PWM... и вот здесь direction (направление вращения)

   // ------------------------ V/f закон --------------------------
         amplitude = controlVF(OmegaTe);
         if (amplitude > MAX_AMPLITUDE) { amplitude = MAX_AMPLITUDE ; }


         // ------------ - space vector PWN algorithm -----------------
         SVPWM(amplitude, OmegaTe) ;

         // -------- load the PSCs with the new duty cycles -----------
         if (direction==0)
         {
            PSC_Load (PWM0, PWM0+DeadTime, PWM1, PWM1+DeadTime, PWM2, PWM2+DeadTime);
         }
         else
         {
            PSC_Load (PWM0, PWM0+DeadTime, PWM2, PWM2+DeadTime, PWM1, PWM1+DeadTime);
         }

 

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

18 часов назад, Дмитрий Вас сказал:

получается сначало будет вращение в одну сторону, а затем в другую??

Наверно не "затем", а в "зависимости от чего-то", а вот от чего вам и надо понять! и наверно с какой дискретностью, и как это конфигурировать.

Если вы сам не разберетесь за вас это никто не с<З>делает (для вашей задачи)! Так что разбирайтесь - у вас нет другого выхода.

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

Можно сделать все! Но чем больше можно, тем больше нельзя!

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

void s_start(void)//плавный старт
{
	lcd_gotoxy(0,0);
	lcd_putstring("start");
	// подключаем выходы генератора сигнала PSC к выходам порта
	PSOC0 = (1 << POEN0B) | (1 << POEN0A);
	PSOC1 = (1 << POEN1B) | (1 << POEN1A);
	PSOC2 = (1 << POEN2B) | (1 << POEN2A);
		//        генерирует шаги задания скорости в программном обеспечении
		Softcounter +=1 ;
		if (Softcounter ==  250)
		{
			speed = 50 ;
		}
		if (Softcounter == 500)
		{
			speed = 100 ;
		}
		if (Softcounter == 750)
		{
			speed = 150 ;
		}
		if (Softcounter == 1000)
		{
			speed = 200 ;
			Softcounter = 0 ;
		}

так я и не понял почему с -400 начинается. написал вот так... и работает. теперь проблема 

	if (Flag_IT_timer1)
		{
			//lcd_gotoxy(0,0);
			//lcd_chisla(AMP0_read(11));
			Flag_IT_timer1 = 0;			       
			//---------------------обработка кнопки энкодера-----------------------------
			if(!(PIND&(1<<5)))
			{
				s_start();					
			}

плавный пуск работает пока держишь кнопку и если долго держать то начинает по кругу. а хотелось бы, просто включились выходы и сработал плавный пуск. так же, плавный стоп и реверс. и все от одной кнопки. короче как начинающему мне очень интересно

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

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

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

#define  button !(PIND&(1<<5));//кнопка

если я не хочу давать какое то значение переменной button_long , а просто если произошло так то то это событие называется так то

unsigned char button_time=0;
			bool button_long;
			if(button) button_time++;
			if (button_time>200)
			{
				button_time=0;
				return button_long;
			}

извините что коряво излагаюсь

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

Всем доброго времени суток! Выручте пожалуйста форумчане! Микроконтроллер ATmega8, язык С++.  Никак немогу получить никакой ШИМ  на выводе PB2, а на PB1, все работает без вопросов. В регистре контроля меняю СOM1A0 и COM1A1 на СOM1B0 и COM1B1, но ШИМ не появляется, если активирую два сразу, то на PB1 есть, а на PB2 все равно нет. Может что-то, еще нужно указывать, или в Протеусе есть кокой нибудь нюанс? Реальный контроллер не прошивал, все проверял только в Протеусе. Спасибо 

PB1.jpg

PB2.jpg

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

Купил вот такой девайс

image.png.2c9819409e3539438717a845012cdb25.png

в описании указано что он подходит для atmega32/16

распиновка у него вот такая

image.png.b24d9d192257b498bfad9c28ad0c6c7c.png

Вопрос в том как сюда пристроить atmega32u4 учитывая то что GND звонится со своим собратом напротив, такая же ситуация и с VCC. По пинам atmega32u4 в корпусе qfp44 что то у меня не сходится, получается что замыкаются цифровые контакты как не крути. Подозреваю что просто косяк в пайке или косяк в проектировании платы. Или я чего то не догоняю, прошу помощи у знатоков.

распиновка atmega

image.thumb.png.84dbff95eeec18922962998668152e71.png

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

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

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

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

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

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

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

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

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

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

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

  • Сообщения

    • Я извиняю кто тут флудил ! ??  были удаленны другие коменты! , я не поливал не кого грязью, а если вы так считаете напишите жалобу на меня и пусть модератор мне предъявит за нарушение/ за оскорбления и флуд . И касаемо "вчера сделал" после комента пользователя fessit вспомнил и проверил и все получилось (с ножной напутал тут диод нужен) и также коменты colorad, и Aviator88 всем спасибо. Все работает как надо чего тут выкладывать мне всего-то обычный диод и всё. А что касаемо ваших и подобных коментов это и есть флуд. Устроили охоту на инакомыслящих мол  посмел такой сякой задать вопрос  на техническом форуме о переделки платы зарядки акумов  в светодиодный драйвер какой ужас !!   Поражаюсь блин с таких придираться к словам, и при этом не зная как переделать сразу начинают парировать ошибками автора в тексте запятые, и случайно перепутанные Амперы с мА (Хотя понятно о чем идет речь, но и за это уцепились ) это любимый метод когда по делу толком  нечего сказать, а за изварат и нестандартный подход подколоть что бы ну даже не хочу писать.... А все выпадки мол эта платка не для этого итд...:neznam: итд ну что тут сказать не надо ограничивать себя мол что подумают или оно якобы не будет работать,название не то... сделал проверил работает! замечательно! и плевать! зачем покупать, ждать если уже есть под рукой то что тебе нужно!!! и искусственно загонять себя в рамки блин отказываться использовать тпешку только потому что указанно применение для зарядки лития  инакомыслие, богохульство, бред, "гениальная идея" итд ну дело ваше я не заставляю насильно переделывать. Странно что на тех форуме это вызывает такие вопросы где казалось бы нормально: починить переделать что-то итд. Странные представление что изврат, а что нет учитывая что все и до переделки всё работало почти отлично.... с каких пор изврат не понятно учитываю что все подходит. И что-то тут нет подобных высказываний 2е стандарты или инквизиция проворонила  
    • На этой схеме не хватает резисторов, немного открывающих силовые транзисторы. Без них начальный самозапуск  не будет происходить. Поищи их на плате БП.  Они где-то в районе сотни кОм между базой и коллектором.  
    • Может у нас разные были, либо палёный, не будем спорить. У каждого свой вкус.    Ещё слышал, но не слушал, что на TPA3255 хорошие. Присматривал такой как-то. Вы знакомы с таким?
    • Вы самим вообще нормальный??? Под полтинник жалоб!!!!!! Вы чего? Вы говна поели? До утра оставлю сообщение, в надежде на ответ. Но по опыту - никто так и не отпишется...
    • @Vic73 типовая китайская для лент ? биполярники и второй трансформатор ? 
    • трансформатор от sh96tzw-d сварил (а какой толк от проприетарной цифровой начинки), но зазор оказался слишком большой(  из парочки других суп не удался, добивать феном бросил из за адской вонищи.
    • Юра! Похоже, что ТС в таких вопросах не разбирается от слова "совсем". Задал вопрос ему в личку. Жду ответа. При свидетелях он общаться стесняется. Как-то так...
  • Похожий контент

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