| Форум РадиоКот https://radiokot.ru/forum/ |
|
| Написал свою Onewire для Codevision https://radiokot.ru/forum/viewtopic.php?f=57&t=190490 |
Страница 1 из 6 |
| Автор: | AVK [ Пн окт 23, 2023 22:29:28 ] |
| Заголовок сообщения: | Написал свою Onewire для Codevision |
Написал свою реализацию OneWire для CodeVisionAVR. Чем не устраивает родная библиотека? А она не в исходниках, работает очень медленно и блокирует прерывания. Посмотрел я другие библиотеки и чот, а дай ка я свой велосипед напишу и заодно досконально разберусь в теме одноваре. Писалось все по сути с чистого листа, кроме вычисления CRC8. Места занимает больше чем родная но и функционал там побогаче, есть контроль линии на КЗ как в питание так и в землю. Работает примерно в два раза быстрее, прерывания блокирует минимально. Ну и родная библиотека типа плохо работает на частотах проца меньше 4МГц, этой вообще пофиг. Единственный ньюанс, нужно в прерывании каком нибудь инкрементить переменную для ловли таймаута шины хотя бы раз в 100 миллисекунд. Можно и раз в секунду но на эту секунду контроллер не будет отзываться в случае КЗ. Этого можно и не делать, но тогда есть шанс повесить проц если на линии случится КЗ в землю. Оформлено не в виде библиотеки, кто хочет сам сделает. А то отлаживать в Proteus не получится. ))))))))) |
|
| Автор: | roman.com [ Пн окт 23, 2023 23:11:53 ] |
| Заголовок сообщения: | Re: Написал свою Onewire для Codevision |
врятли кому пригодится самодельная библиотека...)) тут всё уже разобрали... viewtopic.php?f=28&t=185219 |
|
| Автор: | AVK [ Вт окт 24, 2023 16:27:51 ] |
| Заголовок сообщения: | Re: Написал свою Onewire для Codevision |
врятли кому пригодится самодельная библиотека...)) тут всё уже разобрали... viewtopic.php?f=28&t=185219 Так то почти все библиотеки самодельные. Там есть еще библиотека для MAX7219 тоже самодельная. И драйвер клавиатуры резистивной )))) |
|
| Автор: | roman.com [ Вт окт 24, 2023 18:05:36 ] |
| Заголовок сообщения: | Re: Написал свою Onewire для Codevision |
я вообще не использую библиотеки... никакие)) MAX7219 шо за зверь... https://yandex.ru/video/preview/5334075 ... snippets=1 Вложение: всё ясно)) динамическая индикация... Вложение: ненавижу динамическую индикацию... у меня от неё в глазах рябит)) лучше делать статическую индикацию... она не раздражает)) на простых сдвиговых регистрах... или на худой конец на любом дешёвом МК...
|
|
| Автор: | AVK [ Вт окт 24, 2023 21:32:04 ] |
| Заголовок сообщения: | Re: Написал свою Onewire для Codevision |
Динамическая индикация на частоте 500 герц вообще незаметна. Ее даже на камеру не видно. Как это вы не пользуетесь библиотеками? Или вы не понимаете значения этого слова? пусть будет функция для работы с дисплеем. Драйвер. |
|
| Автор: | roman.com [ Вт окт 24, 2023 22:43:43 ] |
| Заголовок сообщения: | Re: Написал свою Onewire для Codevision |
пусть будет функция для работы с дисплеем.)) ![]() например вот так Вложение:
|
|
| Автор: | AVK [ Вт окт 24, 2023 23:04:48 ] |
| Заголовок сообщения: | Re: Написал свою Onewire для Codevision |
Заборная у вас трава. Завидую. И что это такое? |
|
| Автор: | roman.com [ Вт окт 24, 2023 23:28:07 ] |
| Заголовок сообщения: | Re: Написал свою Onewire для Codevision |
И что это такое? простенький пультик)) https://www.youtube.com/watch?v=qWojRM-tjP0 https://www.youtube.com/watch?v=VvzbTWOdV3g ... и т.д. |
|
| Автор: | AVK [ Ср окт 25, 2023 11:00:38 ] |
| Заголовок сообщения: | Re: Написал свою Onewire для Codevision |
Это выросло не из проекта Фокуса на рсдизане? Я тоже баловался. |
|
| Автор: | roman.com [ Ср окт 25, 2023 11:31:57 ] |
| Заголовок сообщения: | Re: Написал свою Onewire для Codevision |
нет. это чисто свой проект... |
|
| Автор: | AVK [ Ср окт 25, 2023 12:16:11 ] |
| Заголовок сообщения: | Re: Написал свою Onewire для Codevision |
Ну так и где там разобрали одноваре? Я так понял вы весьма специфичный товарищ. |
|
| Автор: | roman.com [ Ср окт 25, 2023 12:27:27 ] |
| Заголовок сообщения: | Re: Написал свою Onewire для Codevision |
там всё разобрали... Вложение: и даже нарисовали... Вложение: одноваре...)) код одноваре... Код: ////////////////////////////////////////////////////////////// передача wt (1-Wire-DS18B20): void wt(void) { // LSB...MSB for (x=0;x<8;x++) { DDRC.4=0; // отпустить линию delay_us(10); DDRC.4=1; // прижать линию DDRC.4= t_ & (1<<x) ? 0 : 1; // DDRC.4 // выход Data TX delay_us(70); }; DDRC.4=0; // отпустить линию } ///////////////////////////////////////////////////////////////////// приём wr (RX DS18B20): void wr(void) { // LSB...MSB t_=0; for (x=0;x<8;x++) { DDRC.4=0; // отпустить линию delay_us(10); DDRC.4=1; // прижать линию delay_us(4); DDRC.4=0; // отпустить линию delay_us(8); // delay_us(25); v //delay_us(30); x if (PINC.4==1) {t_|=(1<<x);}; // Data RX delay_us(70); }; DDRC.4=0; // отпустить линию } /////////////////////////////////////////////////////////////////////// fwcrc (TX/RX DS18B20): void fwcrc(void) { wcrc ^= wbcrc; // CRC-8-Dallas/Maxim // 0x31 8+x5+x4+1 // 1.0011.0001 // 0x8C // 1000.1100 for (x=0;x<8;x++) { wcrc = wcrc & 0x01 ? ( wcrc >> 1 ) ^ 0x8C : wcrc >> 1; }; } Код: ///////////////////////////////////////////////////////////////// t - температура модель(датчик DS18B20): // температура модель ds18b20: 0 C^ (00000000)... 128 C^ (10000000) (начальное 85 C^ (01010101)) // 32 пак/c. цикл 0,031.25c. sd++; // sd - запуск преобразования: 1 преобразование(минимум 750mc)=1с. ////////////////////// запуск преобразования: -3,7 mc if (sd == 1) { // Инициализация DS18B20 DDRC.4=1; // прижать линию DS18B20 delay_us(550); // 480 мкС < имп < 960 мкС DDRC.4=0; // отпустить линию DS18B20 delay_us(550); // 480 мкС < имп t_ =0b11001100; wt(); // обратиться ко всем устройствам на шине. t_ =0b01000100; wt(); // начинает единственное температурное преобразование. }; ////////////////////// читать датчик DS18B20: -3,7 mc if (sd == 31) { // Инициализация DS18B20 DDRC.4=1; // прижать линию DS18B20 delay_us(550); // 480 мкС < имп < 960 мкС DDRC.4=0; // отпустить линию DS18B20 delay_us(550); // 480 мкС < имп t_ =0b11001100; wt(); // обратиться ко всем устройствам на шине. t_ =0b10111110; wt(); // читать содержание ПАМЯТИ (ОЗУ). }; ////////////////////// читать датчик DS18B20: -3,7 mc if (sd == 32) { wr(); t0=t_; // 0 - Температура LSB wr(); t1=t_; // 1 - Температура MSB wr(); t2=t_; // 2 - TH }; ////////////////////// читать датчик DS18B20: -3,7 mc if (sd == 33) { wr(); t3=t_; // 3 - TL wr(); t4=t_; // 4 - конфигурация wr(); t5=t_; // 5 - FF }; ////////////////////// читать датчик DS18B20: -3,7 mc if (sd == 34) { wr(); t6=t_; // 6 - 0C wr(); t7=t_; // 7 - 10 wr(); t8=t_; // 8 - CRC }; ////////////////////// CRC-8 датчик DS18B20 -0,7mc if (sd == 35) { wcrc=0; // сброс wbcrc=t0; fwcrc(); // 0 wbcrc=t1; fwcrc(); // 1 wbcrc=t2; fwcrc(); // 2 wbcrc=t3; fwcrc(); // 3 wbcrc=t4; fwcrc(); // 4 wbcrc=t5; fwcrc(); // 5 wbcrc=t6; fwcrc(); // 6 wbcrc=t7; fwcrc(); // 7 // crc wbcrc=t8; fwcrc(); // 8 ////////////////////// проверка crc if (wcrc==0) { ////////////////////// сборка L + H : // tok - датчик тока: 0...255. / температура 2 // tok = t & 0b00001111; // t0 = ....1111 - L младший бит температурного регистра. t0 = (t0 >> 4); // t0 = 1111.... >> .... 1111 - L младший бит температурного регистра. t1 = (t1 << 4); // t1 = ....1111 << 1111.... - H старший бит температурного регистра. t = t1 | t0; // t = DS18B20. } ////////////////////// ошибка crc else { t=0x00; // ошибка crc (TX/RX DS18B20). // tok=0x00; // ошибка crc (TX/RX DS18B20). }; ////////////////////// сброс // sd - счётчик датчика DS18B20 sd = 0; };
|
|
| Автор: | AVK [ Ср окт 25, 2023 14:58:13 ] |
| Заголовок сообщения: | Re: Написал свою Onewire для Codevision |
Я может в шары долблюсь, но где SearchROM? Это самая интересная часть балета. И вы даже прерывания не запрещаете в критических моментах. И написано это конечно огонь. |
|
| Автор: | OKF [ Ср окт 25, 2023 15:58:44 ] |
| Заголовок сообщения: | Re: Написал свою Onewire для Codevision |
AVK, глянул, и сразу удалил. Извини, но это детство. Во всём! Сам поймёшь со временем, когда повзрослеешь. |
|
| Автор: | roman.com [ Ср окт 25, 2023 16:28:30 ] |
| Заголовок сообщения: | Re: Написал свою Onewire для Codevision |
кто такой SearchROM ? )) и зачем он нужен ? прерывания в критических моментах... каких таких критических моментах ? OKF зачем писать "Сам поймёшь" ? если есть замечания... пиши конкретно... иначе твой комментарий бессмысленный ))
|
|
| Автор: | AVK [ Чт окт 26, 2023 10:10:42 ] |
| Заголовок сообщения: | Re: Написал свою Onewire для Codevision |
Вы я смотрю ничего в одноваре не понимаете. |
|
| Автор: | roman.com [ Чт окт 26, 2023 13:58:45 ] |
| Заголовок сообщения: | Re: Написал свою Onewire для Codevision |
ну так расскажите мне... чего я там не понимаю)) Вложение:
|
|
| Автор: | roman.com [ Чт окт 26, 2023 15:20:56 ] |
| Заголовок сообщения: | Re: Написал свою Onewire для Codevision |
SearchROM - функция поиска Датчика по уникальному адресу. SearchROM - функция нужна если на общей шине 2 и больше датчика. ну вот... всё ясно)) а сразу нельзя написать понятно ? надо писать всякую хрень ? )) "ничего в одноваре не понимаете"... "Сам поймёшь"... и т.д. когда уже люди научатся писать нормальные комментарии)) P.S. спасибо, SearchROM мне не надо)) делать гирлянды из датчиков... я пока не планирую)) у меня по одному датчику на каждый МК... меня устраивает)) Вложение:
|
|
| Автор: | AVK [ Чт окт 26, 2023 18:36:46 ] |
| Заголовок сообщения: | Re: Написал свою Onewire для Codevision |
SearchROM - функция поиска Датчика по уникальному адресу. SearchROM - функция нужна если на общей шине 2 и больше датчика. Нет, это функция чтения ромкодов всех датчиков. |
|
| Страница 1 из 6 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


