Нужна помощь в реализации программного SPI
- Войдите на сайт для отправки комментариев
Пт, 25/12/2015 - 21:11
Доброго времени суток, форумчане. Помогите советом, программировать начал совсем недавно проблема в том, что не могу корректно ни отправить, ни забрать значение переменных из функций Read, Write. Вроде прием работает но чувствую шкурой как то через ж….у .
#include <LiquidCrystal.h> LiquidCrystal lcd(7, 6, 5, 4, 3, 2); int latchPinOut = 8; int latchPinIn = 11; int datapin = 9; int clkpin = 10; int Value; int Val; int Key; void setup(){ lcd.begin(16, 2); pinMode(latchPinIn, OUTPUT); pinMode(latchPinOut, OUTPUT); pinMode(clkpin, OUTPUT); } void one(){ lcd.clear(); lcd.setCursor(0,1); lcd.print("one"); } void two(){ lcd.clear(); lcd.setCursor(0,1); lcd.print("two"); } void three(){ lcd.clear(); lcd.setCursor(0,1); lcd.print("three"); } void four(){ lcd.clear(); lcd.setCursor(0,1); lcd.print("four"); } void five(){ lcd.clear(); lcd.setCursor(0,1); lcd.print("five"); } void six(){ lcd.clear(); lcd.setCursor(0,1); lcd.print("six"); } void seven(){ lcd.clear(); lcd.setCursor(0,1); lcd.print("seven"); } void eight(){ lcd.clear(); lcd.setCursor(0,1); lcd.print("eight"); } void nine(){ lcd.clear(); lcd.setCursor(0,1); lcd.print("nine"); } void ten(){ lcd.clear(); lcd.setCursor(0,1); lcd.print("ten"); } void eleven(){ lcd.clear(); lcd.setCursor(0,1); lcd.print("eleven"); } void twelve(){ lcd.clear(); lcd.setCursor(0,1); lcd.print("twelve"); } void ButtonPress(){ switch (Value/2){ case 9: one();break; case 17: two();break; case 33: three();break; case 65: four();break; case 10: five();break; case 18: six();break; case 34: seven();break; case 66: eight();break; case 12: nine();break; case 20: ten();break; case 36: eleven();break; case 68: twelve();break; } } //Запись void Write(){ pinMode(datapin, OUTPUT); digitalWrite(latchPinOut, 1); shiftOut(datapin, clkpin, MSBFIRST, 0b11111111); digitalWrite(latchPinOut, 0); } //Чтение void Read(){ pinMode(datapin, INPUT); digitalWrite(latchPinIn, 0); digitalWrite(latchPinIn, 1); Value = shiftIn(datapin, clkpin, MSBFIRST); } void loop() { Read(); Val=0b00001111&Value; if(Val>0){ ButtonPress(); Write(); } }
а для чего это все? как бы не совсем понятно
Не получается загрузить картинку, на схеме было бы понятнее. Задача подключить матричную клавиатуру через ch165
http://arduino.ru/forum/obshchii/sokhranenie-kartinok-na-forume
На форуме есть возможность загрузить проект из PROTEUS?
неа. может стоит почитать статью
Знаком с этой статьей, я не пойму как дороботать библиотеку keypad, а здесь почти все готово. только недопрет как работать с Write и Read ?
помнишь может у Райкина (вроде Райкин, не помню, но не суть): к пуговицам претензии есть?
к чему я это. для начала научись работать по отдельности с каждым элементом. и когда выясниться что с 74HC595 у тебя все норм, а с 74HC165 нет, тогда напиши
Так и есть, клава читаеться отлично.Вывод на LCD коректно, а вот как раз ch595 троит.Обрати внимание на 98ю строку я там в наглую забил значение 0b11111111 а она мне выводит то что я жму в ch165ю. Отсюда и вопрос что я делаю не так?
не помню откуда (настроение такое): ты хочешь научиться или сделать?
вот для 165
http://robocraft.ru/blog/arduino/520.html
https://www.arduino.cc/en/Reference/ShiftIn
для 595 обознач что непонятно. постараюсь помочь. с ним я знаком
И научиься ,и зделать хочу. По поводу ссылок, я тоже их видел. Мне непонятно почему 595 выводит 0b10010000 (этот код выдает клава при нажатии кнопки 1) В место того чтобы выводить 0b11111111 shiftOut(datapin,clockPin,LSBFIRST,0b11111111); Логика следующая: через 165 я слушаю клаву,принимаю значение,вывожуна LCD нажатую кнопку и.т.д. через 595 управляю исполнительными механизмами. А 595я слушает не ардуинку а тупо копирует байт из 165й
протеус реально соответсвует по твоему реальной железке?
Эта схема также и на столе себя ведет
Нашел свою ошибку. По приведенной выше схеме запись и чтение информации производилась по одному проводнику (я встречал такие схемы в нете74HC165 and 74HC595), когда развел MISO и MOSI на разные пины 595 стала принимать значения с дуины. Но опять вопрос, почему приходится вызывать Write() из функции ButtonPress() строка 89 и в основном цикле loop() строка 123. Иначе не работает.