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

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


Рекомендуемые сообщения

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

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

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

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

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

Les-07-02.rar

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Изменено пользователем Юрий_Нд
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

 

Изменено пользователем Юрий_Нд
Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

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

Да нет, твоя.

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

2fb68e0b7033t.jpg

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

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

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

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

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

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

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

Да нет, твоя.

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

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

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

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

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

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

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

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

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

Изменено пользователем Юрий_Нд
Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

int tmp=0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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 раз.

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

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

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

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

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

int tmp=0;

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

Изменено пользователем Юрий_Нд
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

Изменено пользователем Юрий_Нд
Ссылка на комментарий
Поделиться на другие сайты

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

Изменено пользователем Юрий_Нд
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

МАХ =32767;

МАХацп=1023;

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

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

 

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

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 часов назад, Юрий_Нд сказал:

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

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

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

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

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

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

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

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

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

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

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

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

Изменено пользователем Юрий_Нд
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Что за тема?

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

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

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

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

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

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

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

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

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

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

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

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

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

  Разрешено использовать не более 75 эмодзи.

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...