реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Atmega3250 PORTJ (7ми битный порт), проблема с установкой произвольного бита
toshas
сообщение Sep 18 2008, 17:42
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 372
Регистрация: 14-02-06
Пользователь №: 14 339



Добрый вечер!

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

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

спасибо!
Go to the top of the page
 
+Quote Post
SysRq
сообщение Sep 18 2008, 19:14
Сообщение #2


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Код
#define BIT(x) (1 << (x))

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


PS: В WinAVR уже есть макрос _BV, определен аналогично, его и используйте.
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Sep 18 2008, 19:22
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(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.
Go to the top of the page
 
+Quote Post
toshas
сообщение Sep 18 2008, 20:29
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 372
Регистрация: 14-02-06
Пользователь №: 14 339



согласен, написал криво, старался для наглядности ..
не суть, проблема в том что так НЕ! работает. на ножке не фиксируется определенное значение, происходит постоянное скакание между 0 и 1.
Go to the top of the page
 
+Quote Post
MTh
сообщение Sep 19 2008, 03:33
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 28-02-06
Из: Иркутск
Пользователь №: 14 771



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

Проверьте не настроена ли какая-нить периферия работающая с этими выводами.... больше идей нет.
Go to the top of the page
 
+Quote Post
oll
сообщение Sep 19 2008, 04:37
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 10-10-05
Пользователь №: 9 463



В codevision можно так - PORTJ.1=1;
Go to the top of the page
 
+Quote Post
toshas
сообщение Sep 19 2008, 06:08
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 372
Регистрация: 14-02-06
Пользователь №: 14 339



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


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

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


для этого порта такая запись не подходит, компиляция проходит с ошибкой.
Go to the top of the page
 
+Quote Post
aesok
сообщение Sep 19 2008, 07:02
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(toshas @ Sep 19 2008, 10:08) *
... периферия тут не причем.


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

Анатолий.
Go to the top of the page
 
+Quote Post
Petka
сообщение Sep 19 2008, 07:05
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(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), т.к. измеряет постоянку.
Go to the top of the page
 
+Quote Post
toshas
сообщение Sep 19 2008, 09:13
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 372
Регистрация: 14-02-06
Пользователь №: 14 339



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



спасибо! ткнули носом что называется)
Go to the top of the page
 
+Quote Post
bloodden
сообщение Sep 19 2008, 21:05
Сообщение #11


Бывалый
***

Группа: Validating
Сообщений: 375
Регистрация: 19-10-05
Из: Kiev, UA
Пользователь №: 9 853



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

Подождите, а КАК оно у Вас раньше работало установкой бита?


--------------------
Заходите кому надо на мой сайт
Go to the top of the page
 
+Quote Post
SysRq
сообщение Sep 19 2008, 21:28
Сообщение #12


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



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

Сдается мне, то что написано во 2 и 3 сообщении темы он и не пробовал применять 07.gif
Go to the top of the page
 
+Quote Post
toshas
сообщение Sep 20 2008, 13:26
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 372
Регистрация: 14-02-06
Пользователь №: 14 339



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

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


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

прошу прощения за долгую полемику, первый же ответ в теме является правильным,
если не отождествить от усталости ^ и | (
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th July 2025 - 23:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.0273 секунд с 7
ELECTRONIX ©2004-2016