Страница 26 из 55
Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И
Добавлено: Ср окт 04, 2017 18:09:12
*Trigger*
Я переписывал библиотеку для DS18b20 из комплекта CVAVR, чтобы уменьшить объём используемой памяти и устранить конфликт библиотеки с включенными прерываниями. В архиве с проектом есть файлы my_ds18b20.h и my_ds18b20.lib. Если они не подхватились компилятором из папки с проектом (что очень странно), их нужно поместить в папки CVAVR: папка/установки/inc и папка/установки/lib соответственно.
Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И
Добавлено: Ср окт 04, 2017 19:00:33
RoboC
Это я сделал сразу.
Может это быть связано с тем,то у меня студия стоит не 6я , а 4я?
Не хотелось Вас напрягать, мне то нудно было просто переставить ножки под плату

Хотел все сам.
Так же не понятный момент в
есть
Код: Выделить всё
case 0:
get_date();
disp_date(1);
delay_ms(2000);
while(OK);
menu_item=menu_NULL;
get_time();
disp_time(2);
while(shift);
break;
А так же есть
где menu_NULL определено дефайном как 0;
соответственно компилятор на это ругается...
Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И
Добавлено: Ср окт 04, 2017 20:28:44
*Trigger*
RoboC писал(а):студия стоит не 6я , а 4я?
Если Вы про AVR Studio, так у меня она вообще не стоит.
RoboC писал(а):соответственно компилятор на это ругается...
Я не знаю, чью прошивку Вы взяли, в моей оригинальной никакого "case 0:" нет, везде используются дефайны. Также не понятно, почему у функций работы с термодатчиком есть аргумент "0" - у меня его изначально не было, т.к. использовалась опция новой библиотеки для работы с одним датчиком (экономия памяти).
Если бы CVAVR не видел библиотеки, ошибка была бы ещё здесь:
Код: Выделить всё
ds18b20_simple_init(DS18B20_12BIT_RES);
ds18b20_start_conv();
Скорее всего, эта ошибка - следствие какой-то другой, похоже, связанной с расстановкой скобок {}. Попробуйте исправить ошибку в скобках.
Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И
Добавлено: Чт окт 05, 2017 10:48:37
RoboC
Я не знаю, чью прошивку Вы взяли, в моей оригинальной никакого "case 0:" нет
Да мой косяк, кривые пальцы.
Удалось откомпилировать, объявив в my_ds18b20.h недостающие функции:
Код: Выделить всё
signed int ds18b20_temperature(unsigned char *addr);
void ds18b20_start_conv(unsigned char *addr);
unsigned char ds18b20_check_conv_end(void);
signed int ds18b20_read_temp(unsigned char *addr);
Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И
Добавлено: Чт окт 05, 2017 14:02:21
*Trigger*
Можно было просто убрать аргумент из функций работы с датчиком (откуда он там вообще появился?). Новая библиотека устроена так: если в настройках проекта есть "#define ONE_DS18b20" (или что-то похожее, не помню), используется версия для одного датчика (функции без аргумента), а если нет - для нескольких датчиков (с аргументом).
Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И
Добавлено: Чт окт 05, 2017 20:19:08
RoboC
Изменил массивы под свою разводку, все показывает как нужно окромя сегмента А
У меня он висит на порту PС5.
Как видится, мне нужно проанализировать переменную tmp и включить сегмент
Код: Выделить всё
if(tmp&(1<<6)!= 0) PORTC.5=0;
PORTB|=0b10111000;
PORTB&=0b01000111|(~tmp);
PORTD|=0b00000111;
PORTD&=0b11111000|(~tmp);
Но что то не работает:(
DAFGE_CB

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И
Добавлено: Чт окт 05, 2017 22:31:53
*Trigger*
Во-первых, нужно перевести PC5 на выход (надеюсь, это уже сделано).
Описание алгоритма индикации -
здесь (наверное, Вы уже видели этот пост).
Далее, Ваш if может работать только в одну сторону - если хоть раз в PC5 выведется 0, 1 там уже никогда не появится. Нужно добавить else:
Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И
Добавлено: Пн окт 09, 2017 19:58:02
RoboC
Уважаемый,
*Trigger*, все-таки нужна Ваша помощь!
Я немного отвлекся, мне попалась бракованная 8ка, не хотела подключатся к программатору
*Trigger* писал(а):Во-первых, нужно перевести PC5 на выход (надеюсь, это уже сделано).
Он уже в вашей прошивку прописан как выход сразу.
Описание алгоритма индикации - здесь (наверное, Вы уже видели этот пост).
Да, сделал как описано, описание рабочее, но пока PC5 является сеткой.
Как только это один из анодов A-F , получается белиберда, вроде такого:
Не могли бы вы подсказать что я сделал не так?
Исходник и файл 8 протеуса прилагаю.
Добавлю, может кому пригодится, протеус для оригинальной прошивки из статьи.
Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И
Добавлено: Пн окт 09, 2017 21:15:58
Grey1975
Уважаемый RoboC, а не может быть проблемы в "железе"? У ИВ-18 сегменты A и F по выводам соседние, может там КЗ?
Код, даже не смотрел. Думаю Вы намного лучше меня понимаете в программировании.
Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И
Добавлено: Пн окт 09, 2017 21:37:37
*Trigger*
2
RoboC
У Вас неправильно установлена маска для PORTD. Должно быть так:
Код: Выделить всё
PORTD|=0b00000111;
PORTD&=0b11111000|(~tmp);
PD6 не используется для индикации, не нужно туда ничего записывать.
Далее, в прерывании по совпадению нужно записать лог. 1 во все биты, к которым подключены сеточные ключи. То есть так:
Ну и, наконец, приоритет операции сравнения выше, чем операции "побитовое И". Поэтому эта строка:
с точки зрения компилятора выглядит так:
Ну а 1<<6 всегда не равно 0, поэтому тут просто написано
Это явно не то, чего мы хотим.
Вероятно, дело именно в этих приоритетах. Нужно написать так:
или так:
Код: Выделить всё
if((tmp&(1<<6))!=0) PORTC.5=0;
else PORTC.5=1;
P.S. Восьмого Протеуса не имею, попробовал - не понравилось. Да и на Win XP не работает. Так что открыть Ваши файлы не смог. Я выкладывал свой проект Протеуса, правда, давно:
http://radiokot.ru/forum/viewtopic.php? ... 7#p2924327
Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И
Добавлено: Пн окт 09, 2017 21:39:27
RoboC
Я использую не ИВ-18.

Вот такой, от кассового аппарата Samsung. Их у меня шт 10
Спс , утром попробую.
Ну и, наконец, приоритет операции сравнения выше, чем операции "побитовое И".
Семен Семеныч..
Индикация работает как надо. Огромная благодарность Вам!
Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И
Добавлено: Вт окт 10, 2017 12:58:30
jmaster
Никак не могу добраться до того, чтобы в уже готовую плату лампу впаять. А, самая главная проблема, у нас пищалку диаметром 9мм найти нереально. Купил с Чипидипа HC0903A(другой не было), а, как оказалось, она без генератора

. Теперь, если заказывать с китая, опять месяц ждать. Из этого я вижу два возможных выхода:
1) В ds3231 есть выход sqw, с которого можно получить меандр частотой 4кГц, но у пищалки резонансная 3,2кГц. Будет ли она хоть как-то звучать, если задействовать этот выход?
2) В оригинальной прошивке
*Trigger*-а ведь не используется таймер OC1? Один из его выводов ведь можно заставить шимить на нужной частоте, а управлять включением и отключением выхода(т.е. почти без потерь производительности). Если да, то можно попросить
Grey1975 выложить исходник версии с ds3231, с миганием разделителей в 0.5с? Нужно перекинуть сегмент Е на вывод пищалки, ну и запустить таймер на нужную частоту. Перемычки на плате погоды не сделают(их всё равно не видно), всё равно нужно будет разместить 2 диода, чтобы подавить напряжение до 3.3В.
Кстати, по ссылкам из темы наконец-то приехали транзисторы и кольца. Транзисторы с маркировкой 14, но в магазине этого товара больше нет. Кольца с внутренним диаметром 21.85мм, платы, вроде, помещаются.
Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И
Добавлено: Вт окт 10, 2017 13:05:43
Grey1975
Я уже использовал DS3231 в качестве генератора в проекте с ИВ-21.
По этой схеме.
С кодом помог тов.
*Trigger*
Вот это:
Код: Выделить всё
#ifdef DS1307
tmp = rtc_read(0x00);
if(tmp&(1<<7)){
tmp&=~(1<<7); //OSCILLATOR ON
rtc_write(0x00, tmp);
}
rtc_write(0x07,0x13); //SQW OUT ON, 32768Hz
#endif
нужно заменить этим:
Код: Выделить всё
#ifdef DS3231
rtc_write(0x0E,0x10); //SQW OUT ON, 4096Hz
#endif
#ifdef DS1307
tmp = rtc_read(0x00);
if(tmp&(1<<7)){
tmp&=~(1<<7); //OSCILLATOR ON
rtc_write(0x00, tmp);
}
rtc_write(0x07,0x11); //SQW OUT ON, 4096Hz
#endif
Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И
Добавлено: Вт окт 10, 2017 13:14:50
jmaster
О, спасибо! Так и сделаю. А в прошивке выход на 4кГц активирован?
Добавлено after 4 minutes 43 seconds:
Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе ИВ-21
А что нужно изменить для работы ds3231 в оригинальной прошивке? Вы писали, что прошивки дла ds3231 в so8 и большом корпусе несовместимы
Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И
Добавлено: Вт окт 10, 2017 13:15:50
Grey1975
Кстати HC0903A на 4kHz работает отлично. Громко и без дребезга.
Вот тут посмотрите:
http://radiokot.ru/forum/viewtopic.php? ... &start=320 пр поводу правки прошивки.
Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И
Добавлено: Вт окт 10, 2017 13:58:44
jmaster
Впихнул пищалку, выкусив три неиспользуемых выхода индикатора, выкусив её собственные штырьки и припаяв более длинные так, чтобы провернуть до окна. Вот как-то так получается. Лампу ещё не впаивал
Мне даже платы вырезать пока некогда

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И
Добавлено: Вт окт 10, 2017 14:55:39
Grey1975
Проще было бы у пищалки "хобот" отпилить.
Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И
Добавлено: Вт окт 10, 2017 21:08:21
jmaster
Можно было, но выводы-то всё равно не нужны

, да и излучатель направлен "к зрителю" (если будет громко проще заклеить

).
Лазеров на колпачки у меня не нашлось, но есть вариант использовать разъём тюльпана такого типа (у меня жёлтый валялся):

вычистив из него средний контакт и часть пластика. Крепить можно его же гайкой, спилив лишнюю резьбу, а можно и приклеить, спилив резьбу полностью. Всё равно такие разъёмы у меня быстро разбивались и переставали работать, а так хоть какое-то применение

Правда придётся плату с преобразователем ставить в наружной части кольца, а датчик температуры ставить на плату основания(В любом случае там он мне больше нравится

). На датчик, кстати, тоже можно такой "колпачок" надеть, но уже точно на клей
Попробовал кольца просверлить - сверлятся без проблем, но для начального сверления нужно хорошо заточенное сверло, желательно около 2мм, затем уже рассверливать тем, чем надо. Перед сверлением обязательно кернить. В качестве опоры в кольцо подошёл кусок 20 пвх трубы.
Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И
Добавлено: Вт окт 10, 2017 23:03:59
Grey1975
Датчик температуры я тоже вынес на плату - основу.
А "торцы" сделал так:

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И
Добавлено: Ср окт 11, 2017 08:40:04
RoboC
2
*Trigger*
По вашей ссылке на версию 1.13
Описание Ф/П MY_DS18B20.h
Код: Выделить всё
unsigned char ds18b20_select(unsigned char *addr);
unsigned char ds18b20_read_spd(unsigned char *addr);
signed int ds18b20_temperature(unsigned char *addr);
unsigned char ds18b20_init(unsigned char *addr,signed char temp_low,signed char temp_high,
unsigned char resolution);
unsigned char ds18b20_start_conv(unsigned char *addr);
unsigned char ds18b20_check_conv_end(void);
signed int ds18b20_read_temp(unsigned char *addr);
в самой библиотеке присутствуют Ф/П
Код: Выделить всё
unsigned char ds18b20_init(DS18b20_FUNC_PARAM1 signed char temp_low,signed char temp_high,
unsigned char resolution)
unsigned char ds18b20_start_conv(DS18b20_FUNC_PARAM)
...
так же не описаная в .h , но вызываемая в теле программы
Код: Выделить всё
unsigned char ds18b20_simple_init(DS18b20_FUNC_PARAM1 unsigned char resolution)
определения для
DS18b20_FUNC_PARAM и DS18b20_FUNC_PARAM1 я не нашел.
Логично что:
DS18b20_FUNC_PARAM - unsigned char *addr
DS18b20_FUNC_PARAM1 - unsigned char *addr,
Но в зависимости от кол-ва датчиков одна и та же функция может вызываться с параметром и без.
Это какие то стандартные определения для CV?
UPD
Правильный файлик
MY_DS18B20.h найден в версии 1.14, несколькими страницами позже.
Похоже, что он у вас лежит в папочке INC и не попал в архив с исходником 1.13
1.14 компилируется нормально..
Вопрос снимается.