Зарегистрирован: Вс май 19, 2024 10:05:49 Сообщений: 35 Откуда: Россия Кемерово
Рейтинг сообщения:0
Asmodey, ну осциллографа и частотомера нету так как это очень дорого стоит. Однако согласен UART нужно посмотреть внимательней. Есть хорошая мысль подключить мегу к компу и в терминале посмотреть насколько корректно приходят команды. Я хоть и проверял и отлаживал эти скрипты, но конкретно с этими командами не проверялось. Проверялась просто передача и приём данных.
Добавлено after 45 minutes 17 seconds: Подключил я ATMEGA16 к компу и посмотрел через терминал что же всё таки там происходит. Но я конечно был удивлён увидев то что мега постоянно пачками засылает всякие разные команды, которые впринцепи должны вызываться только с нажатия кнопок. И вот я в очередной раз убеждаюсь что на кнопки обязательно нужно делать внешние резисторы подтяжки. Так как внутренние не помогают. Ещё конечно нужно перепроверить весь код может там чего не правильно записал. Вот и получается что от меги приходят постоянно целыми пачками команды и бедный модуль не успевает ничего сделать и постоянно перезагружается. Я уже сейчас понял что нужно отлаживать на компе всю отправку команд и уже только после того как будут правильно отправляться команды можно будет подключать к самому модулю и проверять уже совместную работу.
Добавлено after 31 minute 12 seconds: Проверил ещё на плате уровни напряжений на пинах кнопок и на них по умолчанию сидел минус питания. Хотя должно быть +5 вольт и только при нажатии должен появляться минус. Поэтому тут нужно доработать в коде, но всё же на будущее я переделаю плату и схему добавив резисторы подтяжки для кнопок и кнопок побольше так как оказалось даже восьми кнопок будет мало.
Добавлено after 32 minutes 7 seconds: В общем с кнопками я сейчас здесь всё наладил вот код на данный момент. Спойлер
//Конвертируем значение уровня звука в ASCII dek = vol%10; def = vol/10; ind0 = dek+48; dek = def%10; def = def/10; ind1 = dek+48;
//Выводим на дисплей уровень звука lcd_pos(0,11); lcd_str("VOL"); lcd_pos(0,14); send_byte(ind1,1); lcd_pos(0,15); send_byte(ind0,1); } if (BTN_VOL_PLS) { //Команда AT+CE задаём модулю увеличение громкости send_UART('A'); send_UART('T'); send_UART('+'); send_UART('C'); send_UART('E'); send_UART(0x0D); send_UART(0x0A); vol++; _delay_ms(200);
//Конвертируем значение уровня звука в ASCII dek = vol%10; def = vol/10; ind0 = dek+48; dek = def%10; def = def/10; ind1 = dek+48;
//Выводим на дисплей уровень звука lcd_pos(0,11); lcd_str("VOL"); lcd_pos(0,14); send_byte(ind1,1); lcd_pos(0,15); send_byte(ind0,1); } if (BTN_MODE) { if (mode == 3) { //Команда AT+CM01 зададаём модулю режим воспроизведения с BLE send_UART('A'); send_UART('T'); send_UART('+'); send_UART('C'); send_UART('M'); send_UART('0'); send_UART('1'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); //Устанавливаем значение 1 в переменной mode mode=1; } if (mode == 2) { //Команда AT+CM03 зададаём модулю режим воспроизведения с SD CARD send_UART('A'); send_UART('T'); send_UART('+'); send_UART('C'); send_UART('M'); send_UART('0'); send_UART('3'); send_UART(0x0D); send_UART(0x0A); _delay_ms(20); //Устанавливаем значение 3 в переменной mode mode=3; } if (mode == 1) { //Команда AT+CM02 зададаём модулю режим воспроизведения с USB send_UART('A'); send_UART('T'); send_UART('+'); send_UART('C'); send_UART('M'); send_UART('0'); send_UART('2'); send_UART(0x0D); send_UART(0x0A); _delay_ms(20); //Устанавливаем значение 2 в переменной mode mode=2; } } if (BTN_PLAY_PAUSE) { //Команда AT+CB даём модулю команду PLAY/PAUSE send_UART('A'); send_UART('T'); send_UART('+'); send_UART('C'); send_UART('B'); send_UART(0x0D); send_UART(0x0A); _delay_ms(20); } if (BTN_REPEAT) { if (repeat == 2) { repeat=0; //Команда AT+AC00 сбрасываем настройки воспроизведения по умолчанию send_UART('A'); send_UART('T'); send_UART('+'); send_UART('A'); send_UART('C'); send_UART('0'); send_UART('0'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); LED3_Y0; LED4_B0; } else { repeat=2; //Команда AT+AC02 воспроизведение в цикле send_UART('A'); send_UART('T'); send_UART('+'); send_UART('A'); send_UART('C'); send_UART('0'); send_UART('2'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); LED3_Y1; LED4_B0; } } if (BTN_RAND) { if (repeat == 3) { repeat=0; //Команда AT+AC00 сбрасываем настройки воспроизведения по умолчанию send_UART('A'); send_UART('T'); send_UART('+'); send_UART('A'); send_UART('C'); send_UART('0'); send_UART('0'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); LED3_Y0; LED4_B0; } else { repeat=3; //Команда AT+AC03 воспроизведение в случайном порядке send_UART('A'); send_UART('T'); send_UART('+'); send_UART('A'); send_UART('C'); send_UART('0'); send_UART('3'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); LED3_Y0; LED4_B1; } } } }
Но однако я заметил такую вещь при запуске не отрабатывает функция bt201_start();. Да и вообще почему то UART вне цикла не работает. Нужно чего то думать здесь как это всё поправить?
Зачем отправлять в модуль ОК? После подачи питания надо ждать 3 сек минимум а потом подавать команды,а не 500 мсек Чтоб работал bt201_start();. так и пишите,а не void bt201_start() ( перед while) А лучше бросайте вы эту атмел студио,она вам не по плечу,изучайте ардуино
Зарегистрирован: Вс май 19, 2024 10:05:49 Сообщений: 35 Откуда: Россия Кемерово
Рейтинг сообщения:0
Novice user, в модуль я не отправлял ОК это просто осталась тестовая запись. Я просто в терминале проверял отправку команды при старте. убрал её сейчас. А в общем так то да задержка перед функцией bt201_start() помогла. Теперь функция работает дальше уже всё должно работать. Теперь уже можно проверять конкретно ATMEGA16 в связке с BT201. А вот насчёт ардуино это совершенно не моё и она мне нигде никаким боком не подходит в отличии от AVR. Поэтому я предпочитаю остаться на AVR и Atmel Studio 6.
Добавлено after 22 minutes 36 seconds: В общем я сейчас сделал так паузу при запуске пришлось сделать даже больше чем сказали и только тогда получилось нормально запустить функцию bt201_start (). Спойлер
//Конвертируем значение уровня звука в ASCII dek = vol%10; def = vol/10; ind0 = dek+48; dek = def%10; def = def/10; ind1 = dek+48;
//Выводим на дисплей уровень звука lcd_pos(0,11); lcd_str("VOL"); lcd_pos(0,14); send_byte(ind1,1); lcd_pos(0,15); send_byte(ind0,1); } if (BTN_VOL_PLS) { //Команда AT+CE задаём модулю увеличение громкости send_UART('A'); send_UART('T'); send_UART('+'); send_UART('C'); send_UART('E'); send_UART(0x0D); send_UART(0x0A); vol++; _delay_ms(200);
//Конвертируем значение уровня звука в ASCII dek = vol%10; def = vol/10; ind0 = dek+48; dek = def%10; def = def/10; ind1 = dek+48;
//Выводим на дисплей уровень звука lcd_pos(0,11); lcd_str("VOL"); lcd_pos(0,14); send_byte(ind1,1); lcd_pos(0,15); send_byte(ind0,1); } if (BTN_MODE) { if (mode == 3) { //Команда AT+CM01 зададаём модулю режим воспроизведения с BLE send_UART('A'); send_UART('T'); send_UART('+'); send_UART('C'); send_UART('M'); send_UART('0'); send_UART('1'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); //Устанавливаем значение 1 в переменной mode mode=1; } if (mode == 2) { //Команда AT+CM03 зададаём модулю режим воспроизведения с SD CARD send_UART('A'); send_UART('T'); send_UART('+'); send_UART('C'); send_UART('M'); send_UART('0'); send_UART('3'); send_UART(0x0D); send_UART(0x0A); _delay_ms(20); //Устанавливаем значение 3 в переменной mode mode=3; } if (mode == 1) { //Команда AT+CM02 зададаём модулю режим воспроизведения с USB send_UART('A'); send_UART('T'); send_UART('+'); send_UART('C'); send_UART('M'); send_UART('0'); send_UART('2'); send_UART(0x0D); send_UART(0x0A); _delay_ms(20); //Устанавливаем значение 2 в переменной mode mode=2; } } if (BTN_PLAY_PAUSE) { //Команда AT+CB даём модулю команду PLAY/PAUSE send_UART('A'); send_UART('T'); send_UART('+'); send_UART('C'); send_UART('B'); send_UART(0x0D); send_UART(0x0A); _delay_ms(20); } if (BTN_REPEAT) { if (repeat == 2) { repeat=0; //Команда AT+AC00 сбрасываем настройки воспроизведения по умолчанию send_UART('A'); send_UART('T'); send_UART('+'); send_UART('A'); send_UART('C'); send_UART('0'); send_UART('0'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); LED3_Y0; LED4_B0; } else { repeat=2; //Команда AT+AC02 воспроизведение в цикле send_UART('A'); send_UART('T'); send_UART('+'); send_UART('A'); send_UART('C'); send_UART('0'); send_UART('2'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); LED3_Y1; LED4_B0; } } if (BTN_RAND) { if (repeat == 3) { repeat=0; //Команда AT+AC00 сбрасываем настройки воспроизведения по умолчанию send_UART('A'); send_UART('T'); send_UART('+'); send_UART('A'); send_UART('C'); send_UART('0'); send_UART('0'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); LED3_Y0; LED4_B0; } else { repeat=3; //Команда AT+AC03 воспроизведение в случайном порядке send_UART('A'); send_UART('T'); send_UART('+'); send_UART('A'); send_UART('C'); send_UART('0'); send_UART('3'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); LED3_Y0; LED4_B1; } } } }
Проверил мегу в связке с модулем. Модуль теперь хорошо стартует. Есть конечно некоторые косячки по командам внутри цикла, но это я уже сам с помощью терминала отлажу.
Опубликованы материалы вебинара, посвященного пленочным конденсаторам компании Hongfa, на котором была представлена текущая линейка и модельный ряд продукции этого направления, включая новые, недавно вышедшие серии.
На вебинаре были приведены актуальные примеры применения пленочных конденсаторов Hongfa в источниках питания, зарядных станциях для электротранспорта, преобразователях частоты, фотоэлектрических преобразователях и ветрогенераторах.
Компания Hongfa - один из лидеров азиатского рынка пленочных конденсаторов с полным циклом производства. Она выпускает пять серий помехоподавляющих конденсаторов этого типа как для бытовой, так и для трехфазной промышленной сети, а также для автомобильного применения. Продукция компании по ассортименту, параметрам и количеству серий конденсаторов ЭМП не уступает другим крупным производителям этого сегмента и может легко заменить ассортимент ушедших из РФ брендов.
Зарегистрирован: Вс май 19, 2024 10:05:49 Сообщений: 35 Откуда: Россия Кемерово
Рейтинг сообщения:0
Нужно будет всё таки ещё доработать приём команд от самого модуля, но пока не знаю как это лучше сделать. Потому как модуль отправляет по UART сразу пачку данных и по одной строке естественно я всё принять и обработать не успеваю. Нужно как то буфер UART расширить и делать захват в буфер сразу всех данных и только потом эти данные потихоньку обрабатывать в моём коде.
Добавлено after 2 hours 51 minute 26 seconds: В общем сейчас стоит такая задача модуль BT201 когда начинает воспроизводить мне отправляет по UART посылку данных о файле и прочее. Мне же нужно как то сделать захват этих данных целиком и уже после их обработать. Потому как на ходу я не успеваю их принять и обработать.
А приходит как то вот так Нужно вот теперь думать каким образом это всё принять и обработать. Такой объём данных с ходу не обработать. Нужно как то делать захват всех данных разом, а только потом их обрабатывать.
Зарегистрирован: Вс май 19, 2024 10:05:49 Сообщений: 35 Откуда: Россия Кемерово
Рейтинг сообщения:0
Novice user, ну я уже не знаю что уже делать чтобы данные принять и успеть обработать. Тут только напрашивается как то расширять буфер приёма UART чтобы он захватывал сразу весь пакет данных. и тогда я их уже спокойно обработаю.
По опыту общения с тобой я тебе скажу-что толку тебе советовать если ты никого не слушаешь-я так не хочу/я так не буду делать/это у меня не работает(я про itoa),не читаешь даташиты,не изучаешь другие исходники,которых полно в сети Удачи!
Потому как на ходу я не успеваю их принять и обработать
да, это сложно. Понимаю Вас. Сам когда-то писал программу для обработки нескольких параллельных медиапотоков, мучался, специально железо под это дело подбирали. А тут аж 9600 и четверть килобайта данных... наверное, тоже нужно железо помощнее, может, парочку 8-ядерных ARMов? Или не хватит?
Forsio, на плате вашего модуля установлен 32-битный микроконтроллер с мегабайтом памяти и с тактовой частотой 480 мегагерц. Вы же к нему зачем-то прикручиваете древнюю полудохлую мегу.
_________________ Астролябия-сама меряет, было бы что мерять!!!
Я ему давал свой пример но tifaso его отверг,потому что у него так не работает Правда си я не знаю,только поверхностно,но у меня работало замечательно (проверял в протеусе с реальным BT201) И зачем лишний раз ставить задержки? Обработка принятых данных должна быть быстрой,пока не пошла следующие данные
Asmodey и как к такому 32-битному микроконтроллеру с мегабайтом памяти и с тактовой частотой 480 мегагерц без знаний как этот микроконтроллер программировать прикрутить дисплей,управление с пульта,доп кнопки?
Зарегистрирован: Вс май 19, 2024 10:05:49 Сообщений: 35 Откуда: Россия Кемерово
Рейтинг сообщения:0
Asmodey, на мегу мне сейчас нужно вывести данные из модуля вот и всё остальное я уже сделал. Управление из под меги вполне работает. В том то и есть вся суть сделать расширенное управление и вывод информации из модуля при помощи меги. Голый модуль мне не интересен. Martian, Ну насчёт железа не знаю работал только с AVR и то не очень много. Потому и всегда выбираю AVR микроконтроллеры. Да и других микроконтроллеров в наших магазинах не достать. Novice user, даташиты я читаю только информации там находишь не много. Или чаще всего как то очень непонятно это всё описывается, что самому не понять. Исходников в сети попадается очень мало толковых в которых действительно можно разобраться, а так приходится довольствоваться тем что есть. В основном как понапишут что и за год не разберёшься без помощи.
Я конечно не знаю, но всё же предполагаю что мне нужно сейчас расширить буфер данных и захватывать туда уже весь пакет данных и только потом их обрабатывать. другого варианта я уже и не вижу. Может конечно и есть способы, но я не знаю.
предполагаю что мне нужно сейчас расширить буфер данных и захватывать туда уже весь пакет данных и только потом их обрабатывать.
Нет. Вам нужно научиться мыслить, как программист. Я выше привёл куски Вашего кода, как образец плохого. Вместо множества одинаковых
Код:
send_UART('A'); send_UART('T'); send_UART('+'); ... // здесь четыре строчки, которые меняются send_UART(0x0D); send_UART(0x0A); _delay_ms(100);
начинающий программист просто обязан был бы написать одну функцию, где аргументом передаются только 4 байта команды. Далее программист должен задуматься, не проще ли и читабельнее и удобнее было бы написать как-то так: Send_Command("AT+CM01\r\n")? и в итоге получить что-то типа:
Код:
void Send_Command(char *str) { for(uint8_t i = 0; i < strlen(str); i++) { while(!(UCSRA&(1<<UDRE))); UDR=str[i]; } _delay_ms(100); }
Я совершенно не изменил алгоритм, но целый кусок "портянки" Вашего кода сократился до:
Код:
//Команда AT+CT01 задаём модулю скорость 9600 // Send_Command("AT+CT01\r\n"); _delay_ms(2000);
//Команда AT+CM02 зададаём модулю режим воспроизведения с USB Send_Command("AT+CM02\r\n");
//Устанавливаем значение 2 в переменной mode mode=2;
//Команда AT+CA15 задаём модулю уровень громкости на 15 Send_Command("AT+CA15\r\n");
//Конвертируем значение уровня звука в ASCII vol = 15; dek = vol%10; def = vol/10; ind0 = dek+48; dek = def%10; def = def/10; ind1 = dek+48;
//Выводим на дисплей уровень звука lcd_pos(0,11); lcd_str("VOL"); lcd_pos(0,14); send_byte(ind1,1); lcd_pos(0,15); send_byte(ind0,1);
Зарегистрирован: Вс май 19, 2024 10:05:49 Сообщений: 35 Откуда: Россия Кемерово
Рейтинг сообщения:0
Martian, спасибо за скрипты попробую поправить. Насчёт массивов вместо переменных тут так не сработает потому как массивы работают только в цикле, а мне нужно иметь доступ к данным переменным из разных мест программы. Так как они много где используются. Но насчёт приёма данных вот это и есть самое сейчас такое место. Я вот так и не могу принять данные и тут же их обработать. Так то когда с терминалом в компе проверял вроде как код срабатывает данные обрабатываются, но тоже не совсем понятно нужно будет отлаживать. Но от модуля вообще целая пачка данных приходит её ещё нужно каким то образом успеть принять и обработать.
Forsio, массив можно рассматривать как набор переменных, значит, любой элемент массива суть переменная, и значит, с ним можно обращаться как с переменной. Область видимости ограничивается циклом только для его счётчиков, и то, если они объявлены при инициализации цикла.
Вам необходимо срочно прочитать книжку по программированию. Пока совсем не загубили представление о нём.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения