6 658 сообщений в этой теме

AlexRK    1

А возможно ли в Протеусе к АЦП - как то загрузить аудио файл - Я хочу подключить к AVR ке и потренироваться ? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IMXO    1 276

да можно, генератор аудио, файлы wav

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
serega374    15

Как например unsigned char = 0b00001010; преобразовать в int и послать в SerialPort. У меня получается посылать только как ASCII символ например UDR0 = ‘1’;
Остальные вариации выводят квадратики. Как в данном случае 10 вывести в сериал порт?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    256

А с чего вдруг будут отображаться как символы коды, которые этими символами не являются. Преобразуйте 16-разрядный int в набор СИМВОЛОВ той формы представления, которую Вы хотите получить и тогда увидите искомое. Обычно в библиотеках этим занимается printf.

Чтобы увидеть 10, нужно вывести ASCII символ "1" и ASCII символ "0". Разница между ASCII символом цифры и ее количественным значением фиксирована. Смотрите таблицу - все цифры идут подряд.

Изменено пользователем my504

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
DmitryS    28

@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);
    } 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
serega374    15

Есть ли стандартная функция преобразования типов переменных.
Например в консольном приложении я делаю так

#include using namespace std;int main() {char a =0b00001010;int b = a;coutreturn 0;}


И вывожу «10» но для МК это не работает:

char a =0b00001010;int b = a;


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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IMXO    1 276
11 минуту назад, serega374 сказал:

мне охота значение переменной смотреть

где смотреть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
КЭС    1 107

Если в этой программе нет режима просмотра ascll кодов, воспользуйтесь другой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Yurkin2015    297
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 для того, чтобы его увидеть на экране монитора.

Изменено пользователем Yurkin2015

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
КЭС    1 107

@serega374 , скачайте себе какую-нибудь терминальную программу, с возможностью выбора способа вывода принятой информации - их много всяких. Чтобы ничего не рекламировать: https://yandex.ru/search/?lr=11230&clid=2236986&win=230&text=терминальная программа для com порта

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
serega374    15

Получаю температуру с 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 идёт не могу проблема в нем или во мне)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IMXO    1 276
3 часа назад, serega374 сказал:

Верно ли я switch case составил

конечно нет. CurrentTemp у вас никогда не равен 1,2,3.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
serega374    15

@IMXO но я писал и "case 00:", 01, 10, и 11.  Всё равно не получается. Как правильно то? Не могу понять

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Sergey-Ufa    612
4 часа назад, serega374 сказал:

int CurrentTemp=(TempData&0b11000000)

CurrentTemp после этого может приобретать только значения 0x00, 0x40, 0x80 и 0xC0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Demonrostov    0

День добрый. Есть устройство на Atmega328p которое контролирует температуру в четырех точках  датчиками DS18B20, так вот в прототипной версии датчики подключены проводами от мышки, и того что попало под руку. Все работает почти идеально, изредка давая сбои по датчикам (на логику работы не влияет). Собрал второй прибор, подключил датчики, но в этом случае взял обычный многожильный(одиночный) провод нарезал три куска и скрутил их вместе дрелью, получив приемлемый для меня дешевый вариант 3-х жильного провода. Так вот в таком варианте (программный код один и тот же) много ошибок чтения показаний датчиков, в плоть до того, что при подключении 4-го датчика идут одни ошибки. Вопрос собственно, кто нибудь может знает какие нибудь особенности, требования к проводам или еще какие хитрости для увеличения стабильности чтения данных с датчиков. Длины проводов где-то около 1,5м на каждый датчик. Блок питания TSP-05 c алиэкспресс питает датчики ,контроллер, дисплей 2004 , по мультиметру выдает стабильно 5В.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
GOR23    39

Как запитаны DS? Паразитно или напрямую? Судя по тому что 3 провода - напрямую, но всё же уточню. Делал когда то витой парой, метров 30 точно было, ошибки были, но не много, правда один датчик только на шине был. Когда то находил рекомендации по 1wire тянуть витой парой, данные + земля, пиатние + земля. То есть получается две косы, по одной земле в каждой. Может питания проваливается, попробуйте возле каждой ds по конденсатору на 100 нан хотя бы. Какой номинал подтягивающего резистора? Может там проблема? Ещё, чисто из моего опыта, если адреса ds определять на ходу на шине, то при длинных линиях этот алгоритм у меня стабильно не особо работал, я правда этим сильно не заморачивался, но с первого взгляда, алгоритм определения адрес сам по себе муторный...

Изменено пользователем GOR23

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Demonrostov    0

Все верно, DS запитаны на прямую. Резистор 4,7кОм, пробовал уменьшать, подымать в пределах 1кОм не помогает. Алгоритм таков: сначала я запоминаю адрес каждого датчика по отдельности в память мк. Затем в цикле  1 раз в сек. захожу  и делаю опрос последовательно каждого датчика на получение температуры, ну далее идет сравнение и дальнейший алгоритм. В конце всего этого посылаю команду на конвертацию всех датчиков с пропуском идентификации SKIP ROM, через секунду цикл повторяется. Разрядность датчиков установлена в 11бит. Есть прерывания по Int0, но там все быстро, зашли увеличили счетчик и вышли. Провода на датчики 0,5мм2, то что было под рукой, по плате натыканы конденсаторы по питанию на 100нан. неужто просадка может на датчике быть? После опроса я не проверяю байт CRC, считываю только данные , если пришли отличные от FFFF значит данные верны, нет -ошибка. В итоге подключая в систему четвертый датчик происходит частое выкидывание ошибки, либо температуры 85 град. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
snn_krs    32
1 hour ago, Demonrostov said:

Есть прерывания по Int0, но там все быстро, зашли увеличили счетчик и вышли.

У меня при опросе датчиков шли прерывания от таймера и были ошибки. Запретил прерывания на время опроса датчиков, ошибки исчезли.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
GOR23    39

Пробуй конденсатор хотя бы в конце линии. Ну и витая пара, как писал выше. Вообще почему-то многие недооценивают надобность блокирующих конденсаторов.

Изменено пользователем GOR23

Поделиться сообщением


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

Ранее выкладывал выходной каскад для работы с данным типом датчиков

https://forum.cxem.net/index.php?/topic/183682-датчик-ds-18b-20-при-отключении-иногда-продолжает-показывать-старую-температуру/&tab=comments#comment-2685080

основным элементом здесь является MAX6314 - т.к. называемая активная подтяжка (помогает линии быстрее подтянуться к лог.1). В конце линии (у последнего датчика) необходимо ставить диод 1N5817-1N5819 между GND и DATA.
Также надо запрещать прерывания на время передачи и приёма одного бита данных. Ну и CRC обязательно.

При отладке на длинной линии и работе на емкостную нагрузку пришлось поиграться задержками, в итоге всё работает уже более 15 лет без замечаний.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Starichok    1 208

запрещать прерывания на время передачи и приёма каждого бита надо ОБЯЗАТЕЛЬНО! так как время тайм-слота строго ограничено.

особенно это важно при приеме бита, так как проверить порт нужно не позднее, чем через 15 мкс после начала тайм-слота. а прерывание запросто может занимать более 15 мкс...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Demonrostov    0

С запретом прерывания надо мыслить, т.к. на него идет синхронизация с сетевым питанием, ну и далее управление симистором. Думал об этом. Есть мысль опрашивать один датчик после каждого синхроимпульса, т.е. сделали прерывание, после делаем опрос в тайм слоте до следующего прерывания, потом следующий датчик и т.д. . Спасибо всем за инфу. Буду пробовать. Как отлажу поделюсь опытом)) Да, в протеусе (частота 16МГц) время на прерывание 4,18 мкс, ну и ошибок нет)) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
snn_krs    32
2 hours ago, Demonrostov said:

С запретом прерывания надо мыслить, т.к. на него идет синхронизация с сетевым питанием, ну и далее управление симистором.

Делал терморегулятор с DS18B20 и выход на симистор через MOC3083, у него встроенная схема определения перехода через 0. На время опроса датчика отключал прерывания. Работает нормально.

Поделиться сообщением


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

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

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

  Разрешено не более 75 смайлов.

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

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

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

Загрузка...

  • Похожие публикации

    • Автор: ITSpec
      Привет всем. Это мой первый пост здесь  прошу отнестись снисходительно.
      Просматривал ролики на Ютуб и понравилась тема одного из блогеров: "Воруем у китайцев". Идея понравилась и полез на Алиэкспресс поискать какой нибудь конструктор чтобы сплагиатить.
      Выбор пал на этот.

      Схему даже с платы не пришлось перечерчивать она была на странице продавца.

      Основная часть этой схемы обычный мультивибратор, который "перемигивает" параллельно подключенные диоды. Вторая часть схемы служит для музыкального сопровождения и состоит из трех компонентов: музыкальной микросхемы, усилителя звука в виде транзистора и громкоговорителя в виде пьезового зумера.
      Такой микросхемы у меня конечно же небыло и я заменил ее на чип H-83a который не нуждался в усилителе.

      Сразу припаял на него SMD резистор и кнопку для переключения мелодий согласно схеме.

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

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

      Потом спроектировал плату.

      После прибегнул к технологии ЛУТ.

      Припаял все элементы. Отсек для батарейки и чип посадил на термоклей.

      Вот фото окончательного устройства.

      Включается устройство от переключателя, а мелодии от кнопки на музыкальном чипе. Если кому-то хочется чтоб мелодия играла при включении вместо кнопки можно впаять перемычку.
      Ссылка на видео как собиралось:
       
    • Автор: Михаил Савин
      Добрый день. Подскажите есть устройство на плате для регулирования дроссельной заслонки от Калины. Довольно специфическое, индивидуальная разработка, аналогов не купить. Основывается на микроконтроллере ATXMEGA128A3U AU 1651. Возможно ли скопировать залитый в него код что бы изготовить данное устройство ? Или это невозможно в принципе ?
    • Автор: ficus216
      Здравствуйте всем. Такая проблема. Дорожка работала, при беге в максим. 10км/ч резко прибавила скорость до 12 наверное ( хотя только до 10 максимум она разгоняется)
      попытался убавить скорость но ничего не срабатывало, можно только переключать между табло "каллории" "скорость" "расстояние""время" ничего убавить нельзя. Дальше вытаскиваю магнит (обычно дорожка автоматически выключается после этого) в этом случае нет, она дальше работала на полной скорости.
      Снизу находится общий включатель, раньше если его вкл то пока старт не нажмешь ничего не будет. а сейчас нажимаю этот вкл снизу и сразу на 12шке херачит.
      Тестором все прозвонил, сгорел микропроцессор я так понимаю. В магзиине мне сказали. что только если на али заказать. Название сгоревшего sonyx sn8p2624kb на али нет в точности с таким названием. прилагаю ссылку
      можно ли заказать этот или любой другой с другим названием ? что делать дальше ? не нужно потом это все прошивать ? и как ?https://clck.ru/DQhDh



    • Автор: Сибирский кот
      Здравствуйте! Мой знакомый отдал мне по ненадобности пульты для заправочной станции модели "Сапсан". В одном пульте стоял микроконтроллер ATMEL AT89S51-24PU и в другом-AT89C51-24PU. Искал схемы в интернете,но ничего не нашел,кроме даташиты. Не знаю,что делать с этими микроконтроллерами-пустить в дело или в утиль. Сможете подсказать?
    • Автор: Oleg Borisov
      Добрый день. Для исследование мне необходимо разработать и собрать прибор который анализирует температуру и влажности среды.
       
      Прибор состоит из следующих блоков:
      1. Выносной датчик температуры
      2. Выносной датчик влажности
      3. Передатчик Bluetooth
      4. Батарея с возможностью подзарядки
      5. Корпус
      6. Мобильное программное обеспечение (Андройд)

      Устройство небольшого размера закрепляется на объекте и передает показания датчиков по средствам Bluetooth на мобильное устройство с предустановленным программным обеспечением.
      В приложении примерная визуализация прибора.
      Оплата договорная!