Написал свою Onewire для Codevision

Обсуждаем контроллеры компании Atmel.
AVK
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Сб окт 20, 2007 14:12:03

Написал свою Onewire для Codevision

Сообщение AVK »

Написал свою реализацию OneWire для CodeVisionAVR.
Чем не устраивает родная библиотека? А она не в исходниках, работает очень медленно и блокирует прерывания.
Посмотрел я другие библиотеки и чот, а дай ка я свой велосипед напишу и заодно досконально разберусь в теме одноваре.
Писалось все по сути с чистого листа, кроме вычисления CRC8. Места занимает больше чем родная но и функционал там побогаче, есть контроль линии на КЗ как в питание так и в землю. Работает примерно в два раза быстрее, прерывания блокирует минимально. Ну и родная библиотека типа плохо работает на частотах проца меньше 4МГц, этой вообще пофиг.
Единственный ньюанс, нужно в прерывании каком нибудь инкрементить переменную для ловли таймаута шины хотя бы раз в 100 миллисекунд. Можно и раз в секунду но на эту секунду контроллер не будет отзываться в случае КЗ. Этого можно и не делать, но тогда есть шанс повесить проц если на линии случится КЗ в землю.
Оформлено не в виде библиотеки, кто хочет сам сделает. А то отлаживать в Proteus не получится. )))))))))
Реклама
roman.com
Друг Кота
Сообщения: 9153
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Написал свою Onewire для Codevision

Сообщение roman.com »

врятли кому пригодится самодельная библиотека...))
тут всё уже разобрали... https://radiokot.ru/forum/viewtopic.php?f=28&t=185219
Реклама
AVK
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Сб окт 20, 2007 14:12:03

Re: Написал свою Onewire для Codevision

Сообщение AVK »

[uquote="roman.com",url="/forum/viewtopic.php?p=4492762#p4492762"]врятли кому пригодится самодельная библиотека...))
тут всё уже разобрали... https://radiokot.ru/forum/viewtopic.php?f=28&t=185219[/uquote]
Так то почти все библиотеки самодельные. Там есть еще библиотека для MAX7219 тоже самодельная. И драйвер клавиатуры резистивной ))))
roman.com
Друг Кота
Сообщения: 9153
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Написал свою Onewire для Codevision

Сообщение roman.com »

я вообще не использую библиотеки... никакие))

MAX7219 шо за зверь...
https://yandex.ru/video/preview/5334075 ... snippets=1
:roll:
Screenshot_1.jpg
(50.22 КБ) 72 скачивания
всё ясно))
:tea:
динамическая индикация...
Screenshot_2.jpg
(79.68 КБ) 59 скачиваний
ненавижу динамическую индикацию...
:facepalm:
у меня от неё в глазах рябит))
:shock:

лучше делать статическую индикацию... она не раздражает))
на простых сдвиговых регистрах...
или на худой конец на любом дешёвом МК...
:tea:
Реклама
Эиком - электронные компоненты и радиодетали
AVK
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Сб окт 20, 2007 14:12:03

Re: Написал свою Onewire для Codevision

Сообщение AVK »

Динамическая индикация на частоте 500 герц вообще незаметна. Ее даже на камеру не видно.
Как это вы не пользуетесь библиотеками? Или вы не понимаете значения этого слова? пусть будет функция для работы с дисплеем. Драйвер.
Реклама
roman.com
Друг Кота
Сообщения: 9153
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Написал свою Onewire для Codevision

Сообщение roman.com »

пусть будет функция для работы с дисплеем.))
:tea:
например вот так
пульт.c
(104.49 КБ) 88 скачиваний
Реклама
AVK
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Сб окт 20, 2007 14:12:03

Re: Написал свою Onewire для Codevision

Сообщение AVK »

Заборная у вас трава. Завидую.
И что это такое?
roman.com
Друг Кота
Сообщения: 9153
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Написал свою Onewire для Codevision

Сообщение roman.com »

И что это такое?
простенький пультик))
https://www.youtube.com/watch?v=qWojRM-tjP0
https://www.youtube.com/watch?v=VvzbTWOdV3g
...
и т.д.
AVK
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Сб окт 20, 2007 14:12:03

Re: Написал свою Onewire для Codevision

Сообщение AVK »

Это выросло не из проекта Фокуса на рсдизане?
Я тоже баловался.
roman.com
Друг Кота
Сообщения: 9153
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Написал свою Onewire для Codevision

Сообщение roman.com »

нет.
это чисто свой проект...
AVK
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Сб окт 20, 2007 14:12:03

Re: Написал свою Onewire для Codevision

Сообщение AVK »

Ну так и где там разобрали одноваре?
Я так понял вы весьма специфичный товарищ.
roman.com
Друг Кота
Сообщения: 9153
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Написал свою Onewire для Codevision

Сообщение roman.com »

там всё разобрали...
модель.c
(30.83 КБ) 70 скачиваний
и даже нарисовали...
PCM-256.jpg
(150.59 КБ) 76 скачиваний
одноваре...))
:tea:

код одноваре...

Код: Выделить всё

////////////////////////////////////////////////////////////// передача 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; 
 };
}
:tea:

Код: Выделить всё

///////////////////////////////////////////////////////////////// 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;           
};
:tea:
AVK
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Сб окт 20, 2007 14:12:03

Re: Написал свою Onewire для Codevision

Сообщение AVK »

Я может в шары долблюсь, но где SearchROM? Это самая интересная часть балета. И вы даже прерывания не запрещаете в критических моментах.
И написано это конечно огонь.
OKF
Это не хвост, это антенна
Сообщения: 1393
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Написал свою Onewire для Codevision

Сообщение OKF »

AVK, глянул, и сразу удалил. Извини, но это детство. Во всём! Сам поймёшь со временем, когда повзрослеешь.
roman.com
Друг Кота
Сообщения: 9153
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Написал свою Onewire для Codevision

Сообщение roman.com »

кто такой SearchROM ? )) и зачем он нужен ?
прерывания в критических моментах... каких таких критических моментах ?
:dont_know:
OKF зачем писать "Сам поймёшь" ?
если есть замечания... пиши конкретно... иначе твой комментарий бессмысленный ))
:tea:
AVK
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Сб окт 20, 2007 14:12:03

Re: Написал свою Onewire для Codevision

Сообщение AVK »

Вы я смотрю ничего в одноваре не понимаете.
roman.com
Друг Кота
Сообщения: 9153
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Написал свою Onewire для Codevision

Сообщение roman.com »

ну так расскажите мне... чего я там не понимаю))
1-Wire.jpg
(55.04 КБ) 78 скачиваний
:tea:
veso74
Поставщик валерьянки для Кота
Сообщения: 1907
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Написал свою Onewire для Codevision

Сообщение veso74 »

Подключите напр. 5 датчиков параллельно по одному проводу с одним резистором и эта функция понадобится. Датчики имеют уникальный адрес.

Ничего доп. из прогр. кода не добавляем, просто добавляем датчики параллельно (GND, DS, VDD).
Ниже: 3 датчика:

Изображение
roman.com
Друг Кота
Сообщения: 9153
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Написал свою Onewire для Codevision

Сообщение roman.com »

SearchROM - функция поиска Датчика по уникальному адресу.
SearchROM - функция нужна если на общей шине 2 и больше датчика.

ну вот... всё ясно))
:tea:

а сразу нельзя написать понятно ? надо писать всякую хрень ? ))

"ничего в одноваре не понимаете"...
"Сам поймёшь"...
и т.д.

когда уже люди научатся писать нормальные комментарии))
:tea:

P.S.
спасибо, SearchROM мне не надо))
делать гирлянды из датчиков... я пока не планирую))
у меня по одному датчику на каждый МК... меня устраивает))
схема_PoE(5V2A)_AVR.jpg
(171.8 КБ) 65 скачиваний
:tea:
AVK
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Сб окт 20, 2007 14:12:03

Re: Написал свою Onewire для Codevision

Сообщение AVK »

[uquote="roman.com",url="/forum/viewtopic.php?p=4494011#p4494011"]SearchROM - функция поиска Датчика по уникальному адресу.
SearchROM - функция нужна если на общей шине 2 и больше датчика.[/uquote]
Нет, это функция чтения ромкодов всех датчиков.
Ответить

Вернуться в «AVR»