16+
Суббота
19 октября
Вход |Карта сайта |Upload |codebook | PARTS

 О смысле всего сущего 0xFF

 Средства и методы разработки

 Мобильная и беспроводная связь

 Блошиный рынок Объявления

caxapa

Микроконтроллеры ARM 

AVR PIC MSP PLD,FPGA,DSP 

Кибернетика Технологии 

Схемы, платы, компоненты 

Микроконтроллеры MSP430

 
Новая темаПравила РегистрацияСтатистика Архив
Вернуться в конференциюТопик полностью
ctpexhih  (23.05.2010 18:53, просмотров: 7911)
Подключаю DS18B20 (датчик температуры 1-wire) к MSP430F1491, использую USART, ноги контроллера P3.4 и P3.5 на плате физически соединены дорожкой, никакой доп. схемки для открытого коллектора на ноге P3.5 я не делал. Определяет датчик без проблем (т.е. 
видно импульс presence), а вот с обменом данными проблема. Запускаю преобразование Т, потом жду 2 сек, потом пытаюсь читать данные. Проблема в том, что ВСЕ биты и байты при чтении scratchpad ВСЕГДА читаются как "1". Если ногу DQ датчика замкнуть на землю, то читается все как и должно - одни "0". USART конфигурируется согласно рекомендаций. Вот так опрашиваю датчик:
char RESET_1W(void)
{
  //На выходе: 1 - устройство есть, 0 - устройства нет
  
  //Конфигурация UART0: 9600 бод, 8 бит, контроля четности нет, 1 стоп-бит.
  U0CTL |= SWRST;   //Удержание логики в сбросе
  U0CTL |= CHAR;    //Восьмибитный режим
  U0TCTL |= SSEL1;  //Источник тактирования - SMCLK
  U0BR1 = 0x03;     //9600 бод при 8 МГц =>
  U0BR0 = 0x41;     //8000000/9600 = 833,(3). 833(10) = 0x341(16)
  U0MCTL = BIT1 + BIT4 + BIT7;  //Учитывает 0,(3)
  ME1 |= BIT7 + BIT6; //Включение приемников/передатчиков UART0
  U0CTL &= ~SWRST;  //Разрешение работы
  
  U0TXBUF = 0xF0;
  
  do{}
  while(IFG1 & URXIFG0); //Ждем приема
  
  //Если приняли то, что передавали, то устройства нет, иначе - есть.
  if(U0RXBUF == 0xF0) { return 0; }
  else { return 1; }
}
Так читаю бит:
char READ_BIT_1W(void)
{
  //Читает бит из устройства  
  //USART переконфигурируется на 115200 бод в вызывающей функции
  //Read '0': TX: 0xFF, RX: 0xFE или меньше
  //Read '1': TX: 0xFF, RX: 0xFF

  U0TXBUF = 0xFF;
 
  do{}
  while(IFG1 & URXIFG0); //Ждем приема
  
  //Если приняли то, что передавали, то прочитали '1'
  if(U0RXBUF == 0xFF) { return 1; }
  else { return 0; }
}
Вопрос: В чем может быть проблема????
Главная | Карта сайта | О проекте | Проекты | Файлообменник | Регистрация | Вебмастер | RSS
Лето 7528 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна.
MMI © MMXIX