Параллельный порт /прошу поддержки/

Strannik-s
Offline
Зарегистрирован: 13.05.2015

Доброго для , господа!

Появилась у меня задача реализовать праллельный порт на выходах Ардуино УНО, и по скольку занимаюсь С++ ровно как месяц в своей жизни , не ложиться в голове как это сделать.

Задача такая - на выходах от3 до 8 соадать 6-ти разрядный счетчик 1-64

000001

000010

000011

000100

и т.д. 

понимаю что выходы необходимо задавать массивом 

int out1[6] = {3,4,5,6,7,8}

а вот как теперь чтобы приращение записывать в порты , ума не приложу

3,4,5,6,7,8

0,0,0,0,0,1

далее

3,4,5,6,7,8

0,0,0,0,1,0

Подскажите как такое реализовать

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Может начать с ЗАЧЕМ?

Strannik-s
Offline
Зарегистрирован: 13.05.2015

Да, конечно - на каждый адерес подается сигнал и читается ответ. Адреса все аппаратные

то есть существует матрица 8х8.

Почему нельзя сделать последовательную шину - вопрос другой и его решение сейчас не стоит.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Наверное вам нужно почитать про сам мк и его порты... не про пины. А про порты которые эти пины обьединяют.
Либо городить огород типа рукотворный 6 битный счетчик

Strannik-s
Offline
Зарегистрирован: 13.05.2015

почитал,

а как все же реализовать такой счетчик

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Извращаться можно по разному, например вот так:

byte out1[6] = {3,4,5,6,7,8};
byte x = 45;
for(byte i=0;i<6;i++)
  digitalWrite(out1[i], bitRead(x, i));

соответственно пишем в x то что надо и потом циклом выводим на нужные пины

Datak
Offline
Зарегистрирован: 09.10.2014

Strannik-s пишет:

понимаю что выходы необходимо задавать массивом 

int out1[6] = {3,4,5,6,7,8}

а вот как теперь чтобы приращение записывать в порты , ума не приложу

Вообще, не обязательно именно массивом. Но если писать в ардуиновском стиле - да, пусть будет так. :)

Счётчик и его приращение пишутся просто:




byte Cnt = 0;
.....
Cnt++;

Ну а в порт выводить как-то так:




byte Cnt = 0;
.....
for( byte i = 0; i < 6; i++ ) digitalWrite( out1[i], 1 & ( Cnt >> i ) );
.....
Cnt++;

-----

Upd: Penni опередил :)
Но счётчик в цикле должен быть всё-таки меньше шести.

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Datak, спасибо за замечание, невнимательность она такая.

Strannik-s
Offline
Зарегистрирован: 13.05.2015

От спасибо ! Благодарю!

ввиду незнания и  нехватки времени пришлось набить 400 строчек кода )))

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Strannik-s, если бы вы взяли более удобные порты, например A0..A5 вам бы не понадобился вообще никакой код. Сразу бы записывали свои данные в порт: PORTС |= (data & B00111111); Только это можно считать паралельным выводом. То, что вам предложили -хорошо, но это не есть паралельный вывод. Фактически в промежутке от записи первого до записи последнего бита у вас на выходе будет творится чёрти что.