Jump to content

Recommended Posts

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

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

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


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

Share this post


Link to post
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);
  }
}

 

 

Share this post


Link to post
Share on other sites

Вебинар «Новинки и решения Traco для промышленных и отраслевых приложений» (28.10.2021)

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

Posted (edited)
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
Оверквотинг

Share this post


Link to post
Share on other sites

Особенности вывода ключей PROFET+2 12V из состояния блокировки

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

Подробнее

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

Share this post


Link to post
Share on other sites

Беспроводные интерфейсы умного проSTранства - преимущества и ограничения

При автоматизации больших территорий используются протоколы беспроводной связи ZigBee, BLE/Bluetooth, LoRaWAN, Sigfox, Thread, проприетарные протоколы 433/868 МГц и NFC. Компания STMicroelectronics предлагает для них приемопередающие модули и системы на кристалле, специализированные контроллеры, ИС для создания RFID-меток, а также экосистему из аппаратных и программных продуктов для разработки, отладки и поддержания работоспособности. Разберем подробно решения STMicroelectronics для передачи данных по этим протоколам.
Подробнее

/* Locate array[] in flash memory */
const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 };

или нет?

Share this post


Link to post
Share on other sites

Реле TE Connectivity – надежная коммутация, доступная со склада Компэл

Компэл предлагает огромный выбор реле от ведущего производителя электромеханических коммутирующих устройств – компании TE Connectivity. На складе представлен широкий ассортимент реле в миниатюрных и стандартных корпусах для сигнальных, высокочастотных и силовых применений.
Подробнее

Posted (edited)

@IMXO 

const unsigned char array[752] PROGMEM = { 0x01,0x02.../* и так далее 752 элемента*/ };

 

Edited by RockMANN

Share this post


Link to post
Share on other sites
12 часов назад, RockMANN сказал:

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

А где же тогда эти данные хранятся ? Откуда берутся при обращении к ним ? :huh:

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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 выдает ее по результату так сказать. а мне нужно чтобы она менялась постепенно именно глобально во всем коде. как быть?

Share this post


Link to post
Share on other sites
19 минут назад, Дмитрий Вас сказал:

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

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

Share this post


Link to post
Share on other sites
1 минуту назад, Дмитрий Вас сказал:

как?

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
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

Share this post


Link to post
Share on other sites
5 минут назад, Дмитрий Вас сказал:

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

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

Share this post


Link to post
Share on other sites
Только что, Alex сказал:

вывод на дисплей

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
1 минуту назад, Alex сказал:

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

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

Share this post


Link to post
Share on other sites
6 минут назад, Дмитрий Вас сказал:

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

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

Цитата

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

 

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites
Posted (edited)

Доброго дня Всем.
Вопрос по регистрам и флагам МК AVR.
Насколько я понимаю, регистр это байт информации под каким-то именем. Каждый бит информации в этом байте называется флагом. С помощью этих флагов мы как-то общаемся с МК. 
Верно?
Где ещё получить информацию по регистрам и флагам, если я здесь написал полнейшую чушь?
Спасибо ______________ Юрий.

Edited by Юрий_Нд

Share this post


Link to post
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...

  • Сообщения

    • А как работает step-up или инвертирующий преобразователь сможете понять? Принцип работы знаете? Катушка она и Африке катушка)
    • Ну как бы держит, да: если исходить из этого - тогда вообще всё очень просто, мотать начинать сразу 102 витка косичкой из сложенных параллельно семи проводов вторички и 1428/102 = 14 проводов первички: взаимосвязь обмоток будет максимальная, будет ли это хорошо - вопрос второй. С переворотом половины первички, правда, сложности выйдут, наверное...хотя, если разделить на две секции, а переворот вторички погоды не делает - то вообще по 51 витку такой косичкой в секцию - и все дела: никакой межслоевой и межобмоточной изоляции, красота.... современным термостойким проводом наверное такое вполне осуществимо - спичкой не так просто обжечь лак, как он обычно вспыхивал на советском проводе. ПЭТВ или ПЭТ-2 совсем другое в этом плане качество, как мне кажется Да, есть у меня бумага конденсаторная 0.01 мм, вполне подойдёт, думаю  
    • Из опыта, "Помещаемость" обмоток в окне не зависит от способа намотки. Мотал, на одинаковых сердечниках, одинаковые трансформаторы. Один внавал, второй - рядовой. Окно оказалось заполнено одинаково. Межслойная и межобмоточная изоляция - обычная офисная бумага. Один и два слоя. Если расчёт сделан правильно, без разницы, как мотать. Кроме того, есть изоляционные плёнки с серьёзной электрической прочностью и весьма небольшой толщины. Скажем, ПЭТ-Э, 10 мкм - 220 кВ/мм. Или 2,2 кВ, для толщины 0,01 мм. А что, изоляция самого провода уже ничего не держит? Для случая более высоких напряжений придуман ПЭЛШО. Так что, никто не мешает.
    • Понял , посмотрю напишу тогда. Фото усилителя внутри.
    • На резистор R9 просто подайте ваш ШИМ, должен быть аналогичный єффект. Для надёжности цепочку R9-C1 повторить ещё 2 раза. Тогда точно не проскочит гармоника от ШИМ-а. Кстати, так для информации: есть интегральные I2C цифровые потенциометры, 6 бит не очень дорогие. Но, на их выводах напряжение не должно превышать рамок питания микросхемы-потенциометра, поэтому его выход надо будет усилить как по той же схеме с операционниками.
    • На самом деле, 50. (850 - 29) х 29 / 470 = 50,6 Ватта. У Вас ток анода 29 / 470  = 61,7 мА, при напряжении А - К 850 - 29 = 821 Вольт. По даташиту, этой точке должно соответсвовать смещение ~ 40 Вольт. Что существенно отличается от Вашего случая. Синим показана характеристика для резистора автосмещения в 470 Ом. Согдасно ей, анодному напряжению 850 Вольт соответсвует смещение в 37 Вольт, с током анода ~ 80 мА и мощностью рассеяния на аноде ~64 Ватта. Понятно, что конкретный экземпляр может отличаться от даташита. Но, всё же стоит проверить режим лампы и качество окружеющих её конденсаторов - перехдного, на сетку и блокирующего, в катоде. Последний может быть причиной ухудшения баса.

  • Цифровые термостаты, 1/2 канала, 5В/12В/24В/110-220В

  • Similar Content

    • 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 на плате бумбокса. Можете определить на фото, либо как-нибудь объяснить мне, где он...
      Вот фотка основной платы,и платы зарядки.
      (На основной плате обозначен контролер заряда,если что)


    • By Klumjuk
      Сгорел контроллер питания в колонке, батарейка 7.4 вольта. Помогите подобрать такой же контролер, либо аналог. Весь интернет обрыл,ничего не нашёл (

    • By Иванов Владимир
      Здравствуйте! Я профан в этой теме, но по работе нужно. Хочу собрать так скажем приёмник на микроконтроллере, чтоб демодулировал сигнал. Сигнал собираюсь подавать с компа. Типо на мк подключённый к компу послать модулированный сигнал. Задача в том чтоб запрограммировать сам мк на демодуляцию. Какой мк и отладочную плату посоветуете?
×
×
  • Create New...