Клон ATmega328P - LGT8F328P. Аналоговый вход 12 бит
- Войдите на сайт для отправки комментариев
Пт, 14/09/2018 - 10:44
LGT8F328P в версии WAVGAT UNO R3. Странно ведет себя аналоговый вход: за максимум принимает напряжение 3.3В, выдает 4064 отсечки, а на 5В 2340.
Как наиболее вероятная причина - некий секрет по программной части.
01
void
setup
() {
02
Serial
.begin(9600);
03
ADCSRA|=1<<ADEN | 1<<ADPS2 |1<<ADPS1 |1<<ADPS0;
// clk/128
04
ADCSRB=0; DIDR0=1<<0;
05
ADMUX=1<<REFS0;
// ADC0 , AREF=Vcc
06
}
07
08
void
loop
() {
09
ADCSRA|=1<<ADSC;
10
while
(bit_is_set(ADCSRA, ADSC));
11
uint16_t aread = ADC;
12
Serial
.println(aread);
13
delay(100);
14
15
}
такой скеч дает 4095 при 5В. Но не только... 4095 выдает в диапазоне 3,25-5В, т.е. все что свыше 3.3В = 4095.
AleksandrGHJ, ну про максимум 4064 я уже объяснил в своей ветке, так и должно быть. Что касается второй части вопроса - каким то образом у вас референс стал 3,3в, и всё что выше него не воспринимается. Попробуйте поменять в скетче ADMUX=0; при этом референсным напряжением станет то, которое вы подключите к выводу AREF. Подключите туда отдельным проводом 5 вольт, и ещё раз проверьте.
у меня пока сложности с моментальным восприятием операторов (я только учусь), но проблема вырисовывается более отчетливо, это я насчет "референс стал 3,3в". Сейчас как раз изучаю программно-аппаратную мат.часть. Спасибо за наставления, буду пробовать.
Изменения есть. 4095 держится от максимального напряжения (4,96В) до примерно 4,3В затем показатель снижается, и при 0-0,01В показывает 170.
Не хватает знаний. Буду изучать мат часть более углубленно.
Знания:
- Как работает АЦП
http://codius.ru/articles/Arduino_ускоряем_работу_платы_Часть_2_Аналого_цифровой_преобразователь_АЦП_и_analogRead
AleksandrGHJ, добрый день, столкнулся с той же проблемой с аналоговым входом, получилось ли у вас ее решить?
AleksandrGHJ, а что у вас на МК написано, какая маркировка? На Али в магазине wavgat в данный момент нет модели Arduino Uno с мк lgt8f328p.. только нано.
dimax, вот ссылка из корзины моих заказов с Али:
https://www.aliexpress.com/item/high-quality-One-set-UNO-R3-CH340G-MEGA328P-for-Arduino-UNO-R3-USB-CABLE-ATMEGA328P-AU/32810623079.html?spm=a2g0s.9042311.0.0.3da24c4dScixvj
я там не увидел слов "совместимый", явно написано MEGA328P, а в описании товара ссылка скачивания примочек для штатной IDE. Я сначала не обратил внимания на ссылку и указания в описании. Но как Arduino UNO из типового перечьня в IDE эта плата не работает, комп видит подключение и драйвер CH340 отрабатывает, но скечи заливать не дает. Только после установки примочек в списке появляется WAVGAT UNO R3 и все начинает работать. В boards.txt, который ставится в составе примочек имеются указания, что мы имеем дело с LGT8F. На самом чипе написано ATMEL MEGA328P (прилагаю фото), но сзади платы написано "в программе выбирайте WAVGAT UNO R3" и ЦАП 12 битный. Разве может такое быть с оригинальным MEGA328P? Думаю что нет. Хитрые китайцы замаскировали LGT8F328P под MEGA328P. Брал в этом же магазе (WAVGAT Store) Nano так с ней все в порядке: и в IDE сразу все работает и ЦАП 10 битный и проблем никаких, ссылки на примочки в описании нет. Стало быть один из способов отличить подделку (поддельную подделку) - смотреть на дополнительные требования по доработке программной части. На платы с оригинальными чипами никаких примочек не требуется. Да и шут бы с ним... Пусть это будет LGT8F он в принципе по параметрам круче Меги, но глюк этот...
dudcka, глюк пока не победил, изучил ДатаШыт за выходные, сегодня надеюсь попробовать некоторые варианты. Проблема то в принципе ясна "Опорное (эталонное) напряжение прицепилось к 3,3В вместо 5В, если есть программный способ сделать правильное переключение, то надо его найти, Если же его нет, то стало быть китайцы контакты ))) перепутали и припаяли к 3,3 вместо 5.
AleksandrGHJ, Что ж вы в заблуждение то вводите. Вы видели,что у вас родной атмеловский чип, и не сообщили сразу об этом? Я в своей теме давал всякие скетчи, на проверку ЦАПа, третьего таймера, вы не заливали их? Подозреваю, что они не заработают, потому что у вас родной атмеловский МК. А вы пытаетесь с ним работать как с lgt8x. И так перед разборками с АЦП сначала узнайте какой у вас МК. Средств для этого в моей теме предостаточно.
Подозреваю, что у вас классическая уно, в которую залили лоадер от lgt8x.
dimax, не понимаю в чем смысл в классическую UNO заливать LGT8x, ведь на уровне железа АЦП все равно не станет 12 битным? Как я понял есть способ вернуть все на место, т.е. сделать мою плату снова Мегой? Не удобно даже обращаться, потому как недостаток знаний чисто моя проблема, но может вы найдете время изложить теорию процесса более подробно, для "чайника" так сказать?
AleksandrGHJ, (1) убедитесь что у вас точно не lgt8fx (2) залейте родной бутлоадер Uno (гуглить arduino isp, если нет программатора)
dimax, вас понял. Буду разбираться.
Резульататы теста на наличие Таймера3. Скеч
AleksandrGHJ, говорит что это lgt8f328p. Выходит маркируют редиски эти МК как родной атмеловский чип. Проверьте на всякий случай и DAС, должно пищать с частотой 7 кГц. Только высокоомную нагрузку нужно, наушник не запищит.
Говорят что можно ещё какую-то сигнатуру программатором прочитать ..... :)
Сигнатуру же дудка читает и пишет при прошивке коричневыми буквами.
Я думаю вы употребили слово "пишет" не в смысле
записывает в процессор как фьюзы.....
SysInfo тоже сигнатуры читает: http://arduino.ru/forum/programmirovanie/sysinfo-arduino
Ну так считает кто-нибудь наконец?
Да топикстартеру достаточно промотать вверх лог работы прошивальщика в Arduino IDE - сигнатура там будет.
скеч для проверки ЦАПа, который выдает 7КГц, это вот этот?
Скрины лога из IDE:
Device signature = 0x1e950f
Ну логично, дудка же не знает никаких lgt8x.. вот и шьёт как мегу328.
Загадка однако.....
https://www.avrfreaks.net/comment/821330#comment-821330
Ну логично, дудка же не знает никаких lgt8x.. вот и шьёт как мегу328.
И что, щьёт не читая сигнатуру?
Везде читала и предупреждала что что-то там не то с сигнатурой, а тут сразу щьёт?
trembo, при загрузке через лоадер сигнатура просто декларируется, и дудка не проверяет, верит на слово. :)
dimax, можете подсказать ресурс, где можно почитать принцип устройства/действия Ардуины с момента подачи питания, включая процесс заливки скечей? Какие у нее есть базовые элементы и за что каждый отвечает.
Этот ресурс называется официальный сайт Микрочипа. Там на каждый выпущенный ими процессор есть подробное руководство.
ну это практически тоже самое что даташыт чиать - все подробно, каждый регистр и бит разобран, но взаимосвязь уловить сложно. Видимо подразумевается, что пользователь уже знает принцип устройства микропроцессорной техники. С этим у меня проблема, не хотелось бы углублятся настолько сильно, достаточно понять наличие и зону отвественности отдельных узлов. Ну например, "таймеры", аж три их, есть подробное описание регистров, но так и не понятено их назначение, какова их роль в работе системы в целом.
AleksandrGHJ, применительно к ардуино мне такой ресурс неизвестен, вроде есть какие-то книжки по ардуино, но по моему они для совсем медных чайников, и глубинную суть организма микроконтроллера вам не удасться постичь. Если изучать МК не в свете ардуино, то информации прилично. Главное грамотно сформулировать запрос поисковику.
Ясно, уже движусь по этому направлению.
ну это практически тоже самое что даташыт чиать - все подробно, каждый регистр и бит разобран, но взаимосвязь уловить сложно. Видимо подразумевается, что пользователь уже знает принцип устройства микропроцессорной техники. С этим у меня проблема, не хотелось бы углублятся настолько сильно, достаточно понять наличие и зону отвественности отдельных узлов. Ну например, "таймеры", аж три их, есть подробное описание регистров, но так и не понятено их назначение, какова их роль в работе системы в целом.
вот самая капелька с чего начать и куда глядеть RISC ну и ATMEL
Как раз та грань через которую не хочется переступать. Понять принцип действия или как там написано "философию" RISC или AVR - значит углубиться в область знаний необходимых микропроцессорщикам, что не соответствует моим целям. Ищу нечто среднее между "чайником" и "философом", информации действительно масса.
Вот в одной статье понравилось
"Тактовый генератор это сердце микроконтроллера. По каждому импульсу происходит какая нибудь операция внутри контроллера — гоняют данные по регистрам и шинам, переключаются выводы портов, щелкают таймеры. Чем быстрей тактовая частота тем шустрей МК выполняет свои действия..."
и далее немного общей инфы о внутренних и внешних генераторах - то что надо, и как элемент МК упомянут и зачем нужен ясно, а как он эти самые регистры гоняет в принципе не интересно. Если случится необходимость ддля программы изучить это более подробно уж тогда придется, а пока нет необходимости.
Ищу нечто среднее между "чайником" и "философом", информации действительно масса.
На gaw.ru смотрели?
dimax, можете подсказать ресурс, где можно почитать принцип устройства/действия Ардуины с момента подачи питания, включая процесс заливки скечей? Какие у нее есть базовые элементы и за что каждый отвечает.
Вопрос, правда, не мне, но отвечу, как могу.
То, чего Вы хотите, в природе не существует и существовать не может по одной простой причине: Ардуино - это не какой-нибудь конкретный контроллер, а система, включающая кроме прочего целый ряд различных контроллеров, каждый из которых настраивается по-своему. При этом функции настройки в зависимости от контроллера может иметь объем от нескольких сотен байт до нескольких десятков килобайт. Т.е различаться по объему и по количеству выполняемых настроек раз в 100.
В целом Вам может понадобиться:
1. Выяснить, в каком порядке и как выполняется программа на Си.
2. Найти среди файлов, входящих в комплект поставки, текст функции main() для конкретного контроллера и разобрать, что и в каком порядке она делает.
trembo, при загрузке через лоадер сигнатура просто декларируется, и дудка не проверяет, верит на слово. :)
Возможно это так если шить через бутлодэр.
Однако у меня перед глазами стоит картинка с надписью:
Invalid device signature.
avrdude: Expected signature for ATMEGA328P is 1E 95 0F Double check chip, or use -F to override this check.
Может быть взять USBASP , синапрог и просто считать её?
trembo, сигнатуру в lgtf? По моему её не существует там. По крайней мере в даташите не попадалось упоминание. Кстати одно из отличий lgt8x как раз то, что он программируется не через ISP программатор, так что шить/читать через USBAsp невозможно. Есть ещё программное считывание сигнатуры, я даже запускал и что-то оно считывало, но это скорее всего байт в оперативной памяти, не имеющий никакого отношения к сигнатуре.
andriano, хорошее напутствие. Спасибо. По пункту #1 уже есть понимание (возможно и не полное), а #2 включил в свой план мероприятий ))).
В данный момоент пытаюсь разобраться с регистрами ADC с целью решения моей изначальной проблемы (референс не 3,3В, а Vcc). Отличаются ли регистры ADC ATmega 328P и LGT8F328P?
Отличаются ли регистры ADC ATmega 328P и LGT8F328P?
Отличаются, но основные отличия в дополнительных возможностях. Поэтому код написанный для меги328 вероятнее всего будет так же работать и на lgt8x
У АЦП имеется делитель частоты. Уменьшение частоты работы АЦП необходимо лишь для управления точностью?
AleksandrGHJ, возможно влияет и на какие-то другие факторы, не с проста ж в священном писании сказано, что для максимальной разрядности тактовая АЦП должна быть в промежутке от 50кГц до 200кГц. Т.е. явный намёк на то, что меньше тоже ненадо.
AleksandrGHJ, добрый день, столкнулся с той же проблемой, получилось ли у вас найти ответ на свой вопрос?
http://arduino.ru/forum/apparatnye-voprosy/wavgat-neponyatnye-znacheniya-na-5v
К сожалению нет, на определенном этапе изменились жизненные обстоятельства и эксперементы пришлось приостановить. В результате изучения вопроса скорее склоняюсь к версии, что это брак производства, потому что в мануале по LGT принцип работы описывается точно так же как и в ATMEGA с разницей лишь в битности, т.е. максимум измерений должен быть привязан к 5В, а по факту получается, что к 3,3В, теоретически это можно менять командами, но на деле эффекта не дает. Изучение возможностей настройки через регистры (а у клона оно шире чем у оригинала) не закончил, возможно там есть некий секрет. В остальном же внешние симптомы точь в точь совпадают с опианными вами в вашей ветке, т.е. максимум на 3,3В (АЦП дает чуть больше 4000), а при повышении напруги (до 5В) снижается примерно до 2500.
Разбираюсь с Arduino WavGat UNO3. https://ru.aliexpress.com/item/high...079.html?spm=a2g0s.9042311.0.0.205733edlowQ10
На данной плате установлен Китайский МК LGT8F328.Разобрался c заливкой скетчей через Arduino ID, но имеется один момент. Напряжение на цифровых пинах и ШИМ равно 3.3 В. У Arduino WavGat NANO https://ru.aliexpress.com/item/1PCS...300.html?spm=a2g0s.9042311.0.0.6b0c33eddjwwE5 от того же производителя, с напряжением все нормально. В чем косяк? Брак платы или 5 В можно поднять программно?
Дело, пока не раскрыто. Прочитав ветку с самого начала, будет понятно на какой всё стадии.
AleksandrGHJ, проверил фунционирование analogRead с переменнным резистором с обоими версиями аддонов -никаких проблем с линейностью. Единственное отличие -с wavgat'овским аддоном ацп отдаёт максимальное значение 3968, а с аддоном от LGT -4064 Это связано с калибровкой, я про это писал в обзоре.
На скриншоте график, созданный плоттером в arduino IDE при вращении вручную переменного резистора от 0 вольт до напряжения Vcc
Проблема в том, что у меня плата за Vcc принимает 3,3В и у товарищей, которые тут писали, как я понял, тоже, я конечно не строил график, но чисто по наблюдению при эксперементе с переменным резистором, да, показания меняются линейно от 0 до 3,3В, а потом также линейно в обратную (на понижение) сторону от 3,3 до 5В. Не решенными остались вопросы почему Vcc изначально привязан как 3,3В? и можно ли (как) это исправить?
AleksandrGHJ, возможно изначально сделана как 3х вольтовая плата? Я имел дело только с той, что обозревал, за другие сказать не могу. В любом случае не разрешается подавать на вход АЦП напряжение, превышающее AVCC.