Attiny13 и каскад сдвиговых регистров
- Войдите на сайт для отправки комментариев
Пнд, 06/04/2020 - 19:39
Хочу подсоединить сдвиговые регистры с прилагающимися семисегментниками к аттини13.
На аттини пишу на процессинге, потому что на си пока что только светодиодом моргаю.
Код - это код с ардуино переделанный мной под аттини13. Собственно поменял только номера портов и убрал сериал. Код под каскад из двух регистров, но он не заработал вообще. Попробовал первый пример с одним регистром из http://arduino.ru/Tutorial/registr_74HC595
Он тоже не заработал. Подключение правильное, регистры и сегментники целые, питание есть, все провода подключены туда. Можете подсказать почему не работает?
Программатор - Arduino Uno as ISP.
Переделанный код каскада:
const int latchPin = PB2; const int clockPin = PB4; const int dataPin = PB3; int i; int t; byte r; byte y; byte inf[10] { 0b11111100, 0b01100000, 0b11011010, 0b11110010, 0b01100110, 0b10110110, 0b10111110, 0b11100000, 0b11111110, 0b11110110 }; void setup() { pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); } void loop() { int x = 0; registerWrite(x); delay(500); registerWrite(x+=1); if(x==99){ x = 0; } } void registerWrite(int whichState) { t = fun(whichState); i = prim(whichState); r = inf[t]; y = inf[i]; digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, y); shiftOut(dataPin, clockPin, LSBFIRST, r); digitalWrite(latchPin, HIGH); } int fun(int number) { int r = number / 10; return r; } int prim(int num) { int g = fun(num); int t = num - g * 10; return t; }
Код примера на сайте.
так у вас ваш код не работает, или даже стандартный пример не работает? если и стандартный тоже - то разбирайтесь с подключением.
Если с железом все нормально, ваш код хоть и не будет показывать вам возрастающие числа от 0 до 99, как вы хотели - но хотя бы ноль показать должен...
а вообще посоветую разделить задачу на программную и аппартную части. Атини13 - не лучший полигон для изучения программирования. Для начала отладьте свой код на стандартной Уно - поверьте. там есть что отлаживать, код мягко говоря кривой и не делает того. что вы задумали. а когда отладите на уно - попытаетесь перенести на тини, это отдельный геморой...
Попробовал с Уно, и что то произошло с регистрами. Один сгорел, а второй сошел с ума: стал выкидывать рандомные комбинации на сегментнике.
Регистр заменил, нарыл на флешке рабочую версию, работает на Уно каскадом. На аттини не пробовал.
Не судите пожалуйста строго за код.
функции decfun и prim можно заменить одним единственным оператором. Прочитайте как выполняется целочисленное деление и взятие остатка.
Почти все переменные. которые у вас описаны как int - надо заменить на byte. Это особенно актуально для Аттини13
Самое интересное, что оставив вчера нетронутой схему и загрузив сегодня скетч, она заработала как надо. Даже каскад к аттини 13 встал как родной...
Что это? Почему спустя день схема заработала как надо?
Скетч доработал по вашим советам:
Самое интересное, что оставив вчера нетронутой схему и загрузив сегодня скетч, она заработала как надо. Даже каскад к аттини 13 встал как родной...
Что это? Почему спустя день схема заработала как надо?
не знаю, что там у вас со схемой. но скетч из начала ветки был кривой - может в этом дело? :)))
Не, ну это понятно) Но сегодня со 2м скетчем аттини заработала как надо с первого раза. Может настроение у аттини после первого скетча испортилось)