Пятница, 26.04.2024, 06:36
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта
Реклама Google
Форма входа
Категории раздела
Это нужно знать! [17]
Изучаем AVR [30]
Программаторы [12]
Необходимое ПО [8]
Готовые устройства [73]
Справочная [38]
Инструмент [0]
Технология [8]
Литература [0]
Arduino скетчи [18]
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Микроконтроллеры - это просто!
Главная » Статьи » Arduino скетчи

Сдвиговый регистр 74HC597 и Arduino

Появилась задача: подключить 32 геркона к Arduino UNO. Как известно ардуино не позволяет этого сделать напрямую, так как не имеет достаточного количества портов ввода - вывода. Решить данную задачу может расширитель портов ввода данных или сдвиговый регистр с параллельной загрузкой данных 74HC597. Так же данная микросхема может принимать данные через последовательный вход, пропускать их через себя и выдавать тоже самое на последовательный выход. Это необходимо для последовательного подключения нескольких микросхем, соответственно увеличивая число входов на 8, 16, 24 и т.д. штук.

Скачать datasheet на микросхему 74HC597

В работу микросхемы, тактирование, управление защелкой, выбор входных данных и т.д. вдаваться не буду. Кому нужно спрашивайте в комментариях или читайте Datasheet, там есть временная диаграмма. Подключаем к ардуино по следующей схеме:

Ардуино скетч представлен ниже:

#include <LiquidCrystal.h>
#include <delay.h>
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);

#define READPIN(pin) digitalRead(pin)
#define SET_HI(pin) digitalWrite(pin, HIGH)
#define SET_LO(pin) digitalWrite(pin, LOW)
#define PULSE(pin) digitalWrite(pin, HIGH); delayMicroseconds(10); digitalWrite(pin, LOW);

#define CLOCK 5              //Clock Синхронизация регистра
#define LATCH 3              //LATCH Защелка для вхдного регистра паралельного порта
#define PL 4                 //PL Паралельная загрузка
#define DATA 2               //DATA Вход данных


uint16_t switchVar = 0;

void setup() {
  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");
  
  pinMode(DATA, INPUT);
  pinMode(LATCH, OUTPUT);
  pinMode(PL, OUTPUT);
  pinMode(CLOCK, OUTPUT);

  SET_LO(CLOCK);
  SET_LO(PL);
  SET_LO(LATCH);
}

void loop() {
  
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("hello, world!");
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  //lcd.print(millis()/1000);
  switchVar = GetData();
  lcd.print( switchVar, BIN);
  delay(100);
}


uint16_t GetData()
   { byte i;
     byte pinBit;
     uint16_t accumulator = 0;
     PULSE (LATCH);
     SET_HI(PL);
     for(i=0; i<17; i++)
      {pinBit = READPIN(DATA);
       accumulator |= (pinBit << (16-1-i));
       PULSE(CLOCK);
      }
     SET_LO(PL);
     SET_HI(LATCH); 
     return accumulator;
   }

Категория: Arduino скетчи | Добавил: Alex (26.01.2015)
Просмотров: 7278 | Комментарии: 1 | Рейтинг: 0.0/0
Всего комментариев: 1
1 kakol  
0
Доброго! А как работать с 74HC597 через SPI?

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright MyCorp © 2024