Например TDA7294

Форум РадиоКот • Просмотр темы - Часы на газоразрядных индикаторах
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн июл 28, 2025 01:39:47

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 48898 ]     ... , , , 1927, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Часы на газоразрядных индикаторах
СообщениеДобавлено: Пн июн 06, 2016 06:48:56 
Мудрый кот
Аватар пользователя

Карма: 27
Рейтинг сообщений: 656
Зарегистрирован: Ср апр 04, 2012 09:55:53
Сообщений: 1789
Откуда: Северодонецк
Рейтинг сообщения: 0
vvsector85 писал(а):
Если мой "велосипед" кому-то может быть полезен, могу выложить печатки, исходник и прошивки.

Конечно выкладывайте. Всегда найдется человек, которому это будет интересно.

Только вы пропустили еще одно важное слово - " схему". :tea:

_________________
У того, кто делает — получается редко. У того, кто не делает — не получается никогда.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Часы на газоразрядных индикаторах
СообщениеДобавлено: Пн июн 06, 2016 08:18:25 
Грызет канифоль
Аватар пользователя

Карма: 1
Рейтинг сообщений: 46
Зарегистрирован: Ср июл 08, 2015 22:36:31
Сообщений: 282
Откуда: Харьков, Украина
Рейтинг сообщения: 0
Схему придется нарисовать.
А на счет запрещения прерываний - обнаружился мелкий глюк - при опросе 1307 едва заметно блымает одна из цифр - запрещение нарушает развертку. Не соображу, как это побороть. Может, частоту развертки повысить? Сейчас около 200Гц.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Часы на газоразрядных индикаторах
СообщениеДобавлено: Пн июн 06, 2016 08:46:18 
Друг Кота
Аватар пользователя

Карма: 81
Рейтинг сообщений: 1377
Зарегистрирован: Пн май 11, 2009 14:15:00
Сообщений: 3059
Откуда: СПб
Рейтинг сообщения: 2
Медали: 1
Мявтор 3-й степени (1)
:facepalm:
У Вас термодатчик по I2C подключен, что ли? Шина I2C синхронная, поэтому на время работы с ней прерывания можно не выключать, в отличие от асинхронной 1Wire, чувствительной к таймингам сигналов.

_________________
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Часы на газоразрядных индикаторах
СообщениеДобавлено: Пн июн 06, 2016 08:46:40 
Потрогал лапой паяльник
Аватар пользователя

Карма: 5
Рейтинг сообщений: 80
Зарегистрирован: Вс фев 03, 2013 00:47:59
Сообщений: 349
Откуда: Киев
Рейтинг сообщения: 0
...может выключать анодные ключи все?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Часы на газоразрядных индикаторах
СообщениеДобавлено: Пн июн 06, 2016 08:56:42 
Держит паяльник хвостом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 43
Зарегистрирован: Вс май 23, 2010 13:55:42
Сообщений: 908
Откуда: Украина, Александрия
Рейтинг сообщения: 0
vvsector85 писал(а):
А на счет запрещения прерываний - обнаружился мелкий глюк - при опросе 1307 едва заметно блымает одна из цифр - запрещение нарушает развертку. Не соображу, как это побороть. Может, частоту развертки повысить? Сейчас около 200Гц.

Это не поможет, при запрещении прерываний неизбежен срыв динамической индикации особенно заметен при различных эфектах смены цифр. Да и вообще запрещать прерывания плохая затея советую посмотреть в сторону подключения ds18b20 через uart, я так делаю ничего не запрещаю и проблем нет.

_________________
«И всё-таки она вертится!»


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Часы на газоразрядных индикаторах
СообщениеДобавлено: Пн июн 06, 2016 08:57:59 
Мудрый кот
Аватар пользователя

Карма: 27
Рейтинг сообщений: 656
Зарегистрирован: Ср апр 04, 2012 09:55:53
Сообщений: 1789
Откуда: Северодонецк
Рейтинг сообщения: 0
Вы все равно собирались выкладывать исходники. Чтоб не гадать как у Вас все сделано.
Блымает скорее опрос 18b20, если вы конечно не запретили прерывания и при опросе 1307.
Обычно,я прячу опрос датчика в задержку между включением следующей цифры,когда все лампы потушены. 200 тиков таймера идёт индикация 50 задержка. Частота ~122Гц.

_________________
У того, кто делает — получается редко. У того, кто не делает — не получается никогда.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Часы на газоразрядных индикаторах
СообщениеДобавлено: Пн июн 06, 2016 11:29:05 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1395
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7306
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
В 1-wire критичен только тайм-слот. Который длится всего 120 мкс максимум. Вот на именно это время и следует запрещать прерывания. Все остальное время задержки совершенно не критичны.

А еще тайм-слоты можно делать аппаратно. Используя, например, таймер с compare-capture регистрами, UART-ом или, даже, SPI. Тогда вообще никаких задержек не будет.

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Часы на газоразрядных индикаторах
СообщениеДобавлено: Пн июн 06, 2016 11:32:15 
Вымогатель припоя
Аватар пользователя

Карма: 7
Рейтинг сообщений: 58
Зарегистрирован: Чт янв 20, 2011 09:07:08
Сообщений: 674
Откуда: Пермь
Рейтинг сообщения: 0
vvsector85 писал(а):
Схему придется нарисовать.
А на счет запрещения прерываний - обнаружился мелкий глюк - при опросе 1307 едва заметно блымает одна из цифр - запрещение нарушает развертку. Не соображу, как это побороть. Может, частоту развертки повысить? Сейчас около 200Гц.

Точно такая же фигня.
Думаю даже от динамической индикации отказаться.

_________________
Никакая контра не уйдёт от нас


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Часы на газоразрядных индикаторах
СообщениеДобавлено: Пн июн 06, 2016 11:37:47 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1395
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7306
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Странно, в моём термометре тоже 1-wire термометр и динамическая индикация. И ничего не блымкает.

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Часы на газоразрядных индикаторах
СообщениеДобавлено: Пн июн 06, 2016 11:41:56 
Грызет канифоль
Аватар пользователя

Карма: 1
Рейтинг сообщений: 46
Зарегистрирован: Ср июл 08, 2015 22:36:31
Сообщений: 282
Откуда: Харьков, Украина
Рейтинг сообщения: 0
Я запретил прерывания и при опросе 1307. Наверное, придется разрешить.
18В20 подключен по I2c, по крайней мере, библиотека так называется, но после запрета прерываний, глюки с неправильными данными прошли.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Часы на газоразрядных индикаторах
СообщениеДобавлено: Пн июн 06, 2016 12:00:51 
Друг Кота
Аватар пользователя

Карма: 58
Рейтинг сообщений: 389
Зарегистрирован: Чт мар 20, 2008 01:06:40
Сообщений: 3271
Откуда: Севастополь
Рейтинг сообщения: 0
А что мешает использовать любой другой датчик ?
Вам же не цыплят выращивать, по мне, так и аналоговый (с заводской калибровкой) вполне подойдет.
LM35, напр.

_________________
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Часы на газоразрядных индикаторах
СообщениеДобавлено: Пн июн 06, 2016 12:19:31 
Грызет канифоль
Аватар пользователя

Карма: 1
Рейтинг сообщений: 46
Зарегистрирован: Ср июл 08, 2015 22:36:31
Сообщений: 282
Откуда: Харьков, Украина
Рейтинг сообщения: 0
Блымание при опросе 18В20, в принципе, не проблема, т. к. опрос происходит только по нажатию кнопки или раз в 2 минуты в режиме с индикацией температуры.
Спойлер
Код:
// Инициализирую DS18B20
void DS18B20_init (void)
{
   if ((DS18B20_PIN & (1 << DS18B20)) == 0) ds18b20_err++; // Проверяю КЗ линии данных
   DS18B20_PORT &= ~(1 << DS18B20); // Устанавливаю низкий уровень
   DS18B20_DDR |= (1 << DS18B20);
   _delay_us(490);
   DS18B20_DDR &= ~(1 << DS18B20);
   _delay_us(68);
   if ((DS18B20_PIN & (1 << DS18B20)) > 0) ds18b20_err++; // Ловлю импульс присутствия датчика
   // Если датчик не подключен, Presense_errors увеличиваю на 1
   _delay_us(422);
}


// Функция чтения байта из DS18B20
uint8_t DS18B20_read (void)
{
   uint8_t dat = 0;
   for (uint8_t i=0; i<8; i++)
   {
      DS18B20_DDR |= (1 << DS18B20);
      _delay_us(2);
      DS18B20_DDR &= ~(1 << DS18B20);
      _delay_us(4);
      dat = dat >> 1;
      if (DS18B20_PIN & (1 << DS18B20))
      {
         dat |= 0x80;
      }
      _delay_us(62);
   }
   return dat;
}


// Функция чтения "блокнота" из DS18B20
void DS18B20_read_scratchpad (void)
{
   for (uint8_t i=0; i<9; i++)   // Считываю 9 байт данных, или так называемый "блокнот"
   {
      DS_scratchpad[i] = DS18B20_read();
   }
}


// Функция записи байта в DS18B20
void DS18B20_write (uint8_t dat)
{
   for (uint8_t i=0; i<8; i++)
   {
      DS18B20_DDR |= (1 << DS18B20);
      _delay_us(2);
      if (dat & 0x01)
      {
         DS18B20_DDR &= ~(1 << DS18B20);
      }
      else
      {
         DS18B20_DDR |= (1 << DS18B20);
      }
      dat = dat >> 1;
      _delay_us(62);
      DS18B20_DDR &= ~(1 << DS18B20);
      _delay_us(2);
   }
}


/////////
int curr_temp()
{
   cli();
   DS18B20_init();         // Инициализирую DS18B20
   DS18B20_write(0xCC);   // Пропускаю проверку серийного номера DS18B20
   DS18B20_write(0x44);   // Запускаю температурное преобразование
   sei();
   _delay_ms(500);      // Жду окончания температурного преобразования
   cli();
   DS18B20_init();         // Инициализирую DS18B20
   DS18B20_write(0xCC);   // Пропускаю проверку серийного номера DS18B20
   DS18B20_write(0xBE);   // Команда на чтение содержимого ОЗУ
   DS18B20_read_scratchpad();   // Считываю "блокнот"
   sei();
   
   Temperature=((DS_scratchpad[1]<<8)+DS_scratchpad[0])/1.60;
   if (Temperature < 0)
   {
      Temperature =-Temperature;      // Перевожу отрицательное число в положительное
      szero=1;
   }
   else
   // Положительная температура
   {
      szero=0;
   }
   return Temperature;
}


Вот код по 18В20


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Часы на газоразрядных индикаторах
СообщениеДобавлено: Пн июн 06, 2016 12:31:43 
Грызет канифоль
Аватар пользователя

Карма: 1
Рейтинг сообщений: 46
Зарегистрирован: Ср июл 08, 2015 22:36:31
Сообщений: 282
Откуда: Харьков, Украина
Рейтинг сообщения: 0
ну так у меня перед задержкой прерывания разрешаются:
Код:
sei();
_delay_ms(500);      // Жду окончания температурного преобразования
cli();

Или задержку можно вовсе убрать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Часы на газоразрядных индикаторах
СообщениеДобавлено: Пн июн 06, 2016 12:44:42 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 977
Зарегистрирован: Ср май 28, 2008 00:32:54
Сообщений: 7615
Откуда: г. Россия
Рейтинг сообщения: 0
vvsector85 писал(а):
Схему придется нарисовать.

Вот ещё один котейко который схем не рисует.
:beer: :beer: :beer:
:beer: :beer:
:beer:

_________________
Очень нравится неон
:) :)) :))) :)) :)
Мой проектик часиков с термометром на любых 6ти газоразрядных лампах + куча функций
Ещё один - попроще
:) :)) :))) :)) :)
Светодиодный проект
:))) :)) :) :)) :)))

My video on youtube nic SLvik78


Последний раз редактировалось SLvik Пн июн 06, 2016 17:12:36, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Часы на газоразрядных индикаторах
СообщениеДобавлено: Пн июн 06, 2016 12:46:51 
Друг Кота
Аватар пользователя

Карма: 58
Рейтинг сообщений: 389
Зарегистрирован: Чт мар 20, 2008 01:06:40
Сообщений: 3271
Откуда: Севастополь
Рейтинг сообщения: 0
vvsector85
да, сорри, увидел :)

_________________
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Часы на газоразрядных индикаторах
СообщениеДобавлено: Пн июн 06, 2016 14:28:54 
Грызет канифоль
Аватар пользователя

Карма: 1
Рейтинг сообщений: 46
Зарегистрирован: Ср июл 08, 2015 22:36:31
Сообщений: 282
Откуда: Харьков, Украина
Рейтинг сообщения: 7
В общем, убрал запрет на прерывание при опросе 1307, а на 18В20 оставил. Пока все нормально. Выглядит вот так:
Изображение
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Часы на газоразрядных индикаторах
СообщениеДобавлено: Пн июн 06, 2016 15:21:06 
Грызет канифоль
Аватар пользователя

Карма: 6
Рейтинг сообщений: 82
Зарегистрирован: Чт сен 24, 2015 17:46:26
Сообщений: 275
Откуда: Обираловка, МО
Рейтинг сообщения: 0
vvsector85, только не говорите, что у Вас ещё и работа с квадратной шиной программно реализована ногодрыгом...
а 18b20 - это 1wire, а не i2c.

_________________
Errare humanum est


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Часы на газоразрядных индикаторах
СообщениеДобавлено: Пн июн 06, 2016 15:33:35 
Грызет канифоль
Аватар пользователя

Карма: 1
Рейтинг сообщений: 46
Зарегистрирован: Ср июл 08, 2015 22:36:31
Сообщений: 282
Откуда: Харьков, Украина
Рейтинг сообщения: 0
Судя по всему - да. Я взял за основу проект BARSa, для I2C использовал ту же библиотеку, что у него.

Вот она:
Спойлер
Код:
#include  <avr/io.h>
#include  <util/delay.h>
#include "stdio.h"
#include "stdlib.h"
#include "I2c.h"

#define I2C_SDA_PIN            PD7                         //линия SDA
#define I2C_SCL_PIN            PB0                         //линия SCL

#define I2C_SDA_PORT_READ           PIND                        //порт входа

#define I2C_SDA_PORT_DIR           DDRD                        //порт направления
#define I2C_SCL_PORT_DIR           DDRB                        //порт направления
#define I2C_SDA_PORT          PORTD                       //порт выхода
#define I2C_SCL_PORT          PORTB                       //порт выхода

#define SET(reg, bit) (reg |= (1 << bit))
#define CLR(reg, bit) (reg &= ~(1 << bit))
#define GETBIT(byte, bit) ((byte >> bit) & 1)
#define SETBIT(byte, bit) (byte | (1 << bit))

#define I2C_SDA_LOW (SET(I2C_SDA_PORT_DIR, I2C_SDA_PIN))
#define I2C_SDA_HIGH (CLR(I2C_SDA_PORT_DIR, I2C_SDA_PIN))
#define I2C_SCL_LOW (SET(I2C_SCL_PORT_DIR, I2C_SCL_PIN))
#define I2C_SCL_HIGH (CLR(I2C_SCL_PORT_DIR, I2C_SCL_PIN))

#define I2C_SDA_VALUE (GETBIT(I2C_SDA_PORT_READ, I2C_SDA_PIN))

//#define _delay_us(n)  __delay_cycles(8*(unsigned short)n)


void i2c_init() {
  CLR(I2C_SDA_PORT, I2C_SDA_PIN);
  CLR(I2C_SCL_PORT, I2C_SCL_PIN);
  I2C_SDA_HIGH;
  I2C_SCL_HIGH;
}

void i2c_start() {
  I2C_SDA_LOW;
  _delay_us(I2C_DELAY);
}

void i2c_start_rep() {
  I2C_SCL_LOW;
  _delay_us(I2C_DELAY);
  I2C_SDA_HIGH;
  _delay_us(I2C_DELAY);
  I2C_SCL_HIGH;
  _delay_us(I2C_DELAY);
  I2C_SDA_LOW;
  _delay_us(I2C_DELAY);
}

void i2c_stop() {
  I2C_SCL_LOW;
  I2C_SDA_LOW;
  _delay_us(I2C_DELAY);
  I2C_SCL_HIGH;
  _delay_us(I2C_DELAY);
  I2C_SDA_HIGH;
  _delay_us(I2C_DELAY);
}

signed char  i2c_write(unsigned char  byte) {
  unsigned char  i;
  for(i = 0; i < 8; i ++) {
    I2C_SCL_LOW;
    if(GETBIT(byte, 7)) {
      I2C_SDA_HIGH;
    } else {
      I2C_SDA_LOW;
    }
    _delay_us(I2C_DELAY);
    I2C_SCL_HIGH;
    _delay_us(I2C_DELAY);
    byte <<= 1;
  }
  I2C_SCL_LOW;
  I2C_SDA_HIGH;
  _delay_us(I2C_DELAY);
  I2C_SCL_HIGH;
  _delay_us(I2C_DELAY);
  if(I2C_SDA_VALUE == 1) {
    return -1;
  }
  return 0;
}

unsigned char  i2c_read(unsigned char  ack) {
  I2C_SCL_LOW;
  I2C_SDA_HIGH;
  _delay_us(I2C_DELAY);
  I2C_SCL_HIGH;
  _delay_us(I2C_DELAY);
  unsigned char  i, result = I2C_SDA_VALUE;
  for(i = 0; i < 7; i ++) {
    I2C_SCL_LOW;
    _delay_us(I2C_DELAY);
    I2C_SCL_HIGH;
    _delay_us(I2C_DELAY);
    result <<= 1;
    if(I2C_SDA_VALUE == 1) {
      result |= 1;
    }
  }
  I2C_SCL_LOW;
  if(ack == I2C_ACK) {
    I2C_SDA_LOW;
  } else {
    I2C_SDA_HIGH;
  }
  _delay_us(I2C_DELAY);
  I2C_SCL_HIGH;
  _delay_us(I2C_DELAY);
  return result;
}

void i2c_address(unsigned char address, unsigned char  rw, unsigned char  wait) {
  if(wait == I2C_WAIT) {
    while(i2c_write((address << 1) + rw) == -1) {
      i2c_stop();
      i2c_start();
    }
  } else {
    i2c_write((address << 1) + rw);
  }
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Часы на газоразрядных индикаторах
СообщениеДобавлено: Пн июн 06, 2016 22:00:32 
Грызет канифоль
Аватар пользователя

Карма: 6
Рейтинг сообщений: 82
Зарегистрирован: Чт сен 24, 2015 17:46:26
Сообщений: 275
Откуда: Обираловка, МО
Рейтинг сообщения: 0
Ндя... в плане портабельности - это хорошо, можно и на attiny запустить, но в меге есть аппаратный i2c всё сильно бы упростилось и кода меньше.
Ну да ладно... Выше Вам правильно сказали, строго выдерживать тайминги i2c нет необходимости, потому что шина синхронная, прерывания можно не запрещать и нічого не буде блимати.

_________________
Errare humanum est


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Часы на газоразрядных индикаторах
СообщениеДобавлено: Вт июн 07, 2016 10:40:31 
Это не хвост, это антенна
Аватар пользователя

Карма: 6
Рейтинг сообщений: 68
Зарегистрирован: Вс апр 19, 2009 17:20:22
Сообщений: 1303
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Рейтинг сообщения: 0
Всем привет :)
Народ, может есть у кого чертеж отверстия для лицевой панели корпуса под ИН-17? А то не представляю, как измерить изгиб на торцах лампы чтобы корпус правильно нарисовать.

_________________
Опыт растет прямо пропорционально выведенному из строя оборудованию...


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 48898 ]     ... , , , 1927, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 240


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y