#1 Re: Програмування Arduino » Генератор частоти з регулюванням шім » 2024-04-04 01:01:11

dimich пише:

Частота 32 кГц при тактовій 16 МГц доступна точно: це рівно 500 тіків. Наступна досяжна нижча частота буде при дільнику 501: [16e3/501] = 31936 Гц. Якщо округлювати задану користувачем частоту до найближчої досяжної, то відносна похибка виходить ≈ 0.1%. У китайських модулів заявлено 2%  smile

Якщо така точність задовільняє, то можна обійтись FastPWM режимом 16-бітного таймера.

Дякую, всё чітко і доступно. Я через FastPWM і вирішив питання, похибка дійсно мінімальна як показав ,,ослик,,
Такі показники мене ідеально влаштовують.

А ще не підкажете, потрібно буде двух канальний генератор з можливість здвиг фаз, скетч знайшов займуся. А питання, чи можливо одночасно буде реалізувати також шім по двух чи одному каналу?

#2 Re: Програмування Arduino » Генератор частоти з регулюванням шім » 2024-04-01 00:15:08

dimich пише:
Honey пише:

Частоту і коефіцієнт заповнення ШІМ на AVR не вийде встановлювати абсолютно довільно

Для невиликих частот можна генерувати ШІМ програмно з раціональним дільником, в певних межах точності.
Питання в тому, чи хоче ТС розібратись сам, чи чекає на готове рішення.

Ні в якому разі я не хотів, щоб за мене писали, я хочу сам розібратися. Так, після перечитаної інформації є результат, як раз і невеликі частоти і точність можлива з відхиленням, звісно, що такі питання для точних значень контролери не вирішують. Допишу в код екран і готово. Дякую

#3 Програмування Arduino » Генератор частоти з регулюванням шім » 2024-03-31 12:16:43

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

Доброго дня шановні.
Багато хто в курсі про китайський модуль pwm-generator-150khz
Дуже потрібна допомога з кодом для atmega 328 (аналог роботи цього модуля)щоб не використовувати модуль, і навіть не потрібна максимальна частота вистачить 32кГц, але потрібно можливість регулювання частоти і шім.

Буду вдячний любій інформації. Дякую

#4 Програмування Arduino » Помогите разобраться со скетчем. » 2019-04-12 23:38:52

GmmC
відповідей: 1

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


#include "SIM900.h"
#include <SoftwareSerial.h>

#include "sms.h"
#include "call.h"
SMSGSM sms;
CallGSM call;

//=================Пины 2 и 3 для Подключения GSM модуля

int sensor1=0;
int flag1=0;
boolean started=false;
char smsbuffer[160];
char n[20];
String n1 = "+380XXXXXXXXX";
String input_string = "";
String smsContent = "";
char sirena[] = "Sirena  vkluchena!";
char PowerOFF[] = "Snyato s ohrani";
char smsDv[] ="Wnimaniye! Dvijeniye na objekte!";
char smsW[] ="Postanovka na ohranu!";
char pos;
char sendsms[160];

void setup() {

pinMode(10, OUTPUT); // Пассивный зумер (сигнал)
pinMode(7, OUTPUT);

Serial.begin(9600);
  pinMode(4, INPUT); // датчик движения
//  digitalWrite(4, HIGH);
  pinMode(5, INPUT); // еще какой-нибудь датчик
//  digitalWrite(5, HIGH);

       if (gsm.begin(9600)) {
          Serial.println("\nstatus=READY");
          started=true;
     } else Serial.println("\nstatus=IDLE");

}
void loop() {

//===========================Первое срабатывание датчика движения
  if ((digitalRead(5)==HIGH) && sensor1==1 && flag1==0){
    n1.toCharArray(n,20);
    sms.SendSMS(n, smsDv);               // Посылаем СМС о том, что есть движение
    sms.DeleteSMS(1);memset(n,0,20);
    char smsbuffer[160]="";
    flag1++;
    delay(5000); // Ждем 5 секунд
  }
//===========================Повторное срабатывание датчика движения
  if ((digitalRead(5)==HIGH) && sensor1==1 && flag1==1){
    n1.toCharArray(n,20);
    sms.SendSMS(n, sirena);            // Посылаем СМС о том, что включена сирена
    sms.DeleteSMS(1);memset(n,0,20);
    char smsbuffer[160]="";
    flag1++;
  }

  if (flag1>=2){
    tone(10, 2780, 200); // Сирена
  }


pos = sms.IsSMSPresent(SMS_UNREAD); // смотрим непрочитанные СМС
      if (pos) {                    // Если непрочитанные СМС есть, то...
       
getsms(); // получаем непрочитанную СМС

     if (input_string=="0"){Serial.print("Snyato s ohrani!");n1.toCharArray(n,20); sms.SendSMS(n, PowerOFF); sms.DeleteSMS(1);memset(n,0,20); // Команда "0" - снять с охраны
     sensor1=0;digitalWrite(7,LOW);input_string=""; char smsbuffer[160]=""; flag1=0;}
     
     if (input_string=="1"){Serial.print("Postanovka na ohranu!");n1.toCharArray(n,20); sms.SendSMS(n, smsW); sms.DeleteSMS(1); memset(n,0,20); // Команда "1" - Поставить на охрану
     sensor1=1; input_string=""; char smsbuffer[160]=""; flag1=0;}
       
        sms.DeleteSMS(pos); // удаляем СМС  из симки
      }
}
void getsms()
{
sms.GetSMS(1,n,20,smsbuffer,160);
input_string =String(smsbuffer);
          }

Скетч использует 12036 байт (37%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 1099 байт (53%) динамической памяти, оставляя 949 байт для локальных переменных. Максимум: 2048 байт.

Инфа в мониторе порта
00:21:28.345 -> RIC: ⸮⸮⸮
ATT: OK
00:21:28.956 -> RIC: ATT: OK
RIC: ⸮⸮⸮

00:21:28.990 -> ERROR
00:21:28.990 ->
115200
ATT: OK
00:21:39.169 -> RIC:
ATT: OK
00:21:39.781 -> RIC: ATT: OK
RIC:

00:21:39.781 -> ERROR
00:21:39.781 ->
ERROR: SIM900 doesn't answer. Check power and serial pins in GSM.cpp

00:21:58.068 -> status=IDLE

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