#1 Re: Програмування Arduino » переривання по usart atmega » 2024-10-12 09:14:55

Проектую на ардуіно нано 328р
На мекетці вхід Rx я закоротив з D2, тобто INT0.
По D2 переривання постійно робить, але імпульс вимірює лише після прийнятого символа 5. (див. скетч)
В мене вимірює, але щось не те. Ще й в буфері щось зайве гуляє..

Якщо хтось може допомогти готов віддячити в межах 500грн

#2 Програмування Arduino » переривання по usart atmega » 2024-10-11 21:41:14

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

Доброго дня!
Atmega8a, 8mhz, Arduino IDE
У періодичних пакетах (1 пакет на 0,8сек) на вході Rx (швидкість 9600) після певного прийнятого символу (конкретно цифра 5) необхідно порахувати довжину першого імпульсу (не важливо до якого символу він відноситься, важлива довжина саме першого імпульсу після прийнятої 5ки). Прошу знавців ткнути у потрібному напрямку.
Дякую!


#include <HardwareSerial.h>
volatile unsigned long i, dlina, ms3;
volatile bool d;
bool fl;


#define led   13    // светодиод


void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT);
  pinMode(led, OUTPUT);

  Serial.attachSerialInterrupt(SerialInterrupt);
  attachInterrupt(0, isr, CHANGE);
}


void SerialInterrupt() {

if (UDR0 == '5')   d = 1;
}


void isr() {
  if (millis() - ms3 > 1000 && fl == 1) fl = 0;

  if (fl == 0 && d == 1) {
    if (digitalRead(2) == 0 ) i = micros();
    else {
      dlina = micros() - i;
       //  if (dlina > 100 && dlina < 110) digitalWrite(led, 1); else digitalWrite(led, 0);
       Serial.print("dlina "); Serial.println(dlina);
      fl = 1;
      d = 0;
      ms3 = millis();
    }
  }
}


void loop() {

}

#3 Re: Програмування Arduino » TM1637 помилка при компиляціі для чіпа атмега328 » 2024-09-19 21:32:02

Нічого не зрозумів... Встановив нову бібліотеку - запрацювало.
Але стояла стара, раніше працювало...
Заработало - та й добре.
Дякую за відповіді!

#4 Re: Програмування Arduino » TM1637 помилка при компиляціі для чіпа атмега328 » 2024-09-19 16:22:38

При виборі плати ардуіно нано все компелюється.
При виборі саме чіпа атмега328 - видає помилку "ошибка коммиляции для atmega328"
Всі інші проекти компилюються норм і на плату ардуіно і на чіп 328, 88, 8 та інші.
Проблема з'явилась при підключенні бібліотеки тм1637...

#5 Програмування Arduino » TM1637 помилка при компиляціі для чіпа атмега328 » 2024-09-19 12:49:26

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

Доброго дня!
Така проблема:
TM1637 помилка при компиляціі для чіпа атмега328,
хоча для ардуіно нано все норм...

Колись була така проблема для OLED, додатково підключив #include <Wire.h> і все пішло...
Тут гадаю що щось треба вказати саме для чіпа.

Підскажіть будь ласка...


#include <avr/wdt.h>
#include <EEPROM.h>
#include <TM1637.h>
#define CLK A5 
#define DIO A4
TM1637 disp(CLK, DIO);

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

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

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

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

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

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

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

Honey пише:

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

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

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

Honey пише:

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

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

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

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

OCR1A = 234;
OCR1B = 312;

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

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

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

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

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

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

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

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

Honey пише:

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

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

#13 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 вручную не прописуется)

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

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

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

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

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

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

Honey пише:

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

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

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

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

#17 Апаратні питання » Не работает чип 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 для прошивки.
Прошу помощи в запуске голого чипа.
Заранее благодарен!

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

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

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

..

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

#19 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];

   }

}

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

YK пише:

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

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

#21 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();
}

#22 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++;
}

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

YK пише:

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

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

#24 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 ();

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

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

vvr пише:

rs485

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

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