Форум РадиоКот • Просмотр темы - LED Driver на Attiny13A
Сообщения без ответов | Активные темы
Страница 2 из 6
[ Сообщений: 102 ]
, , , , ,
Автор
Сообщение
Bondosha
Заголовок сообщения: Re: LED Driver на Attiny13A
Добавлено: Вт сен 07, 2021 19:06:03
Зарегистрирован: Вт авг 07, 2018 09:44:46Сообщений: 66
Рейтинг сообщения: 0
Карбофос , это я просто копировала с шаблона с коммами, потом не убрала под свой вариант. timer1 и timer2 сейчас переменные не работают, красная лампочка зажигается и все, как будто той части нет, там где timer2 мигает само по себе по timerADC (где горит и не горит по времени одинаково)
Вернуться наверх
Реклама
Карбофос
Заголовок сообщения: Re: LED Driver на Attiny13A
Добавлено: Вт сен 07, 2021 19:16:27
Опытный кот
Карма: -2
Рейтинг сообщений: -23
Зарегистрирован: Сб окт 22, 2016 17:33:32Сообщений: 760Откуда: кг
Рейтинг сообщения: 0
В этом фрагменте вы сбрасываете счетчики в 0.
Поэтому, я предложил вам переписать эту функцию, т.к. логика в ваших сравнениях отсутствует.
Код:
if ((adc_raw <= 207)&&(adc_raw > 183)) { if (countMode == 1) { PORTB = 0b00000111; timer1 = 0; timer2 = 0; } if (countMode == 0) { PORTB = 0b00000101; timer1 = 0; timer2 = 0; } }
Вернуться наверх
Реклама
Bondosha
Заголовок сообщения: Re: LED Driver на Attiny13A
Добавлено: Вт сен 07, 2021 19:20:52
Зарегистрирован: Вт авг 07, 2018 09:44:46Сообщений: 66
Рейтинг сообщения: 0
Карбофос , допустим, а разве они в следующих условиях не набирают заново счет?
Вернуться наверх
Карбофос
Заголовок сообщения: Re: LED Driver на Attiny13A
Добавлено: Вт сен 07, 2021 19:27:25
Опытный кот
Карма: -2
Рейтинг сообщений: -23
Зарегистрирован: Сб окт 22, 2016 17:33:32Сообщений: 760Откуда: кг
Рейтинг сообщения: 0
А следующие условные блоки точно получают управление?
Вернуться наверх
Реклама
Bondosha
Заголовок сообщения: Re: LED Driver на Attiny13A
Добавлено: Вт сен 07, 2021 19:29:36
Зарегистрирован: Вт авг 07, 2018 09:44:46Сообщений: 66
Рейтинг сообщения: 0
Карбофос , ну да, где условие ниже 183 зажигает лампочку красную, но на этом останавливается и не переходит к таймерному условию
Вернуться наверх
Реклама
Карбофос
Заголовок сообщения: Re: LED Driver на Attiny13A
Добавлено: Вт сен 07, 2021 20:58:01
Опытный кот
Карма: -2
Рейтинг сообщений: -23
Зарегистрирован: Сб окт 22, 2016 17:33:32Сообщений: 760Откуда: кг
Рейтинг сообщения: 0
183 соотв-ет 3.14 вольт. Если это LiIon - то аккумулятор разряжен. Опять-же, если говорим про LiIon, на 3.7 вольт значение будет ~215, 3.3 вольт ~192.
Вернуться наверх
Реклама
Bondosha
Заголовок сообщения: Re: LED Driver на Attiny13A
Добавлено: Вт сен 07, 2021 21:47:04
Зарегистрирован: Вт авг 07, 2018 09:44:46Сообщений: 66
Рейтинг сообщения: 0
Карбофос , это я знаю, пока отметила примерные значения, чтоб хоть как-то запустить, а потом уже поправлю
Вернуться наверх
Карбофос
Заголовок сообщения: Re: LED Driver на Attiny13A
Добавлено: Вт сен 07, 2021 21:54:23
Опытный кот
Карма: -2
Рейтинг сообщений: -23
Зарегистрирован: Сб окт 22, 2016 17:33:32Сообщений: 760Откуда: кг
Рейтинг сообщения: 0
Да уж.
timer1 и timer2 сейчас переменные не работают, красная лампочка зажигается и все, как будто той части нет, там где timer2 мигает само по себе по timerADC
timer2 у вас нигде не используется.
2) При полунажатии на кнопку должен переключиться режим, экономящий яркость - 1-ки подаем на PB0 и PB1
Объяcните, как эта кнопка выглядит, как она включена, и что при ее "полунажатии" происходит. Фото.
Вернуться наверх
Bondosha
Заголовок сообщения: Re: LED Driver на Attiny13A
Добавлено: Ср сен 08, 2021 06:19:02
Зарегистрирован: Вт авг 07, 2018 09:44:46Сообщений: 66
Рейтинг сообщения: 0
Карбофос , там timer2 вместо timerADC в куске после 183, записала там ADC, чтоб показать, что работает только с ним. кнопка KAN-15A, замыкается полностью при нажатии, при полунажатии контакты на пару секунд размыкаются. кнопка только для включения и переключения яркости, при нажатии просто единичка на PB1, где дополнительный резистор стоит, который уменьшает свечение, фото этого не знаю зачем. Подключена к верхнему резистору на 30кОм
Вернуться наверх
Реклама
slav0n
Заголовок сообщения: Re: LED Driver на Attiny13A
Добавлено: Ср сен 08, 2021 09:21:52
Опытный кот
Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15Сообщений: 882Откуда: Харьков
Рейтинг сообщения: 0
Bondosha , тебе ж Карбофос показал правильную конструкцию сравнения adc_raw, что бы сама не путалась и других не путала
_________________ ohmycode! primuss3.com
Вернуться наверх
Bondosha
Заголовок сообщения: Re: LED Driver на Attiny13A
Добавлено: Ср сен 08, 2021 18:36:47
Зарегистрирован: Вт авг 07, 2018 09:44:46Сообщений: 66
Рейтинг сообщения: 0
slav0n , даже с этой правильной конструкцией не работает как надо, представь себе
Вернуться наверх
slav0n
Заголовок сообщения: Re: LED Driver на Attiny13A
Добавлено: Чт сен 09, 2021 08:37:19
Опытный кот
Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15Сообщений: 882Откуда: Харьков
Рейтинг сообщения: 0
да как же в нем можно разобраться, если оно такое непричесанное.
предлагаю расческу -
http://format.krzaq.cc/
_________________ ohmycode! primuss3.com
Вернуться наверх
Bondosha
Заголовок сообщения: Re: LED Driver на Attiny13A
Добавлено: Пн сен 13, 2021 17:39:42
Зарегистрирован: Вт авг 07, 2018 09:44:46Сообщений: 66
Рейтинг сообщения: 0
Пока вот такой конечный вариант, и опять помеха на уровне 2.3-2.5 В в виде постоянного мигания, как будто перекрывает друг друга (между режимом с миганием раз в 3 секунды и разряженным режимом). Как в итоге это поправить?
Код:
#ifndef MAIN_H_ #define MAIN_H_ #define F_CPU 1200000UL #include <util/delay.h> #include <avr/io.h> #include <avr/sleep.h> #include <avr/interrupt.h> #include <stdbool.h> // bool in C99 #define nop __asm__ __volatile__ ("nop"); typedef uint8_t u8; typedef uint16_t u16; int main(void); static void setup(void); static void wakeup(void);; static u8 bat_getvoltage(void); #endif /* MAIN_H_ */ #include <util/delay.h> #include <avr/io.h> #include <avr/sleep.h> #include <avr/interrupt.h> #include <stdbool.h> // bool in C99 int count = 0; volatile uint8_t timer1 = 0; volatile uint8_t timer2 = 0; volatile uint8_t timerADC = 0; volatile uint8_t countMode = 0; //????? ?????????? ?????? volatile uint8_t reqChangeMode = 0; //????, ???????????? ????? ????????? ???????? ????? u8 adc_raw = 0; volatile uint8_t timerADC2 = 0; ISR(TIM0_COMPA_vect) { knopka_check(); bat_check(); } ISR(TIM0_OVF_vect){} u8 bat_getvoltage_knopka(void) { _delay_us(50); ADCSRA |= (1 << ADSC); while (ADCSRA & (1 << ADSC)); return ADCH; } void bat_check(void) { u8 adc_raw = bat_getvoltage(); if ((adc_raw <= 207)&&(adc_raw > 183)) { if (countMode == 1) { PORTB = 0b00000111; } else if (countMode == 0) { PORTB = 0b00000101; } } else if ((adc_raw <= 183)&&(adc_raw > 130)) { if (countMode == 1) { timer1++; PORTB = 0b00001011; if(timer1 == 100) { PORTB = 0b00001000; timer1 = 0; } } else if (countMode == 0) { timer1++; PORTB = 0b00001001; if(timer1 == 100) { PORTB = 0b00001000; timer1 = 0; } } } else if (adc_raw <= 130) { if (countMode == 1) { timer2++; PORTB = 0b00001111; if (timer2 >= 3) { PORTB = 0b00001100; } if (timer2 >= 103) { PORTB = 0b00001111; timer2 = 0; } } else if (countMode == 0) { timer2++; PORTB = 0b00001101; if (timer2 >= 3) { PORTB = 0b00001100; } if (timer2 >= 103) { PORTB = 0b00001101; timer2 = 0; } } } else if (adc_raw > 210) { if (countMode == 1) { PORTB = 0b00001111; } else if (countMode == 0) { PORTB = 0b00001101; } } else if (adc_raw < 30) { DDRB = 0b00000011; PORTB = 0b00000000; } } void knopka_check(void) { u8 adc_knopki = bat_getvoltage_knopka(); if (adc_knopki < 90) { if (count < 250) count++; } else { if (count > 0) count--; if ((count >= 4)&&(count < 50)) { countMode = (countMode + 1) & 0x1; reqChangeMode = 1; count = 0; } } if (reqChangeMode) { //???? ????????? ???????? ????? reqChangeMode = 0; //???????? ????????? switch (countMode) { //?????????? ????? ?????? case 0: { PORTB = 0b00001101; } break; case 1: { PORTB = 0b00001111; } break; } } } int main(void) { setup(); sei (); while(1) { } } void setup(void){ ADMUX = (1 << ADLAR) | (1 << REFS0) | (1 << MUX1) | (0 << MUX0); ADCSRA |= (1 << ADEN)|(1 << ADPS2)|(1 << ADPS1)|(1 << ADATE); // Предделитель на 64 (частота АЦП 125kHz) ADCSRB = (1 << ADTS1)|(1 << ADTS0); // Выключаем аналоговый компаратор ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (1<<ACI) | (0<<ACIE) | (0<<ACIS1) | (0<<ACIS0); TCCR0B = (0 << CS02) | (1 << CS01) | (1 << CS00 ); // тактовый генератор CLK/64 TCCR0A = (0 << WGM02) | (1 << WGM01) | (0 << WGM00); // Режим CTC OCR0A = 69; TCNT0 = 0; TIMSK0|=(1<<OCIE0A)|(0<<TOIE0); DDRB = 0b00001111; PORTB = 0b00001101; wakeup(); } void wakeup(void) { ADCSRA |= (1 << ADSC); } u8 bat_getvoltage(void) { _delay_us(50); ADCSRA |= (1 << ADSC); while ((ADCSRA & (1<<ADIF))==0); ADCSRA|=(1<<ADIF); return ADCH; }
Вернуться наверх
slav0n
Заголовок сообщения: Re: LED Driver на Attiny13A
Добавлено: Пн сен 13, 2021 19:22:04
Опытный кот
Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15Сообщений: 882Откуда: Харьков
Рейтинг сообщения: 0
написано много лишнего.
допустим такое:
Код:
else if ((adc_raw <= 183) && (adc_raw > 130)) { if (countMode == 1) { timer1++; PORTB = 0b00001011; if (timer1 == 100) { PORTB = 0b00001000; timer1 = 0; } } else if (countMode == 0) { timer1++; PORTB = 0b00001001; if (timer1 == 100) { PORTB = 0b00001000; timer1 = 0; } } }
надо писать примерно так:
Код:
else if ((adc_raw <= 183) && (adc_raw > 130)) { if (++timer1 == 100) { timer1 = 0; PORTB = 0b1000; } else PORTB = (countMode) ? 0b1011 : 0b1001; }
_________________ ohmycode! primuss3.com
Вернуться наверх
Bondosha
Заголовок сообщения: Re: LED Driver на Attiny13A
Добавлено: Пн сен 13, 2021 19:53:00
Зарегистрирован: Вт авг 07, 2018 09:44:46Сообщений: 66
Рейтинг сообщения: 0
slav0n , допустим, но мне бы лучше не по сокращению кода, а именно по проблеме помощь
Вернуться наверх
slav0n
Заголовок сообщения: Re: LED Driver на Attiny13A
Добавлено: Пн сен 13, 2021 19:55:31
Опытный кот
Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15Сообщений: 882Откуда: Харьков
Рейтинг сообщения: 2
да просто никому нет дела до твоего чудокода
_________________ ohmycode! primuss3.com
Вернуться наверх
Bondosha
Заголовок сообщения: Re: LED Driver на Attiny13A
Добавлено: Пн сен 13, 2021 19:58:32
Зарегистрирован: Вт авг 07, 2018 09:44:46Сообщений: 66
Рейтинг сообщения: 0
slav0n , "очень приятно", спасибо. когда приходишь с проблемой, а тыкают в написание
Вернуться наверх
slav0n
Заголовок сообщения: Re: LED Driver на Attiny13A
Добавлено: Пн сен 13, 2021 20:06:22
Опытный кот
Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15Сообщений: 882Откуда: Харьков
Рейтинг сообщения: 2
так проблема же и заключается в написании
_________________ ohmycode! primuss3.com
Вернуться наверх
Bondosha
Заголовок сообщения: Re: LED Driver на Attiny13A
Добавлено: Пн сен 13, 2021 20:09:26
Зарегистрирован: Вт авг 07, 2018 09:44:46Сообщений: 66
Рейтинг сообщения: 0
slav0n , с каких пор помеха вылазит от более длинного написания одного и того же?
Вернуться наверх
slav0n
Заголовок сообщения: Re: LED Driver на Attiny13A
Добавлено: Пн сен 13, 2021 20:18:02
Опытный кот
Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15Сообщений: 882Откуда: Харьков
Рейтинг сообщения: 0
я так понял ты свой код переписывать не хочешь. ну, как хочешь
_________________ ohmycode! primuss3.com
Вернуться наверх
Страница 2 из 6
[ Сообщений: 102 ]
, , , , ,
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения