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

 
 
 
Reply to this topicStart new topic
> Xmega32E5 непонятка, проект на CVAVR
Фишер
сообщение Dec 8 2014, 13:35
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 7-12-14
Пользователь №: 84 017



Здравствуйте всем.
Настроил PORTD на вход с pull-up, инверсию не включал. Пины не подключены, на всех Uпит. Считываю состояние порта в переменную, вместо FF нули.

1. Настройка порта


char t;//

// PORTD initialization
// OUT register
PORTD.OUT=0x00;
// Pin0: Input
...
// Pin7: Input
PORTD.DIR=0x00;
// Pin0 Output/Pull configuration: Totempole/Pull-up (on input)
// Pin0 Input/Sense configuration: Sense both edges
// Pin0 Inverted: Off
PORTD.PIN0CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc;
// Pin1 Output/Pull configuration: Totempole/Pull-up (on input)
// Pin1 Input/Sense configuration: Sense both edges
// Pin1 Inverted: Off
PORTD.PIN1CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc;
// Pin2 Output/Pull configuration: Totempole/Pull-up (on input)
// Pin2 Input/Sense configuration: Sense both edges
// Pin2 Inverted: Off
PORTD.PIN2CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc;
// Pin3 Output/Pull configuration: Totempole/Pull-up (on input)
// Pin3 Input/Sense configuration: Sense both edges
// Pin3 Inverted: Off
PORTD.PIN3CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc;
// Pin4 Output/Pull configuration: Totempole/Pull-up (on input)
// Pin4 Input/Sense configuration: Sense both edges
// Pin4 Inverted: Off
PORTD.PIN4CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc;
// Pin5 Output/Pull configuration: Totempole/Pull-up (on input)
// Pin5 Input/Sense configuration: Sense both edges
// Pin5 Inverted: Off
PORTD.PIN5CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc;
// Pin6 Output/Pull configuration: Totempole/Pull-up (on input)
// Pin6 Input/Sense configuration: Sense both edges
// Pin6 Inverted: Off
PORTD.PIN6CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc;
// Pin7 Output/Pull configuration: Totempole/Pull-up (on input)
// Pin7 Input/Sense configuration: Sense both edges
// Pin7 Inverted: Off
PORTD.PIN7CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc;
// PORTD Peripheral Output Remapping
// USART0 XCK: Pin 1
// USART0 RXD: Pin 2
// USART0 TXD: Pin 3
PORTD.REMAP=(0<<PORT_USART0_bp) | (0<<PORT_TC4D_bp) | (0<<PORT_TC4C_bp) | (0<<PORT_TC4B_bp) | (0<<PORT_TC4A_bp);
// Interrupt level: Disabled
PORTD.INTCTRL=PORT_INTLVL_OFF_gc;
// Pin0 Pin Change interrupt : Off
...
// Pin7 Pin Change interrupt : Off
PORTD.INTMASK=0x00;

2. Кусок моей проги

t=PORTD.IN;//
if (t==0xFF) t=1;//
else t=0;//

Переменная t всегда равна 0, хотя должна быть 1 при FF на входе порта.
Что-то я не так делаю?
Спасибо за ответ.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Dec 8 2014, 14:01
Сообщение #2


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Фишер @ Dec 8 2014, 16:35) *
char t;//
...
t=PORTD.IN;//
if (t==0xFF) t=1;//
else t=0;//

Переменная t всегда равна 0, хотя должна быть 1 при FF на входе порта.
Что-то я не так делаю?
Спасибо за ответ.


Распечатайте лучше значение t напрямую, таким, каково оно есть без замены на 0 или 1.
Или объявите t как
unsigned char t;
Go to the top of the page
 
+Quote Post
Фишер
сообщение Dec 8 2014, 14:24
Сообщение #3





Группа: Новичок
Сообщений: 4
Регистрация: 7-12-14
Пользователь №: 84 017



Цитата(Xenia @ Dec 8 2014, 16:01) *
Распечатайте лучше значение t напрямую, таким, каково оно есть без замены на 0 или 1.
Или объявите t как
unsigned char t;

Объявил t как unsigned char t - то же самое.
А напрямую распечатать t не могу, МК на микроплате с семью выводами. Приходится анализировать по косвенным данным из осциллографа.

Как я понял, с настройками порта у меня все в порядке. То есть, или МК битый или непонятно что.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Dec 8 2014, 14:49
Сообщение #4


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Фишер @ Dec 8 2014, 17:24) *
Как я понял, с настройками порта у меня все в порядке. То есть, или МК битый или непонятно что.


Ага, непонятно.
Go to the top of the page
 
+Quote Post
Фишер
сообщение Dec 8 2014, 16:42
Сообщение #5





Группа: Новичок
Сообщений: 4
Регистрация: 7-12-14
Пользователь №: 84 017



Цитата(Xenia @ Dec 8 2014, 16:49) *
Ага, непонятно.

Во блин!
Будем искать. biggrin.gif
Xenia, подскажите пожалуйста, как считать значение одного бита из порта, например PD4. С xmega_ми только начинаю работать, еще не разобрался.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Dec 8 2014, 16:52
Сообщение #6


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Фишер @ Dec 8 2014, 19:42) *
Xenia, подскажите пожалуйста, как считать значение одного бита из порта, например PD4. С xmega_ми только начинаю работать, еще не разобрался.


Только битовым сравнением:

PORTD.IN & PIN4_bm

Например:

t = (PORTD.IN & PIN4_bm) ? 1 : 0;

Это для вывода есть PORTD.OUTSET и PORTD.OUTCLR, чтобы каждой ножкой отдельно дрыгать,
а для чтения это неактуально - PORTD.IN в любой момент времени отражает состояние порта целиком.
Go to the top of the page
 
+Quote Post
Фишер
сообщение Dec 8 2014, 17:08
Сообщение #7





Группа: Новичок
Сообщений: 4
Регистрация: 7-12-14
Пользователь №: 84 017



Цитата(Xenia @ Dec 8 2014, 18:52) *
Только битовым сравнением:

PORTD.IN & PIN4_bm

Например:

t = (PORTD.IN & PIN4_bm) ? 1 : 0;

Это для вывода есть PORTD.OUTSET и PORTD.OUTCLR, чтобы каждой ножкой отдельно дрыгать,
а для чтения это неактуально - PORTD.IN в любой момент времени отражает состояние порта целиком.

Понял, спасибо.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th June 2025 - 11:10
Рейтинг@Mail.ru


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