Как проверить работоспособность контроллера

cianoid
Offline
Зарегистрирован: 21.06.2015

Доброго времени суток всем!

Небольшая предыстория: сравнительно недавно начал заниматься ардуиной, заказал Uno и Nano.

На Uno поморгал свтеодиодом, померял температуру с помощью DS18B20 и порадовался... Затем решил эти задачи переложить на Nano. Но не тут-то было. Nano вообще не воспринимает приходящие данные от датчиков, показывает все время 0. Подумал, что в схеме накосячил, но она даже светодиодом не моргает (ну только 13-м). Код без проблем заливается и пашет. Есть подозрение, что у контроллера просто не работают входа-выхода, но как проверить не знаю, т.к. далек от амперно-паяльных дел.

Буду рад помощи.

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

cianoid пишет:

Доброго времени суток всем!

Небольшая предыстория: сравнительно недавно начал заниматься ардуиной, заказал Uno и Nano.

На Uno поморгал свтеодиодом, померял температуру с помощью DS18B20 и порадовался... Затем решил эти задачи переложить на Nano. Но не тут-то было. Nano вообще не воспринимает приходящие данные от датчиков, показывает все время 0. Подумал, что в схеме накосячил, но она даже светодиодом не моргает (ну только 13-м). Код без проблем заливается и пашет. Есть подозрение, что у контроллера просто не работают входа-выхода, но как проверить не знаю, т.к. далек от амперно-паяльных дел.

Буду рад помощи.

ну, считай, что ты уже проверил Нану - она не работает. :D

cianoid
Offline
Зарегистрирован: 21.06.2015

Понятно :( Спасибо

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

cianoid пишет:

Понятно :( Спасибо

да, нет - спасибом не отделаешься, рассказывай, как ушатал Нану.

cianoid
Offline
Зарегистрирован: 21.06.2015

Пришел мне еще помимо этого шилд Funduino, я Нану на него положил как надо (т.е. правильно), подал питание 12В 1А - загорелись индикаторы и потухли почти сразу. Дал питание по USB на Нану - инидкаторы горят и моргают. Притом, с того же БП я давал питание на Уну - все ОК. Может это ее пришибло, что теперь Нана в ауте, а может она и пришла мне уже такая.

vov4ik
Offline
Зарегистрирован: 10.09.2013
void setup() {
pinMode(2, OUTPUT);  
pinMode(3, OUTPUT);  
pinMode(4, OUTPUT);  
pinMode(5, OUTPUT);  
pinMode(6, OUTPUT);  
pinMode(7, OUTPUT);  
pinMode(8, OUTPUT);  
pinMode(9, OUTPUT); 
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);  
pinMode(12, OUTPUT);  
pinMode(13, OUTPUT);  
pinMode(14, OUTPUT);  
pinMode(15, OUTPUT);  
pinMode(16, OUTPUT);  
pinMode(17, OUTPUT);  
pinMode(18, OUTPUT);    
pinMode(19, OUTPUT);
  Serial.begin(9600);
}
void loop() {
for (int i=2; i <= 19; i++){
       digitalWrite(i, HIGH);
   }
for (int i=2; i <= 19; i++){
       digitalWrite(i, !digitalRead(i));
       Serial.print(digitalRead(i));
   }
   Serial.println();
for (int i=2; i <= 19; i++){
       digitalWrite(i, !digitalRead(i));
       Serial.print(digitalRead(i));
   }
   Serial.println(); Serial.println();
delay(5000);   
}

В порту сначало нули потом единицы.

Смотри потом контакты.

Нано +12 на какой контакт садил.???

cianoid
Offline
Зарегистрирован: 21.06.2015

vov4ik пишет:

void setup() {
pinMode(2, OUTPUT);  
pinMode(3, OUTPUT);  
pinMode(4, OUTPUT);  
pinMode(5, OUTPUT);  
pinMode(6, OUTPUT);  
pinMode(7, OUTPUT);  
pinMode(8, OUTPUT);  
pinMode(9, OUTPUT); 
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);  
pinMode(12, OUTPUT);  
pinMode(13, OUTPUT);  
pinMode(14, OUTPUT);  
pinMode(15, OUTPUT);  
pinMode(16, OUTPUT);  
pinMode(17, OUTPUT);  
pinMode(18, OUTPUT);    
pinMode(19, OUTPUT);
  Serial.begin(9600);
}
void loop() {
for (int i=2; i <= 19; i++){
       digitalWrite(i, HIGH);
   }
for (int i=2; i <= 19; i++){
       digitalWrite(i, !digitalRead(i));
       Serial.print(digitalRead(i));
   }
   Serial.println();
for (int i=2; i <= 19; i++){
       digitalWrite(i, !digitalRead(i));
       Serial.print(digitalRead(i));
   }
   Serial.println(); Serial.println();
delay(5000);   
}

В порту сначало нули потом единицы.

Смотри потом контакты.

Нано +12 на какой контакт садил.???

Выводит:

000000000000000000
111111111111111111

Контакты каким образом "смотреть" ?

12В садил в черный круглый разъем для питания:

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

cianoid пишет:

Контакты каким образом "смотреть" ?

программно digitalRead(n); , где - n = номер пина.

аппаратно - диод подключи.

*предварительно пины сконфигурируй как выходы - pinMode(n, OUTPUT); может, забыл, что нужно?

vov4ik
Offline
Зарегистрирован: 10.09.2013

Вроде рабочая 

Проверить распиновку, может нано и ваш шилд отличаются.

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

12 Вольт ? Стабилизатор не греется? 9-ти Вольт нет под рукой?
Диод с резистором.
Или "пожертвовать" одним выходом и сделать его входом- тогда в сериал монитор его отправлять.

А из выходов "моргалку" устроить.
И перемычкой по выходам пройтись.........

Главное на 12-ти Вольтовый не попасть!

vov4ik
Offline
Зарегистрирован: 10.09.2013

cianoid пишет:
 Контакты каким образом "смотреть" ?

Позвонить см на ногу нано , она чётко должна звониться с синим контактом на твоём шилде, тоесть проверить совпадение номером на шилде (это китай всё возможно).

cianoid
Offline
Зарегистрирован: 21.06.2015

Ответы (частично):

Распиновка шилда соответствует ногам Nano

Ничего не греется, не воняет, не дымит.

Звонить, к сожалению, нечем :(

 

Эксперименты:

Без шилда назначил цифровые выходы с 2 по 13. Моргал раз в секунду всеми выходами поочердено "подпихивая" диод - все моргается с одним "НО": 2-12 и 13 живут по-разному. Т.е. когда "говоришь" 13-му и 12-му HIGH, то 13 горит, а 12 - нет и обратная ситуация при LOW. А так, даже смог температуру с DS18B20 снять пару раз ... Ибо очень плохой контакт у меня тут.

Так же назначил выхода с 2 по 12 и получал положительный исход при замыкании контакта.

Надел Arduino на шилд через ноги, которые шли в комплекте с Nano, подал питание через БП на шилд (4.5В, 6В, 7.5В, 9В, 12В) - ничего; и шилд и Nano не получают питания. Убрал внешнее питание и дал по USB питание на Nano (она его получила и весело заморгала) и тут я случайно двинул ардуину так, что на шилде загорелся индикатор питания... Получается, шилд получил питание через контроллер ... Странно, но тем не менее я попробовал пару выходов шилда на предмет моргания светодиодом - не получилось, не моргает.

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

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

не, ну это уже не серьёзно - у вас там пространственно-временная аномалия и дуино полюбому будет выведена из строя.

cianoid
Offline
Зарегистрирован: 21.06.2015

Всем спасибо. Проблема была именно в плохом контакте ног и контроллера. После паспайки ног на плате все заработало как часы. И шилд пашет.

infant
Offline
Зарегистрирован: 19.08.2019

Да это легко, сто лет прошло.

/*
  Blink

  Turns an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
  the correct LED pin independent of which board is used.
  If you want to know what pin the on-board LED is connected to on your Arduino
  model, check the Technical Specs of your board at:
  https://www.arduino.cc/en/Main/Products

  modified 8 May 2014
  by Scott Fitzgerald
  modified 2 Sep 2016
  by Arturo Guadalupi
  modified 8 Sep 2016
  by Colby Newman

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/Blink
*/
  int val = 0;
  word alk = 0;
// the setup function runs once when you press reset or power the board
void setup() {

  // initialize digital pin LED_BUILTIN as an output.
    pinMode(LED_BUILTIN, OUTPUT);
    pinMode(9, OUTPUT);
//    pinMode(D2, INPUT);
    pinMode(0, INPUT);
    pinMode(1, INPUT);
    pinMode(2, INPUT);
    pinMode(3, INPUT);
    pinMode(4, INPUT);
    pinMode(5, INPUT);
    pinMode(6, INPUT);
    pinMode(7, INPUT);
    pinMode(8, INPUT);
    pinMode(9, INPUT);
    pinMode(10, INPUT);
    pinMode(11, INPUT);
    pinMode(12, INPUT);
    pinMode(13, INPUT);
    Serial.begin(1000000); // Инициализация последовательного порта
}

// the loop function runs over and over again forever
void loop() {

word pot0 = analogRead(A0); // Чтение из A5
Serial.print("A0- ");
if (pot0<1000) Serial.print(" ");
if (pot0<100) Serial.print(" ");
if (pot0<10) Serial.print(" ");
Serial.print(pot0); // вывод в Serial монитор значения с потенциометра

word pot1 = analogRead(A1); // Чтение из A5
Serial.print("  A1- ");
if (pot1<1000) Serial.print(" ");
if (pot1<100) Serial.print(" ");
if (pot1<10) Serial.print(" ");
Serial.print(pot1);

word pot2 = analogRead(A2); // Чтение из A5
Serial.print("  A2- ");
if (pot2<1000) Serial.print(" ");
if (pot2<100) Serial.print(" ");
if (pot2<10) Serial.print(" ");
Serial.print(pot2);

word pot3 = analogRead(A3); // Чтение из A5
Serial.print("  A3- ");
if (pot3<1000) Serial.print(" ");
delay(1);
if (pot3<100) Serial.print(" ");
if (pot3<10) Serial.print(" ");
Serial.print(pot3);

word pot4 = analogRead(A4); // Чтение из A5
Serial.print("  A4- ");
if (pot4<1000) Serial.print(" ");
if (pot4<100) Serial.print(" ");
if (pot4<10) Serial.print(" ");
Serial.print(pot4);

word pot5 = analogRead(A5); // Чтение из A5
Serial.print("  A5- ");
if (pot5<1000) Serial.print(" ");
if (pot5<100) Serial.print(" ");
if (pot5<10) Serial.print(" ");
Serial.print(pot5);

word pot6 = analogRead(A6); // Чтение из A5
Serial.print("  A6- ");
if (pot6<1000) Serial.print(" ");
if (pot6<100) Serial.print(" ");
if (pot6<10) Serial.print(" ");
Serial.print(pot6);

word pot7 = analogRead(A7); // Чтение из A5
Serial.print("  A7- ");
if (pot7<1000) Serial.print(" ");
if (pot7<100) Serial.print(" ");
if (pot7<10) Serial.print(" ");
Serial.print(pot7);

word pot8 = digitalRead(0); // Чтение из A5
Serial.print(" D0-");
Serial.print(pot8);

word pot9 = digitalRead(1); // Чтение из A5
Serial.print(" D1-");
Serial.print(pot9);

word pot10 = digitalRead(2); // Чтение из A5
Serial.print(" D2-");
Serial.print(pot10);

word pot11 = digitalRead(3); // Чтение из A5
Serial.print(" D3-");
Serial.print(pot11);

word pot12 = digitalRead(4); // Чтение из A5
Serial.print(" D4-");
Serial.print(pot12);

word pot13 = digitalRead(5); // Чтение из A5
Serial.print(" D5-");
Serial.print(pot13);

word pot14 = digitalRead(6); // Чтение из A5
Serial.print(" D6-");
Serial.print(pot14);

word pot15 = digitalRead(7); // Чтение из A5
Serial.print(" D7-");
Serial.print(pot15);

word pot16 = digitalRead(8); // Чтение из A5
Serial.print(" D8-");
Serial.print(pot16);

word pot17 = digitalRead(9); // Чтение из A5
Serial.print(" D9-");
Serial.print(pot17);

word pot18 = digitalRead(10); // Чтение из A5
Serial.print(" D10-");
Serial.print(pot18);

word pot19 = digitalRead(11); // Чтение из A5
Serial.print(" D11-");
Serial.print(pot19);

digitalWrite(12,1);
digitalWrite(2,1);

word pot20 = digitalRead(12); // Чтение из A5
Serial.print(" D12-");
Serial.print(pot20);

word pot21 = digitalRead(13); // Чтение из A5
Serial.print(" D13-");
Serial.print(pot21);

Serial.println();

if (alk > 100) analogWrite(A0,255); // Для заряда - разряда полярного конденсатора на 1000 uF}
if (alk > 150) {alk = 0;
analogWrite(A0,0);}
alk = alk + 1;

delay(10); // пауза

//    PORTB = B00100000;
//    PORTB = B00000000;
//    PORTB = B00100000;
//    PORTB = B00000000;

//    PORTB = B00100000;
//    PORTB = B00000000;

//    PORTB = B00100000;
//    PORTB = B00000000;
//  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
//  delay(1000);                       // wait for a second
//  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
//  delay(1000);                       // wait for a second
}