ВходНаше всё Теги codebook PARTS Поиск Опросы Закон Понедельник
25 мая
/195054
ctpexhih (23.05.2010 18:53, просмотров: 8198)
Подключаю 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; } } Вопрос: В чем может быть проблема????
Ответить
Ответы