Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Atmega3250 PORTJ (7ми битный порт)
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
toshas
Добрый вечер!

есть atmega3250, PORTJ имеет только 7 бит, программа codevision 1.24.7f:
при явном задании PORTJ=0b0000010 бит1 правильно ставится в "1" и на ножке 5 вольт.
необходимо изменить бит1 не затронув остальные.
конструкция PORTJ = PORTJ ^ (1 << 1) работающая на 8ми битных портах здесь дает следующее:
на ножке вольтметр показывает 2.5В и соответственно осциллограф периодическое переключение 0-1

как правильно написать код ?

спасибо!
SysRq
Код
#define BIT(x) (1 << (x))

PORTA |= BIT(1); // Set bit one
PORTA &= ~BIT(1); // Set bit zero


PS: В WinAVR уже есть макрос _BV, определен аналогично, его и используйте.
Qwertty
Цитата(toshas @ Sep 18 2008, 21:42) *
Добрый вечер!

есть atmega3250, PORTJ имеет только 7 бит, программа codevision 1.24.7f:
при явном задании PORTJ=0b0000010 бит1 правильно ставится в "1" и на ножке 5 вольт.
необходимо изменить бит1 не затронув остальные.
конструкция PORTJ = PORTJ ^ (1 << 1) работающая на 8ми битных портах здесь дает следующее:
на ножке вольтметр показывает 2.5В и соответственно осциллограф периодическое переключение 0-1
как правильно написать код ?
спасибо!

Как обычно:
Код
#define LED_PIN  1
PORTJ |= (1<<LED_PIN); // установить 1
PORTJ &= ~(1<<LED_PIN); // 0 соответственно

Ваша конструкция (1 << 1) малоинформативна, лучше сразу воспользоваться помощью препроцессора и определить такие константы, как выводы порта через #define.
toshas
согласен, написал криво, старался для наглядности ..
не суть, проблема в том что так НЕ! работает. на ножке не фиксируется определенное значение, происходит постоянное скакание между 0 и 1.
MTh
Цитата(toshas @ Sep 18 2008, 23:29) *
согласен, написал криво, старался для наглядности ..
не суть, проблема в том что так НЕ! работает. на ножке не фиксируется определенное значение, происходит постоянное скакание между 0 и 1.

Проверьте не настроена ли какая-нить периферия работающая с этими выводами.... больше идей нет.
oll
В codevision можно так - PORTJ.1=1;
toshas
Цитата(MTh @ Sep 19 2008, 07:33) *
Проверьте не настроена ли какая-нить периферия работающая с этими выводами.... больше идей нет.


при задании всех битов в порте все работает как надо, периферия тут не причем.

Цитата(oll @ Sep 19 2008, 08:37) *
В codevision можно так - PORTJ.1=1;


для этого порта такая запись не подходит, компиляция проходит с ошибкой.
aesok
Цитата(toshas @ Sep 19 2008, 10:08) *
... периферия тут не причем.


Хватит в экстрасенсов играть! Код проекта полностью если хотите чтобы Вам помогли.

Анатолий.
Petka
Цитата(toshas @ Sep 18 2008, 21:42) *
конструкция PORTJ = PORTJ ^ (1 << 1) работающая на 8ми битных портах здесь дает следующее:
на ножке вольтметр показывает 2.5В и соответственно осциллограф периодическое переключение 0-1

конструкция PORTJ = PORTJ ^ (1 << 1)
ИНВЕРТИРУЕТ 1 бит
а конструкция PORTJ = PORTJ | (1 << 1)
УСТАНАВЛИВАЕТ 1 бит
если вы в цикле напишите инвертирование, то как раз получите переключение и мультиметр покажет нечто среднее (~2.5V), т.к. измеряет постоянку.
toshas
Цитата(Petka @ Sep 19 2008, 11:05) *
конструкция PORTJ = PORTJ ^ (1 << 1)
ИНВЕРТИРУЕТ 1 бит
а конструкция PORTJ = PORTJ | (1 << 1)
УСТАНАВЛИВАЕТ 1 бит
если вы в цикле напишите инвертирование, то как раз получите переключение и мультиметр покажет нечто среднее (~2.5V), т.к. измеряет постоянку.



спасибо! ткнули носом что называется)
bloodden
Цитата(toshas @ Sep 19 2008, 12:13) *
спасибо! ткнули носом что называется)

Подождите, а КАК оно у Вас раньше работало установкой бита?
SysRq
Цитата(bloodden @ Sep 20 2008, 01:05) *
Подождите, а КАК оно у Вас раньше работало установкой бита?

Сдается мне, то что написано во 2 и 3 сообщении темы он и не пробовал применять 07.gif
toshas
Цитата(bloodden @ Sep 20 2008, 01:05) *
Подождите, а КАК оно у Вас раньше работало установкой бита?

Цитата(SysRq @ Sep 20 2008, 01:28) *
Сдается мне, то что написано во 2 и 3 сообщении темы он и не пробовал применять 07.gif


обычно я пользуюсь разрешенной в свавр записью PORTN.M=...;

прошу прощения за долгую полемику, первый же ответ в теме является правильным,
если не отождествить от усталости ^ и | (
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.