Можно ли использовать аналоговые входы как цифровые на 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.