Можно ли использовать аналоговые входы как цифровые на Arduino Nano
- Войдите на сайт для отправки комментариев
Пнд, 05/08/2013 - 14:17
Нашла на сайте, что можно, подключила как сказано, но при запуске загорелся диод, не просто поморгал, а непрерывно горел всё время, после чего ардуино вообще перестало подавать признаки жизни. На питании и кнопке Reset напряжение есть. Где-то читала что можно перепрошить. Но хотелось бы узнать о причинах. Вот код:
#define pulPin 14 #define dirPin 15 #define enablePin 16 #define numMsInOneSec 10000 #define numMicroSecInOneMs 10000 #define stepPulseWidthInMicroSec 2 #define setupTimeInMicroSec 1 #define inputBufferSize 128 #include <LiquidCrystal.h> int serialCharIn; char serialInString[inputBufferSize]; int serialInIndex = 0; int angle=0; int fadeAmount = 10;// shag izmeneniya int changeProp = 0;//tumdler pereklju4enija rezhymov unsigned long currentTime; unsigned long loopTime; const int pin_A = 6; const int pin_B = 7; unsigned char encoder_A; unsigned char encoder_B; unsigned char encoder_A_prev=0; unsigned long timeBetweenInputPollsInMicroSec = ( (unsigned long)(numMsInOneSec /4) * numMicroSecInOneMs ); // 250 = 1/4th of a second unsigned long timeBetweenStepsInMicroSec = (1 * numMicroSecInOneMs); unsigned long loopCheck = 0; boolean successfullyParsed = false; boolean currentDirection = false; boolean shouldStep = true; boolean dir = false; boolean StepChange = false; boolean speedChanged = true; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setCurrentDirection(boolean dir) { if(dir == false) { digitalWrite(dirPin, LOW); } else { digitalWrite(dirPin, HIGH); } currentDirection = dir; delayMicroseconds(setupTimeInMicroSec);//задержка } void changeDirection() { setCurrentDirection(!currentDirection); } void enableStepper(int isEnabled) { if(isEnabled) { digitalWrite(enablePin, LOW); // enable LOW = stepper driver ON } else { digitalWrite(enablePin, HIGH); // enable HIGH = stepper driver OFF } delayMicroseconds(2); } void takeSinglePul() { digitalWrite(pulPin, LOW); delayMicroseconds(stepPulseWidthInMicroSec); digitalWrite(pulPin, HIGH); delayMicroseconds(stepPulseWidthInMicroSec); digitalWrite(pulPin, LOW); } void setup() { // We set the enable pin to be an output pinMode(pulPin, OUTPUT); pinMode(dirPin, OUTPUT); pinMode(enablePin, OUTPUT); enableStepper(false); setCurrentDirection(false); enableStepper(true); setCurrentDirection(true); pinMode(pin_A, INPUT); pinMode(pin_B, INPUT); currentTime = millis(); loopTime = currentTime; lcd.begin(16, 2); lcd.print("stepper v.2");// Print a message to the LCD. } void loop() { currentTime = millis(); int j; int loops, ramp; int rampspeed=4; // bigger numbers = quicker ramp encoder_A_prev = encoder_A; changeProp=analogRead(5); if (changeProp>0&&changeProp<1024){ if (currentTime >= (loopTime + 10)){ encoder_A = digitalRead(pin_A); encoder_B = digitalRead(pin_B); if((!encoder_A) && (encoder_A_prev)) { if(encoder_B){ if (angle + fadeAmount <= 140){ angle +=fadeAmount; for (loops=0; loops<(360/10); loops++) { enableStepper(true); takeSinglePul(); delayMicroseconds(timeBetweenStepsInMicroSec*2);} } } } else { if (angle + fadeAmount>=0);{ angle-=fadeAmount; for (loops=0; loops<(360/10); loops++) { enableStepper(true); takeSinglePul();} delayMicroseconds(timeBetweenStepsInMicroSec);} } } } else { for(j=0; j<10; j++) { takeSinglePul(); delayMicroseconds(timeBetweenStepsInMicroSec);} lcd.setCursor(0, 0); lcd.print(timeBetweenStepsInMicroSec); lcd.print(" "); } encoder_A_prev = encoder_A; loopTime = currentTime; lcd.setCursor(0, 1); lcd.print(angle); }
Ндааа... Тяжелый случай...
Где-то читала что можно перепрошить.
Но хотелось бы узнать о причинах.
большинство аналоговых входов Arduino (Atmega) могут конфигурироваться и работать так же как и цифровые порты ввода/вывода
http://arduino.ru/Tutorial/DigitalPins
большинство аналоговых входов Arduino (Atmega) могут конфигурироваться и работать так же как и цифровые порты ввода/вывода
http://arduino.ru/Tutorial/DigitalPins
Тут как бы своеобразная тема - вопросы не имеют ничего общего с названием темы. На вопрос по теме ТС сама ответила в самом первом предложении.
В общем, отключите все от дуины и попробуйте залить блинк.
Залить туда ничего не получается, вылазит такая ошибка " stk500_getsync(): not in sync: resp=0x00". Всё проверяла : порты, плату - выбрано всё верно. Одна надежда перепрошить. Просто я думала, здесь разберут мою ошибку, чтобы снова не натворить чудес. Я так думаю, что либо в скетче что-то не так. Либо зря я аналоговые использовала как цифровые.
То что вы использовали аналоговые выводы как цифровые никак не могло повлиять на работоспособность платы. А вот то что например заняли цифровые 0 или 1 выводы - могло.
Нет, их не трогала. Со 2 по 12 цифровые и с 0 до 5 аналоговые, но их через digitalWrite вызывала.
>Просто я думала, здесь разберут мою ошибку, чтобы снова не натворить чудес.
Не разберут. Потому что эта ошибка относится к категории "общих". Перевести ее можно так: ArduinoIDE не слышит отклика от платы.
А по какой причине не слышит - 1001 и вариант возможен. Если вобъете в поиск сайта эту ошибку, то найдете десяток тем разбирательств с ней. И что/как проверить (питание, дрова, скорость/плата, жива ли FTDI микруха и т.д.)
Скетч - тут не причем. Проблема в железе. Почему она возникла... ну точно не от аналоговости. К аналоговым - можно подключать. Либо что-то хомутнули в схеме (более вероятно), либо заводской брак.
>всё питалось от USB
Ну и что? USB 500mA обязан выдавать, а с ноги брать можно 40ma (если не долго, то и 80ma можно попоробовать, но лучше - не нужно). А еще есть ограничение сколько тока можно суммарно брать с пинов висящих на одном порту.Так что "вполне можно выстрелить себе в ногу".
То что "раньше работало" - тоже ничего не значит. Может работало близко к критическим значениям тока, а то что "сказало досвидание" при переходе на аналоговые - просто совпадение.
Да, банально, кошку на коленях гладили, а потом за плату руками схватились :(
Итого:
1. В поиске искать эту ошибку и проверять "что обычно советуют проверить"
2. Показать схему, авось кто-то углядит проблемку (ну не гадать-же фантазировать что там могло быть не так)
3. Три раза перепроверить что схема соотвествует реальности
Но если таки выпалена микруха - понимание "почему случилось", поможет только избежать проблемм со следующем контроллером, а этот скорее всего прийдется заменять.
Спасибо. Ах этот прекрасный мир электроники в котором пока для меня столько ещё неизведанных местечек.) Извините, если глупости спрашиваю и пишу.)
Попробуйте прочитать МК внешним программатором через SPI.