Arduino UNO, проблема с analogRead

bercut6
Offline
Зарегистрирован: 23.01.2016

Купил данный набор http://ru.aliexpress.com/item/Free-shipping-UNO-R3-Starter-KIT-Microcont....

Работает вроде все кроме analogRead A0-A5. Под неработает я подразумеваю постоянное значение 1023 которое одинаково при любых обстоятельствах (подается сигнал или отсутсвует). digitalRead на этом же порту подает признаки жизни 0/1. Пробовал данный скетч http://arduino.ru/Reference/AnalogRead

ank-sw
Offline
Зарегистрирован: 20.03.2014

Пробуйте нумерацию от 14 до 19. Должно работать.

http://arduino.ru/Tutorial/AnalogInputPinsВыводы Arduino, соответствующие аналоговым входам, имеют номера от 14 до 19.

bercut6
Offline
Зарегистрирован: 23.01.2016

1023 гонит и все, ничего не понимаю. :(

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

bercut6 пишет:

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

Каким именно образом подаётся сигнал? Схему покажите. Только полную.

bercut6
Offline
Зарегистрирован: 23.01.2016

int analogPin = 14;     // номер порта к которому подключен потенциометр
int val = 0;           // переменная для хранения считываемого значения
 
void setup()
{
  Serial.begin(9600);              //  установка связи по serial
}
 
void loop()
{
  val = analogRead(analogPin);     // считываем значение
  Serial.println(val);             // выводим полученное значение
}

ank-sw
Offline
Зарегистрирован: 20.03.2014

bercut6 пишет:

постоянное значение 1023 

По приведенной схеме в сериал должен идти постоянный 0 и гореть светодиод.

От куда берете 3,3V? Дополнительный БП? Смысл?

 

ank-sw
Offline
Зарегистрирован: 20.03.2014

Берете переменный резистор (потенциометр). Ленвый конец на +5V, правый на землю (0V), средний на A0 Ардуины. Крутите, получайте набор цифр от 0 и выше.

ImaSoft
ImaSoft аватар
Offline
Зарегистрирован: 22.09.2015

А опорное напряжение вы задали?

analogReference(DEFAULT);
//(INTERNAL)Встроенное_опорное_напряжение_1.1В_на_микроконтроллерах_ATmega168_и_ATmega328_и_2.56В_на_ATmega8.
//DEFAULT: стандартное опорное напряжение 5 В (на платформах с напряжением питания 5 В) или 3.3 В (на платформах с напряжением питания 3.3 В) 
//EXTERNAL: внешний источник опорного напряжения, подключенный к выводу AREF

 

bercut6
Offline
Зарегистрирован: 23.01.2016

Добавил analogReference(DEFAULT);

Даже если с платы все снять, совсем. То serial все равно выводит с датчика 1023

bercut6
Offline
Зарегистрирован: 23.01.2016

С разъема arduino 3,3

bercut6
Offline
Зарегистрирован: 23.01.2016

Пробовал без разницы одно и тоже 1023

bercut6
Offline
Зарегистрирован: 23.01.2016

Проявилось когда собирал данную схему.

http://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-...

Звук никак не менялся от освещенности.

ImaSoft
ImaSoft аватар
Offline
Зарегистрирован: 22.09.2015

bercut6 пишет:

Добавил analogReference(DEFAULT);

Даже если с платы все снять, совсем. То serial все равно выводит с датчика 1023

К какому порту аналогового входа подключен датчик?

п.с. Пробуйте нумерацию порта A0-A1-итд... У меня так все работает а не 0-15

bercut6
Offline
Зарегистрирован: 23.01.2016

Пробовал, по ходу atmel чип глюковатый

bwn
Offline
Зарегистрирован: 25.08.2014

ImaSoft пишет:

К какому порту аналогового входа подключен датчик?

п.с. Пробуйте нумерацию порта A0-A1-итд... У меня так все работает а не 0-15

У меня иначе, при указании А0 - выдавал ошибку компиляции, работать пожелал с 0 (резистивные кнопки на аналоговом входе IDE 1.0.5).

ank-sw
Offline
Зарегистрирован: 20.03.2014

А так?


byte led = 13, inPin = 14, i;


void setup() {
	Serial.begin(9600);
	pinMode(led, OUTPUT);
	pinMode(inPin, INPUT_PULLUP);	// принудительно даем лог 1
}

void loop() {
	//	Читаем и выводим в сериал и на PIN13 цифровой вход
	i = digitalRead(inPin);
	digitalWrite(led, i);
	Serial.print("digital =\t");
	Serial.println(i);
	delay(500);             

    //	Читаем и выводим в сериал и на PIN13 аналоговый вход
    i = analogRead(inPin)>>2; // делим на 4, приводим к размеру Byte
    Serial.print("analog =\t");
    Serial.println(i);
    if (i<100) digitalWrite(led, LOW); else digitalWrite(led, HIGH);
    delay(500);             
}

 

bercut6
Offline
Зарегистрирован: 23.01.2016

Итог:

digital =    0
analog =    255
digital =    0
analog =    255
digital =    0
analog =    255
digital =    0
analog =    255
digital =    0
analog =    255
digital =    0
analog =    255
digital =    0
analog =    255
 

ank-sw
Offline
Зарегистрирован: 20.03.2014

Битый чип.

Araris
Offline
Зарегистрирован: 09.11.2012

bercut6, подключено по этой схеме ?

bercut6 пишет:

Если да, то обратите внимание на то, что пин А0 на ней напрямую подключен к земле. И наличие/отсутствие всех прочих элементов вообще никак не влияет на уровень напряжения на пине А0.

bercut6
Offline
Зарегистрирован: 23.01.2016

По данной

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

bercut6, попробуйте отключить всё от входа, и запустить это. Что выдаст в монитор?

bercut6
Offline
Зарегистрирован: 23.01.2016

Итог :

1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
1023
 

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

bercut6, значит точно аппаратная неисправность.  Я бы осмотрел плату на предмет непропаев/соплей. Но если у вас нет опыта в подобных работах, то вряд ли что даст осмотр.

ImaSoft
ImaSoft аватар
Offline
Зарегистрирован: 22.09.2015

bercut6 пишет:

Итог :

1023
1023
1023
1023
1023
 

А аналоговые порты работают в режиме digital?

Я имею ввиду еденички и нули выдаются в потр?

bercut6
Offline
Зарегистрирован: 23.01.2016

Самое смешное что да в digital работают

adel
adel аватар
Offline
Зарегистрирован: 03.02.2015

Добрый день, подниму темку

столкнулся с такой проблемой, пытаюсь читать с порта - выдает непонятную чехарду. Тогда иду по обычному пути, считать порт в монитор. выдает занчения 300 или около, погуглил и наткнулся на тему.

залил скетч что выше от ank-sw

byte led = 13, inPin = 14, i;


void setup() {
	Serial.begin(9600);
	pinMode(led, OUTPUT);
	pinMode(inPin, INPUT_PULLUP);	// принудительно даем лог 1
}

void loop() {
	//	Читаем и выводим в сериал и на PIN13 цифровой вход
	i = digitalRead(inPin);
	digitalWrite(led, i);
	Serial.print("digital =\t");
	Serial.println(i);
	delay(500);             

    //	Читаем и выводим в сериал и на PIN13 аналоговый вход
    i = analogRead(inPin)>>2; // делим на 4, приводим к размеру Byte
    Serial.print("analog =\t");
    Serial.println(i);
    if (i<100) digitalWrite(led, LOW); else digitalWrite(led, HIGH);
    delay(500);             
}

выдает такие значения

digital = 1
analog = 253
digital = 1
analog = 253
digital = 1
analog = 252
digital = 1
analog = 252
digital = 1
analog = 252
digital = 1
analog = 252
digital = 1
analog = 252
digital = 1
analog = 252
digital = 1
analog = 253
digital = 1
analog = 253
 
причем пролетает 252 или 253, как я понимаю это примерно 1.24В, но откуда если пин пустой

косяк платы? или я чего то не понимаю?

P.S.: плата Arduino Uno R3

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

adel пишет:

я чего то не понимаю?

Таки да.

adel пишет:

причем пролетает 252 или 253, как я понимаю это примерно 1.24В, 

С какого перепугу? Вы ж его на 4 делите! Или Вы не понимаете. чо написано в скетче?

adel пишет:
но откуда если пин пустой

с пустого пина может прилетать всё,что угодно. Часто пустой пин используют для инициализации генератора псевдослучайных чисел.

 

 

adel
adel аватар
Offline
Зарегистрирован: 03.02.2015

ЕвгенийП пишет:

Или Вы не понимаете. чо написано в скетче?

с пустого пина может прилетать всё,что угодно. Часто пустой пин используют для инициализации генератора псевдослучайных чисел.

Ну сам скетч я немного не понял
а вот то что прилетание всего что угодно для меня открытие

просто изначально я отталкивался от скетча 

int analogPin = A0;     // номер порта к которому подключен потенциометр
int val = 0;           // переменная для хранения считываемого значения
 
void setup()
{
  pinMode(analogPin,INPUT);
  Serial.begin(9600);              //  установка связи по serial
}
 
void loop()
{
  val = analogRead(analogPin);     // считываем значение
  Serial.println(val);             // выводим полученное значение
delay(1000);
}

при запуске выдал:

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Строка 6 совсем не при делах. Она бы имела смысл, если бы Вы этот пин использовали как цифровой, для чтения же аналогового сигнала этого не надо.

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

adel
adel аватар
Offline
Зарегистрирован: 03.02.2015

спасибо что растолковали