Jump to content

Видеокурс по AVR-микроконтроллерам для начинающих


 Share

Recommended Posts

10 часов назад, Юрий_Нд сказал:

Нужно просто сказать

Первая твоя ошибка - ты увеличил число выборок для усреднения до 40 

int tmp=0;
for (int i=0;i<40;i++)

Столько в переменную не помещается, вот и идет всякая хрень. И для удобства упрости модель Протеуса. С делителями разберешься, когда будешь в железе собирать. Ладно, вот исправлено. Обрати внимание, что источник напряжения vsource настроен на твое опорное напряжение.

Les-07-02.rar

Edited by gogaze

Мир не без добрых людей!

Link to comment
Share on other sites

5 часов назад, gogaze сказал:

Первая твоя ошибка

Ну во-первых, это не моя ошибка, а ошибка учителя по имени админ.  Я только заметил эту ошибку.  Интересно только ли я?  Ты уж прости, но перечитывать сотню страниц мне как-то облом.

5 часов назад, gogaze сказал:

ты увеличил число выборок для усреднения до 40 

 Насколько я понимаю,  процессор у нас 16 битной, а поэтому целочисленная переменная типа int может принимать значение от -32767 до 32767.  Именно с этим связано твоё значение в выборке до 32.

5 часов назад, gogaze сказал:

источник напряжения vsource настроен на твое опорное напряжение.

Зачем?  Понятно,  что всё в реале сгорит, но мы же  в Протеусе играемся,  а это здесь дозволено.  Хотя не знаю почему?

5 часов назад, gogaze сказал:

С делителями разберешься, когда будешь в железе собирать

 А что с ними разбираться? Они работают, как автоматы Калашникова.  Везде и всегда, потому что Закон Ома никто не отменял.

Edited by Юрий_Нд
Link to comment
Share on other sites

6 часов назад, Alex сказал:

Это как ? :blink:
Как может быть "количество шагов" отрицательным ? Ход в обратную сторону ? :D

 А на картинку чуть выше глянуть сложно?
  Сам понимаю, что количество шагов, точно также, как и масса съеденной колбасы не может быть отрицательным или отрицательной.
 А посему и спрашиваю, у знатоков этого дела.

 

Edited by Юрий_Нд
Link to comment
Share on other sites

Приглашаем на вебинар «Необычное в обычном. Сравнительный анализ современных решений Recom» (27.01.2022)

Приглашаем 27/01/2022 всех желающих посетить вебинар, посвященный двум наиболее растущим сегментам интегрированных источников питания – AC/DC малой мощности (1-20Вт) и сегменту решений PoL без изоляции. На вебинаре рассмотрим проблему выбора AC/DC в бюджетном сегменте и концепцию тестирования ускоренного старения, проведем сравнительный анализ подходов к интеграции AC/DC модулей. Сделаем обзор решений концепции POL с доисторических времен до современных технологий и средств для разработки и тестирования.

Подробнее

26 минут назад, Юрий_Нд сказал:

Ну во-первых, это не моя ошибка, а ошибка учителя по имени админ

Да нет, твоя.

Скрытый текст

2fb68e0b7033t.jpg

Скрин с видеоурока

28 минут назад, Юрий_Нд сказал:

Насколько я понимаю,  процессор у нас 16 битной,

И здесь неверно.  Даташит в качестве справочника.

Ну остальное, если сам знаешь - не комментирую.

Мир не без добрых людей!

Link to comment
Share on other sites

LI/PR2 – надежные и недорогие ИП от MORNSUN на DIN-рейку

Компания Mornsun выпустила три серии источников питания с креплением на DIN-рейку в форм-факторе Home Automation на популярные значения выходной мощности 30, 60 и 100 Вт (серии LI30-20/PR2, LI60-20/PR2, LI100-20/PR2). Эти источники питания относятся ко второму поколению продукции (R2) и характеризуются высокой надежностью и хорошей стоимостью.

Подробнее

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

Да нет, твоя.

Практическое задание к 7-му уроку по AVR, 20:08.

Что в последующих уроках не знаю, могу ответить только как двоечник: "...  это мы не проходили, это нам не задавали".

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

Ну остальное, если сам знаеш

 Насколько я понял, я чем-то обидел тебя.  Если это так, искренне прошу извинить меня,  если ненароком обидел.
 Но по-любому я должен сказать,  что бы я делал без твоих конкретных Советов, которые всегда в десяточку.
 И как ты любишь говорить: "... предлагаю замять это дело."

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

И здесь неверно. 

 Да, скажу честно, в datasheet я не смотрел.
 Тогда попробуй объяснить, почему такое ограничение если процессор работает не в 16 битной системе с целочисленными переменными?
 

1 - Обменник - 27.png

Edited by Юрий_Нд
Link to comment
Share on other sites

Стандарт LoRaWAN и его использование в России с контроллерами STM32WL

Стандарт сетевого уровня LoRaWAN технологии LoRa одобрен для применения в России и отвечает требованиям региональных сетевых операторов. Компания STMicroelectronics выпустила линейку беспроводных однокристальных контроллеров серии STM32WL c поддержкой модуляции LoRa. Серия STM32WL имеет цифровые и аналоговые периферийные устройства для приложений, требующих высокой энергоэффективности и возможностей связи на достаточно большие расстояния, подходя для широкого спектра промышленных и потребительских приложений.

Подробнее

@Юрий_Нд Здесь проблема с размером переменной

int tmp=0;

for (int i=0;i<40;i++)

Замени ее на unsigned int и поиграйся с цифрой 40, увеличивай и посмотри с какой начнет глючить (переполняться) переменная. Пригодится. 

Грамотно и коротко о переменных (вернее о том, как их рассчитать) я объяснить не смогу, но есть участники во сто крат круче меня. К примеру наш модератор 

Edited by gogaze

Мир не без добрых людей!

Link to comment
Share on other sites

Разработка преобразователей на основе карбид-кремниевых приборов с помощью симулятора SpeedFit 2.0

Компания Wolfspeed разработала бесплатный онлайн симулятор SpeedFit 2.0, позволяющий разработчикам быстро и всесторонне оценить параметры основных процессов, происходящих в силовой части импульсных преобразователей электрической энергии, и сравнить между собой различные варианты реализации поставленного технического задания.

Подробнее

1 час назад, Юрий_Нд сказал:

Да, скажу честно, в datasheet я не смотрел.

Хм.... вот после такого заявления, на какое отношение к себе рассчитывает гражданин? 

"Я ничего не смотрел, не изучал, мне пофигу принцип работы цифровой логики, типы переменных в Си вообще по барабану, а теперь расскажите мне, что мне дальше делать!"

Как говорил химик моего сына - "вон угол, иди ударься".

И нет, дорогой гражданин, вы меня не обидели. Я просто офигеваю с вас. 

Link to comment
Share on other sites

19 часов назад, Юрий_Нд сказал:

... не нужно никакой телепатии. Нужно просто сказать/спросить, что непонятно, либо ничего непонятно.

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

Из чего складывается вывод АЦП на экран? Из измерения, усреднения по 40 точкам и преобразования в строку. В некоторых кривых библиотеках добавляется еще перевод в дробные числа, который, естественно, ухудшает точность и сильно ухудшает скорость.

Вот по очереди эти шаги и проверяете. Правильно ли идет оцифровка одного измерения? Правильно ли срабатывает выбор канала (рекомендую проверить не только 0 и 1 каналы, но и остальные. Даже не только проверить, но и исправить чтобы работало)? Правильно ли идет усреднение? Правильно ли идет вывод?

Я даже подскажу: проблема в функции readADC(). Ну и в Lcd_printf() - из-за дурацкой идеи преобразовывать целое число в дробное. Подобные вещи всегда считаются в фиксированной точке!

3 часа назад, Юрий_Нд сказал:

Ну во-первых, это не моя ошибка, а ошибка учителя по имени админ.  Я только заметил эту ошибку.

Если бы ее заметили вы, сами бы и исправили. А то, что на нее случайно наткнулись, бездумно меняя константы - другой вопрос. Потом решить усреднять не по 40 точкам, а по 256 - "а-а-а, у вас ошибка".

3 часа назад, Юрий_Нд сказал:

Насколько я понимаю,  процессор у нас 16 битной

Не угадали, процессор 8-битный.

3 часа назад, Юрий_Нд сказал:

поэтому целочисленная переменная типа int может принимать значение от -32767 до 32767.  Именно с этим связано твоё значение в выборке до 32.

Снова не угадали. Потому что деление на степень двойки не требует деления.

3 часа назад, Юрий_Нд сказал:

А на картинку чуть выше глянуть сложно?

А сформулировать по-человечески сложно?

Количество шагов оцифровки в AVR фиксированное, 12.5 - эта цифра есть в даташите. Выходное значение АЦП физически не может принимать значения за пределами 0-1023. Либо 0-65536 при выравнивании влево.

2 часа назад, Юрий_Нд сказал:

Тогда попробуй объяснить, почему такое ограничение если процессор работает не в 16 битной системе с целочисленными переменными?

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

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

Замени ее на unsigned int

А лучше на uin16_t из <inttypes.h>

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Link to comment
Share on other sites

58 минут назад, COKPOWEHEU сказал:

А лучше на uin16_t из <inttypes.h>

Урок для начинающих, мне тоже интересно. Вот пример

int tmp=0;

for (int i=0;i<40;i++)

Как выбрать (рассчитать) переменную для значений 40, 55, 64, 128 и т.д. И вообще, как связаны микроконтроллер Atmega 8 (8 bit) с этими рас счетами.

Edited by gogaze

Мир не без добрых людей!

Link to comment
Share on other sites

38 минут назад, gogaze сказал:

Как выбрать (рассчитать) переменную для значений 40, 55, 64, 128 и т.д.

элементарно. максимальное значение АЦП = 1023 , 
максимальное знаковое ворд = 32767
МАХ/МАХацп= 32 - максимальное значение итераций сложения значений АЦП.

 

Link to comment
Share on other sites

42 минуты назад, IMXO сказал:

максимальное знаковое ворд = 32767
МАХ/МАХацп= 32 - максимальное значение итераций сложения значений АЦП.

Вот тут поподробнее , пожалуйста

Edited by gogaze

Мир не без добрых людей!

Link to comment
Share on other sites

2 часа назад, gogaze сказал:

Как выбрать (рассчитать) переменную для значений 40, 55, 64, 128 и т.д. И вообще, как связаны микроконтроллер Atmega 8 (8 bit) с этими рас счетами.

 

4 часа назад, gogaze сказал:

Грамотно и коротко о переменных (вернее о том, как их рассчитать) я объяснить не смогу, но есть участники во сто крат круче меня. К примеру наш модератор 

Ну почему же только модератор, есть и другие  участники нашего форума, которые:

3 часа назад, COKPOWEHEU сказал:

случайно наткнулись, бездумно меняя константы

На следующее (прошу не цепляться на значение чисел, приведённых здесь с точностью до единицы.):
1. Целочисленная Переменная типа int может быть знаковой от -32 768 до + 32 767. И это сказанное касается, если для хранения этой переменной отводится 2 байта памяти, если в каждом байте 8 бит. Это я говорю на всякий случай, потому что меня месяц назад здесь же пытались уверить, что байт это не только 8 бит, а 4, 6 и даже 10 бит. 
Теперь поясню на пальцах, почему именно такие цифры.
2 байта памяти, это 16 ячеек памяти. При 2 - ричной системе счисления если мы будем использовать 15 ячеек памяти, тогда наибольшее число которое мы можем записать, это 32 768, последняя 16 ячейка памяти используется для хранения знака.
Если же мы используем целочисленную переменную типа unsigned int, тогда нам нет смысла держать 16 чайку памяти для хранения знака. Туда мы тоже можем записать "дополнительное число",  и тогда в итоге мы можем хранить 2 в 16 степени число, то есть 65 535.
Вывод:  Когда при вышеперечисленных условиях мы пытаемся  в переменной типа инт воткнуть число 32800, а в переменную типа unsigned int число 65600 мы натыкаемся на "те виллы", на которые я наткнулся, "бездумно меняя константы".
Ещё один организационный вывод:
Мужики, Вы можете меня считать "безумным идиотом, который случайно наткнулся на что-то, бездумно меняя константы" или ещё кем-то, как Вам нравится. Поймите меня правильно. У меня просто нет времени отвечать на подобные обвинения.
Можете помочь, буду очень рад и признателен...
... не хотите отвечать, ну что ж, как говорится "... на нет и суда нет".
Единственное, что не устану повторять:
"... огромная моя честь, признательность и хвала участнику с ником gogaze."
Что-бы я делал без него?

 

1 - Обменник - 27.png

Edited by Юрий_Нд
Link to comment
Share on other sites

14 минут назад, gogaze сказал:

Вот тут поподробнее , пожалуйста

Постарайтесь прочитать, то что я тут написал.
Надеюсь, тут есть ответ на Ваш вопрос.
Я Ваш должник, чем смогу, помогу в свою очередь.

1 - Обменник - 28.png

Edited by Юрий_Нд
Link to comment
Share on other sites

Уважаемый gogaze, Выскажу крамольную здесь мысль.
Предлагаю не тратить время на поиски в интернете, это большая помойка, отвечаю.
Прочтите что я написал, и задайте вопрос, что Вам непонятно.
Не стыдитесь этого. 
Стыдно только не знание.
Я так считаю.

Edited by Юрий_Нд
Link to comment
Share on other sites

5 часов назад, gogaze сказал:
5 часов назад, IMXO сказал:

максимальное знаковое ворд = 32767
МАХ/МАХацп= 32 - максимальное значение итераций сложения значений АЦП.

Вот тут поподробнее , пожалуйста

МАХ =32767;

МАХацп=1023;

32767 / 1023 = 32 (примерно).

Кстати у меня уже примерно в два раза больше, то есть наверное 64.

 

Link to comment
Share on other sites

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

Как выбрать (рассчитать) переменную для значений 40, 55, 64, 128 и т.д. И вообще, как связаны микроконтроллер Atmega 8 (8 bit) с этими рас счетами.

АЦП у нас 10-битный, то есть 0-1023. При сложении 40 измерений получаем диапазон 0*40 - 1023*40 = 0 - 40920. Минимальный тип данных, в который такое число влезает uint16_t (0-65535).

Для сложения 100 измерений соответственно 0-102300 - уже в uint16_t не помещается, придется брать uint32_t (0-4*109).

Брать знаковые числа в данном случае смысла вообще нет.

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

максимальное знаковое ворд = 32767

Что считается вордом?

8 часов назад, Юрий_Нд сказал:

1. Целочисленная Переменная типа int может быть знаковой от -32 768 до + 32 767.

Правильно, но надо помнить, что это именно для AVR. На других архитектурах int может быть и 32, и 64 бита. Именно поэтому я рекомендую пользоваться типами фиксированной размерности: uint16_t и подобными.

8 часов назад, Юрий_Нд сказал:

2 байта памяти, это 16 ячеек памяти.

Кажется, я понимаю, что вы имеете в виду, но все же поправлю терминологию. "Ячейка памяти" это минимальный объем данных, которым может оперировать контроллер. Обычно это байт. А вы, похоже, имеете в виду бит. Обратиться непосредственно к биту ни одна из известных мне архитектур не может.

8 часов назад, Юрий_Нд сказал:

При 2 - ричной системе счисления

Очень хочется придраться, что раз система у нас 8-битная, то считать она будет в 256-ричной системе. Но подобный философский вопрос все же не для этой ветки.

8 часов назад, Юрий_Нд сказал:

Вывод:  Когда при вышеперечисленных условиях мы пытаемся  в переменной типа инт воткнуть число 32800, а в переменную типа unsigned int число 65600 мы натыкаемся на "те виллы", на которые я наткнулся, "бездумно меняя константы".

Да, именно так. Я рад, что вы докопались до истины.

8 часов назад, Юрий_Нд сказал:

У меня просто нет времени отвечать на подобные обвинения.

Если "подобные обвинения" являются лучшим способом подтолкнуть вас к изучению матчасти, мы будем вынуждены ими пользоваться.

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

Дело в том, что когда (я не слишком оптимистичен?) вы вырастите из типичных задач и углубитесь в малоизученные темы, будет проблемой просто найти человека, который в этой теме что-то знает. Быстрее оказывается найти решение самостоятельно, чем ждать подсказки.

Edited by COKPOWEHEU

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Link to comment
Share on other sites

2 часа назад, COKPOWEHEU сказал:

... вы докопались до истины.

Спешу разочаровать Вас, я ни до чего не докопывался. 
Я просто изложил на бумагу, пардон на страничку экрана, часть тех знаний, которые я получил вместе с тремя дипломами о высших технических образованиях (все красные). Могу дальше продолжить, но зачем ...
Давайте по сути.
Я выражаю глубокую благодарность Всем здесь присутствующим на этом форуме, кто хоть как-то отреагировал на мои сообщения. Даже не дружелюбно, злобно и так далее.
Хочу напоследок (именно в этой теме) только сказать: "... ребята, давайте жить дружно"
Ну и конечно если можно, пару вопросов "на посошок":
1. Я правильно понимаю, что из Atmega8 я "выжал" всё что можно, а именно 6 АЦП?  7 -го АЦП просто нет?
2. Есть ли на этом форуме тема, где подробно разбираются "время". То есть мне нужно выйти на промежутки времени, между измерениями АЦП?
п.с.  Ах да, чуть ли не забыл?
 Отдельная большая благодарность и признательность за помощь уважаемому gоgaze. Я просто не знаю, что бы я делал без его помощи и советов?

1 - Обменник - 30.png

Edited by Юрий_Нд
Link to comment
Share on other sites

3 часа назад, COKPOWEHEU сказал:

АЦП у нас 10-битный, то есть 0-1023. При сложении 40 измерений получаем диапазон 0*40 - 1023*40 = 0 - 40920. Минимальный тип данных, в который такое число влезает uint16_t (0-65535).

Вот это настоящее объяснение!!! С обоснованием и цифрами! ОГРОМНОЕ СПАСИБО!

Мир не без добрых людей!

Link to comment
Share on other sites

@COKPOWEHEU  Жалко, что год назад Вы в мою тему по расчету переменной на кибере не заглянули - думаю я бы влёт получил такой же обоснованный и точный ответ.

Edited by gogaze

Мир не без добрых людей!

Link to comment
Share on other sites

6 часов назад, Юрий_Нд сказал:

Я правильно понимаю, что из Atmega8 я "выжал" всё что можно, а именно 6 АЦП?  7 -го АЦП просто нет?

в АТмега8 всего ОДИН АЦП, но ему переключать входы помогает мультиплексор.

это в 28-ногой АТмега8 всего 6 каналов АЦП, но если возьмешь 32-ногую АТмегу8, то получишь еще 2 канала АЦП. итого будет 8 каналов.

Мудрость приходит вместе с импотенцией...

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

Link to comment
Share on other sites

9 часов назад, Юрий_Нд сказал:

вместе с тремя дипломами о высших технических образованиях (все красные). Могу дальше продолжить, но зачем

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

9 часов назад, Юрий_Нд сказал:

1. Я правильно понимаю, что из Atmega8 я "выжал" всё что можно, а именно 6 АЦП?  7 -го АЦП просто нет?

Нет. Во-первых, как уже заметил Starichok, АЦП в m8 всего один. Во-вторых, каналы 6 и 7 там тоже есть, но только в SMD-корпусе. В-третьих, "выжать все" это несколько более широкий термин. Туда может входить и точность измерений, и скорость, и анализ.

9 часов назад, Юрий_Нд сказал:

2. Есть ли на этом форуме тема, где подробно разбираются "время". То есть мне нужно выйти на промежутки времени, между измерениями АЦП?

В даташите, естественно. Там и рекомендуемая частота АЦП указана, и время выборки, и время преобразования. Зачем еще и форум подобным засорять?

7 часов назад, gogaze сказал:

Жалко, что год назад Вы в мою тему по расчету переменной

Что за тема? Скорее всего, она меня просто не заинтересовала. Как и тут: я не знаю в чем у вас была проблема с этими переменными. Сами же видите, что никакой сложной математики нет.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Link to comment
Share on other sites

4 минуты назад, COKPOWEHEU сказал:

Что за тема?

Расчет и выбор переменной на конкретном примере. Но мы там разобрались, помогла Ваша подсказка в теме "Как написать код для счетчика ампер-часов?" За что еще раз спасибо!

Мир не без добрых людей!

Link to comment
Share on other sites

19 минут назад, COKPOWEHEU сказал:

В даташите, естественно. Там и рекомендуемая частота АЦП указана, и время выборки, и время преобразования. Зачем еще и форум подобным засорять?

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

Link to comment
Share on other sites

2 минуты назад, Юрий_Нд сказал:

Ну да конечно, с такими советами можно форум вообще закрывать.

И это говорит человек с тремя техническими "вышками" ? :rake:
Вы хоть открывали даташит на МК, с которым работаете ? Или считаете, что это - ненужное убивание времени ?

Link to comment
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.

  • Сообщения

    • Тому как Qts есть добротность резонанса. Это бас и мидбас вынуждены работать в полосе резонанса. А миду и твитеру это противопоказано.
    • @drubtsow за динамики ни слова... или мы должны сами догадаться? 
    • вот смотрите . там где сейчас 50 ком , с емкостью 0.1мкф образуется срез 32герц , там где 270ком , там срез 6герц , исходя из особенности схемы фазоинвертора, изменив сопротивление верхнего резистора ,  срез по частоте 32 герц Вы сделали для обоих выходных ламп , что собственно и подтверждается графиком АЧХ , а вы говорите что все хорошо и ровно ... далее , учитывая что резисторы 270к(50к неисправный канал) и 270к образуют делитель , со средней точки которого снимается на вторую сетку фазоинвертора , то вы сильно нарушили баланс сигналов на сетках выходных ламп , тем самым очень сильно увеличив уровень второй гармоники , что так же очень хорошо видно на графике ачх . вывод : каналы усилителя звучат совершенно по разному , в какой то степени это сгладит ооос , но звук все же будет ну не айс . вот настоятельно рекомендую сделать это : ну а там каждому свое , устраивает звучание усилителя , ну так и забейте тогда 
    • SENDUST или альсифер по-русски. Ферритовые кольца не годятся. Можно взять ферритовый Ш-образный сердечник с зазором. Какой модуль ? Который вы собрали, или купленный у китайцев ? Если купленный у китайцев, то он работает как SEPIC преобразователь и никакие снабберы и суппресоры ему не требуются, т.к. все выбросы, в т.ч. и отражённое напряжение уходят через конденсатор Cdc к потребителю. На вашем же модуле снаббер нужно ставить в обязательном порядке. Хотя, для такой мощности хватит суппресора.
    • Не обсуждали, но конструкция освещалась. Её можно рассматривать только в случае, если нет возможности купить патрон 0,3 - 4 мм.
    • https://market.yandex.ru/product--flius-gel-flux-plus-bezotmyvochnyi-10g/1412132848?nid=55166&show-uid=16427114372216197729416002&context=search&text=Флюсы NC-D500 6-412-A Flux-Plus&sku=101414308677&cpc=9PQ8wk_dwzUKFAp5kbB_BHqXk_83F3Be0XMA9VS5lg-wU0YWULfTlkSTPujYIfEamNz9C0ZigXM95q1_kN0s-K_jkDC4BfsuJFOiPypRW-cauET-6L161BcKnuxSfCp0z8GRHLLxmDjgLZXjGOd1WT-s8iDBWz4YPdf6S1dFFfvOIZLjhOgu2ornoVm0cLMV&do-waremd5=VgQrBT2FmYHgEj8qF4_A-A не поделитесь "примером для подражания"?  
    • На радиаторе (на фото) прикручены ТО-247. ТО-3 - это вот это 
  • Similar Content

    • By Super Akk
      Здравствуйте, я работаю в Proteus и у меня возникла ошибка Simulation is not running in real time due to excessive CPU load
      Подскажите пожалуйста как её исправить
      Код прошивки:
      #include <lm3s300.h> // Graphic Display functions #include <glcd.h> // Font used for displaying text // on the graphic display #include <font5x7.h> // Declare your global variables here void main(void) { unsigned char odin[] = { 0x08, 0x00, 0x08, 0x00, #ifndef _GLCD_DATA_BYTEY_ 0x00, 0x10, 0x18, 0x14, 0x10, 0x10, 0x7C, 0x00, #else 0x00, 0x00, 0x48, 0x44, 0x7E, 0x40, 0x40, 0x00, #endif }; // Declare your local variables here // Variable used to store graphic display // controller initialization data GLCDINIT_t glcd_init_data; // Crystal Oscillator division factor: 1 #pragma optsize- CLKPR=(1<<CLKPCE); CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0); #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif // Input/Output Ports initialization // Port B initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Port C initialization // Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0); // State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0); // Port D initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=0xFF // OC0A output: Disconnected // OC0B output: Disconnected TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00); TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (0<<CS00); TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=0xFFFF // OC1A output: Disconnected // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10); TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=0xFF // OC2A output: Disconnected // OC2B output: Disconnected ASSR=(0<<EXCLK) | (0<<AS2); TCCR2A=(0<<COM2A1) | (0<<COM2A0) | (0<<COM2B1) | (0<<COM2B0) | (0<<WGM21) | (0<<WGM20); TCCR2B=(0<<WGM22) | (0<<CS22) | (0<<CS21) | (0<<CS20); TCNT2=0x00; OCR2A=0x00; OCR2B=0x00; // Timer/Counter 0 Interrupt(s) initialization TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0); // Timer/Counter 1 Interrupt(s) initialization TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (0<<TOIE1); // Timer/Counter 2 Interrupt(s) initialization TIMSK2=(0<<OCIE2B) | (0<<OCIE2A) | (0<<TOIE2); // External Interrupt(s) initialization // INT0: Off // INT1: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-14: Off // Interrupt on any change on pins PCINT16-23: Off EICRA=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00); EIMSK=(0<<INT1) | (0<<INT0); PCICR=(0<<PCIE2) | (0<<PCIE1) | (0<<PCIE0); // USART initialization // USART disabled UCSR0B=(0<<RXCIE0) | (0<<TXCIE0) | (0<<UDRIE0) | (0<<RXEN0) | (0<<TXEN0) | (0<<UCSZ02) | (0<<RXB80) | (0<<TXB80); // Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); ADCSRB=(0<<ACME); // Digital input buffer on AIN0: On // Digital input buffer on AIN1: On DIDR1=(0<<AIN0D) | (0<<AIN1D); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); // SPI initialization // SPI disabled SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0); // TWI initialization // TWI disabled TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE); // Graphic Display Controller initialization // The KS0108 connections are specified in the // Project|Configure|C Compiler|Libraries|Graphic Display menu: // DB0 - PORTB Bit 0 // DB1 - PORTB Bit 1 // DB2 - PORTB Bit 2 // DB3 - PORTB Bit 3 // DB4 - PORTB Bit 4 // DB5 - PORTB Bit 5 // DB6 - PORTB Bit 6 // DB7 - PORTB Bit 7 // E - PORTC Bit 0 // RD /WR - PORTC Bit 1 // RS - PORTC Bit 2 // /RST - PORTC Bit 3 // /CS1 - PORTC Bit 4 // /CS2 - PORTC Bit 5 // Specify the current font for displaying text glcd_init_data.font=font5x7; // No function is used for reading // image data from external memory glcd_init_data.readxmem=NULL; // No function is used for writing // image data to external memory glcd_init_data.writexmem=NULL; glcd_init(&glcd_init_data); glcd_putimage(0,0, odin, GLCD_PUTCOPY); while (1) { // Place your code here } } Схема прикреплена ниже в архиве

      Схема.rar
    • By Н_Д_А
      Всем привет).
      Может, кому-то эта статья  сэкономит много времени и нервов. 
      Недавно  по работе встретился с интересной задачкой.
      Нужно было передать на железку по порту RS485 информацию для проверки работоспособности последней.
      Так как не всегда имеется в ремонте вся система, то для начала нужно было посмотреть, на заведомо исправной системе, что же там между ними (железками) передаётся.
      Логический анализатор показал что девайсы общаются по не совсем стандартному, а по  9ти битному протоколу (USART 9n1).
      А это усложняло задачу, так-так известные мне терминальные программы его не поддерживают.  И без бубна не обойтись))).
      Начались поиски решения.
      Через некоторое время стало понятно, что AVR позволяет это делать и даже в даташите подробно это описывает.
      Дело за малым. Реализация задуманного))). 
      Все регистры выставлены по документу………..Для Atmega8a.
      void USART_Init( unsigned int speed) //Инициализация модуля USART { UBRRH = (unsigned char)(speed>>8); UBRRL = (unsigned char)speed; UCSRB=(1<<RXEN)|( 1<<TXEN); //Включаем прием и передачу по USART UCSRB |= (1<<RXCIE); //Разрешаем прерывание при передаче UCSRA |= (1<<U2X); //удвоение скорости UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ1)|(1<<UCSZ0); UCSRB |= (1<<UCSZ2); // Включаем 9bit режим // Обращаемся именно к регистру UCSRC (URSEL=1) // ассинхронный режим (UMSEL=0), без контроля четности (UPM1=0 и UPM0=0) // 1 стоп-бит (USBS=0), 8-бит посылка (UCSZ1=1 и UCSZ0=1) // если (UCSZ1=1 и UCSZ0=1 и UCSZ2=1) 9bit mode. // UCSRC |= (1<<UPM1);//четность } По даташиту передача 9го бита происходит установкой или сбросом TXB8. 
      То есть, установили бит, передаётся 1 в старшем 9ом разряде, сбросили – 0. 
      void USART_Transmit( unsigned int data ) // функция передачи 9ти бит из даташита. { /* Wait for empty transmit buffer */ while ( !( UCSRA & (1<<UDRE)) ) ; /* Copy ninth bit to TXB8 */ UCSRB &= ~(1<<TXB8); if ( data & 0x0100 ) //не понял, что они хотели этим сделать. UCSRB |= (1<<TXB8); /* Put data into buffer, sends the data */ UDR = data; } И вот незадача, числа размером до 1 байт передаются без проблем, а числа больше 0xFF (255) нет).
      А устройство передаёт числа до 510.
      Предлагаю решение.  Может и не самое лучшее, но вполне работоспособное.
      int main(void) { USART_Init (103);//9600 //------------------------------------------------------------------------------------ while(1) { for (i=0; i<22; i++) { code_simbol = simbol[i]; //символ из массива //-------------------------------------отправка в UART-------------------------------- if (code_simbol > 255) { pr=1; // флаг передачи символа больше 0xff (255 десятичное) } else { pr=0; // флаг передачи символа меньше 0xff } USART_Transmit(code_simbol,pr);//собственно сама функция отаравки } } } А теперь и сама функция передачи .
      void USART_Transmit( unsigned char data, uint8_t prisnak ) //Функция отправки по USART { while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема if (prisnak==1) { UCSRB |= (1<<TXB8); //устанавливаем для передачи еденицы в старшем разряде } else { UCSRB &= ~(1<<TXB8); //сбрасываем старший разряд } /* Put data into buffer, sends the data */ UDR = data; //Начало передачи данных asm volatile ("nop"); Соответственно если число для предачи мньше 256 мы передаём его при нулевом 9ом бите.
      Ну а если больше то 9й бит выставляем в единицу.
      А вот и результат.

       
    • By France de Vague
      Здравствуйте.
      Я собрал схему для генерации звуков на AVR по материалам вот этой статьи на Хабре.
      Использовал ATMega328P. В этом проекте частота ШИМ 31250 Гц, так что я собрал фильтр - RC-цепь, где R = 510 Ом, а С = 0.1 мкФ приложил схему к посту (эти значения я рассчитал на предложенном в статье калькуляторе ШИМ-фильтров (приложил скриншот); нагрузкой поставил динамик с сопротивлением 8 Ом, на схему подал 5В питания с лабораторного БП.
      Я загрузил в микроконтроллер демо-код, который должен проигрывать последовательность звуков. Фьюзы, вроде бы, стандартные, но я на всякий случай приложил скриншот и с ними.
       
      В общем, проблема в том, что звук, который он должен воспроизводить звучит приглушенно, зато блин стоит какой-то монотонный писк, иногда почти скрип и вот он очень громкий. 
      Я подумал, что проблема в неправильно рассчитанном фильтре или какой-нибудь наводке. Собрал их сто тысяч разных, но писк только приглушался вместе со всем остальным, когда я большие сопротивления ставил, а по частоте на слух не менялся(не уверен, должен ли был), хотя емкости я пробовал тоже очень разные.
      Я немного почитал код, попробовал отключить функцию подавления щелчка при сменах нот (это ничего не изменило). Код довольно сложный, чтобы пытаться всерьез искать там какие-нибудь ошибки, да и я подозреваю, что там их нет.
      Не могу понять в чем проблема уже пару дней. Возможно, кто-то уже собирал этот проект или что-нибудь подобное и сталкивался с таким? Подскажите, если так. 
      Так же, я не уверен, может быть, проблема физическая и она в микроконтроллере, думаю стоит попробовать попробовать другой камень.
      Заранее спасибо.



    • By fander36
      Здравствуйте. Возник ниже стоящий вопрос.
      Cуществующие технологии отладочных плат для AVR.
      Хотелось бы узнать больше об этом, но в интернете не нашел ничего дельного.
    • By eyuw
      Б/у контролеры холодильной установки: 1) Eliwell 974LX  на atmega16A-PU , 3 реле - характеристики на фото.Цена 15 бел.руб. 2) Eliwell IDPlus974  на atmega32A-PU, 3 реле - характеристики на фото.Цена 18 бел.руб. Корпуса без передней панели закрывающей цифровой индикатор, без датчиков температуры! г.Толочин, Витебская обл. Отправка по Беларуси наложенным платежом. Покупатель также оплачивает почтовые расходы. 


×
×
  • Create New...