Например TDA7294

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





Текущее время: Вт апр 23, 2024 18:52:02

Часовой пояс: UTC + 3 часа


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



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

Зарегистрирован: Чт июн 30, 2011 10:10:23
Сообщений: 342
Откуда: лютая Россия
Рейтинг сообщения: 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 19:19:28 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 157
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3328
Рейтинг сообщения: 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;
}


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

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

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


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

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

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

Зарегистрирован: Чт июн 30, 2011 10:10:23
Сообщений: 342
Откуда: лютая Россия
Рейтинг сообщения: 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

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


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

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

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

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


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: ChibiOS и onewire ds1990
СообщениеДобавлено: Пн май 21, 2018 00:30:01 
Потрогал лапой паяльник

Зарегистрирован: Чт июн 30, 2011 10:10:23
Сообщений: 342
Откуда: лютая Россия
Рейтинг сообщения: 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]
Скачиваний: 624

_________________
— Да не боись, всего двенадцать вольт… и восемьсот ампер.
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ChibiOS и onewire ds1990
СообщениеДобавлено: Пн май 21, 2018 14:17:46 
Друг Кота

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

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


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

Часовой пояс: UTC + 3 часа


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

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


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

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


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