Arduino Mega Server

Модератор: Alex

Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Пт янв 01, 2016 8:17 pm

Адаптирую Due для работы с Power Monitor и столкнулся с непонятной проблемой: на аналоговых входах присутствуют какие-то непонятные потенциалы, которые мешают вести измерения. Причём на разных входах — разные.

Вопрос: кто-нибудь может сказать, что это за потенциалы и откуда они взялись (и как их убрать)?
Вложения
analog.jpg
analog
analog.jpg (112.03 КБ) 10156 просмотров
pastry777
Сообщения: 81
Зарегистрирован: Пт окт 02, 2015 7:47 pm
Благодарил (а): 7 раз
Поблагодарили: 4 раза

Re: Arduino Mega Server

Сообщение pastry777 » Пт янв 01, 2016 9:14 pm

ну,однозначно убрать только подтяжкой к земле в setup....
digitalWrite(54, LOW); это подтянули А0,55-А1,56-А2 и тд..
или внешний резистор 10кОм к земле...
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Пт янв 01, 2016 9:28 pm

Попробовал digitalWrite(54, LOW); - не работает.

И вообще, непонятно в принципе, что это за напряжение. Я ни в одном месте в Интернет не нашёл упоминания ни о напряжении, ни о проблеме смещения измеряемой величины, ни о необходимости резистора.

Что это вообще такое?
pastry777
Сообщения: 81
Зарегистрирован: Пт окт 02, 2015 7:47 pm
Благодарил (а): 7 раз
Поблагодарили: 4 раза

Re: Arduino Mega Server

Сообщение pastry777 » Пт янв 01, 2016 9:51 pm

внешний резистор 100% решит проблему...странно почему не работает... digitalWrite(54, HIGH); работает 100% но соответственно с аналогового порта А0 я снимаю значение 1023,плата с этим скетчем где я использую эти строки у меня подключена перед глазами...я написал вам LOW предполагая,что соответственно получим обратный результат.сейчас допишу это сообщение и перепрошью свою мегу с параметром LOW...

если вывод мк висит в "воздухе",не подключен никуда в схеме,то у него не стабильное состояние..это от наводок,ну может еще от каких внутренних процессов,не углублялся сильно...поэтому там где нужно снимать конкретные показания с порта(аналоговые)нужно подтянуть порт к земле,чтоб на нем был жесткий/стабильный 0...с цифровыми портами тоже такая штука..легко проверить:
на пятом пине будем зажигать светодиод,исходя из состояния четвертого пина,если будет на четвертом 1,значит и на пятый даем 1..
void setup(){
pinMode(4, INPUT);
pinMode(5, OUTPUT);}
void loop(){
if(digitalRead(4)) digitalWrite(5, HIGH);
else digitalWrite(5, LOW);
delay(200); //чтобы зрительно увидеть мерцание
}
так вот мы получим по факту мерцание светодиода,ибо иногда на 4 пине будет 1 иногда 0...
лечится это строчкой digitalWrite(4, LOW); в setup..
таким образом мы подключаем встроенный в кристалл резистор(кажется они там 20кОм) на этот пин к земле,теперь там будет стабильный 0,и светодиод на 5 пине не загорится по условию,пока мы не дадим +5в на 4 пин,кнопкой или чем еще не суть...

обьяснил как мог,возможно вы для себя найдете более понятное описание ситуации,поискав по запросу "подтягивающий резистор"...=)
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Пт янв 01, 2016 10:05 pm

поэтому там где нужно снимать конкретные показания с порта(аналоговые)нужно подтянуть порт к земле,чтоб на нем был жесткий/стабильный 0
Вопрос: почему об это нет ни одного слова в Интернет?
таким образом мы подключаем встроенный в кристалл резистор(кажется они там 20кОм) на этот пин к земле,теперь там будет стабильный 0
Проверял: не реагирует.

Напряжение не просто «паразитное», которое можно притянуть к земле. Оно «АКТИВНОЕ», то есть активно сопротивляется притягиванию.

КРОМЕ ТОГО: на А0 потенциал 3.6 В (при питании 3.3 В на Дуе !!!)

Резистор 10К не спасает — какой-то результат можно получить только снизив сопротивление до 6К. Кроме того «активный» потенциал гуляет и смещает среднюю точку, несмотря на резистор.
pastry777
Сообщения: 81
Зарегистрирован: Пт окт 02, 2015 7:47 pm
Благодарил (а): 7 раз
Поблагодарили: 4 раза

Re: Arduino Mega Server

Сообщение pastry777 » Пт янв 01, 2016 10:09 pm

да действительно сразу с LOW не заработало...
опытным путем установил что нужно заведомо в сетап прописать на аналоговые порты
pinMode(54, OUTPUT);
digitalWrite(54, LOW);

не могу это обьяснить,но это работает)))

идет стабильный 0,если подаю 3.3в то 674,если 5в то 1016(до 1023 не дотягивает,но это ничего)..
pastry777
Сообщения: 81
Зарегистрирован: Пт окт 02, 2015 7:47 pm
Благодарил (а): 7 раз
Поблагодарили: 4 раза

Re: Arduino Mega Server

Сообщение pastry777 » Пт янв 01, 2016 10:12 pm

уточню,что я на меге сейчас!!
сейчас проверю и дуе...
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Пт янв 01, 2016 10:19 pm

pinMode(56, OUTPUT);
digitalWrite(56, LOW);

Результат: НЕ РАБОТАЕТ!

И посмотрите мой пост выше
Вложения
analog3.jpg
analog3.jpg (58.52 КБ) 10089 просмотров
pastry777
Сообщения: 81
Зарегистрирован: Пт окт 02, 2015 7:47 pm
Благодарил (а): 7 раз
Поблагодарили: 4 раза

Re: Arduino Mega Server

Сообщение pastry777 » Пт янв 01, 2016 10:23 pm

осторожнее,не спалите порт с резистором 6ком...
проверьте что в сетапе вы на этот порт не прописали HIGH,или где еще по скетчу!!!только в таком случае на этом порту с резистором 10ком у меня висит значение 224!!если все ок,то сразу 0....
в нормальной ситуации резистор 10ком сразу дает 0,этот номинал считается базой для подтягивающих резисторов для МК...
у меня на даче собран весь мой "умный дом" на подтягивающих 10ком,так что я за них ручаюсь,проверьте у себя у себя по скетчу..иначе получается,что мы даем внутренней командой на порт + а резистором - и ждем кто кого перетянет..конечно выиграет резистор...10ком это безопасно даже в такой ситуации,меньший номинал уже есть риск повреждения порта...
pastry777
Сообщения: 81
Зарегистрирован: Пт окт 02, 2015 7:47 pm
Благодарил (а): 7 раз
Поблагодарили: 4 раза

Re: Arduino Mega Server

Сообщение pastry777 » Пт янв 01, 2016 10:40 pm

давайте я покажу как это происходит у меня...

Код: Выделить всё

/* 
 порт А0 висит в воздухе,с ним ничего не делаем,
 просто мониторим плавающее рандомное значение

 А1 даем просто HIGH,смотрим будет ли значение около 1023
   без конкретного указания pinMode

 A2 делаем INPUT и даем LOW

 A3 делаем OUTPUT и даем LOW
 
 */
void setup() {
  Serial.begin(9600);
  pinMode(56, INPUT);//А2
  pinMode(57, OUTPUT);//А3
  digitalWrite(55, HIGH);//А1
  digitalWrite(56, LOW); //А2
  digitalWrite(57, LOW); //А3
}

void loop() {
  Serial.println("");
    Serial.print("A0: ");
Serial.println(analogRead(0));
    Serial.print("A1: ");
Serial.println(analogRead(1));
    Serial.print("A2: ");
Serial.println(analogRead(2));
    Serial.print("A3: ");
Serial.println(analogRead(3));
delay(1000);
}
 
Вложения
screenshot_Fri_Jan_01_21.41.16.jpg
screenshot_Fri_Jan_01_21.41.16.jpg (310.04 КБ) 10084 просмотра
Ответить