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

Использование последовательного порта для частотой генератора Arduino


ilya_orel00

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

Стоит задача спроектировать частотный преобразователь, частота которого будет меняться с помощью ПО на компьютере. Также должна быть возможность включить-выключить реверс, измерять напряжение в разных точках, выводя на экран. Проблема в том, что когда я ввожу в монитор порта с клавиатуры значения от 15 до 350 (соответствует изменению частоты от 10 до 100 Гц) на монитор порта выводится всякая ерунда, и на экране осциллографа ничего не меняется. Откуда-то берется 128, а e обращается в 0, хотя должна принимать значение, которое ей вводят с клавиатуры. Сам генератор, если им управлять переменным резистором, работает великолепно без нареканий. Он по сути генерирует синус на 3 выходах, фаза которого отличается на 120 градусов. Также вопрос. Если я ничего не ввожу, то переменная, которая считывает значение из порта автоматически в 0 обращается? 

void setup() {  
pinMode(11, OUTPUT);
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
TCCR2B = 0b00000010;  
TCCR2A = 0b00000001;  
TCCR0B = 0b00000010;  
TCCR0A = 0b00000001;  
TCCR1A = 0b00000001;  
TCCR1B = 0b00000010; 
Serial.begin(115200);
} 
void loop() {
int i; 
int b;
int c;
int e;
int inInt;
int sine[]={127,130,133,136,139,143,146,149,152,155,158,161,164,167,170,173,176,178,181,184,187,190,192,195,198,200,203,205,208,210,212,215,217,219,221,223,225,227,229,231,233,234,236,238,239,240,242,243,244,245,247,248,249,249,250,251,252,252,253,253,253,254,254,254,254,254,254,254,253,253,253,252,252,251,250,249,249,248,247,245,244,243,242,240,239,238,236,234,233,231,229,227,225,223,221,219,217,215,212,210,208,205,203,200,198,195,192,190,187,184,181,178,176,173,170,167,164,161,158,155,152,149,146,143,139,136,133,130,127,124,121,118,115,111,108,105,102,99,96,93,90,87,84,81,78,76,73,70,67,64,62,59,56,54,51,49,46,44,42,39,37,35,33,31,29,27,25,23,21,20,18,16,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,16,18,20,21,23,25,27,29,31,33,35,37,39,42,44,46,49,51,54,56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,102,105,108,111,115,118,121,124};  
 if (Serial.available()) {
    inInt = Serial.parseInt();
    Serial.print(inInt);
    Serial.print("\n");
    if(inInt!=0)
    {
    e=inInt;
    }
    Serial.print(e);
    Serial.print("\n");
  } 
  while(i<256)
  {
  int a=sine[i];
  analogWrite(11, a); 
  if(i<=85)
  {
  b=sine[i+170];
  analogWrite(6, b);
  }
  else
  {
    b=sine[i-86];
    analogWrite(6, b);
  }
  if(i<=170)
  {
   c=sine[i+85];
   analogWrite(9, c);
  }
  else
  {
   c=sine[i-171];
   analogWrite(9, c);
  }
  delayMicroseconds(e);
  i++;
  }
}

Безымянныоой.jpg

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

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

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

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

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

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

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

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

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

О боже, у нас действительно мультивселенная!

Потому что для меня, создающего прошивки для AVR на асме, данный пост выглядит как магия, и никак сказать иначе, так как здравого смысла я там не вижу :(

 

Зачем там что-то типа инициализация таймеров? Что такое pinmode 11? Это какой порт? A,B,C,D...? А вообще это какой МК?

И что, на форумах Ардуино некому помочь, надо лезть в песочницу к взрослым дядькам со своими кубиками?

 

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

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

И да, а что такое вообще analogwrite? Это только ардуинщикам понятно?

Исправлять косяки в своем коде никакой специалист не просит - вы его написали и значит сами в силах разобраться.

Но, всегда можно задать частный, конкретный вопрос, например, почему МК перезагружается спустя некоторое время после старта, почему оказался включен WD и как его отключать при старте МК и может быт причиной включенного МК случайная однократная запись по адресам в районе 0x00xx и ресет с перепрошивкой не помогает.

Или, почему ассемблеровская мнемоника SBI PINB,(1<<PB1) не меняет состояние пина PB1 на ATmega16.

Нет частных вопросов - значит этот уровень не для Вас, тогда нужно смотреть уровнем ниже и задавать правильные вопросы.

Например - для чего мне Ардуино, и даст ли оно мне верное понимание железки?

 

 

 

P.S. Я не пишу на Си, и тем более для Ардуино, 'int i;' чему равно i? В Java = 0, а здесь?

while(i<256), ну стало оно равно 256, что дальше? ждем 0xffffffff?

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

22 часа назад, ilya_orel00 сказал:

работает великолепно без нареканий

С таким кодом это вряд ли. Заодно вопрос, на кой все переменные типа int, когда значение не превышает 255?

 

9 минут назад, ilya_orel00 сказал:

е так с инициализацией

Наверно то, что на каждом старте цикла они затираются потому что кто-то додумался пихнуть их в тело цикла, не сделав даже статическими.

 

22 часа назад, ilya_orel00 сказал:

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

Как минимум надо какой-нибудь протокол прикрутить и обязательно с проверкой CRC.

 

22 часа назад, ilya_orel00 сказал:

Если я ничего не ввожу, то переменная, которая считывает значение из порта автоматически в 0 обращается?

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

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

@w5277c Ардуино придумали специально для того, чтобы начинающие программисты не копались в эльфийском языке ассемблере, а могли максимально легко формализовать свои желания в виде кода. Analogwrite это команда вывода шим с определенной скважностью на выходе определенного пина. Значения изменяются от 0 до 255.

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

5 минут назад, ilya_orel00 сказал:

@w5277c Ардуино придумали специально для того, чтобы начинающие программисты не копались в эльфийском языке ассемблере, а могли максимально легко формализовать свои желания в виде кода. Analogwrite это команда вывода шим с определенной скважностью на выходе определенного пина. Значения изменяются от 0 до 255.

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

 

Так это все-таки ШИМ а не DAC, который зависит от таймеров, которые должны быть правильно настроены, и их настройка может отличаться от камня к камню. Что соответсвенно может очень сильно повлиять на результат.

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

2 часа назад, w5277c сказал:

while(i<256), ну стало оно равно 256, что дальше? ждем 0xffffffff?

Нет, выход из функции loop.
А потом (предполагаю, т.к. код не весь и не понятно, где эта функция вызывается) опять вход в эту функцию и.... непонятно что там в этих переменных содержится. В чистом Си - там будет мусор, в плюсах - я не знаю.
Поэтому ТСу и рекомендовали разобраться с переменными.

Ардуина - зло. Т.к. не заставляет людей тщательно разбираться в коде и железке.
По слухам у ардуины нет отладчика. Я сам не пробовал эту штуку, сказать не могу, правда это или нет.
Но если правда, то как начинающий сможет понять без отладчика, что у него там происходит?

Зло в чистом виде.

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

21 минуту назад, LiVit сказал:

Зло в чистом виде.

Они этого не понимают "начинающие программисты")) все позаворачивали им, а что.. как.. да пофик..  ща быренько програмку наклепаю))) Они ШИМ от ЦАП отличить не могут..беда.. Это явно не к программистам относится...

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

какие они, на хрен, программисты. так, программописатели ...

Мудрость приходит вместе с импотенцией...

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

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

08.09.2021 в 19:10, ilya_orel00 сказал:

Стоит задача спроектировать частотный преобразователь, частота которого будет меняться с помощью ПО на компьютере.

Отдайте выполнение этой задачи специалисту(ам). У Вас ничего не выйдет, зря время потеряете.

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

15 часов назад, ilya_orel00 сказал:

тобы начинающие программисты не копались

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

 

15 часов назад, ilya_orel00 сказал:

могли максимально легко формализовать свои желания в виде кода.

Поэтому даже не утруждают себя изучением языка, на котором пишут? Не понимают, что такое переменные, как с ними работает железо/программист/компилятор. Не понимают элементарных основ программирования. В принципе не понимают работу того железа, которое держат в руках. А без понимания железа невозможно написать правильно работающий софт.

 

13 часов назад, LiVit сказал:

По слухам у ардуины нет отладчика.

Более того, у нее нет даже нормальной IDE. Та, что зовется ArduiniIDE по функционалу на порядок хуже обычного Notepad++. Ну а с отладчиком в AVR в принципе все сложно. Там JTAG, занимает кучу выводов, плюс программатор под него стоит недешево.

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

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

Более того, у нее нет даже нормальной IDE. Та, что зовется ArduiniIDE по функционалу на порядок хуже обычного Notepad++. Ну а с отладчиком в AVR в принципе все сложно. Там JTAG, занимает кучу выводов, плюс программатор под него стоит недешево.

О боже....
Про AVR не знал. Никогда с ними не работал. Когда пытались заставить - пригрозил что уволюсь )))

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

Не могу сказать что Arduino страшное чудовище, сделано криво и просто чтобы склепать что нибудь на быстро не углубляясь в программный язык. С того что вижу проблема вероятно в том что переменные int вписаны в loop, на "i", "b" и "c" это особо не влияет и так понятно, а вот "int e" и "int inInt" каждый цикл будут приписаны к нулю (если не вписали "int e = 0;" Arduino и так автоматически вписывает ноль если мне память не изменяет). Следует их перенести на самый верх перед "setup()", ну и вообще стараться не описывать переменные в "loop",  потом разобраться тяжело. Немного криво сделано считывание с Serial'a ну да ладно, работать вроде будет пусть хоть и коряво. Ну и массив не обязательно писать в одну линию в километр, можно после запятой перейти в следующую строку и т.д.  

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

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

Друзья, имхо вы несправедливы к ардуино. Ардуино это игрушки для детей младшего школьного возраста. Это как кукла барби или паровозик от игрушечной железной дороги. Назначение игрушки - пробудить у ребенка интерес - а что же там у игрушки внутри, что заставляет куклу открывать глаза и говорить "мама", а паровозик - крутить колесики? Под действием пробудившегося интереса   ребенек переходит к следующей стадии и разламывает игрушку - совершает акт познания истины. Игрушки нужны именно  для этого - вызвать акты познания. Точно так же и ардуина - она сделана быть разломанной.  

Другой вопрос, почему её хватают взрослые люди и как есть тянут в "продaкшн"?  Думаю что это вопрос к общему уровню грамотности. 

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

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

... Под действием пробудившегося интереса   ребенек переходит к следующей стадии...

Другой вопрос, почему её хватают взрослые люди и как есть тянут в "продaкшн"?  Думаю что это вопрос к общему уровню грамотности. 

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

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

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

3 минуты назад, LiVit сказал:

Чтобы пробудить интерес, я дал ребенку задание развести плату "новогодней елочки" с разноцветными светодиодами, подстроечным резистором, кнопками и STM32F030.
Потом научил его в кейле писать проги на си и отлаживать. Он был доволен как слон, когда это всё заработало.

Насколько Вы молодой Папа, сколько  сейчас вашему лет? 

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

4 часа назад, dasZebra сказал:

Насколько Вы молодой Папа, сколько  сейчас вашему лет? 

Вам зачем?
Сыну 16, мне 43.
В результате он пошел в техникум, учиться на программиста

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

2 часа назад, LiVit сказал:

Вам зачем?

Заинтересовало. Я своего то же привлекал. И пока он был школьником,  то  в авто мог тормозные колодки поменять, прогал для веба (я даже домен ему выделял собственный), паял всякие несложности типа металоискателей и стендикамов. Но не зашло. Совсем. Как отрезало. Даже отказался на Водительское разрешение учиться. 

 

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

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

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

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

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

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

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

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

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

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

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