Некорректная работа портов на Ардуино Уно

kettu20
Offline
Зарегистрирован: 06.12.2014

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

При работе с Ардуино Уно возникли проблемы. После недолгих рысканий по форумам наткнулся на тестилку работоспособности портов:

#define FIRST_PIN 0 // первый вывод
#define LAST_PIN 19 // последний вывод

void Test1(byte pin)
{
  if(pin < 10) Serial.print(" PIN:  ");
  else Serial.print(" PIN: ");
  Serial.print(pin);
  pinMode(pin, OUTPUT);
  digitalWrite(pin, 0);
  Serial.print("    LOW: ");
  if(!digitalRead(pin)) Serial.print("OK  ");
  else Serial.print("FAIL");
  digitalWrite(pin, 1);
  Serial.print("  HIGH: ");
  if(digitalRead(pin)) Serial.print("OK  "); 
  else Serial.print("FAIL");
  pinMode(pin, INPUT);
  Serial.print("  PULL UP: ");
  if(digitalRead(pin)) Serial.print("OK  ");
  else Serial.print("FAIL");
  digitalWrite(pin, 0);
}

void Test2(byte pin)
{
  Serial.print("     ");
  pinMode(pin, OUTPUT);
  digitalWrite(pin, 1);
  delay(5);
  if(!digitalRead(pin))Serial.println("SHORT");
  else Serial.println("OK");
  pinMode(pin, INPUT); 
  digitalWrite(pin, 0);

}

void setup() {
  Serial.begin(9600); 

  Serial.println("Test of short circuit on GND or VCC and between pins:");
  Serial.println();
  for(byte i = FIRST_PIN; i <= LAST_PIN; i++) 
  {
    for(byte j = FIRST_PIN; j <= LAST_PIN; j++) 
    {
      pinMode(j, INPUT);
      digitalWrite(j, 0);
    }
    Test1(i);

    for(byte j = FIRST_PIN; j <= LAST_PIN; j++) 
    {
      pinMode(j, OUTPUT);
      digitalWrite(j, 0);
    }
    Test2(i);
  }

  for(byte j = FIRST_PIN; j <= LAST_PIN; j++) 
  {
    pinMode(j, INPUT);
    digitalWrite(j, 0);
  }
}

void loop() {}

Выяснилось следующее - на портах 9 и 10 кз:

PIN:  0    LOW: FAIL  HIGH: OK    PULL UP: OK       OK
 PIN:  1    LOW: OK    HIGH: FAIL  PULL UP: FAIL     SHORT
 PIN:  2    LOW: OK    HIGH: OK    PULL UP: OK       OK
 PIN:  3    LOW: OK    HIGH: OK    PULL UP: OK       OK
 PIN:  4    LOW: OK    HIGH: OK    PULL UP: OK       OK
 PIN:  5    LOW: OK    HIGH: OK    PULL UP: OK       OK
 PIN:  6    LOW: OK    HIGH: OK    PULL UP: OK       OK
 PIN:  7    LOW: OK    HIGH: OK    PULL UP: OK       OK
 PIN:  8    LOW: OK    HIGH: OK    PULL UP: OK       OK
 PIN:  9    LOW: OK    HIGH: OK    PULL UP: OK       SHORT
 PIN: 10    LOW: OK    HIGH: OK    PULL UP: OK       SHORT
 PIN: 11    LOW: OK    HIGH: OK    PULL UP: OK       OK
 PIN: 12    LOW: OK    HIGH: OK    PULL UP: OK       OK
 PIN: 13    LOW: OK    HIGH: OK    PULL UP: OK       OK
 PIN: 14    LOW: OK    HIGH: OK    PULL UP: OK       OK
 PIN: 15    LOW: OK    HIGH: OK    PULL UP: OK       OK
 PIN: 16    LOW: OK    HIGH: OK    PULL UP: OK       OK
 PIN: 17    LOW: OK    HIGH: OK    PULL UP: OK       OK
 PIN: 18    LOW: OK    HIGH: OK    PULL UP: OK       OK
 PIN: 19    LOW: OK    HIGH: OK    PULL UP: OK       OK

Это лечится? Прошу помощи

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

kettu20 пишет:

Это лечится? Прошу помощи

всё вышедшее из строя лечится заменой на работоспособное.

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

Мне программка местами кажется некорректной. 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

И не только вам .. :)

Хотя, проверять внутренние состояния пинов похожим образом даташит допускает. Так нельзя проверить обрывы и замыкания самой платы "вне" кристалла, но и только.