Можно ли использовать аналоговые входы как цифровые на Arduino Nano

morya_4ka
morya_4ka аватар
Offline
Зарегистрирован: 28.05.2012

Нашла на сайте, что можно, подключила как сказано, но при запуске загорелся диод, не просто поморгал, а непрерывно горел всё время, после чего ардуино вообще перестало подавать признаки жизни. На питании и кнопке 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);
    
       }
     

 

maksim
Offline
Зарегистрирован: 12.02.2012

Ндааа... Тяжелый случай... 

morya_4ka пишет:

Где-то читала что можно перепрошить.

Что перепрошить? Загрузчик?

morya_4ka пишет:

Но хотелось бы узнать о причинах.

Чаще всего причина выхода из строя компонентов это превышение максимално допустимых токов.

toc
Offline
Зарегистрирован: 09.02.2013

arduino.ru пишет:

большинство аналоговых входов Arduino (Atmega) могут конфигурироваться и работать так же как и цифровые порты ввода/вывода

http://arduino.ru/Tutorial/DigitalPins

maksim
Offline
Зарегистрирован: 12.02.2012

toc пишет:

arduino.ru пишет:

большинство аналоговых входов Arduino (Atmega) могут конфигурироваться и работать так же как и цифровые порты ввода/вывода

http://arduino.ru/Tutorial/DigitalPins

Тут как бы своеобразная тема - вопросы не имеют ничего общего с названием темы. На вопрос по теме ТС сама ответила в самом первом предложении.

morya_4ka
morya_4ka аватар
Offline
Зарегистрирован: 28.05.2012
http://forum.amperka.ru/threads/%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0-%D1%81-%D0%A4%D1%80%D0%B8%D0%B4%D1%83%D0%B8%D0%BD%D0%BE%D0%BC-avrdude-stk500_getsync-not-in-sync-resp-0x00.1383/ - прочла здесь. Согласна тяжёлый случай.))) Делаю то, что не умею и каким-то чудом до подключения аналоговых входов всё работало.) 
Каким образом могли быть превышены токи, всё питалось от USB, везде были подключены резисторы. 
maksim
Offline
Зарегистрирован: 12.02.2012

В общем, отключите все от дуины и попробуйте залить блинк.

morya_4ka
morya_4ka аватар
Offline
Зарегистрирован: 28.05.2012

Залить туда ничего не получается, вылазит такая ошибка " stk500_getsync(): not in sync: resp=0x00". Всё проверяла : порты, плату - выбрано всё верно. Одна надежда перепрошить. Просто я думала, здесь разберут мою ошибку, чтобы снова не натворить чудес. Я так думаю, что либо в скетче что-то не так. Либо зря я аналоговые использовала как цифровые. 

 

maksim
Offline
Зарегистрирован: 12.02.2012

То что вы использовали аналоговые выводы как цифровые никак не могло повлиять на работоспособность платы. А вот то что например заняли цифровые 0 или 1 выводы - могло.

morya_4ka
morya_4ka аватар
Offline
Зарегистрирован: 28.05.2012

Нет, их не трогала. Со 2 по 12 цифровые и с 0 до 5 аналоговые, но их через digitalWrite вызывала. 

leshak
Offline
Зарегистрирован: 29.09.2011

>Просто я думала, здесь разберут мою ошибку, чтобы снова не натворить чудес.

Не разберут. Потому что эта ошибка относится к категории "общих". Перевести ее можно так: ArduinoIDE не слышит отклика от платы.

А по какой причине не слышит - 1001 и вариант возможен. Если вобъете в поиск сайта эту ошибку, то найдете десяток тем разбирательств с ней. И что/как проверить (питание, дрова, скорость/плата, жива ли FTDI микруха и т.д.)

Скетч - тут не причем. Проблема в железе. Почему она возникла... ну точно не от аналоговости. К аналоговым - можно подключать. Либо что-то хомутнули в схеме (более вероятно), либо заводской брак.

>всё питалось от USB

Ну и что? USB 500mA обязан выдавать, а с ноги брать можно 40ma  (если не долго, то и 80ma можно попоробовать, но лучше - не нужно). А еще есть ограничение сколько тока можно суммарно брать с пинов висящих на одном порту.Так что "вполне можно выстрелить себе в ногу".

То что "раньше работало" - тоже ничего не значит. Может работало близко к критическим значениям тока, а то что "сказало досвидание" при переходе на аналоговые - просто совпадение. 

Да, банально, кошку на коленях гладили, а потом за плату руками схватились :(

Итого:

1. В поиске искать эту ошибку и проверять "что обычно советуют проверить"
2. Показать схему, авось кто-то углядит проблемку (ну не гадать-же фантазировать что там могло быть не так)
3. Три раза перепроверить что схема соотвествует реальности

Но если таки выпалена микруха - понимание "почему случилось", поможет только избежать проблемм со следующем контроллером, а этот скорее всего прийдется заменять.

morya_4ka
morya_4ka аватар
Offline
Зарегистрирован: 28.05.2012

Спасибо. Ах этот прекрасный мир электроники в котором пока для меня столько ещё неизведанных местечек.) Извините, если глупости спрашиваю и пишу.)

alex_r61
Offline
Зарегистрирован: 20.06.2012

Попробуйте прочитать МК внешним программатором через SPI.