Миниатюрные часы на вакуумно-люминисцентном индикаторе ИВ-21

Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И

Сообщение *Trigger* »

Я переписывал библиотеку для DS18b20 из комплекта CVAVR, чтобы уменьшить объём используемой памяти и устранить конфликт библиотеки с включенными прерываниями. В архиве с проектом есть файлы my_ds18b20.h и my_ds18b20.lib. Если они не подхватились компилятором из папки с проектом (что очень странно), их нужно поместить в папки CVAVR: папка/установки/inc и папка/установки/lib соответственно.
Последний раз редактировалось *Trigger* Ср окт 04, 2017 20:55:22, всего редактировалось 1 раз.
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Аватара пользователя
RoboC
Мудрый кот
Сообщения: 1795
Зарегистрирован: Ср апр 04, 2012 09:55:53
Откуда: Северодонецк
Контактная информация:

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И

Сообщение RoboC »

Это я сделал сразу.
Может это быть связано с тем,то у меня студия стоит не 6я , а 4я?

Изображение

Не хотелось Вас напрягать, мне то нудно было просто переставить ножки под плату :( Хотел все сам.

Так же не понятный момент в

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

switch(menu_item){
есть

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

      case 0:
        get_date();
        disp_date(1);
        delay_ms(2000);
        while(OK);
        menu_item=menu_NULL;
        get_time();
        disp_time(2);
        while(shift);
      break;
А так же есть

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

      case menu_NULL:
      ....
где menu_NULL определено дефайном как 0;
соответственно компилятор на это ругается...
У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И

Сообщение *Trigger* »

RoboC писал(а):студия стоит не 6я , а 4я?

Если Вы про AVR Studio, так у меня она вообще не стоит.
RoboC писал(а):соответственно компилятор на это ругается...
Я не знаю, чью прошивку Вы взяли, в моей оригинальной никакого "case 0:" нет, везде используются дефайны. Также не понятно, почему у функций работы с термодатчиком есть аргумент "0" - у меня его изначально не было, т.к. использовалась опция новой библиотеки для работы с одним датчиком (экономия памяти).

Если бы CVAVR не видел библиотеки, ошибка была бы ещё здесь:

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

ds18b20_simple_init(DS18B20_12BIT_RES);
ds18b20_start_conv();
Скорее всего, эта ошибка - следствие какой-то другой, похоже, связанной с расстановкой скобок {}. Попробуйте исправить ошибку в скобках.
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Аватара пользователя
RoboC
Мудрый кот
Сообщения: 1795
Зарегистрирован: Ср апр 04, 2012 09:55:53
Откуда: Северодонецк
Контактная информация:

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И

Сообщение 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);
У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И

Сообщение *Trigger* »

Можно было просто убрать аргумент из функций работы с датчиком (откуда он там вообще появился?). Новая библиотека устроена так: если в настройках проекта есть "#define ONE_DS18b20" (или что-то похожее, не помню), используется версия для одного датчика (функции без аргумента), а если нет - для нескольких датчиков (с аргументом).
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Аватара пользователя
RoboC
Мудрый кот
Сообщения: 1795
Зарегистрирован: Ср апр 04, 2012 09:55:53
Откуда: Северодонецк
Контактная информация:

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И

Сообщение RoboC »

Изменил массивы под свою разводку, все показывает как нужно окромя сегмента А
У меня он висит на порту PС5.

Как видится, мне нужно проанализировать переменную tmp и включить сегмент

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

  if(tmp&(1<<6)!= 0) 	PORTC.5=0;
  PORTB|=0b10111000;
  PORTB&=0b01000111|(~tmp);
  PORTD|=0b00000111;
  PORTD&=0b11111000|(~tmp);
Но что то не работает:(

DAFGE_CB

Изображение
У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И

Сообщение *Trigger* »

Во-первых, нужно перевести PC5 на выход (надеюсь, это уже сделано).

Описание алгоритма индикации - здесь (наверное, Вы уже видели этот пост).

Далее, Ваш if может работать только в одну сторону - если хоть раз в PC5 выведется 0, 1 там уже никогда не появится. Нужно добавить else:

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

if(tmp&(1<<6)) PORTC.5=0;
else PORTC.5=1;
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Аватара пользователя
RoboC
Мудрый кот
Сообщения: 1795
Зарегистрирован: Ср апр 04, 2012 09:55:53
Откуда: Северодонецк
Контактная информация:

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И

Сообщение RoboC »

Уважаемый, *Trigger*, все-таки нужна Ваша помощь!
Я немного отвлекся, мне попалась бракованная 8ка, не хотела подключатся к программатору :(
*Trigger* писал(а):Во-первых, нужно перевести PC5 на выход (надеюсь, это уже сделано).
Он уже в вашей прошивку прописан как выход сразу.
Описание алгоритма индикации - здесь (наверное, Вы уже видели этот пост).
Да, сделал как описано, описание рабочее, но пока PC5 является сеткой.
Как только это один из анодов A-F , получается белиберда, вроде такого:
Изображение

Не могли бы вы подсказать что я сделал не так?
Исходник и файл 8 протеуса прилагаю.

Добавлю, может кому пригодится, протеус для оригинальной прошивки из статьи.
Вложения
trigger_orig.7z
Протеус 8 для прошивки из статьи
(150.69 КБ) 240 скачиваний
trigger.7z
моя исправленная прошивка и протеус для платы.
(151.53 КБ) 308 скачиваний
У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
Аватара пользователя
Grey1975
Опытный кот
Сообщения: 854
Зарегистрирован: Ср май 06, 2015 01:32:36
Откуда: Москва

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И

Сообщение Grey1975 »

Уважаемый RoboC, а не может быть проблемы в "железе"? У ИВ-18 сегменты A и F по выводам соседние, может там КЗ?

Код, даже не смотрел. Думаю Вы намного лучше меня понимаете в программировании.
Изображение Инь и Янь - без выпендрежа.
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И

Сообщение *Trigger* »

2 RoboC

У Вас неправильно установлена маска для PORTD. Должно быть так:

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

  PORTD|=0b00000111;
  PORTD&=0b11111000|(~tmp);
PD6 не используется для индикации, не нужно туда ничего записывать.

Далее, в прерывании по совпадению нужно записать лог. 1 во все биты, к которым подключены сеточные ключи. То есть так:

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

PORTB|=0b01000111;
PORTD|=0b11111000;
Ну и, наконец, приоритет операции сравнения выше, чем операции "побитовое И". Поэтому эта строка:

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

  if(tmp&(1<<6)!= 0) PORTC.5=0;  
с точки зрения компилятора выглядит так:

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

  if(tmp&((1<<6)!= 0)) PORTC.5=0;  
Ну а 1<<6 всегда не равно 0, поэтому тут просто написано

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

  if(tmp&1) PORTC.5=0;  
Это явно не то, чего мы хотим.
Вероятно, дело именно в этих приоритетах. Нужно написать так:

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

  if(tmp&(1<<6)) PORTC.5=0;  
  else PORTC.5=1; 
или так:

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

  if((tmp&(1<<6))!=0) PORTC.5=0;  
  else PORTC.5=1; 
P.S. Восьмого Протеуса не имею, попробовал - не понравилось. Да и на Win XP не работает. Так что открыть Ваши файлы не смог. Я выкладывал свой проект Протеуса, правда, давно: http://radiokot.ru/forum/viewtopic.php? ... 7#p2924327
Последний раз редактировалось *Trigger* Пн окт 09, 2017 21:42:24, всего редактировалось 2 раза.
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Аватара пользователя
RoboC
Мудрый кот
Сообщения: 1795
Зарегистрирован: Ср апр 04, 2012 09:55:53
Откуда: Северодонецк
Контактная информация:

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И

Сообщение RoboC »

Я использую не ИВ-18.
Изображение
Вот такой, от кассового аппарата Samsung. Их у меня шт 10 :)

Спс , утром попробую.
Ну и, наконец, приоритет операции сравнения выше, чем операции "побитовое И".
Семен Семеныч.. :facepalm:
Индикация работает как надо. Огромная благодарность Вам!
У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
jmaster
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Пн май 06, 2013 16:11:59

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И

Сообщение jmaster »

Никак не могу добраться до того, чтобы в уже готовую плату лампу впаять. А, самая главная проблема, у нас пищалку диаметром 9мм найти нереально. Купил с Чипидипа HC0903A(другой не было), а, как оказалось, она без генератора :facepalm:. Теперь, если заказывать с китая, опять месяц ждать. Из этого я вижу два возможных выхода:
1) В ds3231 есть выход sqw, с которого можно получить меандр частотой 4кГц, но у пищалки резонансная 3,2кГц. Будет ли она хоть как-то звучать, если задействовать этот выход?
2) В оригинальной прошивке *Trigger*-а ведь не используется таймер OC1? Один из его выводов ведь можно заставить шимить на нужной частоте, а управлять включением и отключением выхода(т.е. почти без потерь производительности). Если да, то можно попросить Grey1975 выложить исходник версии с ds3231, с миганием разделителей в 0.5с? Нужно перекинуть сегмент Е на вывод пищалки, ну и запустить таймер на нужную частоту. Перемычки на плате погоды не сделают(их всё равно не видно), всё равно нужно будет разместить 2 диода, чтобы подавить напряжение до 3.3В.

Кстати, по ссылкам из темы наконец-то приехали транзисторы и кольца. Транзисторы с маркировкой 14, но в магазине этого товара больше нет. Кольца с внутренним диаметром 21.85мм, платы, вроде, помещаются.
Последний раз редактировалось jmaster Вт окт 10, 2017 13:08:42, всего редактировалось 1 раз.
Аватара пользователя
Grey1975
Опытный кот
Сообщения: 854
Зарегистрирован: Ср май 06, 2015 01:32:36
Откуда: Москва

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И

Сообщение 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
Последний раз редактировалось Grey1975 Вт окт 10, 2017 13:12:43, всего редактировалось 1 раз.
Изображение Инь и Янь - без выпендрежа.
jmaster
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Пн май 06, 2013 16:11:59

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И

Сообщение jmaster »

О, спасибо! Так и сделаю. А в прошивке выход на 4кГц активирован?

Добавлено after 4 minutes 43 seconds:
Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе ИВ-21
А что нужно изменить для работы ds3231 в оригинальной прошивке? Вы писали, что прошивки дла ds3231 в so8 и большом корпусе несовместимы
Аватара пользователя
Grey1975
Опытный кот
Сообщения: 854
Зарегистрирован: Ср май 06, 2015 01:32:36
Откуда: Москва

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И

Сообщение Grey1975 »

Кстати HC0903A на 4kHz работает отлично. Громко и без дребезга.

Вот тут посмотрите: http://radiokot.ru/forum/viewtopic.php? ... &start=320 пр поводу правки прошивки.
Изображение Инь и Янь - без выпендрежа.
jmaster
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Пн май 06, 2013 16:11:59

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И

Сообщение jmaster »

Впихнул пищалку, выкусив три неиспользуемых выхода индикатора, выкусив её собственные штырьки и припаяв более длинные так, чтобы провернуть до окна. Вот как-то так получается. Лампу ещё не впаивал
Мне даже платы вырезать пока некогда :(
Изображение
Аватара пользователя
Grey1975
Опытный кот
Сообщения: 854
Зарегистрирован: Ср май 06, 2015 01:32:36
Откуда: Москва

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И

Сообщение Grey1975 »

Проще было бы у пищалки "хобот" отпилить.
Изображение Инь и Янь - без выпендрежа.
jmaster
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Пн май 06, 2013 16:11:59

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И

Сообщение jmaster »

Можно было, но выводы-то всё равно не нужны :), да и излучатель направлен "к зрителю" (если будет громко проще заклеить :D ).

Лазеров на колпачки у меня не нашлось, но есть вариант использовать разъём тюльпана такого типа (у меня жёлтый валялся):
Изображение
вычистив из него средний контакт и часть пластика. Крепить можно его же гайкой, спилив лишнюю резьбу, а можно и приклеить, спилив резьбу полностью. Всё равно такие разъёмы у меня быстро разбивались и переставали работать, а так хоть какое-то применение :)
Правда придётся плату с преобразователем ставить в наружной части кольца, а датчик температуры ставить на плату основания(В любом случае там он мне больше нравится :) ). На датчик, кстати, тоже можно такой "колпачок" надеть, но уже точно на клей

Попробовал кольца просверлить - сверлятся без проблем, но для начального сверления нужно хорошо заточенное сверло, желательно около 2мм, затем уже рассверливать тем, чем надо. Перед сверлением обязательно кернить. В качестве опоры в кольцо подошёл кусок 20 пвх трубы.
Аватара пользователя
Grey1975
Опытный кот
Сообщения: 854
Зарегистрирован: Ср май 06, 2015 01:32:36
Откуда: Москва

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И

Сообщение Grey1975 »

Датчик температуры я тоже вынес на плату - основу.

Изображение

А "торцы" сделал так:

Изображение
Изображение Инь и Янь - без выпендрежа.
Аватара пользователя
RoboC
Мудрый кот
Сообщения: 1795
Зарегистрирован: Ср апр 04, 2012 09:55:53
Откуда: Северодонецк
Контактная информация:

Re: Миниатюрные часы на вакуумно-люминисцентном индикаторе И

Сообщение 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 компилируется нормально..

Вопрос снимается.
У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
Ответить

Вернуться в «Статьи»