Например TDA7294

Форум РадиоКот • Просмотр темы - ATTINY 13 опрос двух каналов АЦП
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Сб апр 27, 2024 10:04:01

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


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



Начать новую тему Ответить на тему  [ Сообщений: 32 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: ATTINY 13 опрос двух каналов АЦП
СообщениеДобавлено: Вс июл 11, 2021 09:14:07 
Встал на лапы

Зарегистрирован: Пт мар 19, 2021 08:58:45
Сообщений: 105
Рейтинг сообщения: 0
Всем привет! Потребовалось обуздать стеклоподьеники в авто, управление по средствам ацп мк attiny13, т.к. есть уже провода в дверях по одному и не нужно ни чего прокладывать по новой это важно. Накидал схему в протусе для отладки Изображение, светодиоды как бы взамен соленоидам реле, схема подключения кнопок резистивно-параллельная. Столкнулся с тем - что есть коротковременные срабатывания других портов выхода, которые в данный момент времени должны оставаться в покое. К примеру на картинке изображен случай когда нажатие коротковременно кнопки водительского стекла ВВЕРХ - почем то сработал еще порт для команды ВНИЗ вод.стекла.
Так же может сработать и порты для пассажирского стекла... пример следующий Изображение - где нажимал кнопка водительского стекла ВНИЗ и были коротковременные срабатывания портов выхода для пассажирского стекла. Принципиально использую два порта АЦП для обработки нажатий кнопок, один для вод. двери другой для пассажирской. Попытался побороть с помошью флагов событий но без успешно. Прошу помощи как правильней обработать нажатие кнопки.
Код:
*****************************************************
#include <tiny13.h>
#include <delay.h>

unsigned int adc0, adc2;
unsigned int adc_tmp0, adc_tmp2;
char adc_counter0, adc_counter2;
bit f1, f2, f3, f4, f5, f6;

#define FIRST_ADC_INPUT 0
#define LAST_ADC_INPUT 2
unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
// Bandgap Voltage Reference: Off
#define ADC_VREF_TYPE ((0<<REFS0) | (0<<ADLAR))

// ADC interrupt service routine
// with auto input scanning
interrupt [ADC_INT] void adc_isr(void)
{
static unsigned char input_index=0;
// Read the AD conversion result
adc_data[input_index]=ADCW;
// Select next ADC input
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
   input_index=0;
ADMUX=(FIRST_ADC_INPUT | ADC_VREF_TYPE)+input_index;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=(1<<ADSC);
}

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0x6A;
if(adc_counter0 < 20){ adc_tmp0+= adc_data[0]; adc_counter0++;} //аля антидребезг
    else {adc0 = adc_tmp0/20; adc_counter0=0; adc_tmp0=0;}
if(adc_counter2 < 20){ adc_tmp2+= adc_data[2]; adc_counter2++;}
    else {adc2 = adc_tmp2/20; adc_counter2=0; adc_tmp2=0;}
}


void reley(void){
//Водительскя дверь------------------------------
     //Водительское стекло-------------------
     if(f1==0 && f4==0 && f6==0){ //Если флаги f1 и f4 пассажиского стекла вод двери
        if(adc2>220 && adc2<300) {PORTB.0=1; f5=1;}
            else {PORTB.0=0;f5=0;}
     }
     if(f1==0 && f4==0 && f5==0){
        if(adc2>320 && adc2<370) {PORTB.3=1; f6=1;}
            else {PORTB.3=0;f6=0;}
     }
     //Пассажирское стекло-------------------       
     if(f2==0 && f3==0 && f5==0 && f6==0){
        if(adc2 > 400 && adc2 < 460) {f1=1;PORTB.1=1;}
            else {PORTB.1=0;f1=0;}
     }
     if(f2==0 && f3==0 && f5==0 && f6==0){
        if(adc2 > 490 && adc2 < 515) {f4=1;PORTB.2=1;}
            else {PORTB.2=0;f4=0;}
     }
//----------

//Пассажирская дверь-Пассажирское стекло   
     if(f1==0 && f4==0 && f3==0){
        if(adc0 > 400 && adc0 < 460) {f2=1;PORTB.1=1;}
            else {PORTB.1=0;f2=0;}
     }
     if(f4==0 && f1==0 && f2==0){   
        if(adc0 > 490 && adc0 < 515) {f3=1;PORTB.2=1;}
            else {PORTB.2=0;f3=0;}
     }
}

void main(void)
{
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Function: Bit5=In Bit4=In Bit3=Out Bit2=Out Bit1=Out Bit0=Out
DDRB=(0<<DDB5) | (0<<DDB4) | (1<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
// State: Bit5=T Bit4=T Bit3=0 Bit2=0 Bit1=0 Bit0=0
PORTB=(0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 150,000 kHz
// Mode: Normal top=0xFF
// OC0A output: Disconnected
// OC0B output: Disconnected
// Timer Period: 1 ms
TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00);
TCCR0B=(0<<WGM02) | (0<<CS02) | (1<<CS01) | (1<<CS00);
TCNT0=0x6A;
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (1<<TOIE0);

// ADC initialization
// ADC Clock frequency: 150,000 kHz
// ADC Bandgap Voltage Reference: Off
// ADC Auto Trigger Source: ADC Stopped
// Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On
DIDR0|=(0<<ADC0D) | (0<<ADC2D) | (0<<ADC3D) | (0<<ADC1D);
ADMUX=FIRST_ADC_INPUT | ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (1<<ADSC) | (0<<ADATE) | (0<<ADIF) | (1<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);
ADCSRB=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);

#asm("sei")

while (1){
   reley();     
   }
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY 13 опрос двух каналов АЦП
СообщениеДобавлено: Вс июл 11, 2021 09:45:47 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 842
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 5598
Откуда: Minsk
Рейтинг сообщения: 1
Цитата:
DIDR0|=(0<<ADC0D) | (0<<ADC2D) | (0<<ADC3D) | (0<<ADC1D);

"Уж сколько раз твердили миру..." ©
https://radiokot.ru/forum/viewtopic.php ... 1#p4058681

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY 13 опрос двух каналов АЦП
СообщениеДобавлено: Вс июл 11, 2021 11:21:10 
Встал на лапы

Зарегистрирован: Пт мар 19, 2021 08:58:45
Сообщений: 105
Рейтинг сообщения: 0
Цитата:
DIDR0|=(0<<ADC0D) | (0<<ADC2D) | (0<<ADC3D) | (0<<ADC1D);

Дайте пожалуста развернутый ответ, я не совсем понял что неверно в это строке кода.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: ATTINY 13 опрос двух каналов АЦП
СообщениеДобавлено: Вс июл 11, 2021 11:39:23 
Мучитель микросхем

Карма: 1
Рейтинг сообщений: 56
Зарегистрирован: Сб июл 10, 2021 19:33:25
Сообщений: 402
Рейтинг сообщения: 0
Вы смещаете ноль на какое-то количеств разрядов, значение этого количества в ADC0D и т.д.
Затем делаете ИЛИ с нулём
В итоге всю кучу также ИЛИ с DIDR0.
Это всё - бессмысленные действия.
Изучите логические и битовые операции.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: ATTINY 13 опрос двух каналов АЦП
СообщениеДобавлено: Вс июл 11, 2021 12:22:53 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 842
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 5598
Откуда: Minsk
Рейтинг сообщения: 1
Вдобавок к ST7FOX даю ответ развёрнутей некуда: нулевой бит, сколько и куда его ни двигай, по ИЛИ не меняет ни-че-го. Как сбрасывать определённый бит регистра - по моей ссылке + 1 пост выше от slav0n
Совет правильный: для понимания сути нужно изучить элементарные логические операции (с арифметическими, надеюсь, проблем нет? хотя в целочисленной арифметике тоже нужно иметь в виду определённые нюансы) .

_________________
Изображение


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: ATTINY 13 опрос двух каналов АЦП
СообщениеДобавлено: Вс июл 11, 2021 14:10:08 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Jack_A писал(а):
Вдобавок к ST7FOX даю ответ развёрнутей некуда: нулевой бит, сколько и куда его ни двигай
Это не решит проблему.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY 13 опрос двух каналов АЦП
СообщениеДобавлено: Вс июл 11, 2021 14:52:13 
Встал на лапы

Зарегистрирован: Пт мар 19, 2021 08:58:45
Сообщений: 105
Рейтинг сообщения: 0
Jack_A писал(а):
Вдобавок к ST7FOX даю ответ развёрнутей некуда: нулевой бит, сколько и куда его ни двигай
Это не решит проблему.

что же решит или вы видите в другом проблему?

Добавлено after 24 minutes 2 seconds:
Вдобавок к ST7FOX даю ответ развёрнутей некуда: нулевой бит, сколько и куда его ни двигай, по ИЛИ не меняет ни-че-го. Как сбрасывать определённый бит регистра - по моей ссылке + 1 пост выше от slav0n
Совет правильный: для понимания сути нужно изучить элементарные логические операции (с арифметическими, надеюсь, проблем нет? хотя в целочисленной арифметике тоже нужно иметь в виду определённые нюансы) .

Не так давно сидел перечитывал лог.операции, со шпаргалкой разбираюсь что и куда. В чем соль с нолем мне понятна. Как это отражается на работе кода не могу понять, и это ли вносит такие проблемы что я описал в первом своем сообщение?
Из вашей подсказки делаю вывод что ту строку правильнее было бы писать так:
DIDR0&=~((1<<ADC0D) | (1<<ADC2D) | (1<<ADC3D) | (1<<ADC1D));
Но что это мне даст, по даташиту это буфер цифрового входа, рекомендует биты ставить в лог 1 в том случае когда используется аналоговый вход, тем самым снижает потребление энергии.
Проблема моя этим никак не решилась((


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY 13 опрос двух каналов АЦП
СообщениеДобавлено: Вс июл 11, 2021 14:59:11 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
У ATTINY13 памяти мало, всего 1кБайт.
Вот как пример, кое как уместил
Спойлер#include <tiny13.h>
#include <delay.h>

volatile unsigned int adc0, adc2;
volatile bit f1, f2, f3, f4, f5, f6;

#define FIRST_ADC_INPUT 0
#define LAST_ADC_INPUT 2
volatile unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
// Bandgap Voltage Reference: Off
#define ADC_VREF_TYPE ((0<<REFS0) | (0<<ADLAR))

// ADC interrupt service routine
// with auto input scanning
interrupt [ADC_INT] void adc_isr(void)
{
static unsigned char input_index=0;
// Read the AD conversion result
adc_data[input_index]=ADCW;
// Select next ADC input
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
input_index=0;
ADMUX=(FIRST_ADC_INPUT | ADC_VREF_TYPE)+input_index;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=(1<<ADSC);
}

union BytByte {
struct {
unsigned char b0: 1;
unsigned char b1: 1;
unsigned char b2: 1;
unsigned char b3: 1;
unsigned char b4: 1;
unsigned char b5: 1;
unsigned char b6: 1;
} bit_t;
unsigned char byte;
};

#define BTN_LOCK_TIME 20

bit flag1;

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0x6A;
flag1 = !flag1;
}


void reley(void){
static unsigned char pauza0;
static unsigned char pauza1;
static unsigned char pauza2;
static unsigned char pauza3;
static unsigned char pauza4;
static unsigned char pauza5;

union BytByte flag_g;

if(flag1){
adc0 = adc_data[0];
adc2 = adc_data[2];
flag1=0;
flag_g.byte =0;

if(adc2>220 && adc2<300) {
if(pauza0 < BTN_LOCK_TIME) pauza0++;
else flag_g.bit_t.b0=1;
} else { if(pauza0) pauza0--;
}

if(adc2>320 && adc2<370) {
if(pauza1 < BTN_LOCK_TIME) pauza1++;
else flag_g.bit_t.b1=1;
} else { if(pauza1) pauza1--;
}

if(adc2>400 && adc2<460) {
if(pauza2 < BTN_LOCK_TIME) pauza2++;
else flag_g.bit_t.b2=1;
} else { if(pauza2) pauza2--;
}

if(adc2>490 && adc2<515) {
if(pauza3 < BTN_LOCK_TIME) pauza3++;
else flag_g.bit_t.b3=1;
} else { if(pauza3) pauza3--;
}

if(adc0>400 && adc0<460) {
if(pauza4 < BTN_LOCK_TIME) pauza4++;
else flag_g.bit_t.b4=1;
} else { if(pauza4) pauza4--;
}

if(adc0>490 && adc0<515) {
if(pauza5 < BTN_LOCK_TIME) pauza5++;
else flag_g.bit_t.b5=1;
} else { if(pauza5) pauza5--;
}

//Водительскя дверь------------------------------
//Водительское стекло-------------------
if(f1==0 && f4==0 && f6==0){ //Если флаги f1 и f4 пассажиского стекла вод двери
if(flag_g.bit_t.b0) {PORTB.0=1; f5=1;}
else {PORTB.0=0;f5=0;}
}
if(f1==0 && f4==0 && f5==0){
if(flag_g.bit_t.b1) {PORTB.3=1; f6=1;}
else {PORTB.3=0;f6=0;}
}
//Пассажирское стекло-------------------
if(f2==0 && f3==0 && f5==0 && f6==0){
if(flag_g.bit_t.b2) {f1=1;PORTB.1=1;}
else {PORTB.1=0;f1=0;}
}
if(f2==0 && f3==0 && f5==0 && f6==0){
if(flag_g.bit_t.b3) {f4=1;PORTB.2=1;}
else {PORTB.2=0;f4=0;}
}
//----------

//Пассажирская дверь-Пассажирское стекло
if(f1==0 && f4==0 && f3==0){
if(flag_g.bit_t.b4) {f2=1;PORTB.1=1;}
else {PORTB.1=0;f2=0;}
}
if(f4==0 && f1==0 && f2==0){
if(flag_g.bit_t.b5) {f3=1;PORTB.2=1;}
else {PORTB.2=0;f3=0;}
}

}
}

void main(void)
{
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Function: Bit5=In Bit4=In Bit3=Out Bit2=Out Bit1=Out Bit0=Out
DDRB=(0<<DDB5) | (0<<DDB4) | (1<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
// State: Bit5=T Bit4=T Bit3=0 Bit2=0 Bit1=0 Bit0=0
PORTB=(0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 150,000 kHz
// Mode: Normal top=0xFF
// OC0A output: Disconnected
// OC0B output: Disconnected
// Timer Period: 1 ms
TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00);
TCCR0B=(0<<WGM02) | (0<<CS02) | (1<<CS01) | (1<<CS00);
TCNT0=0x6A;
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (1<<TOIE0);

// ADC initialization
// ADC Clock frequency: 150,000 kHz
// ADC Bandgap Voltage Reference: Off
// ADC Auto Trigger Source: ADC Stopped
// Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On
DIDR0 =(0<<ADC0D) | (0<<ADC2D) | (0<<ADC3D) | (0<<ADC1D);
ADMUX=FIRST_ADC_INPUT | ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (1<<ADSC) | (0<<ADATE) | (0<<ADIF) | (1<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);
ADCSRB=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);

#asm("sei")

while (1){
reley();
}
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY 13 опрос двух каналов АЦП
СообщениеДобавлено: Вс июл 11, 2021 15:17:33 
Мучитель микросхем

Карма: 1
Рейтинг сообщений: 56
Зарегистрирован: Сб июл 10, 2021 19:33:25
Сообщений: 402
Рейтинг сообщения: 0
kote52, всё просто:
Вы должны знать битовые и логические операции сами по себе, без применения к чему-либо.
Например, необходимо знать, что 1 & 0 = 0, а 1 | 0 = 1 и т.д. То есть, разницу между И и ИЛИ.
Что число в микроконтроллере, а точнее, некая переменная, или некая область в памяти, на которую указывает переменная и где хранится число, представляет собой некий набор битов. Переменная типа byte - это 8 битов, и в этом случае, если в ней хранится 1, то полная запись 00000001, а когда Вы пишите, например, 0 << 5, то Вы приказываете контроллеру в 0000000 пять раз сдвинуть правый ноль влево, то есть, бессмысленно.
Регистры в микроконтроллере, как правило, такие же байты. То есть, регистр АЦП может выглядеть как 01111111, где левый (старший бит) - управляет вкл-выкл преобразованием (я описываю мифический микроконтроллер), а следующие - номер канала, какие-то опции. Непосредственно изменить бит не всегда возможно (например, можно в ассемблере, нельзя в Си), но можно изменить весь байт, добавив к нему такой байт и таким образом, что нужные биты изменять значения, а ненужные - не изменят.

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

Добавлено after 1 minute 44 seconds:
Dimon456, 1 кБ - это очень много. И код просто ужасный, примером быть не может ни в коем разе.

Добавлено after 10 minutes 51 second:
kote52, и что касается аппаратной части: у Вас 6 кнопок, 4 повесили на один АЦП, а 2 на другой... Что мешало посадить 3 на один и 3 на другой? С точки зрения программной части разницы не будет, но Вы получаете гораздо большую дельту в напряжении для определения кнопки, а значит, минимизируете ложные срабатывания, когда контакты начнут окисляться.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY 13 опрос двух каналов АЦП
СообщениеДобавлено: Вс июл 11, 2021 15:47:59 
Встал на лапы

Зарегистрирован: Пт мар 19, 2021 08:58:45
Сообщений: 105
Рейтинг сообщения: 0
kote52, и что касается аппаратной части: у Вас 6 кнопок, 4 повесили на один АЦП, а 2 на другой... Что мешало посадить 3 на один и 3 на другой? С точки зрения программной части разницы не будет, но Вы получаете гораздо большую дельту в напряжении для определения кнопки, а значит, минимизируете ложные срабатывания, когда контакты начнут окисляться.


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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY 13 опрос двух каналов АЦП
СообщениеДобавлено: Вс июл 11, 2021 15:51:54 
Мудрый кот

Карма: 11
Рейтинг сообщений: 114
Зарегистрирован: Пт июн 01, 2018 07:28:45
Сообщений: 1759
Рейтинг сообщения: 0
В машине всё это будет дичайше глючить. Особенно весело будет, когда контакты кнопок чуть-чуть подзасрутся и их сопротивление будет непредсказуемым.
Ну и дребезг. Здесь есть защита от него?
Я бы смотрел в сторону оптопар и сдвигового регистра, если не хочется ставить жирный МК.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY 13 опрос двух каналов АЦП
СообщениеДобавлено: Вс июл 11, 2021 15:56:33 
Мучитель микросхем

Карма: 1
Рейтинг сообщений: 56
Зарегистрирован: Сб июл 10, 2021 19:33:25
Сообщений: 402
Рейтинг сообщения: 0
Я бы смотрел в сторону "как разрабатывать электронику для автомобилей", а не оптопар и сдвиговых регистров, они тут примерно так же нужны, как мясорубка и чулки.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY 13 опрос двух каналов АЦП
СообщениеДобавлено: Вс июл 11, 2021 16:15:58 
Встал на лапы

Зарегистрирован: Пт мар 19, 2021 08:58:45
Сообщений: 105
Рейтинг сообщения: 0
Я бы смотрел в сторону "как разрабатывать электронику для автомобилей", а не оптопар и сдвиговых регистров, они тут примерно так же нужны, как мясорубка и чулки.

Есть уже готовые решения на лог микросхемах... Но мне диктует то что уже есть в машине, и разбирать дверь и тянуть проводку там где это не возможно еще та задача!

Добавлено after 5 minutes 37 seconds:
В машине всё это будет дичайше глючить. Особенно весело будет, когда контакты кнопок чуть-чуть подзасрутся и их сопротивление будет непредсказуемым.
Ну и дребезг. Здесь есть защита от него?
Я бы смотрел в сторону оптопар и сдвигового регистра, если не хочется ставить жирный МК.

В машине был условно тупой код, на delay_ms когда то собран... Я думаю вы в своей теории больше боитесь, чем в практику применять! подобное я смотрел осциллографом, дребезга там столько, как в нормальной тактовой кнопке! Посмотрите мой код в самом первом сообщение, как вам подобный аля антидребезг?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY 13 опрос двух каналов АЦП
СообщениеДобавлено: Вс июл 11, 2021 16:22:10 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 0
parovoZZ писал(а):
Ну и дребезг. Здесь есть защита от него?
для решения этой задачи антидребезг неактуален, как и вообще применение МК
достаточно банальных реле

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY 13 опрос двух каналов АЦП
СообщениеДобавлено: Вс июл 11, 2021 16:32:53 
Мучитель микросхем

Карма: 1
Рейтинг сообщений: 56
Зарегистрирован: Сб июл 10, 2021 19:33:25
Сообщений: 402
Рейтинг сообщения: 0
kote52, дребезг есть везде, как и решений по нему. Но это не главное и легко устранимое.
Главное - помехи в автомобиле вообще, и температурные условия (показания напряжения могут плавать). В приложенном файле описаны основные моменты (необязательно даже знать английский, достаточно глянуть картинки).
Это не сильно влияет на Вашу текущую проблему с кодом, но знать необходимо.


Вложения:
Suppression of Transients in an Automotive.pdf [80.35 KiB]
Скачиваний: 140
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY 13 опрос двух каналов АЦП
СообщениеДобавлено: Вс июл 11, 2021 16:35:55 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
ST7FOX писал(а):
И код просто ужасный
А с чем сравнивали? Где образец для подражания?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY 13 опрос двух каналов АЦП
СообщениеДобавлено: Вс июл 11, 2021 16:37:28 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6628
Откуда: Сердце Пармы
Рейтинг сообщения: 2
Медали: 1
Получил миской по аватаре (1)
1) в условиях четко расставь очерёдность операций - расставь скобки.
ты уверен, что, например, команда:
if(adc2 > 490 && adc2 < 515)
разворачивается в
if((adc2 > 490) && (adc2 < 515))
а не в
if(((adc2 > 490) && adc2) < 515) ?
лучше жестко закрепи нужный порядок скобками.

2) добавь фильтрацию измерений:
на каждый ацп добавь буфер и счётчик, если новое измерение отличается от буфера не больше, чем на Х - то инкрементируй счётчик (с проверкой на переполнение), если больше - сбрасывай счётчик и обновляй буфер.
А потом принимай решение о нажатии только когда счётчик достигнет величины У
(Х и У - константы)

3) чтоб код стал компактней используй АЦП в 8битном режиме - операции с 8 битами занимают меньше места. (регистр ADLAR).

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY 13 опрос двух каналов АЦП
СообщениеДобавлено: Вс июл 11, 2021 16:44:36 
Мучитель микросхем

Карма: 1
Рейтинг сообщений: 56
Зарегистрирован: Сб июл 10, 2021 19:33:25
Сообщений: 402
Рейтинг сообщения: 0
ST7FOX писал(а):
И код просто ужасный
А с чем сравнивали? Где образец для подражания?

Я как-то не стараюсь подражать, но образцом являются Кнут, Тейксейра, Пачеко, Рихтер и другие умные люди, да и просто msdn.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY 13 опрос двух каналов АЦП
СообщениеДобавлено: Вс июл 11, 2021 17:21:21 
Встал на лапы

Зарегистрирован: Пт мар 19, 2021 08:58:45
Сообщений: 105
Рейтинг сообщения: 0
kote52, дребезг есть везде, как и решений по нему. Но это не главное и легко устранимое.
Главное - помехи в автомобиле вообще, и температурные условия (показания напряжения могут плавать). В приложенном файле описаны основные моменты (необязательно даже знать английский, достаточно глянуть картинки).
Это не сильно влияет на Вашу текущую проблему с кодом, но знать необходимо.

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

Добавлено after 2 minutes 27 seconds:
1) в условиях...

2) добавь фильтрацию измерений...

3) чтоб код стал компактней используй АЦП в 8битном режиме - операции с 8 битами занимают меньше места. (регистр ADLAR).


Я постараюсь практически все ващи советы применить, тогда и отпишу по результату!

Добавлено after 3 minutes 12 seconds:
ST7FOX писал(а):
И код просто ужасный
А с чем сравнивали? Где образец для подражания?

Спасибо вам, у увидел смысл подачи, тоже буду сидеть вникать!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY 13 опрос двух каналов АЦП
СообщениеДобавлено: Вс июл 11, 2021 17:46:17 
Мудрый кот
Аватар пользователя

Карма: 27
Рейтинг сообщений: 77
Зарегистрирован: Пн июн 24, 2013 23:00:42
Сообщений: 1781
Откуда: Казахстан
Рейтинг сообщения: 0
А еще можно повесить все кнопки на одну линию, и использовать один АЦП.

_________________
Изображение
Ваши хотелки за ваши деньги http://Devs.company


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

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


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

Сейчас этот форум просматривают: akl и гости: 34


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

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


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