Например TDA7294

Форум РадиоКот • Просмотр темы - ChibiOS и onewire ds1990
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Вт июл 16, 2019 07:46:40

Часовой пояс: UTC + 3 часа [ Летнее время ]


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: ChibiOS и onewire ds1990
СообщениеДобавлено: Вс май 20, 2018 19:43:31 
Потрогал лапой паяльник

Зарегистрирован: Чт июн 30, 2011 11:10:23
Сообщений: 320
Откуда: лютая Россия
Рейтинг сообщения: 0
Исходные данные:
в роли программиста полный нуб в этом деле, в роли ide - eclipse, в роли контроллера плата с stm32f103c8t6 на борту, на котором крутится RTOS ChibiOS.

Нужно читать код с DS1990A(ключ-таблетка).
однопроводный интерфейс многие реализуют через UART. Попробовал сделать и я так.

Сначала отправляем reset - для этого на скорости 9600 бод отправляем в порт 0xF0. Если пришло что-то другое, значит ответ есть.
Потом посылаем команду READROM (0x33). Для этого на скорости 115200 посылаем 8 байт. 0x00 - 0, 0xFF - 1.

Это я ничего не напутал? Все так? После этого опять пишем в порт 0xFF, и если вместо 0xFF пришло 0,то и slave устройство отправляло 0.

Значит, если посылать reset, то результат есть. делаю я это так:

Код:
  static UARTConfig uart_cfg_1 = {
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    9600,
    0,
    USART_CR2_LINEN,
    0
  };

  uint8_t reset_onewire=0xF0;

  while(1)
  {
    uartStart(&UARTD1, &uart_cfg_1);
    uartStartSend(&UARTD1,1 , &reset_onewire);
    chThdSleepMilliseconds(2000);
  }


Результат смотрю терминалом. Если ключ подключен получаю E0. Если не подключен - F0.

А дальше не получается ничего.
Нужно перезапустить драйвер с другим конфигом, на скорости 115200. А это уже требует несколько миллисекунд, что очень долго.
Подозреваю, что ус-во не отвечает мне именно из-за этого, но может делаю что-то вообще не так.
Есть чибиосоводы? Кто-то сможет помочь? Я готов и заплатить, если мне кто-то сделает этот кусок, но не откажусь и от помощи.

_________________
— Да не боись, всего двенадцать вольт… и восемьсот ампер.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ChibiOS и onewire ds1990
СообщениеДобавлено: Вс май 20, 2018 20:19:28 
Собутыльник Кота
Аватар пользователя

Карма: 4
Рейтинг сообщений: 136
Зарегистрирован: Пн окт 11, 2010 20:00:08
Сообщений: 2546
Рейтинг сообщения: 0
Посмотрите как сделано в 1-Wire библиотеках, например этой. http://www.cyberforum.ru/blogs/204791/blog5170.html
Функция OW_Reset.
Код:
void Usart_Cnf(uint32_t Rate) // Настройка USART.
{
    USART_InitTypeDef Usart;

    Usart.USART_BaudRate = Rate;
    Usart.USART_WordLength = USART_WordLength_8b;
    Usart.USART_StopBits = USART_StopBits_1;
    Usart.USART_Parity = USART_Parity_No;
    Usart.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    Usart.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
    USART_Init(OW_USART, &Usart);
}

uint8_t OW_Reset(void) // Сброс 1-Wire.
{
    uint8_t Res;

    Usart_Cnf(9600);

    uint8_t x=0xF0;
    Res = OW_BitRW(&x);

    if (Res == OW_OK)
    {
       if (x == 0xF0) Res = OW_NO_DEVICE;
       else if ((x == 0x00) || (x == 0xFF)) Res = OW_ERROR;
    }

    Usart_Cnf(115200);
    return Res;
}


Вернуться наверх
 
JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: ChibiOS и onewire ds1990
СообщениеДобавлено: Вс май 20, 2018 20:19:55 
Модератор
Аватар пользователя

Карма: 77
Рейтинг сообщений: 782
Зарегистрирован: Пт мар 19, 2010 00:09:57
Сообщений: 4038
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
WaL97 писал(а):
Есть чибиосоводы?
А причём тут ОС ? :dont_know:

WaL97 писал(а):
А это уже требует несколько миллисекунд, что очень долго.
Устройству пофиг на эти миллисекунды после сброса.
Почитали бы, что-ли, для начала документацию на протокол...

_________________
Я мненью вашему вращенье придавал, а осью был - мой детородный орган.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $88 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay
Не в сети
 Заголовок сообщения: Re: ChibiOS и onewire ds1990
СообщениеДобавлено: Вс май 20, 2018 21:12:44 
Потрогал лапой паяльник

Зарегистрирован: Чт июн 30, 2011 11:10:23
Сообщений: 320
Откуда: лютая Россия
Рейтинг сообщения: 0
Устройству пофиг на эти миллисекунды после сброса.


Код:
uint8_t reset_onewire=0xF0;
  uint8_t readrom_cmd[72]=
                         {0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF, //0x33
                           0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //чтение
                           0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
                           0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
                           0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
                           0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
                           0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
                           0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
                           0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
  while(1)
  {

    uartStart(&UARTD1, &uart_cfg_1);
    chThdSleepMilliseconds(3);
    uartStartSend(&UARTD1, 1, &reset_onewire);
    chThdSleepMilliseconds(3);
    uartStart(&UARTD1, &uart_cfg_2);
    chThdSleepMilliseconds(3);
    uartStartSend(&UARTD1, 72, &readrom_cmd[0]);

    chThdSleepMilliseconds(2000);
  }


Терминал в таком случае независимо от того, подключен ключ или нет читает

Цитата:
00
30 30 31 33 38 37 20 00
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF

_________________
— Да не боись, всего двенадцать вольт… и восемьсот ампер.


Вернуться наверх
 
Материалы вебинара: "Литиевые ХИТы FANSO или что нужно знать инженеру о батарейках"

На сайте Компэл доступны материалы вебинара, посвященного литиевым батарейкам FANSO. На мероприятии говорилось о том, на какие параметры следует обращать внимание, выбирая литиевый ХИТ, и как избежать некоторых проблем, затрагивались вопросы тестирования и пассивации батареек, и мн. др.
Вы можете посмотреть видеозапись вебинара, ознакомиться с презентацией и ответами на вопросы.
Подробнее>>
Не в сети
 Заголовок сообщения: Re: ChibiOS и onewire ds1990
СообщениеДобавлено: Вс май 20, 2018 22:23:32 
Модератор
Аватар пользователя

Карма: 77
Рейтинг сообщений: 782
Зарегистрирован: Пт мар 19, 2010 00:09:57
Сообщений: 4038
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Вы вообще, о чём ? Какой терминал ? Что читает ? Куда читает ? ...
Судя по тексту из Вашего первого поста, проблем нет до этого момента :
WaL97 писал(а):
А дальше не получается ничего.
Нужно перезапустить драйвер с другим конфигом, на скорости 115200. А это уже требует несколько миллисекунд, что очень долго.
Повторюсь. После ресета, устройство может ждать хоть 100 лет следующих команд. По этому, несколько миллисекунд - это не очень долго.
Таймауты нужно выдерживать только в пределах тайм-слотов.

PS: Повторюсь №2. Почитайте протокол 1-Wire, чтобы такие элементарные вещи не вводили Вас в заблуждение и Вы не гадали - "может из-за этого", а "может из-за того" ... Ну и вопросы чтобы задавали адекватные, а не писали сумбур, который можно разгадать только экстрасенсам.

_________________
Я мненью вашему вращенье придавал, а осью был - мой детородный орган.


Вернуться наверх
 
Конденсаторы Panasonic. Часть 1. Алюминий

Известная своими инновациями компания Panasonic даже в столь традиционные изделия как алюминиевые электролитические конденсаторы ухитряется вносить оригинальные и полезные конструктивные дополнения.
Отдельно можно выделить инновационное направление Panasonic, занимающееся разработкой и производством решений по отводу тепла, основу которого составляют специальные графитовые листы (семейство PGS). Емкостное направление Panasonic выпускает полимерные, пленочные и классические электролитические конденсаторы, о которых пойдет речь.
Подробнее>>
Не в сети
 Заголовок сообщения: Re: ChibiOS и onewire ds1990
СообщениеДобавлено: Пн май 21, 2018 01:30:01 
Потрогал лапой паяльник

Зарегистрирован: Чт июн 30, 2011 11:10:23
Сообщений: 320
Откуда: лютая Россия
Рейтинг сообщения: 0
http://www.gaw.ru/html.cgi/txt/app/micr ... avr318.htm опираюсь на это.

Цитата:
Вы вообще, о чём ? Какой терминал ? Что читает ? Куда читает ? ...


Сейчас подключаюсь таким образом и на компьютере в терминале смотрю, что отправляет микроконтроллер и какие изменения вносит ds1990.
Изображение

Цитата:
Повторюсь. После ресета, устройство может ждать хоть 100 лет следующих команд. По этому, несколько миллисекунд - это не очень долго.
Таймауты нужно выдерживать только в пределах тайм-слотов.

Спасибо, это понял. Значит проблема не в этом. иду дальше.

Делаю ресет путем отправки на юарт на скорости 9600 байта 0хF0. В терминале вижу, как таблетка реагирует.
Затем я формирую массив из 72 байт
первые 8 байт 0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00 - это команда 0х33 - ReadRom
остальные 64 байта идут следом для чтения ответных 8 байт,которые пошлет таблетка.


P.S. Вроде проблему решил, пока писал ответ на форум.
В общем, то ли большой массив бьется, то ли буфер переполняется. в итоге на uart приходила уже не та команда, которая отправлялась.
Причем при массиве длиной 72 байта и при массиве длиной 64 байта бьются первые восемь.
Пока проблему решил отправляя пачками по 8 байт. Так как мне сверхскорости не нужны, возможно так и оставлю
Код:
while(1)
  {
    uartStart(&UARTD1, &uart_cfg_1);
    uartStartSend(&UARTD1, 1, &reset_onewire);
    chThdSleepMilliseconds(3);
    uartStart(&UARTD1, &uart_cfg_2);
    uartStartSend(&UARTD1, 8, &readrom[0]);
    for (int i=0;i<8; i++)
    {
      chThdSleepMilliseconds(1);
      uartStartSend(&UARTD1, 8, &readrom_cmd[0]);
    }
    chThdSleepMilliseconds(2000);

  }


Вложения:
Безымянный.png [56.21 KiB]
Скачиваний: 295

_________________
— Да не боись, всего двенадцать вольт… и восемьсот ампер.
Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: ChibiOS и onewire ds1990
СообщениеДобавлено: Пн май 21, 2018 15:17:46 
Поставщик валерьянки для Кота

Карма: 45
Рейтинг сообщений: 557
Зарегистрирован: Пн апр 06, 2015 12:01:53
Сообщений: 2322
Откуда: москва, уфа
Рейтинг сообщения: 0
Нужно перезапустить драйвер с другим конфигом, на скорости 115200. А это уже требует несколько миллисекунд, что очень долго.

зачем его целиком переинициализировать? Достаточно один регистр BRR перезаписать.


Вернуться наверх
 


Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y