Arduino Mega Server
Модератор: Alex
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Адаптирую Due для работы с Power Monitor и столкнулся с непонятной проблемой: на аналоговых входах присутствуют какие-то непонятные потенциалы, которые мешают вести измерения. Причём на разных входах — разные.
Вопрос: кто-нибудь может сказать, что это за потенциалы и откуда они взялись (и как их убрать)?
Вопрос: кто-нибудь может сказать, что это за потенциалы и откуда они взялись (и как их убрать)?
- Вложения
-
- analog
- analog.jpg (112.03 КБ) 10155 просмотров
-
- Сообщения: 81
- Зарегистрирован: Пт окт 02, 2015 7:47 pm
- Благодарил (а): 7 раз
- Поблагодарили: 4 раза
Re: Arduino Mega Server
ну,однозначно убрать только подтяжкой к земле в setup....
digitalWrite(54, LOW); это подтянули А0,55-А1,56-А2 и тд..
или внешний резистор 10кОм к земле...
digitalWrite(54, LOW); это подтянули А0,55-А1,56-А2 и тд..
или внешний резистор 10кОм к земле...
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Попробовал digitalWrite(54, LOW); - не работает.
И вообще, непонятно в принципе, что это за напряжение. Я ни в одном месте в Интернет не нашёл упоминания ни о напряжении, ни о проблеме смещения измеряемой величины, ни о необходимости резистора.
Что это вообще такое?
И вообще, непонятно в принципе, что это за напряжение. Я ни в одном месте в Интернет не нашёл упоминания ни о напряжении, ни о проблеме смещения измеряемой величины, ни о необходимости резистора.
Что это вообще такое?
-
- Сообщения: 81
- Зарегистрирован: Пт окт 02, 2015 7:47 pm
- Благодарил (а): 7 раз
- Поблагодарили: 4 раза
Re: Arduino Mega Server
внешний резистор 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 пин,кнопкой или чем еще не суть...
обьяснил как мог,возможно вы для себя найдете более понятное описание ситуации,поискав по запросу "подтягивающий резистор"...=)
если вывод мк висит в "воздухе",не подключен никуда в схеме,то у него не стабильное состояние..это от наводок,ну может еще от каких внутренних процессов,не углублялся сильно...поэтому там где нужно снимать конкретные показания с порта(аналоговые)нужно подтянуть порт к земле,чтоб на нем был жесткий/стабильный 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 пин,кнопкой или чем еще не суть...
обьяснил как мог,возможно вы для себя найдете более понятное описание ситуации,поискав по запросу "подтягивающий резистор"...=)
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Вопрос: почему об это нет ни одного слова в Интернет?поэтому там где нужно снимать конкретные показания с порта(аналоговые)нужно подтянуть порт к земле,чтоб на нем был жесткий/стабильный 0
Проверял: не реагирует.таким образом мы подключаем встроенный в кристалл резистор(кажется они там 20кОм) на этот пин к земле,теперь там будет стабильный 0
Напряжение не просто «паразитное», которое можно притянуть к земле. Оно «АКТИВНОЕ», то есть активно сопротивляется притягиванию.
КРОМЕ ТОГО: на А0 потенциал 3.6 В (при питании 3.3 В на Дуе !!!)
Резистор 10К не спасает — какой-то результат можно получить только снизив сопротивление до 6К. Кроме того «активный» потенциал гуляет и смещает среднюю точку, несмотря на резистор.
-
- Сообщения: 81
- Зарегистрирован: Пт окт 02, 2015 7:47 pm
- Благодарил (а): 7 раз
- Поблагодарили: 4 раза
Re: Arduino Mega Server
да действительно сразу с LOW не заработало...
опытным путем установил что нужно заведомо в сетап прописать на аналоговые порты
pinMode(54, OUTPUT);
digitalWrite(54, LOW);
не могу это обьяснить,но это работает)))
идет стабильный 0,если подаю 3.3в то 674,если 5в то 1016(до 1023 не дотягивает,но это ничего)..
опытным путем установил что нужно заведомо в сетап прописать на аналоговые порты
pinMode(54, OUTPUT);
digitalWrite(54, LOW);
не могу это обьяснить,но это работает)))
идет стабильный 0,если подаю 3.3в то 674,если 5в то 1016(до 1023 не дотягивает,но это ничего)..
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
pinMode(56, OUTPUT);
digitalWrite(56, LOW);
Результат: НЕ РАБОТАЕТ!
И посмотрите мой пост выше
digitalWrite(56, LOW);
Результат: НЕ РАБОТАЕТ!
И посмотрите мой пост выше
- Вложения
-
- analog3.jpg (58.52 КБ) 10088 просмотров
-
- Сообщения: 81
- Зарегистрирован: Пт окт 02, 2015 7:47 pm
- Благодарил (а): 7 раз
- Поблагодарили: 4 раза
Re: Arduino Mega Server
осторожнее,не спалите порт с резистором 6ком...
проверьте что в сетапе вы на этот порт не прописали HIGH,или где еще по скетчу!!!только в таком случае на этом порту с резистором 10ком у меня висит значение 224!!если все ок,то сразу 0....
в нормальной ситуации резистор 10ком сразу дает 0,этот номинал считается базой для подтягивающих резисторов для МК...
у меня на даче собран весь мой "умный дом" на подтягивающих 10ком,так что я за них ручаюсь,проверьте у себя у себя по скетчу..иначе получается,что мы даем внутренней командой на порт + а резистором - и ждем кто кого перетянет..конечно выиграет резистор...10ком это безопасно даже в такой ситуации,меньший номинал уже есть риск повреждения порта...
проверьте что в сетапе вы на этот порт не прописали HIGH,или где еще по скетчу!!!только в таком случае на этом порту с резистором 10ком у меня висит значение 224!!если все ок,то сразу 0....
в нормальной ситуации резистор 10ком сразу дает 0,этот номинал считается базой для подтягивающих резисторов для МК...
у меня на даче собран весь мой "умный дом" на подтягивающих 10ком,так что я за них ручаюсь,проверьте у себя у себя по скетчу..иначе получается,что мы даем внутренней командой на порт + а резистором - и ждем кто кого перетянет..конечно выиграет резистор...10ком это безопасно даже в такой ситуации,меньший номинал уже есть риск повреждения порта...
-
- Сообщения: 81
- Зарегистрирован: Пт окт 02, 2015 7:47 pm
- Благодарил (а): 7 раз
- Поблагодарили: 4 раза
Re: Arduino Mega Server
давайте я покажу как это происходит у меня...
Код: Выделить всё
/*
порт А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 (310.04 КБ) 10083 просмотра