#1 Re: Програмування Arduino » ZMCT103C + EmonLib допоможіть з нелінейною характеристикою » 2024-04-07 07:26:09

Чітка відповідь! Дякую!
Буду дивитись в напрямку програмної правки або шукати інше апаратне рішення...

#2 Програмування Arduino » ZMCT103C + EmonLib допоможіть з нелінейною характеристикою » 2024-04-06 13:02:08

khalimon
відповідей: 5

Доброго дня!
Роблю проект, де задіян модуль датчика струму.
Вимірювати струм треба до 5а
Програмую на ардуіно іде, використовую бібліотеку EmonLib.
Проблема наступна - при струмі до 1ампера - вимірювання відповідають дійсності,
якщо вище - то вже показники відрізняються від реальних в меншу сторону.
Нагрузка активна без індуктивної частини.
з коефицієнтом в emon1.current(pin, 30); грався в різні боки.

Буду вдячний за пораду

#3 Re: Програмування Arduino » Нужна помощь в создании двух стабильных меандров 50гц » 2022-09-10 15:45:56

Honey пише:

Даташит на ATMega328P, параграф 15 "16-bit Timer/Counter1 with PWM".
Если не хотите разбираться самостоятеьно, обращайтесь, сделаю.

Вернулся опять к этому проекту. Хочу всё таки побороть данный вопрос. Есть пару сотен грн. Если устроит, то готов обратится.

#4 Re: Програмування Arduino » Нужна помощь в создании двух стабильных меандров 50гц » 2022-08-22 07:14:39

Honey пише:

Даташит на ATMega328P, параграф 15 "16-bit Timer/Counter1 with PWM".
Если не хотите разбираться самостоятеьно, обращайтесь, сделаю.

Очень благодарен! Буду иметь ввиду.

#5 Re: Програмування Arduino » Нужна помощь в создании двух стабильных меандров 50гц » 2022-08-22 07:13:21

Очень благодарен!
А если нужно будет сдвиг инвертировать, т.е. сдвинуть канал А относительно B, это будет так?

OCR1A = 234;
OCR1B = 312;

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

#6 Програмування Arduino » Нужна помощь в создании двух стабильных меандров 50гц » 2022-08-21 11:10:48

khalimon
відповідей: 8

Приветствую!

Работаю над проектом для атмега328р + кварц 16мгц (или ардуино нано 3)

Нуждаюсь в создании 2х меандров 50гц со сдвигом друг от друга 5мс  (могу приложить осциллограмму, но не пойму как тут это сделать)
Меандры должны быть на разных пинах.

Очень важна именно качественная привязка второго меандра к первому. В loop будет достаточное количество вычислений, поэтому важно, что бы меандры работали независимо от основного кода программы.
Заранее благодарен за помощь!

#7 Re: Апаратні питання » Не работает чип atmega328p pu Прошу помощи по настройке фьюзов » 2022-08-01 20:29:46

Honey пише:

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

Супер!!! Заработало!
ОООЧЕНЬ спасибо!!!
Дуже дякую!!!

#8 Re: Апаратні питання » Не работает чип atmega328p pu Прошу помощи по настройке фьюзов » 2022-08-01 19:43:43

Honey пише:

Atmega328P кварц 16МГц, загрузчик 512байт(256слов):
E:FD, H:DE, L:FF

а можно файл конфига в hex на почту khalimonav@ukr.net (в TL866 вручную не прописуется)

#9 Re: Апаратні питання » Не работает чип atmega328p pu Прошу помощи по настройке фьюзов » 2022-08-01 19:05:31

renoshnik пише:
khalimon пише:

Я по всякому пробовал. И от внутреннего кварца в том числе. Мне бы фьюзы у кого то списать с uno...

А в "досках" почему не посмотришь ???

А в досках - это где?

#10 Re: Апаратні питання » Не работает чип atmega328p pu Прошу помощи по настройке фьюзов » 2022-08-01 18:48:51

Honey пише:

https://www.engbedded.com/fusecalc/
Ext. Crystal Osc., частота чтобы соответствовала частоте кварца.
Как определяете что "не работает"? если залить "блинк", мигает?

У меня на проектной плате светодиод стоит , пару реле и бузер. При запуске проц должен их включать поочерёдно, типа тест проходит.
Но при включении тишина...

#11 Re: Апаратні питання » Не работает чип atmega328p pu Прошу помощи по настройке фьюзов » 2022-08-01 18:44:12

Я по всякому пробовал. И от внутреннего кварца в том числе. Мне бы фьюзы у кого то списать с uno...

#12 Апаратні питання » Не работает чип atmega328p pu Прошу помощи по настройке фьюзов » 2022-08-01 16:51:56

khalimon
відповідей: 11

Приветствую!
Такая проблема.
Есть готовый проект. Скетч писался на ардуино ide 1.8.6 и отлаживался на ардуино нано.
Собрал пробную печатную плату, где использовал голый чип атмега328р pu ( длинный, 28 ног, вставленный в dip панель).
Кварц 16 мгц + 2 конденсатора 22пф. Avcc, vcc, aref  на + 5в
Reset через 10к на 5в.
Точное напряжение питания 4.74в ( так задумано и связано с подключением ntc датчиков ).

В ардуино ide выставил плату UNO, скомпелировал hex файл и с загрузчиком и без загрузчика.
Шил программатором TL866 через панель ( НЕ внутрисхемно ). Прошивается нормально.
Не работает никак.
Чувствую, что с фьюзами что то не то делаю.
Не хотелось бы покупать uno для прошивки.
Прошу помощи в запуске голого чипа.
Заранее благодарен!

#13 Re: Програмування Arduino » Глюк связи двух ардуино нано » 2020-02-26 17:44:01

khalimon пише:
YK пише:

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

..

Несколько раз проверил, вроде нормально работает. В течении недели планирую полностью собрать агрегат. Если хоть раз глюканет - нужно будет контрольную сумму впихнуть. За 200грн поможешь?

#14 Re: Програмування Arduino » Глюк связи двух ардуино нано » 2020-02-25 21:26:34

Вообщем сделал в одну строку приём/передачу - получасовой режим отработал впервые до конца. Но всё же успел на табло увидеть разовый глюк, на работу он не отразился,но всё же присутствовал.  Теперь думаю , что контрольную сумму всё же придется использовать.
Ниже мой рабочий текущий вариант

передатчик
if ( millis()-ms8>500) {
if (start==5) {a='5';start=0;}else a = String(start);
StringtoSend=String(timeHour)+";"+String(timeMin)+";"+String(t)+";"+a+":";
Serial.println(StringtoSend);
ms8=millis();        }

приемник

void SerialREAD (){
if (!Serial.available()) return;
String data = Serial.readStringUntil('\n');
str1="";
rr=0;
le=data.length();
for (int qq=0; qq<=le;qq++) {
if (data[qq]==';' || data[qq]==':') {
  switch (rr) {
    case 0:
    timeHour1 = str1.toInt();
     break;
     
    case 1:
    timeMin1 = str1.toInt();
     break;
     
    case 2:
    temperatura1 = str1.toInt();
     break;
     
    case 3:
    start = str1.toInt();
    if (start==5) {flagdisplay=4; zvuk=1;start=0;}
     break;

  }
  rr++;
  str1="";
  }
    else str1=str1+data[qq];

   }

}

#15 Re: Програмування Arduino » Глюк связи двух ардуино нано » 2020-02-25 15:49:31

YK пише:

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

Если ваш вариант заработает - готов кинуть 200грн(только если вы с Украины), поэтому прошу помочь довести до конца эту часть кода...

#16 Re: Програмування Arduino » Глюк связи двух ардуино нано » 2020-02-25 15:18:14

YK пише:

char *str;  это char*


Сделай
String myStr=str;

затем используй
myStr.toInt();

моя ошибка в первом примере , я просто наводку давал


Запустил ваш вариант - висит ни на что не реагирует....
Чувство, что цикл while висит...
Вот приёмник:
if (millis()-tim>500) {
                       
                       SerialREAD ();//чтение данных с силовой платы 1 раз в 
                       tim=millis();
                     
                        }

....................................

void SerialREAD (){

if (!Serial.available()) return;

String data = Serial.readStringUntil(":");
char *p = data.c_str() ;
char *str;
String myStr=str;
int i=0;

while ((str = strtok_r(p, ";", &p)) != NULL){
 
   switch (i){
   case 0:
     timeHour1 = myStr.toInt();
   break;
   case 1:
     timeMin1 = myStr.toInt();
   break;
   case 2:
    temperatura1 = myStr.toInt();
   break;
   case 3:
    start = myStr.toInt();
   break;
   
    i++;
            }

}

if (start==5) {flagdisplay=4; zvuk=1;start=0;}   

}



Ниже передатчик

if ( millis()-ms8>500) {

if (start==5) {a='5';start=0;} else a = String(start);
StringtoSend=String(timeHour)+";"+String(timeMin)+";"+String(t)+";"+a+":";
Serial.println(StringtoSend);
ms8=millis();
}

#17 Re: Програмування Arduino » Глюк связи двух ардуино нано » 2020-02-25 14:08:16

YK пише:

Передавай данные одним пакетом например для простоты в.....

Не могу помять, где ошибка?
Пишет:
request for member 'toInt' in 'str', which is of non-class type 'char*'
ругается на строки синего цвета...
Переменные timeHour1,timeMin1,t, start - у меня обозначены как int. Не могу понять где ошибка??

void SerialREAD (){

if (!Serial.available()) return;
String data = Serial.readStringUntil(":");
char *p = data.c_str() ;
char *str;

int i=0;

while ((str = strtok_r(p, ";", &p)) != NULL){
 
   switch (i)
   case 0:
     timeHour1 = str.toInt();
   break;
   case 1:
     timeMin1 = str.toInt();
   break;
   case 2:
    t = str.toInt();
   break;
   case 3:
    start = str.toInt();
   break;
   
    i++;
}

#18 Re: Програмування Arduino » Глюк связи двух ардуино нано » 2020-02-25 12:16:31

YK пише:

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

Нашел недоработку в коде передатчика, который мог притормаживать, исправил, проверяю. Если не поможет попробую переделать в строку по вашему способу. По Вашему опыту при моём расстоянии между платами (реально 40-60см) данный способ нормально должен работать?

#19 Re: Програмування Arduino » Глюк связи двух ардуино нано » 2020-02-25 09:57:08

YK пише:

Передавай данные одним пакетом например для простоты в одной строке с разделением "," или ";" и терминатор в конце например ":"
String toSend=String(timeHour)+";"+String(timeMin)+.....":";


ну и на приемнике

String data = Serial.readStringUntil(":");
 char *p = data.c_str() ;
 char *str;
int incomeint[5];
int i=0;
 while ((str = strtok_r(p, ";", &p)) != NULL){ // delimiter is the semicolon
   Serial.println(str);
    incomeint[i]=str.toInt();
    i++;
}

как то так , incomeint  будет содержать твои данные,

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

Serial.println('s');             
Serial.println(timeHour);
Serial.println(timeMin);
Serial.println(t);
Serial.println(start);

на приёме
с=Serial.read();
if (c=='s') {
timeHour1 = Serial.parseInt ();
timeMin1 = Serial.parseInt ();
temperatura1 = Serial.parseInt ();
start = Serial.parseInt ();}
                                  else Serial.flush ();

Будет ли разница при передачи строки? В любом случае попробую варианты... Спасибо!

#20 Re: Програмування Arduino » Глюк связи двух ардуино нано » 2020-02-25 09:46:02

vvr пише:

rs485

Расстояние всего 50см. rs485 действительно улучшит ситуацию?

#21 Програмування Arduino » Глюк связи двух ардуино нано » 2020-02-25 00:22:36

khalimon
відповідей: 17

Приветствую!
Есть 2 связаные по rx tx ардуинки. Управляют сушилкой.
Первая является устройством ввода и отбражения данных (Ввод времени работы и установка температуры - запуск, отображение оставшегося времении и текущей температуры).
Вторая управляет силовой платой, отсчитывает оставшееся время и с интервалом в пол секунды передаёт для отображения в первую ардуинку оставшееся время и текущую температуру.

Код на принимающей ардуинке, которая есть индикация
if (millis()-tim>500) {
                       
                       SerialREAD ();//чтение данных с силовой платы 1 раз в  0.5c
                       tim=millis();
                     
                        }
.......................................


void SerialREAD (){

if (!Serial.available()) return;

timeHour1 = Serial.parseInt ();
timeMin1 = Serial.parseInt ();
temperatura1 = Serial.parseInt ();
start = Serial.parseInt ();


}


Ниже код с передающей ардуинки (силовая плата)

if ( millis()-ms8>500) {
                               Serial.println(timeHour);
                               Serial.println(timeMin);
                               Serial.println(t);
                               Serial.println(start);

ms8=millis();
                }


В этом виде вроде как работает, Но:
- в течении 10-15минут происходит сдвиг принимаемых данных, соответственно переменные получают неправильные значения.
- если убрать или изменить  периодичность опроса буфера приёма  относительно передающей платы, то принимающая начинает сильно тормозить (даже кнопки нажать затруднительно).
- пробовал  serialEvent - вообще висит!!
- пробовал флаги посылать и буфер чистить flush () - ничего не изменилось - ч/з время опять сдвиг
Это мой третий более менее серьёзный проект, прошу помощи в реализации стабильного обмена данными между ардуинками.

Підвал форуму