объясните оператор PORTE &= ~
- Войдите на сайт для отправки комментариев
Сб, 09/05/2015 - 08:43
Попалась в одной буржуйской программе не совсем понятная связка бинарных операторов &=~
PORTE &= ~(_BV(PE0) | _BV(PE1) | _BV(PE4) | _BV(PE5) | _BV(PE3)); //Так понял устанавливает 0,1,3,4,5 биты в 1 DDRE |= (_BV(PE0) | _BV(PE1) | _BV(PE4) | _BV(PE5) | _BV(PE3)); //Настраивает порт 0,1,3,4,5 на чтение
Если не трудно разжуйте как это всё работает и откуда чего берётся " _BV(PE0)". Спасибо.
http://arduino.ru/Tutorial/Upravlenie_portami_cherez_registry
http://myrobot.ru/stepbystep/pr_mcports.php
Нет, сбрасывает биты в 0 (в этом примере устанавливает на пинах логический ноль)
Нет, устанавливает биты в 1 (настраивает пины на выход)
Спасибо большое очень выручили.
Чего-то тогда я совсем в логике программы запутался. Функция читает из меги 8 сигнатуру. Пытаюсь сравнить с мануалом, и ничего не получается.
В первой строке сбрасываем 0,1,3,4,5 пин в 0.
в 2 включаем 3 и 4 пин.
в 3 и4 строке сначала включаем 5 и 6 пин и сразу только 4
в 6 строке переключаем 0,1,3,4,5 на выход, а до этого мы что делали как не включали эти пины.
Ну и так далее - логики не понимаю. Помогите разобраться, и как происходит чтение - не понимаю.
Dmti, Во первых в меге8 нет портов перечисленных в этой функции. Во -вторых начиная с разжёвывания 2 строки вы почему-то не учитываете что почти везде фигурирует пришлый байт "data", а команда & 0x3 указывает лишь по каким битам посадить этот байт.
Я же написал чему равен пришлый байт (data = 8)
ардуино мега 2560 выступает в качестве параллельного(высоковольтного) восстановителя фюз. Всё содрал отсюда http://mightyohm.com/blog/2010/12/new-product-hv-rescue-shield-2-0/ , только скеч там есть с расширением, с ним и разбираюсь.
Dmti, в эту функцию передаются команды для записи в порт, ( при условии, что плата ардуино мега). Причём тут цифра 8 ? Команда гоняется между битами и портами назначения раскладывая биты "data" в определённом порядке в определённые порты.
все начинается:
первая чыфра и поступает, как команда в функцию mega_data_write(byte data), но как всё вертается - несовсем понятно, вот и пытаюсь разобраться, потому что всё это не работает - всегда вертает 03, что есть мега8, что её нет, на лицо ошибка. Вот и пытаюсь разобраться.
С остальным кодом вопросов никаких, вопросы в трёх функциях mega_data_write, mega_data_read, mega_data_input. Незнакомая форма, вот и прошу помощи с ней разобраться, чтобы не путаться, разберусь с ней - разберусь со всёй программой.
Dmti, Смысл функции mega_data_write (read) в принципе есть в заголовке файла:
Байт data разложится в соответствии с данной таблицей. Слева 0..7 биты "data", справа адреса, куда положит эти биты функция. Мой вам совет -не лезте в дебри. Если что-то не работает, то явно не из-за скечта. Ищите ошибки подключения.
Не у меня одного не работает http://nnm.me/blogs/oleg_karp/avr-hv-programmer-shield-ili-neudachnaya-popytka-ozhivit-atmega48/ . Сделал плату, как указано, раза на четыре перепроверил разводку, даже специально скеч написал для проверки платки, всё работает, остаётся их скеч.
Скеч который разбираю, расширенный:
http://mightyohm.com/forum/download/file.php?id=60.
Описание на буржуйском, но в общем и так понятно.
http://mightyohm.com/forum/viewtopic.php?f=7&t=552
Dmti, не думаю, что это вполне коммерческое изделие имеет нерабочий скетч, что выложен на сайте. Контроллеры разные пробывали читать? про поддержку атмега8 кажется там не написано. Вобще врятли чем-то можно вам помочь, не пройдя весь путть по изговтовлению этого программатора самому. Я бы всё таки взял оригинальный скетч, который тут упоминается http://mightyohm.com/blog/products/hv-rescue-shield-2-x/source-code/ и именно ту версию Arduino 0020 что советует товарищ Могучий ОМ. Как я понял дело было давно, и не факт, что новые версии работают с этим скетчем в точности так-же как старые.
Да спасибо, вы уже очень помогли, в понимании, а скеч действительно не рабочий. Сейчас разбираюсь с мануалом на атмега, там внятно алгоритм прописан, который совсем не соответствует что делает данная порграмма. Спасибо.
Dmti, скетч абсолютно рабочий. Я сейчас неполенился, собрал эту схему на беспаечной макетке, -всё работает. Фузы пишутся. Вместо преобразователся 5-12 вольт взял аккумулятор 12вольт, вместо транзисторной сборки- коммутатора 12 в- взял слаботочное герконовое реле. Остальное всё точно по схеме.

Два вечера потратил, всё искал, почему читает всегда одно и тоже 03. Я использую MEGA 2560, а у неё
используются для общения через USB. Заменил на 22 и24, отрезал дорожки от разьёма и соединил проводками. Все заработало. Скеч дейстительно рабочий, если поменять два прина с РЕ0 и РЕ1 на РА0 и РА2 и перепаять платку.
Dmti, терпение и труд всё победят... :)