Перейти к содержанию

BT201 схема подключения и управление из под ATMEGA8


Рекомендуемые сообщения

Еще один вариант вам покажу, без этой злосчастной функции. У вас ответы (судя по табличке, любезно предоставленной ув. @andrusha_152 ) разделяются префиксами (буквами). Тогда:
 

char i = 0;
if (rx_buf[i] == 'M'){
    i++;
    if (rx_buf[i] == '0'){
        unsigned int n = getDecFromHexStr(rx_buf, i+2);
        //Выводим на экран номер предыдущего трека
    }else if (rx_buf[i] == '1'){
        unsigned int n = getDecFromHexStr(rx_buf, i+2);
        //Выводим на экран номер текущего трека
    }else if (rx_buf[i] == '2'){
        unsigned int n = getDecFromHexStr(rx_buf, i+2);
        //Выводим на экран количество треков
    }else if //и так далее
}

 

Изменено пользователем korsaj
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

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

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

Вот пишут, это часть, что прилетает после старта, так как это терминал, то управляющие коды не выведены. Сомневаюсь, что ТС такое потянет.

Безымянный4.png

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, donec сказал:

это не одна строка

Если тут нет необходимой инфы, на это можно забить. Вот если он отвечает на АТ несколькими строками, то стоит разбирать на лету (во время приема) из кольцевого буфера.

Ссылка на комментарий
Поделиться на другие сайты

8 часов назад, korsaj сказал:

из кольцевого буфера

 

9 часов назад, donec сказал:

Сомневаюсь, что ТС такое потянет.

Уже давно в этой теме витает вопрос: "кто возьмётся написать программу для МК?". Не кусочками и примерами, а по нормальному, полностью.

С уважением, Владимир

Ссылка на комментарий
Поделиться на другие сайты

Я выкладывал полную программу,там осталось только сделать плату,впаять атмега8 и дисплей 2004,прошить атмегу-автору не понравилось что написано в ардуино,пусть сам тогда напишет свою программу если готовое решение его не устроило!

(потом попросил админа снести исходник так как начались бредни типа "атмега8 не поддерживается средой ардуино" и т д)

Ссылка на комментарий
Поделиться на другие сайты

 Так я ж тоже написал передатчик и приемник, и виноват остался, что не каждую строку откомментировал, и еще нужно было доказать, что программа рабочая, во как.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, ДядяВован сказал:

"кто возьмётся написать программу для МК?"

По какой схеме - с ATMega8 и дисплеем 1602 или ATMega16 и семисегментными индикаторами?

 

В 21.04.2024 в 14:11, tifaso сказал:

Тут уже ничего сложного не будет.

Но не срослось. Опять проблемка нарисовалась.

Ссылка на комментарий
Поделиться на другие сайты

17 минут назад, Александр В сказал:

По какой схеме

По уму, надо бы с дисплеем 1602, было бы хоть немного симпатичнее. Но этот дисплей категорически отвергнут, поэтому такая прошивка не приемлема, как разрушающая иллюзию ТС о самостоятельности изготовления. 

С уважением, Владимир

Ссылка на комментарий
Поделиться на другие сайты

@korsaj Попробовал записать код в разных вариантах предложенных тобой. Первый вариант вообще отказался работать. Заработал второй вариант на приём. Теперь уже хотя бы есть полноценный приём.

		char i = 0;
		if (rx_buf[i] == 'M'){
			i++;
			if (rx_buf[i] == '1')
			{
				//unsigned int n = getDecFromHexStr(rx_buf, i+2);
				//Выводим на экран номер текущего трека
				LED_1_ON();
				LED_2_OFF();
				send_UART('M');
				send_UART('1');
				send_UART(0x0D);
				send_UART(0x0A);
				_delay_ms(10);
				flags = 0;
			}
			else if (rx_buf[i] == '2')
			{
				//unsigned int n = getDecFromHexStr(rx_buf, i+2);
				//Выводим на экран количество треков
				LED_1_OFF();
				LED_2_ON();
				send_UART('M');
				send_UART('2');
				send_UART(0x0D);
				send_UART(0x0A);
				_delay_ms(10);
				flags = 0;
			}
			else if (rx_buf[i] == 'T')
			{
				//unsigned int n = getDecFromHexStr(rx_buf, i+2);
				//Выводим на экран общее время трека
				LED_1_ON();
				LED_2_ON();
				send_UART('M');
				send_UART('T');
				send_UART(0x0D);
				send_UART(0x0A);
				_delay_ms(10);
				flags = 0;
			}
			else if (rx_buf[i] == 'K')
			{
				//unsigned int n = getDecFromHexStr(rx_buf, i+2);
				//Выводим на экран текущее время трека
				LED_1_OFF();
				LED_2_OFF();
				send_UART('M');
				send_UART('K');
				send_UART(0x0D);
				send_UART(0x0A);
				_delay_ms(10);
				flags = 0;
			}
		}

Но однако есть ещё некоторые вещи которые нужно подкорректировать.

Пока я просто разбираю UART поэтому на терминал вывожу так сказать ответ ну и просто видеть потому как индикатора к микре не подключено пока что. Однако такой вариант с ответкой нужен будет мне и для другого проекта где UART лучше всего подойдёт. Это я уже смотрю на будущее. Но тут тоже когда приходит комманда по  UART микроконтроллер отправляет ответ, но он начинает постоянно спамится. Нужно как то сделать чтоб этого не происходило. Я же в свою очередь пробовать сбросить flags = 0;, но это никак не помогло. Может чего подскажешь тут понятно что нужно как то будет обнулить данные чтобы выйти из этого условия программы. Есть вот такая проблемка.

И ещё есть одна проблема с строкой 

unsigned int n = getDecFromHexStr(rx_buf, i+2);

Не спроста я её отключил в коде с помощью комментария. А тут проблема в том что студия не может опзнать этот код. Возможно нужно что подключить из встроенных библиотек самой студии.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, tifaso сказал:

Первый вариант вообще отказался работать.

1 час назад, tifaso сказал:

А тут проблема в том что студия не может опзнать этот код.

19 часов назад, korsaj сказал:

это пустышки/наброски. 

 

 

 

20 часов назад, tifaso сказал:

Да ничего я не придумывал.

вот и мне влом

Изменено пользователем korsaj
Ссылка на комментарий
Поделиться на другие сайты

Ну не знаю я как тут сделать нужно каким то образом полученное hex число перевести в dec. А в голову ничего не лезет как провести данную операцию в Atmel Studio 6.

Ссылка на комментарий
Поделиться на другие сайты

Почитать книжки, уроки программирования какие-нибудь, в голову не приходило? Это же стандартная операция.

"Я не знаю какой там коэффициент, я просто паять умею. "

Ссылка на комментарий
Поделиться на другие сайты

А есть идеи как провести эту операцию неважно где, абстрактно? Что вообще нужно сделать, чтобы перевести шестнадцатиричную строку в число?

Изменено пользователем CruelAsm
Ссылка на комментарий
Поделиться на другие сайты

49 минут назад, tifaso сказал:

Ну не знаю я как тут сделать нужно каким то образом полученное hex число перевести в dec.

Давай вместе подумаем. Какие варианты есть?

Можно прочитать заклинание.

Можно прочитать молитву.

Можно прочитать про то, как устроены позиционные системы счисления, и что означает наличие той или иной цифры на той или иной позиции в записи числа.

Одно из этих действий должно помочь. Выбирай.

Изменено пользователем Огонёк
Ссылка на комментарий
Поделиться на другие сайты

Блин,проблему нашел...

Я бы завел переменную,допустим  unsigned int n

И поехали-

Сбрасываем n

Цикл,buf_index от 3 до 10 (символы rx_buf[0],rx_buf[1],rx_buf[2] не нужны,нужны именно rx_buf[3]-rx_buf[10)]

    (

     n=16*n (или сдвиг n<<4)

     Берем символ rx_buf[buf_index]

     Преобразуем в число,допустим m 

     n=n+m

     )

В итоге в n будет ваше число от 0 до 65535

Может есть решение проще-не знаю,с си не знаком поэтому сам код привести толком не смогу

(прошу не пинать)

 

Изменено пользователем bulat943
Ссылка на комментарий
Поделиться на другие сайты

1 час назад, tifaso сказал:

е знаю я как тут сделать нужно каким то образом полученное hex число перевести в dec.

Во первых не число, а строку с символами. Откройте таблицу ASCII, посмотрите какому символу какое число соответствует. Потом осознание что через ЮАРТ передаются те самые числа (а не символы), а уже терминал преобразует вам их в символы и строки. А в МК вам нужно символы/строки разбирать и получать из них нужную вам информацию.

1 минуту назад, bulat943 сказал:

А зачем нам A?

Так вроде же в шестнадцатеричном формате

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, tifaso сказал:

А в голову ничего не лезет как провести данную операцию в Atmel Studio 6

Причем чём здесь студия, да еще и номер шесть указано?

Это преобразование делается на языке программирования. На чём ты там пишешь, на Си? Ну вот на нем и делается. Хоть в студии, хоть под столом.

Что сходу не получается своими силами, ну надо как-то начинать пользоваться поиском.

С уважением, Владимир

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   3 пользователя онлайн


×
×
  • Создать...