Линк на форум.

Обсуждение проекта на форуме Arduino.ru

вторник, 10 января 2012 г.

Первое разочарование


На днях собрал тестовую схему, которую привожу на картинке, и пробовал с эмитировать работу с этой схемой точно также как ардуина работала бы со всем кубом. Я ни когда не работал с регистрами, можно сказать это первые мои попытки в освоении этих устройств. Я уже писал о том сколько контактов ардуины собираюсь использовать для управления кубом, на схеме представлен минимальный набор компонентов для управления 8 из 64 диодов одного из рядов(этажей) куба. Также привожу скетч для ардуины который зажигает 1 из 8 диодов и собственно я смотрю как он горит.


// обозначаем константы
// контакты
#define y 8 // контакт для наполнения регистра этажей 
#define clock 9 //синхро контакт
#define reset 10 // контакт сброса
#define show 11 // контакт подключения питания на диоды 
byte x[8] = {0,1,2,3,4,5,6,7}; //контакты данных регистров строк
boolean matrix[8][8][8]; // массив который является внутренним
                         //представлением куба
byte i,j,k; // переменные для циклов

void setup()
// функция установки начальных праметров
{
  //переводим все контакты в режим вывода
  pinMode(y, OUTPUT);
  pinMode(clock, OUTPUT);
  pinMode(reset, OUTPUT);
  pinMode(show, OUTPUT);
  for(i = 0; i < 8; i++){
    pinMode(x[i], OUTPUT);
  }
  
  // на всякий случай я заполняю виртуальный массив ложными значениями
  for(i = 0; i < 8; i++){
      for(j = 0; j < 8; j++){
          for(k = 0; k < 8; k++){
              matrix[i][j][k] = false;
          }
      }
  }
 
//Здесь стоит отметить что ложь значит диод не горит, правда значит что горит
 
}

void loop()
// основная вызываемая функция
{
  matrix[0][1][3] = true;
// зажигаю 4 диод во втором ряду
  writeMatrix(); // отображаю куб
 
}

void writeMatrix(){
// функция которая отображает внутренний массив на кубе
  for(i = 0; i < 8; i++){ // цикл по этажам  координата Z 
 // сбрасываю синхросигнал 
 digitalWrite(clock, LOW);
      for(j = 0; j < 8; j++){ //цикл по рядам(координата Y)
          // сбрасываю синхросигнал 
          digitalWrite(clock, LOW);  
          // цикл по строкам(координата X)
          for(k = 0; k < 8; k++){
               // сбрасываю сигнал на выходе данных
               digitalWrite(x[k], LOW);

               //проверка на истину
               if(matrix[i][k][j]){
                  // если истина то даю логическую 1 на выход
                  digitalWrite(x[k], HIGH);  
              }
          }
          //сбрасываю сигнал по координате Z 
          digitalWrite(y, LOW);
          // установка этажа.
          if(j == i){ 
              // 1 если зажигать этот этаж 
              digitalWrite(y, HIGH);
           }
          digitalWrite(clock, HIGH);
//подаю синхросигнал
          digitalWrite(clock, LOW); // сбрасываю синхросигнал
      }
      digitalWrite(show, HIGH);
//зажигаю ряд(этаж)
      digitalWrite(show, LOW); //гашу ряд(этаж)
  }
}

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

Теперь о результатах: Я расстроен! как я думал скорости ардуины вполне хватает чтобы при данной схеме создавалось впечатление что горит один отдельный диод, НО он горит крайне тускло, даже не смотря на то, что номинал сопротивления стоит ниже чем нужен моим диодам, т.е. он получает гораздо большее напряжение и работает на износ. По идее чтобы диод работал в нормальном режиме необходимо сопротивление с номиналом около 280 Ом, размышляя о проблеме я пришел к выводу что диоды зажигаются на очень короткий промежуток времени и просто не успевают дойти до стадии насыщения чтобы отдавать свет на столько  на сколько они могут. соответственно необходимо что-то еще придумать. Идея пришла через 2 дня(я был занят работой) необходимо помнить состояние регистров до тех пор пока не будут подготовлены следующие значения. И здесь опять же помогут D-триггеры но уже с параллельным входом и параллельным выходом. контакт On/Off останется но сменит свое назначение, всю информацию я уже нашел осталось вырваться в радио лавку чтобы закупить компоненты и попробовать.

Комментариев нет:

Отправить комментарий