Jump to content

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


Recommended Posts

03.07.2021 в 12:44, Дмитрий Вас сказал:

выключаю оптимизацию получаю мильон ошибок, и гугл не может с ними помочь.

Чтота эта... гугл и правда не мог помочь? Даже гугл-переводчик? Ну, он же прямым текстом написал: секция .text переполнена на 2 с лишним килобайта... все остальные ошибки - связанные с этим событием. Без оптимизации у вас прошива в память не лезет... в какую, правда, непонятно. может, констант слишком много накидали?

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

Link to comment
Share on other sites

Доброго времени суток уважаемые форумчане. Возникла маленькая проблемка (для профи скорее всего даже смешная)...

Суть вопроса, как сделать на ардуинке вот такое: При нажатии на кнопку загорается поочереди 8 светодиодов с интервалом в 0.75 секунды и продолжают гореть 2 минуты и потом так же гаснут поочереди с интервалом в 0.75 секунды. Причем самое главное кнопку кратковременно нажал и отпустил (Везде практически есть нажал горит отпустил потух....) а мне именно нужно нажал-отпустил и запустил протокол зажигания и горения в течении 2 минут всех. После выключения всех светодиодов  чтоб с начала стартовала программа ожидания нажатия кнопки...

Набросал скетч так он мне при нажатии запускает сразу все светодиоды и поочереди их выключает с интервалом в 2 секунды... причем если нажать и отпустить то все загорятся и сразу потухнут... если снова нажать продолжат выключатся с последнего потухшего в прошлый раз светодиода и когда все потухнуть больше уже не реагирует ничего на эти кнопки.... причем у меня вместо кнопки датчик пересечения линии, но смысл посути как у тактовой кнопки... этот датчик выдаёт все время 5 вольт информационных, а при пересечении 0 вольт. Но в скетче в условии считывания ставлю LOW или HIGH но срабатывает одинаково почемуто...

Скетч (100% неправильный скорее всего):

Скрытый текст

 

void setup()
{
  pinMode (2, OUTPUT); //Выходы
  pinMode (3, OUTPUT);
  pinMode (4, OUTPUT);
  pinMode (5, OUTPUT);
  pinMode (6, OUTPUT);
  pinMode (7, OUTPUT);
  pinMode (8, OUTPUT);
  pinMode (9, OUTPUT);

  pinMode (11, INPUT); //Вход 11 пин
  pinMode (12, INPUT);  //Вход 12 пин
//digitalWrite (11, HIGH); //Подтяжка
//digitalWrite (12, HIGH); //Подтяжка
}

void loop() {
 
  if (digitalRead(11) == LOW  || digitalRead(12) == LOW) // если любая кнопка нажата
  {
    digitalWrite (2, HIGH); //Зажигаем огни
    delay (2000);
    digitalWrite (3, HIGH);
    delay (2000);
    digitalWrite (4, HIGH);
    delay (2000);
    digitalWrite (5, HIGH);
    delay (2000);
    digitalWrite (6, HIGH);
    delay (2000);
    digitalWrite (7, HIGH);
    delay (2000);
    digitalWrite (8, HIGH);
    delay (2000);
    digitalWrite (9, HIGH);
    delay (2000);
  }
}

 

 

Link to comment
Share on other sites

Вебинар «Новые тенденции сетевых технологий: Ethernet по одной витой паре» (09.12.2021)

Приглашаем 9 декабря всех желающих посетить вебинар, посвященный технологии Ethernet и её новому стандарту 10BASE-T1S/L. Стандарт 802.3cg описывает передачу данных на скорости до 10 Мбит в секунду по одной витой паре. На вебинаре будут рассмотрены и другие новшества, которые недавно вошли в семейство технологий Ethernet: SyncE, PTP, TSN. Не останется в стороне и высокоскоростной 25G+ Ethernet от Microchip.

Подробнее

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

////////////////

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

Но как я и говорил код проще не придумаешь, и не нужно наворотов. Работает как часики))) правда думаю автоматизировать еще добавив фоторезистор, типа режим день/ночь, чтобы подсветка сама включалась при освещенности на улице ниже определенного порога...

Собственно скетч:

Скрытый текст

 

#define Rel1  2 // назначаем порт для реле1
#define Rel2  3 // назначаем порт для реле2
#define Rel3  4 // назначаем порт для реле3
#define Rel4  5 // назначаем порт для реле4
#define Rel5  6 // назначаем порт для реле5
#define Rel6  7 // назначаем порт для реле6
#define Rel7  8 // назначаем порт для реле7
#define Rel8  9 // назначаем порт для реле8

#define Dat1  11 // назначаем порт для Датчик линии 1
#define Dat2  12 // назначаем порт для Датчик линии 1


void setup() {
   pinMode(Rel1, OUTPUT);
   pinMode(Rel2, OUTPUT);
   pinMode(Rel3, OUTPUT);
   pinMode(Rel4, OUTPUT);
   pinMode(Rel5, OUTPUT);
   pinMode(Rel6, OUTPUT);
   pinMode(Rel7, OUTPUT);
   pinMode(Rel8, OUTPUT);
   pinMode(Dat1, INPUT);
   pinMode(Dat2, INPUT);
}

void loop() {
   // если есть движение на датчике 1 включаем релешки
   if (digitalRead(Dat1) == LOW) {
      digitalWrite(Rel1, LOW);
      delay (500);
      digitalWrite(Rel2, LOW);
      delay (500);
      digitalWrite(Rel3, LOW);
      delay (500);
      digitalWrite(Rel4, LOW);
      delay (500);
      digitalWrite(Rel5, LOW);
      delay (500);
      digitalWrite(Rel6, LOW);
      delay (500);
      digitalWrite(Rel7, LOW);
      delay (500);
      digitalWrite(Rel8, LOW);
      delay (60000);
   }

 // если есть движение на датчике 1 включаем релешки

   if (digitalRead(Dat2) == LOW) {
      digitalWrite(Rel8, LOW);
      delay (500);
      digitalWrite(Rel7, LOW);
      delay (500);
      digitalWrite(Rel6, LOW);
      delay (500);
      digitalWrite(Rel5, LOW);
      delay (500);
      digitalWrite(Rel4, LOW);
      delay (500);
      digitalWrite(Rel3, LOW);
      delay (500);
      digitalWrite(Rel2, LOW);
      delay (500);
      digitalWrite(Rel1, LOW);
      delay (60000);
   }
  
   digitalWrite(Rel1, HIGH);
   digitalWrite(Rel2, HIGH);
   digitalWrite(Rel3, HIGH);
   digitalWrite(Rel4, HIGH);
   digitalWrite(Rel5, HIGH);
   digitalWrite(Rel6, HIGH);
   digitalWrite(Rel7, HIGH);
   digitalWrite(Rel8, HIGH);
   }

 

 

Edited by Falconist
Оверквотинг
Link to comment
Share on other sites

DC/DC-преобразователи Mornsun со склада Компэл

В сложный период для рынка электронных компонентов, когда производители увеличивают сроки поставки продукции, со склада Компэл можно приобрести широкий ассортимент DC/DC-преобразователей производства компании Mornsun. На складе представлены наиболее популярные семейства изолированных и неизолированных DC/DC-преобразователей новых поколений R3 и R4, а также предыдущего, но по-прежнему востребованного поколения R2.

Подробнее

Всех приветствую. Установил недавно Microchip Studio она же Atmel Studio 7 осваиваю Си. Столкнулся с такой проблемой: использую макрос PROGMEM с инициализированным массивом, чтобы расположить этот массив во FLASH памяти. В итоге при компиляции в выходном *.hex файле никаких данных из массива не появляется. В чём может быть дело?

Link to comment
Share on other sites

Теперь более 300 наименований: новое поступление Connfly на склад Компэл

Компэл объявляет о значительном расширении складского ассортимента продукции Connfly. Универсальные коммутирующие компоненты, соединители и держатели Connfly сочетают соответствие стандарту ISO9001:2008, высокую доступность и простоту использования. На текущий момент на складе Компэл – более 300 востребованных на рынке товарных наименований с гибкой ценовой политикой.

Подробнее

Управляемый светодиодный драйвер на базе компонентов ST

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

Подробнее

12 часов назад, RockMANN сказал:

никаких данных из массива не появляется

Что сие означает ? :unsure:

Link to comment
Share on other sites

@Alex после компиляции открываю полученный  *.hex файл и не нахожу там 752 байта, которые должны были в нём сохраниться. Видимо надо как-то компилятор или toolchain настроить, вот только куда копать?

Link to comment
Share on other sites

@Alex спасибо за подсказку, теперь разобрался. Всё дело в том, что я обозначил массив как данные во FLASH памяти, а в самой программе я не обращался к этому массиву и не использовал его, поэтому компилятор сочёл это за мусор и просто не добавил эти данные в программу. Заодно понял, как работает оптимизация кода в компиляторе). В итоге просто добавил строчку

 for (int i=0; i<__RAW_SIZE; i++)
{
     table[i] = pgm_read_byte(&(rawData[i]));
}

И весь массив скомпилировался в *.hex

Link to comment
Share on other sites

  • 1 month later...

и снова здравствуйте. 

void revers_f(void)
{
	int s_new;
		s_new = ~speed + 2;
		for (;speed>=s_new;)
		{
			if (Flag_IT_timer0)
			{
				Flag_IT_timer0 = 0;
				speed--;
			}
		}
}

есть вот такой код. все бы ничего но, переменная speed хоть и объявлена глобально эта функция из-за цикла for выдает ее по результату так сказать. а мне нужно чтобы она менялась постепенно именно глобально во всем коде. как быть?

Link to comment
Share on other sites

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

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

Так и меняйте её там, где нужно, "во всём коде" и "постепенно".
Не понятно, в чём проблема ... :huh:

Link to comment
Share on other sites

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

как?

Перефразируйте общий вопрос. Он непонятен.
На вопрос "как ?" есть 1000 и 1 ответ.

Link to comment
Share on other sites

вот выполняется основная программа

if (button_shot && speed > 0)
		{
			revers_f();
			button_shot = 0;
		}

внутри которой идет проверка. натыкается на функцию реверс, выполняет ее. но внутри функции переменная меняется и по завершении в lcd_chisla(speed); переменная speed получается сразу 400 а я хочу видеть как она с 0 прибавляется

Link to comment
Share on other sites

@Дмитрий Вас  Изменяйте переменную speed в обработчике таймера.

// ISR timer1
if(reverse_ON)
{
	if (speed>=s_new)
		speed--;
	else
		reverse_ON = 0
}

А сама функция будет такая

void revers_f(void)
{
	s_new = -speed;
	reverse_ON = 1;
}

Эта функция устанавливает флаг reverse_ON. Таймер видит флаг и начинает в прерывании уменьшать speed. Это становится видно во всей программе.

Edited by Yurkin2015
Link to comment
Share on other sites

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

я хочу видеть как она с 0 прибавляется

Запихнуть в цикл её вывод на дисплей. Не ?

Link to comment
Share on other sites

Используйте её где хотите - она же глобальная.
Хотите изменять её по энкодеру - меняйте её в его обработчике. Хотите по кнопкам - меняйте в их обработчиках. А выводить куда-то (дисплей, ШИМ, ...) - это уже дело второстепенное. Выводите в любой удобный момент и в любом удобном месте программы. Причём тут её изменение и чтение ? Вы смешали всё в кучу и запутались.

Link to comment
Share on other sites

1 минуту назад, Alex сказал:

Причём тут её изменение и чтение ? Вы смешали всё в кучу и запутались.

как при чем? хочу видеть ее онлайн, а после обработчика цикла она сразу из крайности в крайность

Link to comment
Share on other sites

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

хочу видеть ее онлайн, а после обработчика цикла она сразу из крайности в крайность

Я уже ответил по этому поводу :

Цитата

Запихнуть в цикл её вывод на дисплей. Не ?

 

Приведите ещё пример, что Вам нужно делать с ней. Отвечу и по другой ситуации.

Link to comment
Share on other sites

  • 3 weeks later...

Есть те кто перешел с STM32f[030|103] на Raspberry RP2040? Довольны ли?) А может ан оборот кто то перешел и доволен)

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

DMA смотрю есть, еще и два ядра по 133 мГц :) Вроде норм.

Программатор не нужен? Отладка работает? Софт бесплатный?) Как вообще ощущение?) Вот я с АВР на АРМ перешел был доволен) А сейчас ищу дальше что для своего хобби брать) я не для производства а так инкубатор сделать, чпу вот ща планирую) и тд поиграться.

Link to comment
Share on other sites

  • 1 month later...
Guest Aira

Привет всем. Подскажите ответ. Проверяю кнопку на 0 в PD0:  If(~PIND&(1<<0) если на нём 0 выполняем то что в первых скобках. Но вроде бы если там 1 то оно тоже истина получается, и тоже выполняем то что в первых скобках. Как это понять? 

Link to comment
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share


  • Сообщения

    • Я уже неоднократно говорил, что прежде спорить, надо определиться с терминами. Судя по Вашим нападкам, Вы весьма своеобразно трактуете термины. Что сильно мешает Вам понять собеседника. Итак, смотрим всем надоевший ГОСТ 23849-87.   То есть, ГОСТ выражает уровни в виде напряжений. Вольт. Которые измеряются приборами. Отношение С/Ш, затем, вычисляется. И когда я слышу Ваш вопрос Я и отвечаю так, как Вам не нравится - 0 dBFS. Поскольку ни карта, ни программа не оперирует Вольтами. Ни RMAA, ни Спектра понятия не имеют, какое именно напряжение подано ей на вход. До тех пор, пока не сделана калибровка с помощью внешнего эталонного прибора. Причём, для RMAA это невозможно. Но, это не делает измерения невозможными. Поскольку АЦП способен получить два отсчёта - для номинального уровня и уровня шума, а программа способна произвести вычисления по приведенной выше формуле. Теперь, посмотрим на Вашу методику. Про 5 мВ, было известно и понятно задолго до Вашего появления в ветке. А вот пункт 2 - это Ваша принципиальная ошибка. Не в методике. В терминологии. Вы не откалибровали карту. Ибо, калибровка предполагает ввести измеренное внешним прибором реальное значение напряжения, которое соответствует отсчёту АЦП, отображаемому в окошке калибровки. Вы этого не делаете. Вы просто говорите программе - считай то, что у тебя на входе, за 0 дБ. При этом, Вы понятия не имеете, какое именно значение напряжения там есть. Вы его не измеряете. Всё, что у вас есть, из достоверной информации - это 5 мВ. На сколько его усилил корректор, Вы не знаете. Итак, если Вы не сделали калибровку, то что же Вы сделали? Вы просто сдвинули шкалу дБ, приведя её к виду, удобному для Вас при измерении именно этого корректора. Будет другой - шкалу придётся двигать снова. Далее, присвоив нолю дБ неизвестное и абстрактное значение, Вы переходите дальше. К измерению шума. При подключенном на вход эквиваленте источника. Как того требует ГОСТ. Это, в частности, меня сильно разочаровало. Столько рекламы и самопиара, ради простого пересказа методики из ГОСТа. Программа Вас показывает уровень шума, в дБ (!!), относительно того самого, абстрактного. Но, давайте представим, что Вы пропустили п. 2. Проигнорировали. Поленились. Не сделали. Но, 5 мВ подали. Что будет? Программа, естественно, Покажет Вам какую то цифру . В дБ. Поскольку, какое то значение ноля дБ в ней прописано по умолчанию. Допустим, это будет +7 дб. Далее, меняете 5 мВ на эквивалент и снова смотрите на дБ в программе. Это сожно сделать даже переключателем. Не останавливая анализ. Снова видите уровень в дБ. Скажем, -58. Каково же соотношение С/Ш?. Это частное двух измерений, в логарифмическом масштабе. В дБ это означает разность Т.е. -58 - (+7) = -65 дБ. Вот и всё. Вы получили результат. Причём тот же самый, что и после выполнения псевдо калибровки. Она, всего то, избавила Вас от необходимости самому считать разность. Проверьте, убедитесь. В общем, программа не знает, какой уровень (в Вольтах) подан ей на вход. Вы, тоже. Но это никому не мешает. Включая и соотношение С/Ш. Что Вы нам и продемонстрировали. Сами, похоже, того не осознавая.  Теперь об RMAA. Тут Вы не господин. Вы не способны сказать программе, что неизвестный уровень на входе  - это 0 дБ. Наоборот, программа Вам говорит - сделай так, чтобы мой индикатор показал значение, возможно ближе к 0 дБ. И, вот тут начинаются пляски с усилителями / делителями, чтобы провести выход корректора к уровню чувствительности конкретной карты. То есть, к 0 dBFS. А чувствительность, у карт, ох какая разная. Так что, хоть при измерении Спектрой, хоть при измерении RMAA, Вы стремитесь получить вожделенный 0 дБ. Вся разница, что Спектра способна прогнуться под Вас. А под RMAA придётся прогибаться Вам. При этом, снова повторю свою мысль. Вы не производите ни калибровку карты, в исинном значении этого понятия, ни измерения реального значения напряжения, поданного на вход карты. При этом, если выход корректора выше чувствительности кары, неизбежен делитель. У Вас не описанный. Но, из выше сказанного понятно, что он может быть даже некалиброванным. Лишь бы вход карты не был перегружен измеряемым сигналом. Более четверит века пользуюсь подобным, не испытывая ни неудобств, ни сомнений в правильности измерений.  
    • Это  не из этой серии...? БП к усилителю Солнцева. Doc1.docx по описанию работы ток КЗ-  7А-8А
    • Скорее генератор. Работающий через ключ на излучатель. Магнитострикционный, пьезо, просто  разрядник - то дело уже неважное, судя по формулировке вопроса.  
    • Обычно ,почти всегда, посадка на вал барахлит. Особенно если вал кротковат. Если вал 10 мм выступает, то намного точнее становится переходник.
    • а драка хоть была? Или зря время потратил?

  • Популярный на али припой толщиной 0.6, 0.8, 1, 1.2 мм

  • Similar Content

    • By eyuw
      Б/у контролеры холодильной установки: 1) Eliwell 974LX  на atmega16A-PU , 3 реле - характеристики на фото.Цена 15 бел.руб. 2) Eliwell IDPlus974  на atmega32A-PU, 3 реле - характеристики на фото.Цена 18 бел.руб. Корпуса без передней панели закрывающей цифровой индикатор, без датчиков температуры! г.Толочин, Витебская обл. Отправка по Беларуси наложенным платежом. Покупатель также оплачивает почтовые расходы. 


    • By АртемК
      Уже весь интернет прошерстить, помогите найти, или где он приставует, чтоб его достать нужен очень срочно, или может у кого то есть куплю!

    • By Эдик Ибрагимов
      Использовать микроконтроллер семейства 8951
       
    • By Илья1964
      Нужен специалист, ориентирующийся в MotionLab3 для настройки серводрайвера EVEREST XCR ETHERCAT SERVO DRIVE (EVE-XCR-E) от компании INGENIA для привода отечественного BLDC (0,7 кВт). Энкодер магнитный от компании RLS. Мануал с описанием MotionLab3 можно скачать здесь https://doc.ingeniamc.com/mot3/documentation/motionlab3-user-manual, сам пакет здесь https://doc.ingeniamc.com/mot3/downloads  .  BLDC сидит на оси  линейного перемещения и должен вращаться влево-вправо. Никаких особых хитростей в движении мотора нет.
    • By Klumjuk
      Добрый день! Никак не могу найти резистор R97 на плате бумбокса. Можете определить на фото, либо как-нибудь объяснить мне, где он...
      Вот фотка основной платы,и платы зарядки.
      (На основной плате обозначен контролер заряда,если что)


×
×
  • Create New...