Имеется скетч вот такого вида Код (C++): int i = 0; void setup() { Serial.begin(9600); pinMode(5,INPUT); } void loop() { i=digitalRead(5); Serial.println(i); delay(500); } Простая штука, которая показывает HIGH на пине или LOW Так вот: на UNO переменная i стабильно показывает 0 (суть LOW), а на Pro Mini 5v 168 - стабильно 1, сиречь HIGH. Что с подтягивающим резистором (10кОм, если существенно), что без оного. Две разные платы Pro Mini пробовал. И какой цифровой пин не выставлял бы на проверку - результат одинаков. На UNO все изюмительно, на Pro Mini рыдать хочется. Тестер показывает напряжение 1.7-1.8 В на пинах Почему так происходит и как можно попробовать побороть?
примерно так. Если возникает вопрос о странности схемы - на конечном устройстве работа будет производиться в зависимости от того, на какой из пинов с помощью джампера при загрузке будет подано напряжение от 5В. Конкретно в этой конфигурации подключения имею ситуацию, описанную в стартовом посте. С UNO проблем не возникает - при замыкании джампера на любой из пинов там появляется HIGH , и все идет как надо. А в Mini система считает что на всех пинах HIGH сразу и без всяких джамперов, хотя фактическое напряжение меньше 2 В.
Пины работают без гистерезиса. Напряжение выше порога, получаем HIGH, ниже того же порога, получаем LOW. Порог лежит в зоне неопределенности.
Нет. Читайте даташит. В пины встроен триггер шмидта с четко описанными порогами, которые я озвучил для Vcc=5.
Да, на схеме нарисован. Тогда зачем здесь http://wiki.amperka.ru/конспект-arduino:перетягивание-каната используется внешняя микросхема? Измерить гистерезис пробовал - получилось ~0.15В, что заведомо меньше изображенного на графике 31-27 даташита. Также измерял у PIC'а (по-моему 16F630, но не уверен) - у него гораздо больше, но триггер шмитта есть не у каждого пина.
Да, у меня тоже получился гистерезис меньше заявленного. Но, тем не менее, он есть. Пила - 3.3в, заштрихованное - заявленный гистерезис, меандр - показания digitalRead. Код (C++): #include <Arduino.h> void setup(){ Serial.begin(115200); fdevopen([](char c, FILE *) {return (int)Serial.write(c);}, 0); pinMode(A0, INPUT); } bool i = 0; void loop(){ i = !i; printf("%d\t%d\t%d\n", analogRead(A0), 307 + i * 307, digitalRead(A0) * 1000); delay(5); }
Действительно, небольшой гистерезис есть. На Leonardo от USB пин A0 digitalRead и analogRead: Starting... 327 305 329 305 328 305 328 305 329 305 328 306 328 305 328 305 Код (C++): void setup() { // put your setup code here, to run once: pinMode(13, OUTPUT); Serial.begin(250000); while(!Serial){ } Serial.println(F("Starting...")); } void loop() { // put your main code here, to run repeatedly: static uint8_t dv1 = LOW; uint8_t dv2 = digitalRead(A0); if ( dv1 != dv2 ) { Serial.println(analogRead(A0)); digitalWrite(13, dv2); dv1 = dv2; } } Примено 0.11 Вольт петля.
Посмотрел свои записи, PIC12F675, питание скорее всего 5В (не записал, но нет у меня источников меньшего напряжения): GPIO.2 - гистерезис 2.74В - 1.32В GPIO.5 - переключается туда-сюда примерно при 1.15В Вопрос про внешний триггер Шмитта пока остается без ответа, у него измеренный гистерезис 2.64В - 1.83В.