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

Вебинар «STM32L5. Секреты оценки энергопотребления» (05.11.2020)

Компания КОМПЭЛ приглашает 5 ноября принять участие в вебинаре, посвященном первому семейству МК STM32L5 на ядре Cortex-M33. На вебинаре будет рассказано об ошибках при расчете энергопотребления МК с помощью отладки STM32L562E-DK. Отладки STM32L562E-DK будут разыгрываться среди участников. Информация об условиях участия будет озвучена на вебинаре.

Подробнее

как минимум

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

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

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

Share this post


Link to post
Share on other sites

Как снизить потери мощности на 30%? Транзисторы SiC MOSFET.

Прогресс в области широкозонных полупроводниковых материалов позволил создать карбид-кремниевые полевые транзисторы (SiC MOSFET) с повышенной рабочей частотой, обеспечивающие меньшие потери на переключение. Усовершенствованные корпуса с малой паразитной индуктивностью, в которых выпускаются такие транзисторы, позволяют разработчикам в полной мере использовать возможности этих компонентов для увеличения КПД силовых преобразователей.

Подробнее

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

Share this post


Link to post
Share on other sites

Нейросети в STM32G4 - пошаговое руководство!

Наличие программного пакета X-CUBE-AI, расширяющего функционал STM32CubeMX, поможет разработчику построить искусственную нейросеть на базе микроконтроллера из линейки STM32G4 производства STMicroelectronics. Статья включает пошаговое описание реализации такой нейросети.

Подробнее

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

на команду 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...

  • Сообщения

    • Это не та проблема. Сварочнику не поплохеет от не соблюдения коэфициента трансформации???
    • Да, я думал там переделать.., но для этой схемы, на таких частотах, и такую длину дорог от ножек до керамики.., это перебор.., хотя можно и доработать.. К примеру, в аналогичной схеме, в НА61, я вобще никакой керамики на 393 не ставил.. Всё прекрасно работает.. Там небыло даже общего землянного полигона с одной стороны платы как здесь, и никаких проблем. Вот поэтому я и не стал зря "перестраховываться"..
    • разницу - увидишь только на осцилографе ) это помогает в борьбе с помехами - снабер и дроссель 
    • грубо - так ) у меня не так много - в основном смд - их отдельно в кучу скидываю в пакетах - что приходят , пару таких за глаза ) да и сейчас уже ничего не заказываю 
    • @BAFI вопрос вот эти веши воше нужны..чет ни какой разницы не вижу..при нагрузке до 100 ват?  
    • Из чего еще можно сделать шунт кроме как из нержавейки? Нету в наличии. Может пойдут шунты от силовой части беговых дорожек?
    • Приглашаем на вебинар «STM32L5. Секреты оценки энергопотребления» (05.11.2020) 5 ноября 2020 компания КОМПЭЛ приглашает Вас принять участие в бесплатном вебинаре, посвященном первому семейству микроконтроллеров STMicroelectronics на базе ядра Cortex-M33 – STM32L5. На вебинаре будет рассказано о самых распространенных ошибках при расчете энергопотребления микроконтроллеров и о специальном синтетическом тесте ULPMark, позволяющем дать наиболее объективную оценку энергоэффективности. Измерения будут проводиться на демонстрационной платформе STM32L562E-DK с помощью уникального сервиса с технологией удаленного доступа к отладочным платам с поддержкой популярных IDE, живым видео и управлением питанием. Помимо встроенной схемы измерения тока, на данной отладочной плате есть сенсорный LCD-дисплей, BLE-модуль, внешние микросхемы памяти и многое другое, что позволяет в полной мере проверить все возможности новых микроконтроллеров STM32L5. КОМПЭЛ предоставит уникальную возможность получить STM32L562E-DK бесплатно – отладки будут разыгрываться среди участников. Дополнительная информация об условиях участия и количестве разыгрываемых плат будет озвучена на вебинаре. Зарегистрироваться на вебинар>>  

  • GSM-модуль на основе чипа SIM900A

  • Similar Content

    • By gogaze
      Программа-счетчик ампер-часов
       
      В ней условие
      //=====Напряжение минимальное при разрядке аккумулятора============================         if (volt <= 1050) // Если напряжение меньше-равно 10.50 вольт         {             PORTD |= (1<<PD7); // Устанавливаем бит 7 порта D  в 1 (светодиод горит)         }         else {                        // Иначе             PORTD &= ~( 1 << PD7 );// Устанавливаем бит 7 порта D  в 0 (светодиод не горит)             } Как проще добавить несколько вариантов условий 
      if (volt <= 1050) // Если напряжение меньше-равно 10.50 вольт для разных напряжений, чтобы при запуске программы можно было выбрать и задействовать нужное?
      Я ничего подобного раньше еще не делал, так что прошу отнестись соответственно.
    • By Timofey Shilov
      Пытаюсь разобраться в программировании этого контроллера и при попытке настроить USART для приема/передачи данных возникла проблема:
      Пытаюсь принять байт и после нажатия кнопки отправить его обратно, но на выходе получается совсем не то что ожидаю.

      При отправке 0 должно вернуть 0, но возвращает вот это. В чем может быть проблема?
      ASCII                                BIN                   DEC         HEX

      Подозрения падают на настройку baud rate, но вроде всё как в мануалах.

      Полный код:
      #include "stm32f4xx.h" #include "stm32f4xx_hal_gpio.h" #include "stm32f4xx_hal_rcc.h" #include "stm32f4xx_hal_cortex.h" #include "stdint.h" #include "math.h" //define Internal RC frequencies #define XTAL 16000000UL //define busses prescalers #define AHB_PRE 1 #define APB1_PRE 2 #define APB2_PRE 1 #define SysTicksClk 10000 //calculate peripheral frequencies #define SYSCLK 84000000 #define AHB SYSCLK/AHB_PRE #define APB1 AHB/APB1_PRE #define APB1_TIM APB1*2 #define APB2 AHB/APB2_PRE #define APB2_TIM APB2*1 #define SysTicks AHB/SysTicksClk #define USART_BAUDRATE 19200 #define BUF_LEN 1 struct Data { char Msg[BUF_LEN]; } Message; void USART2_IRQHandler(void) { if (!(USART2->SR & USART_SR_TXE)) { if (Message.Msg[0] == (char)0x00) GPIOA->ODR |= 1 << 1; if (Message.Msg[0] == (char)0x01) GPIOA->ODR |= 0 << 1; } if (USART2->SR & USART_SR_RXNE) { Message.Msg[0] = USART2->DR; } } int main() { RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN | RCC_AHB1ENR_GPIOBEN; GPIOA->MODER |= 1 << 1*2; //Set GPIOA pins output mode GPIOB->MODER |= 0 << 0*2; GPIOA->MODER |= 0xA0; GPIOA->AFR[0] |= 0x7700; RCC->APB1ENR |= RCC_APB1ENR_USART2EN; USART2->CR1 |= USART_CR1_UE; //usart enable USART2->CR1 |= USART_CR1_TE; //transmitter enable USART2->CR1 |= USART_CR1_RE; //receiver enable float div = (float)APB1 /(16*(float)USART_BAUDRATE); int integer = APB1 / (16*USART_BAUDRATE); float flo = (div - (float)integer)*16; int floatt = round(flo); USART2->BRR = (( integer << 4 ) + floatt); NVIC_EnableIRQ(USART2_IRQn); USART2->CR1 |= USART_CR1_TXEIE; USART2->CR1 |= USART_CR1_RXNEIE; int i; while(1) { if (!(GPIOB->IDR & GPIO_IDR_ID0)) { i = 1; } else { if(i == 1) { USART2->DR &= Message.Msg[0]; while(!(USART2->SR & USART_SR_TC)); i = 0; } } } }  
      Сама схема:

    • 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.
      Где искать следует ошибку?
×
×
  • Create New...