76

Re: мелкие электронные полезняшки

Мда, трудно будет собирать )
Минимальный диаметр 7см...
http://my.jetscreenshot.com/1474/m_20120501-d5i7-95kb.jpg


УАЗ. Всегда ранен, но не убит. Теперь с кондюком. IP-телефония (asterisk), CRM, звонок с сайта: siplife.ru
79002953844

77

Re: мелкие электронные полезняшки

Вопрос, как будет народу удобнее в плане включения?

1) Лишний провод на зажигание, прибор включается когда его включают
2) Меньше на один провод, прибор включается при заведенном двиге сам (определяя напряжение), выключается через минуту после глушения, включается на минуту по кнопке (любой)?


УАЗ. Всегда ранен, но не убит. Теперь с кондюком. IP-телефония (asterisk), CRM, звонок с сайта: siplife.ru
79002953844

78

Re: мелкие электронные полезняшки

Савелий,  второй вариант поинтересней


+7938408.... абонент заблокирован!. Авто проводку, перетяжку руля и сидений... Не делаю.

79

Re: мелкие электронные полезняшки

shaman, доработал. Спит через 30 сек, если бортовое ниже 13. Любая кнопка "просыпает" еще на 30 сек.
Вживую собрать опять руки не дошли...


УАЗ. Всегда ранен, но не убит. Теперь с кондюком. IP-телефония (asterisk), CRM, звонок с сайта: siplife.ru
79002953844

80

Re: мелкие электронные полезняшки

Савелий пишет:

если бортовое ниже 13

Ставвь 12, так он на холостых в пробке уснёт (вентиляторы, фары)...


Любые решения для мобильного интернета LTE, 3G (YOTA, МТС, Биилайн, Мегафон, Ростелеком).
Антенно-фидерные конструкции под заказ. 918-254-777-5 Игорь.

81

Re: мелкие электронные полезняшки

igor4737, хороший аккум 12 выдаст..
тут нюанс при реализации автовключения-отключения.. При низком бортовом прибор 30сек будет сигнализировать что непорядок, потом тупо уснет.. Оно надо?


УАЗ. Всегда ранен, но не убит. Теперь с кондюком. IP-телефония (asterisk), CRM, звонок с сайта: siplife.ru
79002953844

82

Re: мелкие электронные полезняшки

У кого можно взять на выходные оссицилограф, желательно максимально переносной? Возможно, есть вариант считать тахометр вообще без подключения куда либо..


УАЗ. Всегда ранен, но не убит. Теперь с кондюком. IP-телефония (asterisk), CRM, звонок с сайта: siplife.ru
79002953844

83

Re: мелкие электронные полезняшки

Савелий, пинзес!06:25:28! default/yikes Када ты спишь!? default/lol

84

Re: мелкие электронные полезняшки

Савелий, Пульсация напряжения с генератора? Не на всех машинах она есть.


Ремонт лебёдок, радиостанций ,монтаж радиосетей, антенно фидерных устройств. 8 961 858 83 7шесть.

85

Re: мелкие электронные полезняшки

Савелий, Моя нива, аккум старый, но вполне, стою в пробке, холостые 950, напруга 12.4 и тут включаются вентиляторы (по условиям задачи ближний включен).


Любые решения для мобильного интернета LTE, 3G (YOTA, МТС, Биилайн, Мегафон, Ростелеком).
Антенно-фидерные конструкции под заказ. 918-254-777-5 Игорь.

86

Re: мелкие электронные полезняшки

igor4737, тебе отключим автоматику, тебе нельзя


УАЗ. Всегда ранен, но не убит. Теперь с кондюком. IP-телефония (asterisk), CRM, звонок с сайта: siplife.ru
79002953844

87

Re: мелкие электронные полезняшки

Савелий пишет:

прибор включается при заведенном двиге сам (определяя напряжение),

На большинстве генераторов есть так называемая "61-ая клемма" или клемма "Д". Она даёт сигнал +12В когда генератор работает. При чём даже если напряжение низкое, и аккумулятор не заряжается, сигнал присутсвует. Я от этой клеммы у себя в козле включал дневные ходовые огни.


Подпись удалена за наличие в ней грубой ненормативной лексики

88

Re: мелкие электронные полезняшки

MOHCTPOXOD, цель - минимум проводов. Если питать прибор, измерять вольты и амперы можно по трем проводам - отчего нет? отдельно желающим прошью без автоматики и от зажигания пусть запитывают


УАЗ. Всегда ранен, но не убит. Теперь с кондюком. IP-телефония (asterisk), CRM, звонок с сайта: siplife.ru
79002953844

89

Re: мелкие электронные полезняшки

начинаю..
http://my.jetscreenshot.com/1474/m_20120503-3ryi-31kb.jpg

http://my.jetscreenshot.com/1474/m_20120503-y381-30kb.jpg


УАЗ. Всегда ранен, но не убит. Теперь с кондюком. IP-телефония (asterisk), CRM, звонок с сайта: siplife.ru
79002953844

90

Re: мелкие электронные полезняшки

Савелий пишет:

MOHCTPOXOD, цель - минимум проводов. Если питать прибор, измерять вольты и амперы можно по трем проводам - отчего нет? отдельно желающим прошью без автоматики и от зажигания пусть запитывают

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


Подпись удалена за наличие в ней грубой ненормативной лексики

91

Re: мелкие электронные полезняшки

MOHCTPOXOD, хотелось обойтись только двумя проводами на амперметр. На шунт.


УАЗ. Всегда ранен, но не убит. Теперь с кондюком. IP-телефония (asterisk), CRM, звонок с сайта: siplife.ru
79002953844

92

Re: мелкие электронные полезняшки

1) нашел ошибки, даже не успев дособирать. Детали со старой платы десантировал, новую исправленную сделал, пока не распаял.
2) По поводу алгоритма включения/выключения - добавил условие. Если есть импульсы на тахометр - прибор не выключается. Выключается через N секунд только если
-а) напряжение питания ниже 13 вольт
-б) нет сигнала на тахометр.

Интересующимся покажу программу, думаю окончательный вариант (только настройки поменять, для теста уменьшал например время выключения и т.д.)
Правда, еще нет функций калибровки. Надо привязываться на ноль амперметру и на стабилизированные 5в вольтметру.

СПОЙЛЕР Показать

#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>

/* пины */
#define SH_CP PB0 //защелка регистра
#define ST_CP PB1 //clock регистра
#define DATA  PB2 //данные в регистр
#define LED_BRI PB4 //яркость подсветки (программный шим)
#define BUT_MODE PB3 //кнопка выбора режима
#define BUT_BRI PB5 //кнопка выбора яркости
#define RED_LED PA3 //красный светодиод галактека опасносте
#define EX_LED PA0 //вход сигнала габаритов

/* настройки */
#define TAXO_DIV 4 //количество импульсов за оборот коленвала
#define TAXOLED_DIV 200 //оборотов на один светодиод
#define AMP_DIV 2 //делитель (коэффициент) амперметра. На него делится значение +-512
#define VOLTMETER_DIV 25 //резисторный делитель * опорное напряжение (5в) и еще что то
#define OFF_TIME 3000 //время выключения при бортовом ниже OFF_VOLT
#define OFF_VOLT 130  //порог, ниже которого устройство отрубается через OFF_TIME

/* вспомогательное */


//настройки

/* переменные */
volatile unsigned char mode=0; //0 - вольтметр, 1 - амперметр, 2 - тахометр
volatile unsigned char mode_off=0; //0 - дисплей выкл, 1 - дисплей вкл
volatile unsigned long millis; //счетчик прошедших миллисекунд с начала работы 
volatile unsigned long prev_millis_main; //храним время последнего вызова главного цикла
volatile unsigned long prev_millis_off; //храним время отключения если низкое бортовое
volatile unsigned char taxo_tmp; //временная переменная тахометра, используемая в прерывании
volatile unsigned int taxo; //переменная тахометра
volatile   signed int amp;  //переменная амперметра
volatile unsigned char amp_sign; //знак амперметра
volatile unsigned int volt; //переменная напряжения
volatile unsigned char to_display[4]; //цифры и символы для вывода на дисплей
volatile unsigned char digit_step; //шаг вывода на дисплей/текущая цифра
volatile unsigned char bri[2]; //яркость дисплея и светодиодов линейки тахометра
volatile unsigned char bri_step; //шаг цикла яркости

//цифры ==>dp gfedcba
static unsigned char symbols[14] = {
0b00111111, //0 [0]
0b00000110, //1 [1]
0b01011011, //2 [2]
0b01001111, //3 [3]
0b01100110, //4 [4]
0b01101101, //5 [5]
0b01111101, //6 [6]
0b00000111, //7 [7]
0b01111111, //8 [8]
0b01101111, //9 [9]
0b00000000, //sp[10]
0b01110111, //A    [11]
0b00111110, //U [12]
0b01000000  //-    [13]
};

/* вспомогательные функции */

//пауза
void pause(unsigned int _pause){ 
    unsigned int i;
    for (i = _pause * 1000; i>0; i--) asm("nop");
}
//ADC function - оцифровка
unsigned int ADC_input(unsigned char _pin) {
    //выбор пина
    if (_pin == 1) ADMUX = (1 << MUX0); //ADC1
    if (_pin == 2) ADMUX = (1 << MUX1); //ADC2
    ADCSRA |= (1 << ADEN);
     ADCSRA |= (1 << ADSC); // Включаем оцифровку
    while (ADCSRA & (1 << ADSC)); //Ждем окончания
    ADCSRA &= ~(1<<ADEN); // остановим оцифровку
    return (ADCL|ADCH<<8); //отдаем результат
}

//заносит цифры и символы в массив to_display
void to_numbers(unsigned int _number) {
    
    to_display[0] = 0;
    to_display[1] = 0;
    to_display[2] = 0;
    to_display[3] = 0;
    
    //разбираем число на символы
    while (_number >= 1000) {
        _number -= 1000;
        to_display[0]++;
    }
    while (_number >= 100) {
        _number -= 100;
        to_display[1]++;
    }
    while (_number >= 10) {
        _number -= 10;
        to_display[2]++;
    }
    to_display[3] = _number;
    
    if(mode == 0) to_display[0] = 12; //если режим вольтметра выводим U
    if(mode == 1 && amp_sign == 1) to_display[0] = 13; //если режим амперметра и разряд выводим минус
    else if(mode == 1) to_display[0] = 11; //если режим амперметра выводим А
    if((mode==0 || mode ==1 ) && to_display[1]==0) to_display[1] = 10; //если режим амер/вольтметра и первый ноль, ставим взамен пробел
}

//формирование потока на регистр из одного байта
void shiftout(char _byte){
    //цикл по битам
    for (char i=0; i<=7; i++) {
        if(_byte&(1<<i)) PORTB |= (1<<DATA);
        else PORTB &= ~(1<<DATA);
        //обозначим clock
        PORTB |= (1<<SH_CP);
        PORTB &= ~(1<<SH_CP);
    }
    
}

//вывод данных в регистры
void out(void) {
    PORTA |= ((1<<PA4)|(1<<PA5)|(1<<PA6)|(1<<PA7)); //выключим катоды дисплея
    PORTB &= ~(1<<LED_BRI); //выключим катод светодиодов
    if(mode_off==1) {    
        PORTB &= ~(1<<ST_CP); //снимем "защелку" 74HC595
        
        //отсылаем в три регистра состояние светодиодной линейки
        for (char i=1; i<=24; i++) {
            if((taxo/TAXOLED_DIV) >= i) PORTB |= (1<<DATA);
            else PORTB &= ~(1<<DATA);
            //обозначим clock
            PORTB |= (1<<SH_CP);
            PORTB &= ~(1<<SH_CP);
        }
        
        //отсылаем в регистр дисплея состояние
        if((mode == 0 || mode == 1) && digit_step == 2) shiftout(symbols[to_display[digit_step]] | (1<<7)); //если вольтметр или амперметр ставим точку на втором разряде
        else shiftout(symbols[to_display[digit_step]]); //иначе просто отсылаем
        
        PORTB |= (1<<ST_CP); //установим "защелку" 74HC595
        
        //цикл яркости, управляем катодами
        if((PINA&(1<<EX_LED)&&bri_step <= bri[0]) || (!(PINA&(1<<EX_LED))&&bri_step <= bri[1])) { //если установленная яркость разрешает вывод (с учетом сигнала габаритов)
            //катоды дисплея
            PORTA &= ~(1<<(digit_step+4)); //включим нужный катод
            //яркость светодиодов
            PORTB |= (1<<LED_BRI); //включим катод светодиодов
        }
        //изменение шагов
        digit_step++;
        if(digit_step == 4) {
            digit_step = 0;
            bri_step++;
            if(bri_step == 9) bri_step = 0;
        }
    }//mode_off
}

//обработчик таймера
ISR (TIMER1_COMPA_vect) {
    millis++; //счетчик миллисекунд
    out(); //обновим дисплей 
}

//обработчик прерывания (импульсы с тахометра)
ISR (INT0_vect) {
    taxo_tmp++;
}

/* Главное тело программы */
int main(void) {

 //настройки пинов
 DDRA  = 0b11111000; //катоды дисплея, аварийный светодиод
 PORTA = 0b00000001; //подтягивающий резистор входа габаритов
 DDRB  = 0b00010111; //управление регистрами, управление яркостью
 PORTB = 0b01101000; //подтягивающие резисторы кнопок, тахометра (прерывание)
 
 //прерывания
 MCUCR = (1<<ISC01) | (1<<ISC00); //rising of int0
 GIMSK = (1<<INT0); //тахометр на INT0 (PB6)
 
 //настройка таймера
 OCR1C = 125; // основной счетчик
 //OCR1A = 200;  //значение совпадения (скважность)
 //TCCR1A = (2 << COM1A0) | (1 << PWM1A); //FastPwm PB1
 TCCR1A = (1 << PWM1A); //FastPwm
 //TCNT1 = 0;
 PLLCSR = (1 << PLLE);
 while (!(PLLCSR & (1 << PLOCK)));
 PLLCSR = (1 << PLLE);
 TCCR1B = (1 << CS10) | (1 << CS11) | (1 << CS12); //=8000000/64/125(OCR1C) = 1000hz
 TIMSK = (1<<OCIE1A); //вызов функции по прерыванию
 asm("sei"); //разрешить прерывания
 
  //частота АЦП
 ADCSRA = (1 << ADPS2)|(1 << ADPS1)|(1 << ADPS0); // Делитель clock / 128 
 
 //зададим на дисплее "минусы" при включении
 mode = 9; //костыль против точки на 2-и сегменте
 for(int x=0; x<=3; x++)
        to_display[x]=13;

 //тест линеек - вверх
 for (int x=1; x <= 24; x++) {
    taxo = x * TAXOLED_DIV;
    pause(5+x);
 }
  //вниз
 for (int x=23; x >= 1; x--) {
    taxo = x * TAXOLED_DIV;
    pause(x);
}
 
 //читаем настройки из eeprom
 do {} while (!eeprom_is_ready());
 mode = eeprom_read_byte((unsigned char*)0x00);
 do {} while (!eeprom_is_ready());
 bri[0]  = eeprom_read_byte((unsigned char*)0x01); //яркость без габаритов
 bri[1]  = eeprom_read_byte((unsigned char*)0x02); //яркость с габаритами
 if(bri[0] < 2 || bri[0] > 8) bri[0] = 8; //если яркость за пределами, ставим максимальную
 if(bri[1] < 2 || bri[1] > 8) bri[1] = 8;

 
 /* главный цикл */
 while(1){
    
    //время рассчитать значения, опросить кнопки
    if(millis >= (prev_millis_main + 200)) {
     
        prev_millis_main = millis; //выравниваем счетчики времени
        //расчет тахометра
        taxo = ((taxo_tmp * 5 * 60) / TAXO_DIV); //рассчитываем с учетом количества импульсов за оборот коленвала, приводим к об/сек, далее к об/мин
        taxo_tmp = 0; //сбрасываем временный счетчик
        //расчет амперметра
        amp = ADC_input(1); //0..1023
        if (amp < 511) {
            amp_sign = 1;
            amp = (511 - amp) / AMP_DIV;
        }
        else {
            amp_sign = 0;
            amp = (amp - 512) / AMP_DIV;
        }
        //расчет вольтметра
        volt = VOLTMETER_DIV * ADC_input(2) / 102; //Расчитываем по делителю
        
        //опрашиваем кнопки
        if(!(PINB&(1<<BUT_MODE))){ //BUT_MODE
            while(!(PINB&(1<<BUT_MODE))) pause(1);
            //перебор режима
             prev_millis_off = millis;
            if(mode_off==1){ //если дисплей включен
                mode++;
                if(mode >= 3) mode = 0;
                do {} while (!eeprom_is_ready());
                eeprom_write_byte((unsigned char*)0x00, mode);
            } //mode off
        }
        if(!(PINB&(1<<BUT_BRI))){ //BUT_BRI (2..4..6..8)
            while(!(PINB&(1<<BUT_BRI))) pause(1);
            //перебор режима
            prev_millis_off = millis;
            if(mode_off==1){ //если дисплей включен
                if(PINA&(1<<EX_LED)) { //сигнала габаритов нет
                    bri[0] += 2;
                    if(bri[0] > 8) bri[0] = 2;
                    do {} while (!eeprom_is_ready());
                    eeprom_write_byte((unsigned char*)0x01, bri[0]);
                }
                else {
                    bri[1] += 2;
                    if(bri[1] > 8) bri[1] = 2;
                    do {} while (!eeprom_is_ready());
                    eeprom_write_byte((unsigned char*)0x02, bri[1]);
                }
            } //mode off
        }
        
        //выбор отображения по режиму
        if(mode == 0) to_numbers(volt); //режим амперметра
        if(mode == 1) to_numbers(amp); //режим вольтметра
        if(mode == 2) to_numbers(taxo); //режим тахометра
        //if(mode == 3) to_numbers(bri[0]); //режим отладки
        //if(mode == 4) to_numbers(bri[1]); //режим отладки
        
        if(volt < OFF_VOLT && taxo == 0 && millis > prev_millis_off + OFF_TIME) mode_off=0; //если таймаут и низкое бортовое (двиг не заведен) - выключить дисплей
        else { //иначе
            if(mode_off == 0) prev_millis_off = millis; //если первый цикл после включения - уравняем время
            mode_off=1; //включим дисплей
        }
        
        //RED_LED - аварийный светодиод
        if(taxo > 4000 || volt <= 115 || amp_sign == 1) PORTA |= (1<<RED_LED);
        else PORTA &= ~(1<<RED_LED);
        
    }//расчеты, опрос кнопок
 } //главный цикл
}


УАЗ. Всегда ранен, но не убит. Теперь с кондюком. IP-телефония (asterisk), CRM, звонок с сайта: siplife.ru
79002953844

93

Re: мелкие электронные полезняшки

http://youtu.be/wzLriaxSEBk

косяки:
- перепутана последовательность посылки в регистры, начало линейки в середине. решу программно.
- низкая частота обновления дает мерцание дисплея в режимах пониженной яркости. Надеюсь решить программно, иначе пользоваться можно будет только 3-4 ступенью.
- необходима программная калибровка амперметра и вольтметра (последнего - в условиях высокостабилизированного источника), программно
- точка на дисплее стоит не там, полезу читать даташит

ну а так.. начало положено


УАЗ. Всегда ранен, но не убит. Теперь с кондюком. IP-телефония (asterisk), CRM, звонок с сайта: siplife.ru
79002953844

94

Re: мелкие электронные полезняшки

Саня, а я себе в машину такой вольтметр поставил, цена вопроса 292.00 руб., можно заказать красный или зелёный http://www.ekits.ru/shop/index.php?ukey … 3gody2STVg

http://www.ekits.ru/published/publicdata/SHOPEKITEKITS/attachments/SC/products_pictures/0001g.jpg

Прицепил его прямо на клемы АКБ и всегда контролирую заряд АКБ. Если на нём напряжение больше 12,8 вольт, то заряд есть, если меньше 12 вольт, то значит заряда с генератора нет. Так же когда работает лебёдка видно - высасывает она ток из АКБ или достаточно генератора.

95

Re: мелкие электронные полезняшки

733, вопрос в универсальном девайсе, в данном случае - три в одном с "красной лампой". Которая реагирует на любые неисправности.
Некогда смотреть на приборы, и места мало.

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

Там по окружности линейка из светодиодов, просто я их не включал - генератора частоты нет еще. Так, программно тестировал.


УАЗ. Всегда ранен, но не убит. Теперь с кондюком. IP-телефония (asterisk), CRM, звонок с сайта: siplife.ru
79002953844

96

Re: мелкие электронные полезняшки

Тахометр, дело хорошее. А как ты его калибровать будешь, для каждой машины отдельно? Сигнал откуда берёшь?

97

Re: мелкие электронные полезняшки

733, просто считаю для конкретной машины. Вариантов сигнала немало бывает. Если бензинка - с катушки, если дизель или сложная бензинка (или хочется высокую точность) - с одной фазы генератора и пересчетом количества импульсов ротора и соотношения шкивов. Можно тупо ДХ на шкив, но надо не менее 4-х импульсов на оборот для точности.


УАЗ. Всегда ранен, но не убит. Теперь с кондюком. IP-телефония (asterisk), CRM, звонок с сайта: siplife.ru
79002953844

98

Re: мелкие электронные полезняшки

Савелий пишет:

733, просто считаю для конкретной машины.

Савелий пишет:

если дизель или сложная бензинка (или хочется высокую точность) - с одной фазы генератора и пересчетом количества импульсов ротора и соотношения шкивов.

Во-во и я об этом, гиморно всё это  default/neutral

99

Re: мелкие электронные полезняшки

733, гиморно посчитать? )) так это один раз, если знать как)
подцепится одним проводом под крышку генератора на нужную точку моста тоже не проблема, один болтик. Если речь идет о УАЗе или четырехцилиндровой бензинке с распределителем и бегунком - то просто провод на катушку, коэффициэнт четыре (четыре импульса за оборот).


УАЗ. Всегда ранен, но не убит. Теперь с кондюком. IP-телефония (asterisk), CRM, звонок с сайта: siplife.ru
79002953844

100

Re: мелкие электронные полезняшки

Савелий пишет:

733, гиморно посчитать? )) так это один раз, если знать как)

И каждый раз, для каждой машины, ты будешь это делать? А где универсальность применения?