Модераторы: PILOT, ManiaK, Mazzi

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [arm] Термодатчик TMP03/TMP04, Как запрограммировать ? 
:(
    Опции темы
kray20
Дата 22.11.2010, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 8.11.2010

Репутация: нет
Всего: нет



Спасибо большое, теперь все стало понятнее ! 
Начал разбираться с переменной PINB. Вы писали(в посте выше) , что в моем случае PINB это:

01011010010110100101101001011010

В моей таблице выводов в столбце pin записано 69 , если теперь 69 перевести в двоичный код это будет :

1000101

Почему это число в двоичном коде не совпадает с числом 01011010010110100101101001011010  ?!
 
PM MAIL   Вверх
UniBomb
Дата 23.11.2010, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 97



kray20, я написал "например"  smile Это просто сферическое число в вакууме, высосанное из пальца, и призванное показать смысл операции &
PM MAIL ICQ Skype   Вверх
kray20
Дата 23.11.2010, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 8.11.2010

Репутация: нет
Всего: нет



извините, UniBomb, невнимательно прочитал ваш пост ! smile

Я ни совсем понял тогда смысл конструкции 

while (PINB & signalPinMask) и  while (~PINB & signalPinMask) 

Получается, что PINB содержит некий массив выводов и ,использую переменную signalPinMask, я могу контролировать нужный мне вывод, т.е. 23 , в цикле while . 

А можно заменить данную часть кода :

Код

  byte signalPinMask = (1<<(selectedChannel-1));
  while (PINB & signalPinMask) { // Wait for low state on signal pin
    if (micros() > timeOut) break;
}


на

Код

int PINB=selectedChannel-1;
 while(PINB LOW) {      // Wait for low state on signal pin
     if (micros() > timeOut) break;
}



и 
Код


  while (~PINB & signalPinMask) { // Wait for high state on signal pin
   if (micros() > timeOut) break;
  }


на

Код

 while(PINB HIGH) {      // Wait for high state on signal pin
     if (micros() > timeOut) break;
}


Будет ли такая замена корректной ?! 

Это сообщение отредактировал(а) kray20 - 23.11.2010, 11:21
PM MAIL   Вверх
UniBomb
Дата 23.11.2010, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 97



нет. Во-первых строчка "int PINB=selectedChannel-1;" вызовет ошибку из-за того, что PINB уже определена. Во-вторых не ясен смысл присвоения ему правой части  smile 

Если уж сокращать, то как-то так:

Код

#define isLow PINB&(1 << 23)
#define isHigh ~PINB&(1 << 23)

while(isLow)
{
    //...
}

while(isHigh)
{
    //...
}


Добавлено через 2 минуты и 57 секунд
И тогда в этом случае переменные signalPinMask и selectedChannel будут не нужны.

Это сообщение отредактировал(а) UniBomb - 23.11.2010, 13:00
PM MAIL ICQ Skype   Вверх
kray20
Дата 23.11.2010, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 8.11.2010

Репутация: нет
Всего: нет



Спасибо большое,  UniBomb, с сокращением теперь все ясно ! smile



Код

int PINB=selectedChannel-1;
 while(PINB LOW) {      // Wait for low state on signal pin
     if (micros() > timeOut) break;
}



Цитата

Во-первых строчка "int PINB=selectedChannel-1;" вызовет ошибку из-за того, что PINB уже определена. Во-вторых не ясен смысл присвоения ему правой части  smile 

Смысл присвоения в том ,что я думал PINB нужно присвоить номер вывода термодатчика, т.е. 23 , но тут понятно ,что я ошибся ! smile


а что в таком случае содержит переменная PINB ?! 
Предполагаю , что PINB=69 ,если учесть, что в таблице выводов для термодатчика в столбце: Port стоит PB24  ,а в столбце Pin стоит число 69


Это сообщение отредактировал(а) kray20 - 23.11.2010, 22:40
PM MAIL   Вверх
UniBomb
Дата 24.11.2010, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 97



kray20, я с архитектурой arm плохо знаком. Поэтому не уверен что там как устроено. Посему мои дальнейшие слова стоит проверить в документации.

Во многих контроллерах на управление портами ввода/вывода отводятся несколько регистров. В зависимости от архитектуры это количество может изменяться. Например в простом случае есть регистр направления, указывающий является вывод входом или выходом, есть регистр, который задаёт значение на выходе контроллера. PINx - это регистр, который отображает фактическое состояние выводов вне зависимости от настроек порта.

Т.е. есть несколько выводов, объединённых в регистр B. Некоторые выводы настроены на вход, некоторые на выход. Но на каждом выводе в любой момент времени висит логический уровень "1" или "0". Так вот PINB покажет на каком выводе что находится. Этот регистр как правило доступен только для чтения. Т.е. нельзя изменить его содержимое.

В данном микроконтроллере этот регистр называется вроде как PIO_PDSR.
PM MAIL ICQ Skype   Вверх
kray20
Дата 24.11.2010, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 8.11.2010

Репутация: нет
Всего: нет



Спасибо большое, за обстоятельное разъяснение вопроса ! Буду изучать ! Получается , что PINB мне ,скорее всего, придется переименовать на подходящий для моего контроллера регистр состояния ?! 
PM MAIL   Вверх
UniBomb
Дата 24.11.2010, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 97



Цитата(kray20 @  24.11.2010,  13:00 Найти цитируемый пост)
придется переименовать на подходящий для моего контроллера регистр состояния ?!  

 smile 
PM MAIL ICQ Skype   Вверх
kray20
Дата 24.11.2010, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 8.11.2010

Репутация: нет
Всего: нет



Спасибо, UniBomb ! smile
открыл руководство пользователя П.П.Редькина там написано:
 
PIO_PDSR - регистр состояния данных на ножке
доступ: только для чтения

Благодарю за подсказку ! 

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0516 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.