Сколько DS18B20 может обслужить Atmega16

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Пн мар 30, 2009 15:58:32
Откуда: Украина Запорожье

Сообщение lkote68 »

Опытный Тигра Привет ты куда пропал. :))
Привет и другим Котам.
Котярики кто знает как правильно поставить кнопку сброса ежели на выводе сброса у меня висит супервизор DS1816
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

Да, у этого супервизора входа для ручного сброса нет. Включи нормальнозамкнутую кнопку перед пином Vcc и зашунтируй её резистором, остальное супервизор сделает сам. :)))

P.S. Ремонт у меня, уже пару месяцев, и чем дальше, тем толще партизаны. На мелочи время выкроить удается, а на что-то более-менее серьёзное - никак. :( Раз ты вспомнил, значит таки-надо... попробую напрячься в среду. ;)
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Пн мар 30, 2009 15:58:32
Откуда: Украина Запорожье

Сообщение lkote68 »

Еще раз привет. Я правильно понял (вложение кнопка нарисов разомкнутой не придирайся). Я понял твоя идея что в норме питание в первом случае подается через медь а при нажатии через резистор U= Uпит-Isup*R. Я так думаю входной ток у него совсем небольшой. Следовательно чтоб он увидел различия резистор не малый надо.
Посмотрел ST супервизоры они их там подразделяют на pushpull и open drain. Теперь ясно. DSка open drain (хотя че они их называют open drain) можно кнопку прямо на RST лепить, по крайней мере я так понял.
Вложения
SuperVisor.PNG
(713 байт) 379 скачиваний
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

lkote68 писал(а):Я правильно понял ...
Правильно.
lkote68 писал(а):чтоб он увидел различия резистор не малый надо.
Тебе жалко что-ли? Если будешь ресетить кнопкой, все равно резистор понадобится, и не только он (см. дальше). Так даже лучше - резистор понадобится высокоомный, а именно они-то всегда и остаются лишние. :))) Ну, и кроме того - супервизор заточен под эту задачу лучше и места знимает меньше, чем резистор и кондер. :)))
lkote68 писал(а):DSка open drain ... можно кнопку прямо на RST лепить, ...
Можно, но тогда еще понадобится кондер, чтобы дребезг стереть.

_____________
Посмотрел в ДШ, посчитал и оказалось, что из-за внутреннего пуллапа (5к всего) этот фортель может не получиться - пока этот пуллап ток не сосет, для снижения напруги на супервизоре на 1.2В нужен резистор в 35к, но как только выход ресет откроется и через 5к-омный пуллап потечет ток, те же самые 35к сожрут уже не 1.2В, а все 7/8, и тогда супервизору останется всего 0,625 вольта. В ДШ, правда, утверждается, что Vcc начинается от 0,0В, но я бы сначала убедился в этом сам (как-то не верится в чудеса - чем-то же надо держать там затвор открытым). :))
Если требования к ресету высоки, я бы рассмотрел супервизоры со встроенным принудительным ресетом; взгляни например на ADM1818 - супервизор, встроенный принудительный ресет, sot23 и цена даже немного ниже, чем у твоего далласовского.
Реклама
Эиком - электронные компоненты и радиодетали
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

Привет. Посмотрел я код и вот что скажу - решение по размножению кода с заменой инструкций дергающих один бит на шаблонные копии, дергающие разные биты, выгодно, на мой взгляд, лишь если нужно задействовать два-три пина, а при большем количестве пинов накладные расходы, связанные с парой - сравнение номера канала с очередным номером + переход к следующему сравнению, если текущее сравнение ложно - оказываются тяжелее, чем накладные расходы связанные с вычислением полного байта, нужного для работы с пином.
Давай сравним, сейчас у тебя так:

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

void    w1_init(unsigned char chan) // параметр - номер канала (и пина, заодно)
{
    if (chan == 0){
        w1_init0();
    } else if(chan == 1){
        ...
    } else
        w1_init7();
}
то есть, если канал - восьмой, то все операции с ним будут сопровождаться семью сравнениями и семью переходами! Вычисляемых переходов в AVR нету, поэтому такой метод фактически привел к алгоритму прямого перебора. Я думаю, что нужно попробовать применить в процедурах не инструкции установки/сброса бита, а инструкции вывода в порт сразу всего набора бит - байта. Разумеется, семь бит, которые мы не хотим трогать, нужно предварительно прочитать, каждая операция с битом получается такой:
1. прочитать байт из порта
2. изменить в нем нужный бит
3. вывести байт в порт

Операций там две - установить нужный бит, либо сбросить нужный бит. Делается побитным ИЛИ предыдущих бит с единичкой в нужном разряде (установка бита), либо побитным И предыдущих бит с единичками во всех разрядах кроме нужного. Что-то вроде такого:

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

static unsigned char OrMask[8]  = {0x1, 0x2, 0x4, ...,0x80},
                     AndMask[8] = {0xFE,0xFD,0xFB,...,0x7F},
                     SetBit, ClrBit;
void    w1_init(unsigned char chan) // параметр - такой же
{
        SetBit = OrMask[chan];
        ClrBit = AndMask[chan];
        ...
        // set bit
        Port = Port | SetBit;
        // reset bit
        Port = Port & ClrBit;
        ...
}
Переменные SetBit и ClrBit можно сделать локальными, разумеется.

Накладные расходы здесь тоже есть, но если нужно использовать более трех пинов, то они оказываются меньше тех, что в твоем варианте. Попробуй так, по-моему, это должно сработать лучше. ;)

P.S. Если памяти будет так мало, что даже 16 байт будет жалко под статические битовые маски (OrMask и AndMask), то их можно, конечно, не хранить, а генерить на лету сдвигами - не так быстро, но и в этом случае расходы будут меньше, чем при прямом переборе. Да и объем кода будет почти в восемь раз меньше. :)))
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Пн мар 30, 2009 15:58:32
Откуда: Украина Запорожье

Сообщение lkote68 »

Привет тигра. Обязательно отвечу Сейчас некогда Делаю девайс в метале и пишу прогу для визуализации. До 25.06.09 должен сделать. Будет Совет смотреть. Сам понимаешь времени мало. Еще и компоненты приобретать мне.
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

Да, успеть за две недели - это не фунт изюма. Удачи! :)
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Пн мар 30, 2009 15:58:32
Откуда: Украина Запорожье

Сообщение lkote68 »

Тигра хошь посмотреть что получилось - давай мыло или еще что то сюда не лезет
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

Посмотрел, мало что можно разобрать после эрика 790-го. В ДИП8 - это кто? Там восемь каналов на 315/814 - это как раз и есть линии для датчиков? А кто же тогда в ДИПах - тиньки? ТО92-е на синей плате - далласы? И почему платы две?
В общем, интересно, но непонятно... Изображение
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Пн мар 30, 2009 15:58:32
Откуда: Украина Запорожье

Сообщение lkote68 »

Я там еще две фоты бросил. Составной 315-815 ключ для подпитки дсок. Я с биполярными как с родными поэтому сделал на них. Макетка это таже схема только + на ней дски и некоторые варики по ходу. Там реализовано было 4 канала. Просто показал с чего начал. Дип16 - генератор сделал на плате 2 генератора про запас. Около меги там есть отверстия под кварц мона если кому не понравится переставать. Но мне лично нравится отдельный генератор - там амлитуда все 5V.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

Через оптроны рулишь далласами? Пока не понял, как ты обошелся восемью оптронами на развязке восьми каналов...
Кстати - сколько же в результате далласов висит на каждом канале и в сумме на меге16? :))

P.S.
проехали...
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Пн мар 30, 2009 15:58:32
Откуда: Украина Запорожье

Сообщение lkote68 »

Нет даласы как по даташиту без всякой развязки. На базовом контроллере развязки нет - ну и я спрыгнул. То отвязка RX, TX, и направления передачи 485. Спечифичная тема применения твоего транзистора. Так по друзьям спросил. Грят должен работать. Я лично микрофонными усилителями не занимался. Спроси по конкретнее может сообразим что то. И ваще ты ссылку средактил на вопрос.
Чтоб узнать сока висит будем привлекать тебя :-)) Пока надеюсь по 10 на канал. Посмотрел та Atmega32 у нее ж распиновка таже - перекомпилим навешаем глянем. Я пока не могу оценить сколько памяти остается.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

Как там твои заказчики, ты их охмурил, надеюсь? Изображение
lkote68 писал(а):И ваще ты ссылку средактил на вопрос.
Так ведь я объяснил - проехали. Я на ДР одному любимомук старику хочу успеть сделать усилятель карманный, времени мало, потому я ждал только практических замечаний/советов, а на обсуждения (как это обычно бывает) сейчас времени нетути; вот я и не стал ждать - произвёл поскребание по сусекам и отрыл на дне какого-то ящика малошумящие операционники; на том и порешил... ;)
lkote68 писал(а):Чтоб узнать скока висит, будем привлекать тебя :-))
Понятно - "инициатива наказуема", да? Изображение Кстати - ты код 1-варе функций пробовал переделывать в том направлении, что я предложил рассмотреть, или еще нет?
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Пн мар 30, 2009 15:58:32
Откуда: Украина Запорожье

Сообщение lkote68 »

Охмурять будем 25.06.09 Поеду в командировку. Не твой код еще не пробовал. С лету не понял как заменить те что встроенные точнее сказать подменить. Имена нужны ж теже чтоб ниче не нарушить. А так работает пока все подмигивая зеленым глазом. Ща сижу обдумываю структуры БД чтоб удобнее была. Соорудил въюер набыстрячка графики отрисовывает по 8 каналам по одному датчику а в таблице рисует все что етсь. Вроде успел.
Вложения
GViewer.PNG
(37.02 КБ) 380 скачиваний
TViewer.PNG
(60.11 КБ) 380 скачиваний
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

Ага, послезавтра, значит... :) Ну, успеха! :)))
С кодом разберёмся,... чуток попозже... ;)
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Пн мар 30, 2009 15:58:32
Откуда: Украина Запорожье

Сообщение lkote68 »

Содрал с ADAMA приспособил себе
Вложения
ADM485.PNG
(1.68 КБ) 388 скачиваний
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

Эт даа, защищать супрессорами всё, что торчит наружу - правильная привычка! Изображение :)))
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Пн мар 30, 2009 15:58:32
Откуда: Украина Запорожье

Сообщение lkote68 »

С небольшими огрехами (не открылся COM порт) презентация состоялась. Были подсунуты данные за предыдущий день :)) . Результатом оного - решение через 2 недели в опытно пром эксплуатацию.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

Поздравляю! Рад твоему успеху - дальше будет проще и, одновременно, интереснее. :)
lkote68 писал(а):...не открылся COM порт...
Надеюсь, ты никому не сказал?! Изображение
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Пн мар 30, 2009 15:58:32
Откуда: Украина Запорожье

Сообщение lkote68 »

Да уже все работает Выдрал код из проги своей старой

HANDLE handle = CreateFile(SerialPort, //lpfilename
GENERIC_READ | GENERIC_WRITE, //desired access
0, // exclusive access
NULL, // no security attrs
OPEN_EXISTING,
NULL,
// overlapped I/O FILE_FLAG_OVERLAPPED FILE_ATTRIBUTE_NORMAL |
NULL );
if(handle==INVALID_HANDLE_VALUE) {
::MessageBox(NULL,"Невозможно открыть "+SerialPort+". Порт занят другим приложением.",
"Error",MB_OK);
ExitProcess(1);
}

DCB dcb;
GetCommState(handle, &dcb);
dcb.BaudRate = CBR_19200;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
SetCommState(handle, &dcb);

А тот вариант что не открывал (вернее он открывал но не всегда а еще точнее открывал всегда но не с теми параметрами скорость не та была).
Там у меня структура больше менялась. Тут я ее считал скорость и парити поменял и все. Не помню остался варик тот что так хитро скорость менял или нет Надо будет поискать разобраться что за беда
Генеральная линия таже ж :))
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»