Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Проблем с прост Ардуино код
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=11704
Страница 1 от 1

Автор:  tedo_kinta [ Нед Сеп 08, 2013 1:45 am ]
Заглавие:  Проблем с прост Ардуино код

Имам 7447 7-сегментен драйвер със 4 битов вход. Целта е само за проба на диспея да напиша числото 7 на изходите 4-7 с които съм свързал драйвера

Код:
int DisplayPins[] = {4, 5, 6, 7};
int printedNumber = 7;
int mask=1;

void setup()
{
   for (int p = 0; p < 4; p++)
   {
      pinMode(DisplayPins[p], OUTPUT);
   }

}

void loop()
{
   for (int i = 0; i < 4; i++)
   {
      mask = mask << i;
      mask = mask & printedNumber;
      mask >> i;

      if (mask ==1)
      {
         digitalWrite(DisplayPins[i], HIGH);
      }
      else
      {
         digitalWrite(DisplayPins[i], LOW);
      }
   }
}


Явно бъркам нещо много елементарно.

Автор:  Cino [ Нед Сеп 08, 2013 11:54 am ]
Заглавие:  Re: Проблем с прост Ардуино код

защо всички тези променливи са int,
това arduino съвсем ще обърка представите на начинаещите..
само като го декларираш int и отидоха двойно повече инструкции
на този 8-бит AVR.

иначе вместо:
mask = mask << i;
трябва да напишеш:
mask = 0x01 << i;


и вместо:
mask >> i;
трябва:
mask >>= i;

Автор:  tedo_kinta [ Нед Сеп 08, 2013 12:18 pm ]
Заглавие:  Re: Проблем с прост Ардуино код

Добре направих го както каза:
Код:
byte DisplayPins[] = {4, 5, 6, 7};
byte printedNumber = 7;
byte mask;

void setup()
{
   for (byte p = 0; p < 4; p++)
   {
      pinMode(DisplayPins[p], OUTPUT);
   }

}

void loop()
{
   for (byte i = 0; i < 4; i++)
   {
      mask = 0х01 << i;
      mask = mask & printedNumber;
      mask >>= i;

      if (mask ==1)
      {
         digitalWrite(DisplayPins[i], HIGH);
      }
      else
      {
         digitalWrite(DisplayPins[i], LOW);
      }
   }
}


Въпроса сега в главата ми е защо се прави mask = 1 << i, a не може само mask <<= i след като още при инициализацията съм и задал стойност 1?
Между другото тази програмака я бях направил със port accesing преди 3 дена и работеше от първия път...

Автор:  michev [ Вто Сеп 10, 2013 11:30 am ]
Заглавие:  Re: Проблем с прост Ардуино код

Ейй, никой не ще да отговори на човека :)

Цитат:
Въпроса сега в главата ми е защо се прави mask = 1 << i, a не може само mask <<= i след като още при инициализацията съм и задал стойност 1?


Защото още на втората операция с mask го засираш (mask = mask & printedNumber), затова ще трябва винаги да шифтваш единицата като първа операция.

И като цяло задачата ти колко по - лесно би се реализирала без ардуино библиотеката..
Код:
  PORTB &= 0x0F; // нулиране на 4,5,6,7 бит от порта
  PORTB |= (printedNumber & 0x0F) << 4; // извеждане на младшата част на байта на пинове 4,5,6,7

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/