Например TDA7294

Форум РадиоКот • Просмотр темы - Вопрос по программированию МК AVR
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 18, 2024 11:21:15

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 21 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Вопрос по программированию МК AVR
СообщениеДобавлено: Сб июл 03, 2021 05:22:23 
Родился

Зарегистрирован: Сб июл 03, 2021 05:10:15
Сообщений: 1
Рейтинг сообщения: 0
Доброго времении суток уважаемые Котаны и Котанки, также Котанята)) Вопрос мой наверное самый Тупой, но ....

В общем есть проект в Atmel Studio. В том проекте несколько файлов DEF.h - где собраны все #дефайны, funct.h с функциями.

Код:
#define SSD1306_DISPLAYON                    0xAF



а в файле с функциями:
Код:
void LCD_Sleep(char set)
{
 ....
  if(set==1){LCD_Commmand(COMAND,SSD1306_DISPLAYON);}
}


Внутри функции #define не видим - вылезает ошибка. Можно ли как то сделать так чтобы можно было пользоваться этим #define и внутри функции?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию МК AVR
СообщениеДобавлено: Сб июл 03, 2021 17:34:40 
Встал на лапы

Зарегистрирован: Вс фев 21, 2021 13:01:40
Сообщений: 80
Откуда: Прокопьевск
Рейтинг сообщения: 0
Внутри функции #define не видим - вылезает ошибка.

Странно в функции тоже дефайны должны работать. А вы файлы эти с функциями и дефайнами куда подключаете? Попробуйте в файл с функциями подключить файл с дефайнами, а файл с функциями в проект.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию МК AVR
СообщениеДобавлено: Сб июл 03, 2021 17:41:46 
Мудрый кот
Аватар пользователя

Карма: 27
Рейтинг сообщений: 77
Зарегистрирован: Пн июн 24, 2013 23:00:42
Сообщений: 1781
Откуда: Казахстан
Рейтинг сообщения: 0
Очевидно функция пытается скомпилироваться раньше чем были приняты дефайны. Если они вообще приложены. Либо переносите их содержимое перед функциями.
Что значит несколько? С одинаковым именем?

_________________
Изображение
Ваши хотелки за ваши деньги http://Devs.company


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию МК AVR
СообщениеДобавлено: Сб июл 03, 2021 17:48:54 
Встал на лапы

Зарегистрирован: Вс фев 21, 2021 13:01:40
Сообщений: 80
Откуда: Прокопьевск
Рейтинг сообщения: 0
А вы как файлы подключали
#include <func. h> а затем #include <Def. h> или наоборот (какой первым подключали>

Добавлено after 31 second:
Попробуйте сначала Def. h


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию МК AVR
СообщениеДобавлено: Вс июл 04, 2021 00:21:36 
Мудрый кот

Карма: 11
Рейтинг сообщений: 114
Зарегистрирован: Пт июн 01, 2018 07:28:45
Сообщений: 1759
Рейтинг сообщения: 0
Цитата:
В общем есть проект в Atmel Studio. В том проекте несколько файлов DEF.h

Они в солюшн эксплорере добавлены к проекту?


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию МК AVR
СообщениеДобавлено: Вт июл 27, 2021 11:49:44 
Родился

Зарегистрирован: Чт ноя 26, 2020 00:07:28
Сообщений: 19
Рейтинг сообщения: 0
Добрый день,у меня тоже вопрос по программированию МК в Atmel studio.
Вопрос такой:интересует алгоритм написания функции для МК AVR 32,
отправка показаний датчика через GSM модуль (SIM800C) по СМС на мобильник,
например:напряжение с АЦП(зарядное для акб.),
или запрос с мобильного баланса GSM модуля,
есть функция отправки смс с заранее написанными смс,
не могу понять как переделать функцию ,чтобы отправлять по смс ,
постоянно меняющиеся данные с датчика или запрос о балансе,
вот функция USART
void USART_SendString(char *str) /* Отправить строку функции данных USART */
{
int i=0;
while (str[i]!=0)
{
USART_TxChar(str[i]); /* Отправить каждый символ строки до NULL */
i++;
}
}

вот функция отправки смс:
void GSM_Send_Msg(char *num,char *sms)
{
char sms_buffer[35];
buffer_pointer=0;
sprintf(sms_buffer,"AT+CMGS=\"%s\"\r",num);
USART_SendString(sms_buffer); //*отправить команду AT+CMGS="Mobile No."\r */

while(1)
{
if(buff[buffer_pointer]==0x3e) //*ждать символа '>'*/
{
LCD_String_xy(1,0,"OTPRAVL1");
_delay_ms(3000);
LCD_Clear();
buffer_pointer = 0;
memset(buff,0,strlen(buff));
USART_SendString(sms); //* отправить сообщение на указанный nom. */
USART_TxChar(26);
USART_TxChar(0); //* отправьте Ctrl + Z, тогда будет передаваться только сообщение*/
break;
}
buffer_pointer++;
}

buffer_pointer = 0;
memset(buff,0,strlen(buff));
memset(sms_buffer,0,strlen(sms_buffer));
}

если не трудно объясните,что нужно дописать,
или скиньте ссылку на эту тему.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию МК AVR
СообщениеДобавлено: Ср июл 28, 2021 03:16:41 
Друг Кота
Аватар пользователя

Карма: 23
Рейтинг сообщений: 283
Зарегистрирован: Пт мар 09, 2007 15:01:52
Сообщений: 3040
Откуда: Биробиджан
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Ну так вызывай свою функцию GSM_Send_Msg в основном коде. Первый параметр это номер телефона, а второй текст. Только учти что на латинице можно отправить только 160 символов, а на других языках сначала нужно текст перекодировать и получить ограничение 70 символов (кроме немецкого и французского, там 140 символов).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию МК AVR
СообщениеДобавлено: Ср июл 28, 2021 10:50:20 
Родился

Зарегистрирован: Чт ноя 26, 2020 00:07:28
Сообщений: 19
Рейтинг сообщения: 0
Не много уточню вопрос.

вот функция запроса баланса:

void GSM_Balans_Out()
{

USART_SendString("AT+CUSD=1,\"#100#\"\r"); //AT_команда модулю, проверка баланса SIM
_delay_ms(3000); //Пауза для ответа модуля

int out=0;
_delay_ms(500);
buffer_pointer=0;
buffer_dannye=0;
while(1)
{

if(buff[buffer_pointer]=='\r' || buff[buffer_pointer]== '\n') //*исключить "\ r \ n", который является началом строки */
{

buffer_pointer++;
}
else
break;
}

LCD_String_xy(1,0,""); //LCD дисплей 1-строка,0-ячейка ответ о балансе//

if(strstr(buff,"+CUSD:")) //* "+CUSD:" чтобы проверить, получено ли сообщение "Balans_" * /
{

while(buff[buffer_pointer]!= ',')
{
buffer_pointer++;
}
buffer_pointer++;




while(buff[buffer_pointer]!= '\r') //Принятое сообщение о балансе SIM из буфера//
{

msg_location[buffer_dannye]=buff[buffer_pointer];
buffer_pointer++;
buffer_dannye++;
LCD_Char(msg_location[buffer_dannye+2]); //Выводит текс на экран дисплея//

}

memset(buff,0,strlen(buff)); //* преобразовать строку позиции в целочисленное значение */
buffer_pointer=0;


}
status_flag = 0;

GSM_Send_Msg("+7987******", " msg_location[buffer_dannye]");

Вопрос как передать по смс данные из буфера,а не название буфера? :)

//=======================//


}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию МК AVR
СообщениеДобавлено: Ср июл 28, 2021 11:10:21 
Мучитель микросхем

Карма: 1
Рейтинг сообщений: 56
Зарегистрирован: Сб июл 10, 2021 19:33:25
Сообщений: 402
Рейтинг сообщения: 0
radteh писал(а):
Первый параметр это номер телефона, а второй текст.
Неверно.
Код:
void GSM_Send_Msg(char *num,char *sms)
Первый и второй параметры - указатели.

A^ex, https://metanit.com/cpp/c/5.7.php


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию МК AVR
СообщениеДобавлено: Ср июл 28, 2021 11:41:48 
Родился

Зарегистрирован: Чт ноя 26, 2020 00:07:28
Сообщений: 19
Рейтинг сообщения: 0
ST7FOX, спасибо ! перешёл по ссылке, всё чётко и понятно расписано!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию МК AVR
СообщениеДобавлено: Пт июл 30, 2021 22:58:32 
Родился

Зарегистрирован: Чт ноя 26, 2020 00:07:28
Сообщений: 19
Рейтинг сообщения: 0
Всем доброго времени.
Подскажите где ошибка в коде:


void USART_TxChar(char data) /* Функция передачи данных */
{
UDR = data /* Запись данных для передачи в UDR */
while (!(UCSRA & (1<<UDRE))); /* Подождите, пока передача данных и буфер не опустеют */
}

void GSM_Balans_Msg()
{
USART_SendString("AT+CUSD=1,\"#100#\"\r"); //AT_команда модулю, проверка баланса SIM
_delay_ms(3000); //Пауза для ответа модуля

buffer_pointer=0;
buffer_dannye=0;

while(1)
{

if(buff[buffer_pointer]=='\r' || buff[buffer_pointer]== '\n') //*исключить "\ r \ n", который является началом строки */
{

buffer_pointer++;
}
else
break;
}

if(strstr(buff,"+CUSD:")) //* "+CUSD:" чтобы проверить, получено ли сообщение "Balans_" * /
{

while(buff[buffer_pointer]!= ',')
{
buffer_pointer++;
}
buffer_pointer++;

while(buff[buffer_pointer]!= '\r') //Принятое сообщение о балансе SIM из буфера//
{
msg_location[buffer_dannye]=buff[buffer_pointer++];

}
memset(buff,0,strlen(buff)); //* преобразовать строку позиции в целочисленное значение */
buffer_pointer=0;
status_flag = 0;

}
PORTA|=(1<<2);
_delay_ms(1000);

char num[14]={"+79*********"};
char sms_buffer[35];
buffer_pointer=0;

sprintf(sms_buffer,"AT+CMGS=\"%s\"\r",num);
USART_SendString(sms_buffer); //*отправить команду AT+CMGS="Mobile No."\r */
_delay_ms(200);

while(1)
{
if(buff[buffer_pointer]==0x3e) //*ждать символа '>'*/
{

//LCD_String_xy(1,0,"OTPRAVL1");
//_delay_ms(3000);
//LCD_Clear();
buffer_pointer = 0;
memset(buff,0,strlen(buff));
while(1)
{
buff[buffer_pointer]=msg_location[buffer_dannye++];

USART_TxChar(buff[buffer_pointer]);

if(buff[buffer_pointer]!= '\r')
{
USART_TxChar(0x1a); //*. Ctrl + Z */
break;
}
buffer_pointer++;
}

}
buffer_pointer++;
}

buffer_pointer = 0;
memset(buff,0,strlen(buff));
}

Код работает,смс приходит,но приходит постоянно одна цифра 5 и всё,
откуда цифра 5 берётся?
судя по функции: if(buff[buffer_pointer]!= '\r') данные с балансом там есть,
отправлял в терминал USART_TxChar(buff[buffer_pointer])
в терминале всё как положено:"Balance:27,35r"
в какое направление копать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию МК AVR
СообщениеДобавлено: Сб июл 31, 2021 06:39:11 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 2
с таким оформлением твой код никто изучать не будет

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию МК AVR
СообщениеДобавлено: Сб июл 31, 2021 13:15:59 
Родился

Зарегистрирован: Чт ноя 26, 2020 00:07:28
Сообщений: 19
Рейтинг сообщения: 0
slav0n,а что не так с оформлением кода,а как надо оформлять?
напишите пример оформления кода.
Это часть программы.
нашёл причину, в коде теряются данные

while(buff[buffer_pointer]!= '\r') //Принятое сообщение о балансе SIM из буфера//
{

msg_location[buffer_dannye]=buff[buffer_pointer++];

}

оба буфера и переменные глобальные.
msg_location[buffer_dannye] до отправления в USART не обнуляю,

если записать:

while(buff[buffer_pointer]!= '\r') //Принятое сообщение о балансе SIM из буфера//
{

msg_location[buffer_dannye]=buff[buffer_pointer++];
USART_TxChar( msg_location[buffer_dannye]);

}

данные приходят,отладчика к сожалению нет,поэтому пользуюсь терминалом.

Вопрос по существу как сохранить данные в массиве,что бы не терялись даже после выхода из функции?
Повторю msg_location[buffer_dannye] и buff[buffer_pointer] глобальные.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию МК AVR
СообщениеДобавлено: Сб июл 31, 2021 14:13:30 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 0
ОТСТУПЫ
вот, пропустил твой код через "украшатель" https://beautifier.io/?without-codemirror
Спойлер
Код:
void USART_TxChar(char data) /* Функция передачи данных */ {
    UDR = data /* Запись данных для передачи в UDR */
    while (!(UCSRA & (<< UDRE))); /* Подождите, пока передача данных и буфер не опустеют */
}

void GSM_Balans_Msg() {
    USART_SendString("AT+CUSD=1,\"#100#\"\r"); //AT_команда модулю, проверка баланса SIM
    _delay_ms(3000); //Пауза для ответа модуля

    buffer_pointer = 0;
    buffer_dannye = 0;

    while (1) {

        if (buff[buffer_pointer] == '\r' || buff[buffer_pointer] == '\n') //*исключить "\ r \ n", который является началом строки */
        {

            buffer_pointer++;
        } else
            break
;
    }

    if (strstr(buff, "+CUSD:")) //* "+CUSD:" чтобы проверить, получено ли сообщение "Balans_" * /
    {

        while (buff[buffer_pointer] != ',') {
            buffer_pointer++;
        }
        buffer_pointer++;

        while (buff[buffer_pointer] != '\r') //Принятое сообщение о балансе SIM из буфера//
        {
            msg_location[buffer_dannye] = buff[buffer_pointer++];

        }
        memset(buff, 0, strlen(buff)); //* преобразовать строку позиции в целочисленное значение */
        buffer_pointer = 0;
        status_flag = 0;

    }
    PORTA |= (<< 2);
    _delay_ms(1000);

    char num[14] = {
        "+79*********"
    };
    char sms_buffer[35];
    buffer_pointer = 0;

    sprintf(sms_buffer, "AT+CMGS=\"%s\"\r", num);
    USART_SendString(sms_buffer); //*отправить команду AT+CMGS="Mobile No."\r */
    _delay_ms(200);

    while (1) {
        if (buff[buffer_pointer] == 0x3e) //*ждать символа '>'*/
        {

            //LCD_String_xy(1,0,"OTPRAVL1");
            //_delay_ms(3000);
            //LCD_Clear();
            buffer_pointer = 0;
            memset(buff, 0, strlen(buff));
            while (1) {
                buff[buffer_pointer] = msg_location[buffer_dannye++];

                USART_TxChar(buff[buffer_pointer]);

                if (buff[buffer_pointer] != '\r') {
                    USART_TxChar(0x1a); //*. Ctrl + Z */
                    break;
                }
                buffer_pointer++;
            }

        }
        buffer_pointer++;
    }

    buffer_pointer = 0;
    memset(buff, 0, strlen(buff));

_________________
ohmycode!
primuss3.com


Последний раз редактировалось slav0n Сб июл 31, 2021 17:59:44, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию МК AVR
СообщениеДобавлено: Сб июл 31, 2021 14:27:45 
Родился

Зарегистрирован: Чт ноя 26, 2020 00:07:28
Сообщений: 19
Рейтинг сообщения: 0
Красиво!теперь понятно,спасибо slav0n !


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию МК AVR
СообщениеДобавлено: Сб июл 31, 2021 17:45:48 
Друг Кота
Аватар пользователя

Карма: 23
Рейтинг сообщений: 283
Зарегистрирован: Пт мар 09, 2007 15:01:52
Сообщений: 3040
Откуда: Биробиджан
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
А если вместо тега [code] применить [code=php] то ещё и синтаксис подсветится. И длинные портянки лучше прятать под спойлер.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию МК AVR
СообщениеДобавлено: Сб июл 31, 2021 18:00:10 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 0
OK

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию МК AVR
СообщениеДобавлено: Пн авг 02, 2021 03:45:03 
Друг Кота
Аватар пользователя

Карма: 23
Рейтинг сообщений: 283
Зарегистрирован: Пт мар 09, 2007 15:01:52
Сообщений: 3040
Откуда: Биробиджан
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
A^ex, меня смущает вот этот кусочек кода:
Код:
        while (buff[buffer_pointer] != '\r') //Принятое сообщение о балансе SIM из буфера//
        {
            msg_location[buffer_dannye] = buff[buffer_pointer++];
        }

Ты каждый раз, одному и тому-же элементу массива msg_location присваиваешь новое значение. Так-же ты проверяешь один элемент, а присваиваешь следующий.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию МК AVR
СообщениеДобавлено: Пн авг 02, 2021 08:58:25 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2802
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18067
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
radteh, инкремент номера элемента (++) делается ПОСЛЕ присваивания, а не до него.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию МК AVR
СообщениеДобавлено: Пн авг 02, 2021 10:23:35 
Мучитель микросхем

Карма: 1
Рейтинг сообщений: 56
Зарегистрирован: Сб июл 10, 2021 19:33:25
Сообщений: 402
Рейтинг сообщения: 0
Starichok51, да хоть до, хоть после, хоть оба сразу. Счётчик buffer_dannye не меняется.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Jack_A и гости: 28


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y