Клон ATmega328P - LGT8F328P. Аналоговый вход 12 бит

AleksandrGHJ
Offline
Зарегистрирован: 06.09.2018

LGT8F328P в версии WAVGAT UNO R3. Странно ведет себя аналоговый вход: за максимум принимает напряжение 3.3В, выдает 4064 отсечки, а на 5В 2340.

Как наиболее вероятная причина - некий секрет по программной части. 

AleksandrGHJ
Offline
Зарегистрирован: 06.09.2018
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.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

AleksandrGHJ, ну про максимум 4064 я уже объяснил в своей ветке, так и должно быть. Что касается второй части вопроса - каким то образом  у вас референс стал 3,3в, и всё что выше него не воспринимается.   Попробуйте поменять  в скетче ADMUX=0; при этом референсным напряжением станет то, которое вы подключите к выводу AREF.  Подключите туда отдельным проводом 5 вольт, и ещё раз проверьте.

 

AleksandrGHJ
Offline
Зарегистрирован: 06.09.2018

у меня пока сложности с моментальным восприятием операторов (я только учусь), но проблема вырисовывается более отчетливо, это я насчет "референс стал 3,3в". Сейчас как раз изучаю программно-аппаратную мат.часть. Спасибо за наставления, буду пробовать.

AleksandrGHJ
Offline
Зарегистрирован: 06.09.2018

Изменения есть. 4095 держится от максимального напряжения (4,96В) до примерно 4,3В затем показатель снижается, и при 0-0,01В показывает 170.

Не хватает знаний. Буду изучать мат часть более углубленно.

AleksandrGHJ
Offline
Зарегистрирован: 06.09.2018
dudcka
Offline
Зарегистрирован: 15.09.2018

AleksandrGHJ, добрый день, столкнулся с той же проблемой с аналоговым входом, получилось ли у вас ее решить?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

AleksandrGHJ, а что у вас на МК написано, какая маркировка? На  Али в магазине wavgat в данный момент  нет модели Arduino Uno с мк lgt8f328p.. только нано.

AleksandrGHJ
Offline
Зарегистрирован: 06.09.2018

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.

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

AleksandrGHJ, Что ж вы в заблуждение то вводите.  Вы видели,что у вас родной атмеловский чип, и не сообщили сразу об этом? Я в своей теме давал всякие скетчи, на проверку ЦАПа, третьего таймера, вы не заливали их? Подозреваю, что они не заработают, потому что у вас родной атмеловский МК. А вы пытаетесь с ним работать как с lgt8x. И так перед разборками с АЦП сначала узнайте какой у вас МК. Средств для этого в моей теме предостаточно.

Подозреваю, что у вас классическая уно, в которую залили лоадер от lgt8x.

AleksandrGHJ
Offline
Зарегистрирован: 06.09.2018

dimax, не понимаю в чем смысл в классическую UNO заливать LGT8x, ведь на уровне железа АЦП все равно не станет 12 битным? Как я понял есть способ вернуть все на место, т.е. сделать мою плату снова Мегой? Не удобно даже обращаться, потому как недостаток знаний чисто моя проблема, но может вы найдете время изложить теорию процесса более подробно, для "чайника" так сказать?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

AleksandrGHJ, (1) убедитесь что у вас точно не lgt8fx (2) залейте родной бутлоадер Uno (гуглить arduino isp, если нет программатора)

AleksandrGHJ
Offline
Зарегистрирован: 06.09.2018

dimax, вас понял. Буду разбираться.

AleksandrGHJ
Offline
Зарегистрирован: 06.09.2018

Резульататы теста на наличие Таймера3. Скеч 

//Тест на наличие таймера3 -при 16МГц тактовой светодиод Тх замигает с частотой примерно 5Герц
void setup() {
*(uint8_t*)0x33 =0x2 ;//  DDRF=1<<DDF1
*(uint8_t*)0x99 =0x5; // OCR3AH=0x5;
*(uint8_t*)0x98 =0xDC; // OCR3AL=0xDC;
*(uint8_t*)0x90 =0x40; // TCCR3A=1<<COM3A0;
*(uint8_t*)0x91 =0xD;  // TCCR3B=1<<WGM32 | 1<<CS30 |1<<CS32;
}
void loop(){}
 
залился успешно, диод RX мигает примерно 5 герц а монитор выдает квадратики.
 
какой можно сделать вывод?
dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

AleksandrGHJ, говорит что это lgt8f328p. Выходит маркируют  редиски эти МК как родной атмеловский чип. Проверьте на всякий случай и DAС, должно пищать с частотой 7 кГц. Только высокоомную нагрузку нужно, наушник не запищит.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Говорят что можно ещё какую-то сигнатуру программатором прочитать ..... :)

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Сигнатуру же дудка читает и пишет при прошивке коричневыми буквами.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Я думаю вы употребили слово "пишет" не в смысле
записывает в процессор как фьюзы.....

arduinec
Offline
Зарегистрирован: 01.09.2015

SysInfo тоже сигнатуры читает: http://arduino.ru/forum/programmirovanie/sysinfo-arduino

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Ну так считает кто-нибудь наконец?

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Да топикстартеру достаточно промотать вверх лог работы прошивальщика в Arduino IDE - сигнатура там будет.

AleksandrGHJ
Offline
Зарегистрирован: 06.09.2018

скеч для проверки ЦАПа, который выдает 7КГц, это вот этот?

#include "lgtx8p.h"
void setup() {
  DACON= 1<<DACEN | 1<<DAOE ; // dac-on, включить пин
  static uint8_t n=0;
  cli();
  while(1){  DAL0=n++;  } 
}
 
void loop() {}
 
Промотать в IDE смогу завтра. Там действительно что-то такое есть.
AleksandrGHJ
Offline
Зарегистрирован: 06.09.2018

Скрины лога из IDE:

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Device signature = 0x1e950f

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Ну логично, дудка же не знает никаких lgt8x.. вот и шьёт как мегу328.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Загадка однако.....

https://www.avrfreaks.net/comment/821330#comment-821330

ATmega328P      1e950f
ATmega328       1e9514
trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

dimax пишет:

Ну логично, дудка же не знает никаких lgt8x.. вот и шьёт как мегу328.

И что, щьёт не читая сигнатуру?
Везде читала  и предупреждала что что-то там не то  с сигнатурой, а тут сразу щьёт?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

trembo, при загрузке через лоадер сигнатура просто декларируется, и дудка не проверяет, верит на слово. :)

 

AleksandrGHJ
Offline
Зарегистрирован: 06.09.2018

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

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Этот ресурс называется официальный сайт Микрочипа.  Там на каждый выпущенный ими процессор есть подробное руководство. 

AleksandrGHJ
Offline
Зарегистрирован: 06.09.2018

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

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

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

AleksandrGHJ
Offline
Зарегистрирован: 06.09.2018

Ясно, уже движусь по этому направлению.

Гриша
Offline
Зарегистрирован: 27.04.2014

AleksandrGHJ пишет:

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

вот самая капелька с чего начать   и куда глядеть  RISC ну и ATMEL

AleksandrGHJ
Offline
Зарегистрирован: 06.09.2018

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

AleksandrGHJ
Offline
Зарегистрирован: 06.09.2018

Вот в одной статье понравилось

"Тактовый генератор это сердце микроконтроллера. По каждому импульсу происходит какая нибудь операция внутри контроллера — гоняют данные по регистрам и шинам, переключаются выводы портов, щелкают таймеры. Чем быстрей тактовая частота тем шустрей МК выполняет свои действия..."

и далее немного общей инфы о внутренних и внешних генераторах - то что надо, и как элемент МК упомянут и зачем нужен ясно, а как он эти самые регистры гоняет в принципе не интересно. Если случится необходимость ддля программы изучить это более подробно уж тогда придется, а пока нет необходимости.

alex_r61
alex_r61 аватар
Offline
Зарегистрирован: 20.06.2012

AleksandrGHJ пишет:

Ищу нечто среднее между "чайником" и "философом", информации действительно масса.

 На gaw.ru смотрели?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

AleksandrGHJ пишет:

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

Вопрос, правда, не мне, но отвечу, как могу.

То, чего Вы хотите, в природе не существует и существовать не может по одной простой причине: Ардуино - это не какой-нибудь конкретный контроллер, а система, включающая кроме прочего целый ряд различных контроллеров, каждый из которых настраивается по-своему. При этом функции настройки в зависимости от контроллера может иметь объем от нескольких сотен байт до нескольких десятков килобайт. Т.е различаться по объему и по количеству выполняемых настроек раз в 100.

В целом Вам может понадобиться:

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

2. Найти среди файлов, входящих в комплект поставки, текст функции main() для конкретного контроллера и разобрать, что и в каком порядке она делает.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

dimax пишет:

trembo, при загрузке через лоадер сигнатура просто декларируется, и дудка не проверяет, верит на слово. :)

 


Возможно это так если шить через бутлодэр.
Однако у меня перед глазами стоит картинка с надписью:
Invalid device signature.
avrdude: Expected signature for ATMEGA328P is 1E 95 0F Double check chip, or use -F to override this check.

Может быть взять USBASP , синапрог и просто считать её?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

trembo, сигнатуру в lgtf?  По моему её не существует там. По крайней мере в даташите не попадалось упоминание. Кстати  одно из отличий lgt8x как раз то, что он программируется не через ISP программатор, так что шить/читать через USBAsp невозможно. Есть ещё программное считывание сигнатуры, я даже запускал и что-то оно считывало, но это скорее всего  байт в оперативной памяти, не имеющий никакого отношения к сигнатуре.

AleksandrGHJ
Offline
Зарегистрирован: 06.09.2018

andriano, хорошее напутствие. Спасибо. По пункту #1 уже есть понимание (возможно и не полное), а #2 включил в свой план мероприятий ))).

В данный момоент пытаюсь разобраться с регистрами ADC с целью решения моей изначальной проблемы (референс не 3,3В, а Vcc). Отличаются ли регистры ADC ATmega 328P и LGT8F328P?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

AleksandrGHJ пишет:

 Отличаются ли регистры ADC ATmega 328P и LGT8F328P?

Отличаются, но основные отличия в дополнительных возможностях. Поэтому код написанный для меги328 вероятнее всего будет так же работать и на lgt8x

AleksandrGHJ
Offline
Зарегистрирован: 06.09.2018

У АЦП имеется делитель частоты. Уменьшение частоты работы АЦП необходимо лишь для управления точностью?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

AleksandrGHJ, возможно влияет и на какие-то другие факторы, не с проста ж в священном писании сказано, что для максимальной разрядности тактовая АЦП должна быть в промежутке от 50кГц до 200кГц. Т.е. явный намёк на то, что меньше тоже ненадо.

kirduino
Offline
Зарегистрирован: 24.01.2019

AleksandrGHJ, добрый день, столкнулся с той же проблемой, получилось ли у вас найти ответ на свой вопрос?

http://arduino.ru/forum/apparatnye-voprosy/wavgat-neponyatnye-znacheniya-na-5v

AleksandrGHJ
Offline
Зарегистрирован: 06.09.2018

К сожалению нет, на определенном этапе изменились жизненные обстоятельства и эксперементы пришлось приостановить. В результате изучения вопроса скорее склоняюсь к версии, что это брак производства, потому что в мануале по LGT принцип работы описывается точно так же как и в ATMEGA с разницей лишь в битности, т.е. максимум измерений должен быть привязан к 5В, а по факту получается, что к 3,3В, теоретически это можно менять командами, но на деле эффекта не дает. Изучение возможностей настройки через регистры (а у клона оно шире чем у оригинала) не закончил, возможно там есть некий секрет. В остальном же внешние симптомы точь в точь совпадают с опианными вами в вашей ветке, т.е. максимум на 3,3В (АЦП дает чуть больше 4000), а при повышении напруги (до 5В) снижается примерно до 2500.

fttb11696
Offline
Зарегистрирован: 05.02.2019

Разбираюсь с 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
Offline
Зарегистрирован: 06.09.2018

Дело, пока не раскрыто. Прочитав ветку с самого начала, будет понятно на какой всё стадии.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

AleksandrGHJ, проверил фунционирование analogRead с переменнным резистором  с обоими версиями аддонов -никаких проблем с линейностью. Единственное отличие -с wavgat'овским аддоном ацп отдаёт максимальное значение 3968, а с аддоном от LGT -4064 Это связано с калибровкой, я про это писал в обзоре. 

На скриншоте  график, созданный плоттером в arduino IDE при вращении вручную переменного резистора от 0 вольт  до напряжения  Vcc

 

void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // print out the value you read:
  Serial.println(sensorValue);
  delay(100);        // delay in between reads for stability
}

 

AleksandrGHJ
Offline
Зарегистрирован: 06.09.2018

Проблема в том, что у меня плата за Vcc принимает 3,3В и у товарищей, которые тут писали, как я понял, тоже, я конечно не строил график, но чисто по наблюдению при эксперементе с переменным резистором, да, показания меняются линейно от 0 до 3,3В, а потом также линейно в обратную (на понижение) сторону от 3,3 до 5В. Не решенными остались вопросы почему Vcc изначально привязан как 3,3В? и можно ли (как) это исправить?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

AleksandrGHJ,  возможно изначально сделана как 3х вольтовая плата? Я имел дело только с той, что обозревал, за другие сказать не могу. В любом случае  не разрешается подавать на вход АЦП напряжение, превышающее AVCC.