AlexRK Опубликовано 28 апреля, 2018 Поделиться Опубликовано 28 апреля, 2018 А возможно ли в Протеусе к АЦП - как то загрузить аудио файл - Я хочу подключить к AVR ке и потренироваться ? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 28 апреля, 2018 Поделиться Опубликовано 28 апреля, 2018 да можно, генератор аудио, файлы wav 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
serega374 Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 Как например unsigned char = 0b00001010; преобразовать в int и послать в SerialPort. У меня получается посылать только как ASCII символ например UDR0 = ‘1’;Остальные вариации выводят квадратики. Как в данном случае 10 вывести в сериал порт? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
my504 Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 (изменено) А с чего вдруг будут отображаться как символы коды, которые этими символами не являются. Преобразуйте 16-разрядный int в набор СИМВОЛОВ той формы представления, которую Вы хотите получить и тогда увидите искомое. Обычно в библиотеках этим занимается printf. Чтобы увидеть 10, нужно вывести ASCII символ "1" и ASCII символ "0". Разница между ASCII символом цифры и ее количественным значением фиксирована. Смотрите таблицу - все цифры идут подряд. Изменено 30 апреля, 2018 пользователем my504 1 戦う前に相手のベルトの色に注目 Ссылка на комментарий Поделиться на другие сайты Поделиться
DmitryS Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 @serega374 как то так void Send_hex(char a) // Перевод и отправка НЕХ числа в ASCII кодировке { char b; b=a>>4; if (b<10) b+='0'; else b+='7'; Send_UART(b); b=a&0x0F; if (b<10) b+='0'; else b+='7'; Send_UART(b); } 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
my504 Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 Он просил не хекс, а двоичную форму. 0 戦う前に相手のベルトの色に注目 Ссылка на комментарий Поделиться на другие сайты Поделиться
serega374 Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 Есть ли стандартная функция преобразования типов переменных.Например в консольном приложении я делаю так #include using namespace std;int main() {char a =0b00001010;int b = a;coutreturn 0;}И вывожу «10» но для МК это не работает:char a =0b00001010;int b = a;И я уже пол дня бьюсь ищу в интернете как правильно типы переменных менять но что то толку пока нет. Мне это надо что бы отладку делать пытаюсь освоить I2C и нужно что то сыпать в сериал, а он сыплет квадратики, Только если как символ посылать отображает, а мне охота значение переменной смотреть считанной с другого устройства часов, еепрома и тд 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 11 минуту назад, serega374 сказал: мне охота значение переменной смотреть где смотреть? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
serega374 Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 @IMXO В мониторе порта Arduino IDE программирую UNO 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
КЭС Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 Если в этой программе нет режима просмотра ascll кодов, воспользуйтесь другой. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Yurkin2015 Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 (изменено) 4 часа назад, serega374 сказал: Как в данном случае 10 вывести в сериал порт? @serega374 Число b=10 - это один байт. На мониторе строка "10" - это два байта, первый '1' и второй '0'. Вот и надо посылать в SerialPort эти два байта. Для этого нужно преобразовать число в строку. Определяем сначала - сколько десятков в числе. d = b / 10 Получаем d = 1. Преобразовываем d в ASCII код и посылаем UDR0 = d + '0' Затем вычисляем - сколько единиц в b d = b % 10 Получаем d = 0. Преобразовываем d в ASCII код и посылаем UDR0 = d + '0' Вот только таким образом можно послать двузначное число в SerialPort для того, чтобы его увидеть на экране монитора. Изменено 30 апреля, 2018 пользователем Yurkin2015 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
КЭС Опубликовано 30 апреля, 2018 Поделиться Опубликовано 30 апреля, 2018 @serega374 , скачайте себе какую-нибудь терминальную программу, с возможностью выбора способа вывода принятой информации - их много всяких. Чтобы ничего не рекламировать: https://yandex.ru/search/?lr=11230&clid=2236986&win=230&text=терминальная программа для com порта 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
serega374 Опубликовано 3 мая, 2018 Поделиться Опубликовано 3 мая, 2018 Получаю температуру с DS3231 целую часть из 0х11 вывожу в UART затем посылаю точку. И она если перед её посылкой _delay_ms(100); не поставить не выводится в UART. Ещё вопрос получаю дробную часть температуры из 0x12 она хранится в7и 8 байте.unsigned char TempData=TWDR;int CurrentTemp=(TempData&0b11000000)switch (CurrentTemp)case 0:Посылка в UART ‘0’ ‘0’case 1:Посылка в UART ‘2’ ‘5’case 2: ‘5’’ 0’ case 3: ‘7’’5’Я как понял CurrentTemp будет либо 00 либо 01 либо 10 либо 11. Что соответствует сотым частям температуры с кратностью 0.25. Верно ли я switch case составил, у меня что то не то в Uart идёт не могу проблема в нем или во мне) 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 3 мая, 2018 Поделиться Опубликовано 3 мая, 2018 3 часа назад, serega374 сказал: Верно ли я switch case составил конечно нет. CurrentTemp у вас никогда не равен 1,2,3. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
serega374 Опубликовано 3 мая, 2018 Поделиться Опубликовано 3 мая, 2018 @IMXO но я писал и "case 00:", 01, 10, и 11. Всё равно не получается. Как правильно то? Не могу понять 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Sergey-Ufa Опубликовано 3 мая, 2018 Поделиться Опубликовано 3 мая, 2018 4 часа назад, serega374 сказал: int CurrentTemp=(TempData&0b11000000) CurrentTemp после этого может приобретать только значения 0x00, 0x40, 0x80 и 0xC0 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Demonrostov Опубликовано 3 мая, 2018 Поделиться Опубликовано 3 мая, 2018 День добрый. Есть устройство на Atmega328p которое контролирует температуру в четырех точках датчиками DS18B20, так вот в прототипной версии датчики подключены проводами от мышки, и того что попало под руку. Все работает почти идеально, изредка давая сбои по датчикам (на логику работы не влияет). Собрал второй прибор, подключил датчики, но в этом случае взял обычный многожильный(одиночный) провод нарезал три куска и скрутил их вместе дрелью, получив приемлемый для меня дешевый вариант 3-х жильного провода. Так вот в таком варианте (программный код один и тот же) много ошибок чтения показаний датчиков, в плоть до того, что при подключении 4-го датчика идут одни ошибки. Вопрос собственно, кто нибудь может знает какие нибудь особенности, требования к проводам или еще какие хитрости для увеличения стабильности чтения данных с датчиков. Длины проводов где-то около 1,5м на каждый датчик. Блок питания TSP-05 c алиэкспресс питает датчики ,контроллер, дисплей 2004 , по мультиметру выдает стабильно 5В. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
GOR23 Опубликовано 3 мая, 2018 Поделиться Опубликовано 3 мая, 2018 (изменено) Как запитаны DS? Паразитно или напрямую? Судя по тому что 3 провода - напрямую, но всё же уточню. Делал когда то витой парой, метров 30 точно было, ошибки были, но не много, правда один датчик только на шине был. Когда то находил рекомендации по 1wire тянуть витой парой, данные + земля, пиатние + земля. То есть получается две косы, по одной земле в каждой. Может питания проваливается, попробуйте возле каждой ds по конденсатору на 100 нан хотя бы. Какой номинал подтягивающего резистора? Может там проблема? Ещё, чисто из моего опыта, если адреса ds определять на ходу на шине, то при длинных линиях этот алгоритм у меня стабильно не особо работал, я правда этим сильно не заморачивался, но с первого взгляда, алгоритм определения адрес сам по себе муторный... Изменено 3 мая, 2018 пользователем GOR23 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Demonrostov Опубликовано 3 мая, 2018 Поделиться Опубликовано 3 мая, 2018 Все верно, DS запитаны на прямую. Резистор 4,7кОм, пробовал уменьшать, подымать в пределах 1кОм не помогает. Алгоритм таков: сначала я запоминаю адрес каждого датчика по отдельности в память мк. Затем в цикле 1 раз в сек. захожу и делаю опрос последовательно каждого датчика на получение температуры, ну далее идет сравнение и дальнейший алгоритм. В конце всего этого посылаю команду на конвертацию всех датчиков с пропуском идентификации SKIP ROM, через секунду цикл повторяется. Разрядность датчиков установлена в 11бит. Есть прерывания по Int0, но там все быстро, зашли увеличили счетчик и вышли. Провода на датчики 0,5мм2, то что было под рукой, по плате натыканы конденсаторы по питанию на 100нан. неужто просадка может на датчике быть? После опроса я не проверяю байт CRC, считываю только данные , если пришли отличные от FFFF значит данные верны, нет -ошибка. В итоге подключая в систему четвертый датчик происходит частое выкидывание ошибки, либо температуры 85 град. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
snn_krs Опубликовано 3 мая, 2018 Поделиться Опубликовано 3 мая, 2018 1 hour ago, Demonrostov said: Есть прерывания по Int0, но там все быстро, зашли увеличили счетчик и вышли. У меня при опросе датчиков шли прерывания от таймера и были ошибки. Запретил прерывания на время опроса датчиков, ошибки исчезли. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
GOR23 Опубликовано 3 мая, 2018 Поделиться Опубликовано 3 мая, 2018 (изменено) Пробуй конденсатор хотя бы в конце линии. Ну и витая пара, как писал выше. Вообще почему-то многие недооценивают надобность блокирующих конденсаторов. Изменено 3 мая, 2018 пользователем GOR23 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
technik-1017 Опубликовано 3 мая, 2018 Поделиться Опубликовано 3 мая, 2018 Ранее выкладывал выходной каскад для работы с данным типом датчиков https://forum.cxem.net/index.php?/topic/183682-датчик-ds-18b-20-при-отключении-иногда-продолжает-показывать-старую-температуру/&tab=comments#comment-2685080 основным элементом здесь является MAX6314 - т.к. называемая активная подтяжка (помогает линии быстрее подтянуться к лог.1). В конце линии (у последнего датчика) необходимо ставить диод 1N5817-1N5819 между GND и DATA. Также надо запрещать прерывания на время передачи и приёма одного бита данных. Ну и CRC обязательно. При отладке на длинной линии и работе на емкостную нагрузку пришлось поиграться задержками, в итоге всё работает уже более 15 лет без замечаний. 0 Наработки Ссылка на комментарий Поделиться на другие сайты Поделиться
Starichok Опубликовано 3 мая, 2018 Поделиться Опубликовано 3 мая, 2018 запрещать прерывания на время передачи и приёма каждого бита надо ОБЯЗАТЕЛЬНО! так как время тайм-слота строго ограничено. особенно это важно при приеме бита, так как проверить порт нужно не позднее, чем через 15 мкс после начала тайм-слота. а прерывание запросто может занимать более 15 мкс... 1 Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду. Ссылка на комментарий Поделиться на другие сайты Поделиться
Demonrostov Опубликовано 4 мая, 2018 Поделиться Опубликовано 4 мая, 2018 С запретом прерывания надо мыслить, т.к. на него идет синхронизация с сетевым питанием, ну и далее управление симистором. Думал об этом. Есть мысль опрашивать один датчик после каждого синхроимпульса, т.е. сделали прерывание, после делаем опрос в тайм слоте до следующего прерывания, потом следующий датчик и т.д. . Спасибо всем за инфу. Буду пробовать. Как отлажу поделюсь опытом)) Да, в протеусе (частота 16МГц) время на прерывание 4,18 мкс, ну и ошибок нет)) 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
snn_krs Опубликовано 4 мая, 2018 Поделиться Опубликовано 4 мая, 2018 2 hours ago, Demonrostov said: С запретом прерывания надо мыслить, т.к. на него идет синхронизация с сетевым питанием, ну и далее управление симистором. Делал терморегулятор с DS18B20 и выход на симистор через MOC3083, у него встроенная схема определения перехода через 0. На время опроса датчика отключал прерывания. Работает нормально. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.