Некорректная работа портов на Ардуино Уно
- Войдите на сайт для отправки комментариев
Сб, 05/12/2015 - 17:49
Доброго времени суток
При работе с Ардуино Уно возникли проблемы. После недолгих рысканий по форумам наткнулся на тестилку работоспособности портов:
#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
Это лечится? Прошу помощи
Это лечится? Прошу помощи
всё вышедшее из строя лечится заменой на работоспособное.
Мне программка местами кажется некорректной.
И не только вам .. :)
Хотя, проверять внутренние состояния пинов похожим образом даташит допускает. Так нельзя проверить обрывы и замыкания самой платы "вне" кристалла, но и только.