Jump to content
Vladimir1960

USART-Передача данных.

Recommended Posts

В ‎19‎.‎02‎.‎2017 в 17:58, Vladimir1960 сказал:

 Помогите передать данные ADC по SMS.

UART.zip

Я делал так:

после того как убедились, что GSM модуль полностью запустился и готов к работе

		Str_Uart_Send("ATE0\r"); // выключаем эхо
		Str_Uart_Send("AT+CMGF=1\r"); // текстовый формат
		Str_Uart_Send("AT+CSCS=\"GSM\"\r"); // кодировка GSM (ASCII)
Str_Uart_Send("AT+CMGS=\"+79100000000\"\r");
Str_Uart_Send("Battery: ");
unsigned char battery_wrem = battery;
unsigned char desyatok = 0;
while(battery_wrem >= 10){battery_wrem = battery_wrem - 10; desyatok++;}
UARTSend(0x30 + desyatok); _delay_ms(200);
UARTSend(0x2E); _delay_ms(200); // точка
UARTSend(0x30 + battery_wrem); _delay_ms(200);
UARTSend(0x1A); // код конца текста смс и отправка

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

Бонус:

Str_Uart_Send("ATD+79100000000;\r"); // дозвон
...
Str_Uart_Send("ATH\r"); // кладем трубку


Str_Uart_Send("ATD#100#\r"); // запрос баланса

 

Share this post


Link to post
Share on other sites

 void SMS()
    {
    void UART_String(const char *msg);
    void UART_CMD(const char *msg);
    UART_String("AT+CMGF=1");
    UART_String("AT+CMGS= +79876543210\r\n");
    Wait(1);
    UART_String("AT+CMGF=1\r\n");
    Wait(1);
    UART_String(" ATE0\r\n");
    Wait(3);
    
     UART_Char(PCF_hour/10+0x30);  //Преобразуем часы
    UART_Char(PCF_hour%10+0x30);  //Преобразуем часы
    UART_Char(':');
    UART_Char(PCF_min/10+0x30);   //Преобразуем минуты
    UART_Char(PCF_min%10+0x30);   //Преобразуем минуты
    UART_Char(':');
    UART_Char(PCF_sec/10+0x30);   //Преобразуем секунды
    UART_Char(PCF_sec%10+0x30);   //Преобразуем секунды
    UART_Char(0x0D);
    UART_Char(PCF_day/10+0x30);   //Преобразуем число 
    UART_Char(PCF_day%10+0x30);   //Преобразуем число 
    UART_Char('.');
    UART_Char(PCF_month/10+0x30); //Преобразуем месяц
    UART_Char(PCF_month%10+0x30); //Преобразуем месяц
    UART_Char('.');
    UART_Char('2');               //Преобразуем век
    UART_Char('0');               //Преобразуем век
    UART_Char(PCF_year/10+1+0x30);//Преобразуем год
    UART_Char(PCF_year%10+6+0x30);//Преобразуем год
    UART_Char(0x0D);
    UART_String("Ip ");
    Wait(1);
    UART_Char(read_adc(4)/10*(2.56*(50/2.56)/1023)+0x30); //Десятки ток 
    Wait(1); 
    UART_Char(read_adc(4)%10*(2.56*(50/2.56)/1023)+0x30);//Еденицы ток
    Wait(1);
    UART_Char('.');
    Wait(1);
    UART_Char(read_adc(4)%10*(2.56*(50/2.56)/1023)+0x30); //Десятые ток
    Wait(1);
    UART_String(" A");
    UART_Char(0x0D);
    UART_String("Up ");
    UART_Char(read_adc(3)/10*(2.56*(50/2.56)/1023)+0x30);   //Десятки
    Wait(3);
    UART_Char(read_adc(3)%100*(2.56*(50/2.56)/1023)+0x30);   //Еденицы
    Wait(3);
    UART_Char('.');
    Wait(3);
    UART_Char(read_adc(3)/10*(2.56*(50/2.56)/1023)+0x30);   //Десятые
    Wait(3);
    UART_String(" V");
    UART_Char(0x0D);

         Где-то что-то я пропустил .

      

Share this post


Link to post
Share on other sites

Приглашаем на вебинар «Новинки и уникальные решения Molex. На что обратить внимание и почему»

15 апреля приглашаем на вебинар, который будет интересен разработчикам и инженерам-схемотехникам, интересующимся тенденциями рынка, новыми перспективными решениями для соединений «провод-провод», «провод-плата», «плата-плата». Для инженеров КИПиА и IT будут освещены уникальные решения Molex для «удлинения» интерфейсов HDMI, DisplayPort и USB даже в условиях сильного зашумления, а также семейство бесконтактных датчиков Contrinex. Помимо этого, будет уделено внимание дальнейшему развитию направления антенн, где Molex имеет ряд интересных и уникальных решений.

Подробнее

как минимум

UART_String("AT+CSCS=\"GSM\"\r"); // кодировка GSM (ASCII)

и номер обрамляется в кавычки UART_String ("AT+CMGS=\"+79100000000\"\r");

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

Share this post


Link to post
Share on other sites

Ребята. У не пожалейте рабочий код отправки смс в atmel studio c, уже все перепробовал, ни чего не получается. SIM800

Share this post


Link to post
Share on other sites
                     

Выбираем преобразователь для портативных устройств

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

Читать статью

чуть выше выкладывал пример отправки смс

на команду AT\r модуль выдает ответ ОК?

покажите как вы отправляете?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. 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...

  • Similar Content

    • By artos5
      Приветствую всех на этом форуме!
      Есть необходимость измерять сигнал при помощи данного АЦП. С помощью этого АЦП можно измерять 4 аналоговых не дифференциальных сигнала . Схема следующая:
      Schematic_Temp_opto_sens_V2_20190817124112.pdf
      Картинками с более низким разрешением:
      библиотеку за основу взял эту:
      https://github.com/nsaspook/nidaq700/blob/master/supermoon/example/ADS1220.c
      Путем незначительного допиливания, получилась такая библиотека:
       
      Поправил только эти функции:
      void ADS1220SendByte(unsigned char Byte) { unsigned char Result = 0x01, i=0, flg=0; MOSI_LO; Delay_us(1); for(i=0;i<8;i++) { SCK_LO; //ADC_CLK=0 Delay_us(4); if (flg) MOSI_LO; Delay_us(1); SCK_HI; //ADC_CLK=1 Delay_us(1); if (Byte&Result){ MOSI_HI; flg=1; } else MOSI_LO; Delay_us(4); Result<<=1; } SCK_LO; //ADC_CLK=0 } unsigned char ADS1220ReceiveByte(void) { unsigned char Result = 0, i=0; for(i=0;i<8;i++) { Result<<=1; SCK_LO; //ADC_CLK=0 Delay_us(5); //Delay_us(5); SCK_HI; //ADC_CLK=1 Delay_us(3); if (MISO) Result++; Delay_us(2); } SCK_LO; //ADC_CLK=0 return Result; } И добавил эту функцию:
      void ADS1220Config_MUX_GAIN(uint8_t mux, uint8_t gain) { unsigned Temp; ADS1220ReadRegister(ADS1220_0_REGISTER, 0x01, &Temp); // clear prev value; Temp &= 0x0f; Temp |= gain; Temp |= mux; // write the register value containing the new value back to the ADS ADS1220WriteRegister(ADS1220_0_REGISTER, 0x01, &Temp); ADS1220ReadRegister(ADS1220_1_REGISTER, 0x01, &Temp); // clear prev DataRate code; Temp &= 0x1f; Temp |= (ADS1220_DR_600 + ADS1220_CC); // Set default start mode to 600sps and continuous conversions // write the register value containing the new value back to the ADS ADS1220WriteRegister(ADS1220_1_REGISTER, 0x01, &Temp); } ADS1220.h :
      в результате получаю такую осциллограмму :

      То есть , постоянно считывается 0.
      А вот регистры конфигурации:
      Задаю номер входа MUX и усиление :
       

       
      Читаю данные так:
      ADS1220Config_MUX_GAIN(ADS1220_MUX_0_G, ADS1220_GAIN_1); HAL_Delay(10); temp_[0] = ADS1220ReadData(); Это для 0 канала. 
      Пробовал и так:
      ADS1220SetChannel(ADS1220_MUX_0_G); ADS1220SetGain(ADS1220_GAIN_1); temp_[0] = ADS1220ReadData(); Результат аналогичный. Кто что подскажет? Может кто заметит какой косяк в коде? Уже голова дымит ..
    • By maxssau
      Продам адаптеры USB-I2S. 

       
      Возможности:
       
      стерео ввод/вывод PCM 16-32 бита, 44.1-384 кГц. Ввода DSD нет, как и драйверов для ввода DSD.
      вывод DSD в режиме DoP 64-128, в режиме Native 64-256. Native доступен в Linux без "хитрых" драйверов.
      Тактирование от платы ЦАП/АЦП, частоты 512 fs (22.5792/24.576 МГц). Теоретически возможно и 1024fs(скорости 768кГц и DSD512 Native), но это не опробовано.
      Гальваническая изоляция на Si8662/Si8640.
      Питание возможно как Self так и Bus Powered. В режиме Bus Powered необходимо самостоятельно позаботиться о мастерклоке, т.к. возможны сильные глюки при выключенном генераторе мастерклока.
       
      Тема: 
      срок изготовления 3-5 недель (сильно зависит от поставок процессоров).
      На данный момент полностью реализован интерфейс Legacy. Для отладки Native режима пока нет платы ЦАП, в процессе разработки, будет не раньше осени.
      Цена 6000 + пересылка (в среднем 250 р.).
    • By IgnatiusF
      Не удается проинициализировать работу UART2 на скорость 19200 бод.
      Не вызывается прервание совсем, отсылаются постоянно нули на всех скоростях, если ставить System clock switch в 01 (HSE). При работе от RC генератора выдает уже просто не то, что нужно. 
      Кварц рабочий, и вообще все работает, при использовании библиотек HAL.
      SysTick выключил потому, что были подозрения на конлфикт приоритетов.
      Внизу представлена именно та часть кода программы, которая не работает, то есть сам UART.
      Проект скоро сдавать, а использовать готовую библиотеку HAL не хочется совсем, уже несколько дней парюсь и не могу найти проблему. Попробовал разобраться что пишет в регистры HAL, однако не смог т.к. не хватает знаний, значения регистров все такие же, кроме PLL (не используется) и RCC_CR1 (в HAL почему-то полностью равен 0). Проверял передачей данных по UART. Регистр BRR не удалось считать т.к. он только для записи. У меня записано так:
      USART1->BRR = 0x412;  //20MHz/16/19200 = 65,104.
      Где искать следует ошибку?
    • By pryanic
      Доброго времени суток. Понадобилось разобраться с АЦП.  Основной материал использовал Евстифеева (микроконтроллеры семейства мега) и учебный курс Di-Halt.
      На первый раз задача простая - обработать напряжение с переменного резистора и послать по UART в терминал. С терминалом уже кое-что делал, так что тут вряд ли косяк есть.
      Кратко опишу программу: каждую секунду в обработчике прерывания таймера (не совсем точно, прерывание по переполнению Т0) запускаю преобразование АЦП установкой в 1 бита ADSC. 
      В обработчике прерывания АЦП читаю байт ADCH (выравнивание по левому краю ADLAR=1) и шлю по уарт. Но в терминал приходят одни FF независимо от положения движка потенциометра (подключен к PC1 средним контактом, крайними на землю и AVCC)
       
       
      ADC_test.zip
    • By IgnatiusF
      На схеме программатора USBasp заметил подключенные порты RXD и TXD к разъему, и появился вопрос, а для чего они там? Знаю, что при помощи них можно передавать и принимать данные через UART/USART между устройствами, а можно ли используюя USBasp передавать информацию по UART от МК к компьютеру и наоборот? И если можно, то как?
×
×
  • Create New...