Ситуация такова. Свою первую электронную поделку я собрал более 45-ти лет назад.Это была пищалка на одном транзисторе,для обучения азбуки Морзе. И наконец созрел для следующей поделки. Решил что это будут часы на Ардуино Уно. Поискав в интернете нашел приемлимый(читай простой) проект на 4-х светодиодных матрицах.Ну то что в скетче я мало (а точнее ничего) что понял, пояснять не надо. Но как ни странно часы идут,и даже имеют несколько режимов отображения. Это была преамбула. А теперь суть вопроса.Для начала технические вопросы. Если они решатся,будут вопросы по скетчу. Решил я их усовершнствовать. Добавить по кругу 60 светодиодов.Св-диоды подключаются через сдвиговый регистр 74HC595 . Если просто зажигать св-диод,и при этом гасить предыдущий,проблем нет. Но по моей задумки предыдущий диод не гасится,то-есть в какой-то момент горят 60 светодиодов. Светодиоды 3-х милиметровые. Примерное потребление- 20 mA . 20х60=120mA . Мощности Ардуины не хватит. Вот и вопрос: как подключить 60 св-диодов? Схемы,что я нашел,показывают как подключить либо через регистр,либо через транзистор. Как их объединить? Как я понял понадобятся 60 транзисторов. Возможно есть какое-то более простое решение? Желательно всё-таки через 74НС595,они у меня уже есть. Возможны решения и через какие-либо драйвера,но придется заказывать в интернете и ждать полтора-два месяца!
Берете достаточный блок питания, и подключаете параллельно к своей цепи. Транзисторы в регистрах достаточные.
А,ну правильно. Это я ступил. Думаю одно ,а пишу другое. Регистр я же подключаю к 5 вольтам. А на матрицу ,я так понимаю,можно подать напряжение вообще не касаясь Ардуины. К Ардуине подключаем только DIN , CLK и CS.
Огромное спасибо за помощь! С технической составляющей разобрался. Ещё бы с кодом разобраться. Вот скетч,часы на матрице. Как заставить светодиоды загораться по одному,каждую секунду. Почему-то сюда вставить код не могу. Добавил во вложения.
Так в том то и дело,что не получается. Пытаюсь вставить,выходит сообщение,что то типа " ошибка! слишком длинное сообщение." Поэтому и пришлось выкладывать вложением.
вот тут пример с часами и сдвиговыми регистрами, мои сообщения касаются работы сдвигового регистра и последовательное соединение их. http://forum.amperka.ru/threads/Нужна-помощь-в-создании-часов.8099/
Как подключаются регистры я разобрался. И даже твой скетч переделал,чтобы зажигать светодиоды по одному. Я не знаю как это совместить со скетчем часов. Здесь на два регистра,ещё добавить уже не проблема. Вот как этот скетч вставить в скетч часов. Код (C++): const byte latchPin = 8; const byte clockPin = 12; const byte dataPin = 7; //byte number[] = {0b11111111, 0b10011111, 0b1000110, 0b01100010, 0b00110011, 0b00101010, 0b00001010, 0b11100011, 0b00000010, 0b00100010}; // byte number2[] ={0b10000010, 0b10011111, 0b1000110, 0b01100010, 0b00110011, 0b00101010, 0b00001010, 0b11100011, 0b00000010, 0b00100010}; byte number[] = {0b00000001, 0b00000011, 0b00000111, 0b00001111, 0b00011111, 0b00111111, 0b01111111, 0b11111111, 0b00000000}; void setup() { pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { digitalWrite (latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, number[0]); shiftOut(dataPin, clockPin, MSBFIRST, number[8]); shiftOut(dataPin, clockPin, MSBFIRST, number[0]); digitalWrite (latchPin, HIGH); delay(1000); digitalWrite (latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, number[0]); shiftOut(dataPin, clockPin, MSBFIRST, number[8]); shiftOut(dataPin, clockPin, MSBFIRST, number[1]); digitalWrite (latchPin, HIGH); delay(1000); digitalWrite (latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, number[0]); shiftOut(dataPin, clockPin, MSBFIRST, number[8]); shiftOut(dataPin, clockPin, MSBFIRST, number[2]); digitalWrite (latchPin, HIGH); delay(1000); digitalWrite (latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, number[0]); shiftOut(dataPin, clockPin, MSBFIRST, number[8]); shiftOut(dataPin, clockPin, MSBFIRST, number[3]); digitalWrite (latchPin, HIGH); delay(1000); digitalWrite (latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, number[0]); shiftOut(dataPin, clockPin, MSBFIRST, number[8]); shiftOut(dataPin, clockPin, MSBFIRST, number[4]); digitalWrite (latchPin, HIGH); delay(1000); digitalWrite (latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, number[0]); shiftOut(dataPin, clockPin, MSBFIRST, number[8]); shiftOut(dataPin, clockPin, MSBFIRST, number[5]); digitalWrite (latchPin, HIGH); delay(1000); digitalWrite (latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, number[0]); shiftOut(dataPin, clockPin, MSBFIRST, number[8]); shiftOut(dataPin, clockPin, MSBFIRST, number[6]); digitalWrite (latchPin, HIGH); delay(1000); digitalWrite (latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, number[0]); shiftOut(dataPin, clockPin, MSBFIRST, number[8]); shiftOut(dataPin, clockPin, MSBFIRST, number[7]); digitalWrite (latchPin, HIGH); delay(1000); digitalWrite (latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, number[0]); shiftOut(dataPin, clockPin, MSBFIRST, number[0]); shiftOut(dataPin, clockPin, MSBFIRST, number[7]); digitalWrite (latchPin, HIGH); delay(1000); digitalWrite (latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, number[0]); shiftOut(dataPin, clockPin, MSBFIRST, number[1]); shiftOut(dataPin, clockPin, MSBFIRST, number[7]); digitalWrite (latchPin, HIGH); delay(1000); digitalWrite (latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, number[0]); shiftOut(dataPin, clockPin, MSBFIRST, number[2]); shiftOut(dataPin, clockPin, MSBFIRST, number[7]); digitalWrite (latchPin, HIGH); delay(1000); digitalWrite (latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, number[0]); shiftOut(dataPin, clockPin, MSBFIRST, number[3]); shiftOut(dataPin, clockPin, MSBFIRST, number[7]); digitalWrite (latchPin, HIGH); delay(1000); digitalWrite (latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, number[0]); shiftOut(dataPin, clockPin, MSBFIRST, number[4]); shiftOut(dataPin, clockPin, MSBFIRST, number[7]); digitalWrite (latchPin, HIGH); delay(1000); digitalWrite (latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, number[0]); shiftOut(dataPin, clockPin, MSBFIRST, number[5]); shiftOut(dataPin, clockPin, MSBFIRST, number[7]); digitalWrite (latchPin, HIGH); delay(1000); digitalWrite (latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, number[0]); shiftOut(dataPin, clockPin, MSBFIRST, number[6]); shiftOut(dataPin, clockPin, MSBFIRST, number[7]); digitalWrite (latchPin, HIGH); delay(1000); digitalWrite (latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, number[0]); shiftOut(dataPin, clockPin, MSBFIRST, number[7]); shiftOut(dataPin, clockPin, MSBFIRST, number[7]); digitalWrite (latchPin, HIGH); delay(1000); } Или как-то по другому подключить светодиоды.
вот тут не могу посоветовать ничего, Ваш код для меня очень непонятен, в следствии примитивности мышления моего. Просто хочу заметить что delayочень паразитная функция, её нужно исключить http://arduino.ru/tutorials/BlinkWithoutDelay тут можно посмотреть как это сделать (по теме есть ещё более разумный код) и нарисуйте блок схему своего алгоритма. Одного и второго
Так это-ж твой код. Я просто подправил его,чтобы зажигать не цифры на семисегменте, а 16 светодиодов. 16-потому,что просто на макетке больше не помещаются. А схема часов очень проста ,подключаем матрицу: CS -> 10pin , DIN -> 11 pin , CLK -> 13 pin , Vcc -> 5v , GND -> GND . DS3231 : SDA -> pin A4 , SCL -> pin A5 . Я даже кнопки для настройки не подключал. А регистры и светодиоды ещё никак не подключал. Ещё не придумал как. Тренируюсь пока на другой ардуинке,на макетной плате.