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

tifaso

Members
  • Постов

    2 010
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

tifaso стал победителем дня 16 сентября 2022

tifaso имел наиболее популярный контент!

Информация о tifaso

  • День рождения 14.03.1988

Информация

  • Пол
    Мужчина
  • Город
    Кемерово

Электроника

  • Стаж в электронике
    Не связан с электроникой

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

Достижения tifaso

Профи

Профи (10/14)

  • Популярный Редкий
  • 10 постов на форуме
  • Пост-машина Редкий
  • Преданный
  • Неделя на форуме

Последние значки

70

Репутация

  1. Да ничего я не придумывал. По памяти и документации сделал записи.
  2. Я наверное завтра запущу модуль от терминала и попробую заскринить что он мне выдаёт. Потому как уже не помню как оно там. Такие детали как то сразу не запонаются.
  3. Пока ещё нет ещё идёт наладка UART в самой меге, а после уже займусь и прошивкой самого управления плеером. Потому как всё управление здесь построено по UART без него ничего не сделать.
  4. Я знаю что тут по другому нужно. Сейчас задача просто хотя бы пока наладить UART, а для этого я брал пример из статьи и потихоньку его дорабатываю. Потом естественно все эти команды уже перепишутся на те что нужно. Сейчас пока что только идёт наладка приёма команд.
  5. @korsaj Я уже показывал, но видать не совсем правильно объяснил или вы так и не поняли что конкретно нужно. Буду писать просто на примере самих команд как они приходят. К примеру отправляем команду AT+M2\r\n В ответ мы получим следующее M2+000010\r\n Общее количество файлов равно 16 потому как это hex формат значений данных. И тут ещё их нужно будет переводить эти значения в десятичные. Где собственно то что выделено жирным это и есть данные, а M2 обозначает что это за данные. В данном случае общее количество файлов. \r\n это конец команды. Все полученные команды выглядят таким образом как я и описал только единственное что еще тут нужно учесть что разный тип данных может иметь разное количество знаков.
  6. @korsajЧего то я не совсем понимаю как данную функцию вызывать проверять с конкретными данными. Тем более что у меня в большей части данные которые я буду получать я не знаю полученную информацию там только известны первые символы и последние символы, а в середине хранятся данные которые каждый раз разные. Вот в том то и вся суть приёма данных. Чтобы можно было получить данные и вывести на индикаторы. Так что вариант сравнения строк тут наверное мало поможет. Тут как я понимаю нужно сравнивать конкретные символы и всю информацию между этими символами отдавать уже в обработку программе для вывода на индикацию. Потому как известно что сколько символов занимают данные то есть длинна принятой посылки всегда одинакова для определённого типа информации. Сейчас разбираюсь с UART в меге на передачу я уже всё сделал и оно работает, но на приём пока есть некоторые сложности.
  7. Да скорость в модуле я сразу переключил на 9600 при помощи терминала из компа.
  8. @korsaj Так сейчас вчитывался ещё раз и ничего как то на ум так и не идёт. Сложновато получается. Данную функцию да тем более с массивами на сравнение я точно не осилю.
  9. @korsaj Ну согласно твоих слов и этот код примерно тоже самое и получается. Я и не вижу особых отличий. Но нужно только как то доработать чтоб оно работало. В том то всё и дело что оно не работает. А учитывая как раз таки что мне нужны будут определённые фрагменты где хранятся данные, то это очень хорошее решение, но нужно его доработать до рабочего состояния.
  10. @Yurkin2015 Этот код по какой то причине не отрабатывает. Хотя конечно логика данного кода мне вполне понятна.
  11. Вот здесь надеюсь поможешь. Вот из за чего и поднимался весь этот вопрос с UART что какой то приём тут не полноценный получился вначале. Это для меня очень сложно с функциями, а тем более библиотеками ещё сложней. Далеко не каждая библиотека встаёт в программу и начинаются ошибки в следствии этого. Поэтому я конечно выберу вариант с функцией и без библиотек. Весь код в одном файле. Когда несколько файлов тоже какие то ошибки часто вылетают.
  12. Признак окончания приема на усмотрение @tifaso Как вариант вполне так можно использовать. И ещё я так понимаю полученную инфу нужно будет как то обрезать от всяких префиксов в начале и конце передачи при этом для каждого типа информации нужно делать это индивидуально.
  13. @korsaj Поправил у себя в коде как ты написал. Так вроде бы всё нормально, но как теперь проверять эти строки? То есть мне нужен пример самого условия на проверку строки буквенно цифровую как в плеере приём команды, а то как я не пытаюсь у меня кроме цифр от 0 до 9 ничего не принимает.
  14. @korsaj Сегодня попробовал сделать как ты посоветовал. Получился следующий код. #define F_CPU 7372800UL #define BAUND 9600L #define UBRRL_value (F_CPU/(BAUND*16))-1 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <stdlib.h> void init_pin(void); #define C_PC0 (~PINC&(1<<PC0)) #define C_PC1 (~PINC&(1<<PC1)) #define LED_1_ON() PORTD|=(1<<PD2) #define LED_1_OFF() PORTD&=~(1<<PD2) #define LED_2_ON() PORTD|=(1<<PD3) #define LED_2_OFF() PORTD&=~(1<<PD3) #define FLAG_END_RX (1<<3) #define FLAG_ERR_RX (1<<4) #define BUF_SIZE 20 char rx_buf[BUF_SIZE]; char buf_index = 0; volatile start=1, flags; char b; ISR(USART_RXC_vect) { b=UDR; if(!(flags & FLAG_END_RX)) { rx_buf[buf_index]=UDR; if(rx_buf[buf_index] == 0x0D) { flags |= FLAG_END_RX; return; } buf_index++; if(buf_index >= BUF_SIZE) { buf_index = 0; flags |= FLAG_ERR_RX; } } } void init_UART() { UBRRL = UBRRL_value; UBRRH = UBRRL_value>>8; UCSRB|=(1<<TXEN); UCSRB|=(1<<RXEN); UCSRC|=((1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1)); UCSRB|=(1<<RXCIE); sei(); flags = 0; } void send_UART(char value) { while(!(UCSRA&(1<<UDRE))); UDR=value; } int main(void) { init_pin(); init_UART(); while(1) { if (start==1) { _delay_ms(500); send_UART('O'); send_UART('K'); send_UART('!'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); start=0; } if (b == '0') { LED_1_ON(); LED_2_OFF(); send_UART('N'); send_UART('+'); send_UART('0'); send_UART('0'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); b=4; } if (b == '1') { LED_1_OFF(); LED_2_ON(); send_UART('N'); send_UART('+'); send_UART('0'); send_UART('1'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); b=4; } if (b == '2') { LED_1_ON(); LED_2_ON(); send_UART('N'); send_UART('+'); send_UART('0'); send_UART('2'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); b=4; } if (b == '3') { LED_1_OFF(); LED_2_OFF(); send_UART('N'); send_UART('+'); send_UART('0'); send_UART('3'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); b=4; } if (C_PC0) { send_UART('P'); send_UART('C'); send_UART('0'); send_UART(0x0D); send_UART(0x0A); _delay_ms(250); } if (C_PC1) { send_UART('P'); send_UART('C'); send_UART('1'); send_UART(0x0D); send_UART(0x0A); _delay_ms(250); } } } void init_pin(void) { DDRC = 0b00000000; PORTC = 0b11111111; DDRD |= ((1<<2)|(1<<3)); PORTD &=~ ((1<<2)|(1<<3)); } Ну как сказать всё работает, но вот меня очень интересует приём команд на саму ATMEGA16. Он так и работает только с цифрами. Более ничего корректно принять не получается даже используя таблицу ascii. А мне нужно будет принимать команды и посложней чем просто буквенно - цифровые. Потому как возвращаясь к командам самого плеера там в этих командах хранятся различные данные. Вот примерно так это всё выглядит. AT+QM \ r \ n Запрос режима работы [0: Bluetooth], [1: MP3] AT+M1 \ r \ n Номер текущего файла AT+M2 \ r \ n Общее количество звуковых файлов AT+MD \ r \ n Источник музыки USB или SD Card AT+MT \ r \ n Общее время воспроизведения текущего файла AT+MK \ r \ n Время воспроизведения текущего файла AT+MP \ r \ n Текущее состояние плеера [0]Стоп, [1]Воспроизведение, [2]Пауза К примеру при отправке команды AT+M1 \ r \ n в ответ мы получим M1 + 000002 \ r \ n при этом здесь может быть любое число в hex формате. Мне же нужно каким то образом принять эти данные и обработать их соответствующим образом. Но при этом и нужно учитывать так же что плеер может сам отправить эти данные по началу воспроизведения трека. Вот в этом сейчас и стоит основная задача. Чего я и пытаюсь получить в итоге.
×
×
  • Создать...