Светодиодные фонари и световые приборы. Всё о светотехнике.
Вернуться   Форум FONAREVKA.RU Лаборатория Разработка и модификация фонарей Разработка и модификация электроники фонарей
Расширенный поиск
Забыли пароль? Регистрация

  • О нашем проекте
  • Светотехника и световые приборы
  • Правила форума
Проект FONAREVKA.RU специализируется на предоставлении всей необходимой информации по светотехнике:

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

Если у вас есть вопросы по выбору фонарей, аккумуляторов и зарядных устройств ознакомьтесь с FAQ от наших экспертов:

F.A.Q. по выбору фонарей различных типов;
F.A.Q. по выбору аккумуляторов;
F.A.Q. по выбору зарядных устройств.
Ответ  Создать новую тему
Просмотров в теме 17894   Ответов в теме 40   Подписчиков на тему 5   Добавили в закладки 0
Опции темы Поиск в этой теме
Старый 14.02.2014, 13:44 Автор темы   1
Ветеран Фонарёвки
 
Аватар для MSS
 
Регистрация: 28.04.2013
Последняя активность: 08.01.2024 23:25
Адрес: Харьков
Сообщений: 3980
Сказал(а) спасибо: 529
Поблагодарили: 921 раз(а) в 628 сообщениях

По умолчанию Модифицируем драйвер SKYRAY KING под народную прошивку

За основу взята прошивка народного драйвера для тактовой кнопки
от ceramichttps://forum.fonarevka.ru/...
Для того, чтоб понять мои изменения рекомендую с ней ознакомиться.
Изначально в ней очень большой выбор груп режимов, который был уменьшен. Но при желании можно все пересобрать на свой вкус. Благо с каментами там разобраться не проблемма (я мучался с ней пару недель без них)

/*
* LED Driver Tactical Button
*
* Created: 09.04.2013 3:36:20
*
* FIRMWARE VERSION: 1.0
*
* This code is distributed under the GNU Public License
* which can be found at http://www.gnu.org/licenses...
*
* Author: Ceramic https://forum.fonarevka.ru/...
*/
#include<avr/io.h>
#include<avr/delay.h>
#include<avr/interrupt.h>

unsigned char P = 0;
volatile unsigned char B = 0;
unsigned char NB = 0;
volatile unsigned char Cod = 1;
unsigned char adch_val;
unsigned char nV=0;
unsigned char Power=0;
unsigned char Nmode=3;
unsigned char NGroupe=0;
unsigned char Mode[5][3]={{6,6,6},{29,33,36},{73,117,146},{0b00001,0b01000,0b01001},{0b10000,0b10001,0b11001}};//Первые 3 - это с ШИМ. Остальные - режимы без ШИМ, просто включает соответствующий выход
unsigned char volt [4] = {146, 156, 165, 174}; //порог напряжений (для индикации заряда аккум)

static inline void delay_()
{
_delay_ms(800); //задержка 800мс
}

static inline void blink() //моргает диод
{
TCCR0A = 0x00; //ШИМ выключен
PORTB &=~ 0b11001; // ~ знак поразрядного инвертирования PB4 PB3 PB0 выключит все выходы
delay_(); //задержка (800мс)
PORTB |= 0b00001; //включаем выход PB0 (пятая нога, 1 чип 7135)
delay_(); //задержка 800мс
PORTB &=~ 0b00001; //выключаем PB0
}

static inline void Off() // выключаем все и спим
{
Power = 0;
OCR0A = 0x00; //ШИМа нет 0 на выходе
TCCR0B = 0x00; //счетчик выключен
TCCR0A = 0x00; ///ШИМ выключен
PORTB = 0x02; ///0b00000010 выходы выключены PB4 PB3 PB0; PB1 Pull-up - лог "1" пока не нажата кнопка
WDTCR |= (1<<WDCE) | (1<<WDE); //записываем 1 в биты WDCE и WDE для разрешения изменений в течении 4 циклов
WDTCR = 0x00; //отключение вочдог
MCUCR=0x30; //b110000 бит5(SE)=1 спящий режим разрешен.бит4=1 режим сна - power down останавливается практически всё, кроме обработки внешних прерываний, сторжевого таймера
GIMSK=0x40; //b1000000 Bit 6 – INT0: External Interrupt Request 0 Enable
BODCR = 0x03; /*11 Brown-Out Detector Control Register Writing this bit to one turns off BOD in
Power-Down and Stand-By, while writing a zero keeps the BOD active.
First, both BODS and BODSE must be set to one. Second, within four clock cycles,
BODS must be set to one and BODSE must be set to zero*/
BODCR = 0x02; //10
sei();
/*При вызове обработчика любого прерывания бит глобального разрешения прерываний I регистра SREG
status register - регистр состояния сбрасывается в "0"и только по завершении обработки прерывания
снова устанавливается в "1" и разрешает начать обработку следующего прерывания в очереди.
Чтобы установить ручками этот бит существует функция sei(), а чтобы сбросить - cli().
При запуске программы этот бит всегда сброшен и чтобы прерывания срабатывали его нужно установить (вызвать sei()).
*/
asm("sleep"); //переводит МК спать с заданным режимом (powerDown)
MCUCR &=~(1<<SE); //обнуляем бит SE - спящий режим не разрешен
TCCR0B = 0x1; /*
В качестве тактового сигнала выбирается один из выходов
со специального встроенного делителя тактовой частоты.
Для выбора одного из этих сигналов служит специальный регистр TCCR0B
TCCR0B=0x00 таймер остановлен. Можно использовать это значение как выключалку таймера-счетчика
TCCR0B=0x01 деление на единицу
TCCR0B=0x02 деление на 8
TCCR0B=0x03 деление на 64
TCCR0B=0x04 деление на 256
TCCR0B=0x05 деление на 1024 */
}

static inline void SwitchMode() //выбор режимов по заданной комбинации нажатий кнопки
{
unsigned char n;
if (B == 0b00000111) //тройное короткое нажатие < . . . >
{
for (n = 0; n<5; n++) //Индикация напряжения на батарее
// Полностью заряжено – 5 миганий, разряжено – одно мигание
{
blink();
if (adch_val<volt[n]) break; // сравниваем с порогом напряжений volt [4] = {146, 156, 165, 174}
}
delay_();
delay_();
goto m2;
}
else if ((B == 0b00000001) & (Power == 1)) //короткое нажатие < . >
{
if (Nmode<3) Nmode++; // Переключение вверх только в трех средних режимах яркости текущей группы NGroupe
}
else if ((B == 0b00000011) & (Power == 1)) // двойное короткое < . . >
{
if (Nmode>1) Nmode--; //Переключение вниз только в трех средних режимах яркости текущей группы NGroupe
}
else if (B == 0b00010010) //Переключение между группами 1-я: < _ . >
{
NGroupe=0;
blink(); //моргаем светодиодом
}
else if (B == 0b00010110) //Переключение между группами 2-я: < _ . . >
{
NGroupe=1;
blink();
}
else if (B == 0b00011110) //Переключение между группами 3-я: < _ . . . >
{
NGroupe=2;
blink();
}

/*********************************************************************
ниже 5 команд на непосредственное включение сразу
в любом из пяти режимов текущей группы
(1: < _ _ _ >, 2: < . _ >, 3: < . . _ >, 4: < . . . _ >, 5 : < _ _ >)
**********************************************************************/

else if (B == 0b01110000) Nmode=0; //< _ _ _ > самый слабый
else if (B == 0b00100001) Nmode=1; //< . _ >
else if (B == 0b01000011) Nmode=2; //< . . _ >
else if (B == 0b10000111) Nmode=3; //< . . . _ >
else if (B == 0b00110000) Nmode=4; //< _ _ > самый яркий

/*
Пример - назначить на двойное долгое нажатие < _ _ > младший режим;
else if (B == 0b00110000) Nmode=4; => поменять на Nmode=0
Длинное нажатие -- дольше 0,25с, пауза больше 0,5с -- окончание ввода

Пример - удаление строки
else if (B == 0b00110000) Nmode=4;
ограничивает максимальный ток до 1050мА (драйвер на 2800мА), не возможно выбрать макс
*/
/*
Группа режимов выбирается из Mode[5][3]
Для ШИМ первые три:{6,6,6},{29,33,36},{73,117,146} цифры - коэффициент заполнения OCR0A, больше=ярче
Без ШИМ
четвертый режим:
0b00001 = 350мА = 1 чип на пятой ноге, включаем выход PB0
0b01000 = 700мА = 2 чипа на второй ноге, включаем выход PB3
0b01001 = 1050мА = 1чип+2чипа, 5 и 2 нога, включаем выход PB0 и PB3
пятый режим:
0b10000 = 1750мА = 5 чипов на третьей ноге, включаем выход PB4
0b10001 = 2100мА = 1+5 чипов на пятой и третьей ноге, включаем выход PB0 и PB4
0b11001 = 2800мА = все 8 чипов, включены выход PB0, PB4, PB3

Расположение выходов МК
PB0 = 5 нога
PB1 = 6 нога (INT0) и кнопка
PB2 = 7 нога
PB3 = 2 нога
PB4 = 3 нога
PB5 = 1 нога

6-й вывод для кнопки, только замыканием этого вывода на землю
можно разбудить драйвер из глубокой спячки - прерывание INT0
*/
else if ((Power == 0) & (B == 0b00010000)); //Включение длинным нажатием < _ >
else
{
if ((Power == 0) || (B == 0b00010000)) Off(); //Выключение длинным нажатием < _ >
goto m2;
}
Power = 1;

m2: Cod=0;
n=Mode[Nmode][NGroupe];
if (Power==1)
{
TCCR0A = 0x00; //выключаем ШИМ
PORTB &=~ 0b11001; //~ знак поразрядного инвертирования выключаем все выходы PB4 PB3 PB0
if (Nmode>2) PORTB |= n; //Nmode>2 включает согласно режиму соответствующие выходы PB0 PB3 PB4 без ШИМ
else //выбран режим с ШИМ т.е. первые три в Mode
{
TCCR0A = 0x83;
/*задаем режим работы ШИМ 0b100000011 -011 FAST PWM выход ШИМ на PB0
COM0A1=1|COM0A0=0|COM0B1|COM0B0|-|-|WGM01=1|WGM00=1

Микроконтроллер ATtiny13 имеет два независимых канала ШИМ.
Выход канала, который мы используем, называется OC0A (выходит на PB0).
А другой канал называется OC0B (выходит на PB1)

Установив COM0A1 (восьмой бит) = 1 и COM0A0 (седьмой бит) = 0, мы выбираем режим сброса OC0A при совпадении,
и установки OC0A при достижении конца.
Это означает, что в тот момент, когда значение счетного регистра TCNT0 таймера
окажется равным значению регистра OCR0A, выход OC0A (PB0) будет сброшен в "0".
Когда же таймер досчитает до своего максимального значения (TCNT0 = 255),
на выходе OC0A установится логическая "1".
Изменяя значение OC0A, можно менять ширину выходного импульса.
*/
OCR0A = n; //режим яркости в зависимости от группы режимов NGroupe и Mode
/*
на выходе PB0 микроконтроллера (ножка 5) будет присутствовать ШИМ сигнал
с заполнением пропорционально значению регистра OCR0A
OCR0A=0; — ШИМа небудет, ноль на выходе
OCR0A=127; — на выходе ровный меандр с заполнением 50/50
OCR0A=255; — на выходе единица, ШИМа нет
*/
}
}
else Off(); //выключаем фонарь
}

void main(void) __attribute__((__noreturn__));
void main(void)
/*
Очень хороший приемчик - сделать функцию main ничего не возвращающей.
Позволяет съэкономить на ненужных push и pop целых 36 байт!
По умолчанию функция main обычно определена как int main (void)
*/

{
DDRB = 0b11001; //порт PB4, PB3, PB0 настроен как выход; PB1 вход
CLKPR = 0x80; //команды настройки регистра внутреннего делителя частоты
CLKPR = 0x01; /*01-делитель=1 CLKPR = 0x80 = для этого регистра для изменения делителя необходимо записать единичку в седьмой бит,
после чего микроконтроллер даст изменить и выбрать необходимый делитель в первых четырех битах этого регистра.
После того, как пройдет четыре такта выполнения команд процессора, изменить регистр будет уже нельзя.
Нужно снова сначала изменить седьмой бит CLKPR=0x80 а затем указать делитель CLKPR=нужный делитель
*/
ACSR = 0x80; /*10000000 Analog Comparator Control and Status Register – ACSR
установка единицы в Bit 7 – ACD: Analog Comparator Disable (0х80) отключает аналоговый компаратор,
его можно выключить в любой момент, это приводит к снижению потребления электричества
*/
ADMUX = 0x61; /*01100001 ADC Multiplexer Selection Register
внешний источник напряжения, вход PB2
Bit 6 – REFS0: Reference Selection Bit
0 VCC used as analog reference.
1 Internal Voltage Reference.
Bit 5 – ADLAR: ADC Left Adjust Result
The ADLAR bit affects the presentation of the ADC conversion result in the ADC Data
Register. Write one to ADLAR to left adjust the result.
Bits 1:0 – MUX1:0: Analog Channel Selection Bits
MUX1..0 Single Ended Input
00 ADC0 (PB5)
01 ADC1 (PB2) наш вариант -вход с делителя
10 ADC2 (PB4)
11 ADC3 (PB3)
*/
while(1)
{
if (Cod==1) SwitchMode(); //Основной цикл
}
}

ISR(INT0_vect) //процедура обработки прерывания INT0 (кнопка порт PB1)
{
GIMSK=0x00; /*Если разряд INT1(бит7)/INT0(бит6) установлен в лог. 1,
то внешнее прерывание по входу INT1/INT0 будет разрешено до тех пор,
пока установлен в лог. 1 разряд I в регистре состояния SREG. */
if (P==0)
{
P=1; //P меняет свое значение при обработке прерывания по вочдог
B=0;
}
else if (P==2) P=3;
else if (P==4) P=6;
WDTCR |= (1<<WDCE) | (1<<WDE); //записываем 1 в биты WDCE и WDE для разрешения изменений в течении 4 циклов
/*бит разрешения изменений WDCE и бит включения WDE
для включения достаточно установить бит WDE в единичное состояние,
одновременно, если надо, устанавливается и период таймера битами WDP2. .0 того же регистра,
задающими коэффициент деления генератора
(состояние 000 соответствует минимальному периоду ~15 мс, 110 — примерно 1 с, 111 задает максимальный период немного менее 2 с).
Bit 7 - WDTIF: Watchdog Timer Interrupt Flag
Bit 6 - WDTIE: Watchdog Timer Interrupt Enable
Bit 4 - WDCE: Watchdog Change Enable
This bit is used in timed sequences for changing WDE and prescaler bits. To clear the
WDE bit, and/or change the prescaler bits, WDCE must be set.
Once written to one, hardware will clear WDCE after four clock cycles.
Bit 3 - WDE: Watchdog System Reset Enable
WDE is overridden by WDRF in MCUSR. This means that WDE is always set when
WDRF is set. To clear WDE, WDRF must be cleared first. This feature ensures multiple
resets during conditions causing failure, and a safe start-up after the failure.
Bit 5, 2..0 - WDP3..0: Watchdog Timer Prescaler 3, 2, 1 and 0
WDP3 WDP2 WDP1 WDP0 Number of WDT Oscillator Cycles
0 0 0 0 2K (204 cycles 16 ms
0 0 0 1 4K (4096) cycles 32 ms
0 0 1 0 8K (8192) cycles 64 ms
0 0 1 1 16K (16384) cycles 0.125 s
0 1 0 0 32K (3276 cycles 0.25 s
0 1 0 1 64K (65536) cycles 0.5 s
0 1 1 0 128K (131072) cycles 1.0 s
0 1 1 1 256K (262144) cycles 2.0 s
1 0 0 0 512K (52428 cycles 4.0 s
1 0 0 1 1024K (1048576) cycles 8.0 s
*/
WDTCR = 0x40; //b01000000 Watchdog Timer Interrupt Enable установка таймера вочдог в 16мс для отслеживания дребезга контактов
}

ISR(WDT_vect)
{
GIMSK=0x00;//внешнее прерывание по входу INT1/INT0 не разрешено
if (P==0) //если кнопка не была нажата
{
DDRB = 0x1B; //0011011 PB1(кнопка) настроен как выход, дальше станет землей для делителя
PORTB &= ~_BV(PB1); /*сбросить бит PB1, на выходе "0"
это сделано для периодического соединения делителя на землю и замера напряжения аккума, когда кнопку не трогают */

ADCSRA = 0x8F; /* замеряем напряжение на аккуме
10001111 включение ADC, включение прерывания ADIE, делитель частоты обработки установлен 128
Bit 7 – ADEN: ADC Enable
Writing this bit to one enables the ADC. By writing it to zero, the ADC is turned off. Turning
the ADC off while a conversion is in progress, will terminate this conversion.
Bit 6 – ADSC: ADC Start Conversion
In Single Conversion mode, write this bit to one to start each conversion. In Free Running
mode, write this bit to one to start the first conversion.
When the conversion is complete, it returns to zero. Writing zero to this bit has no effect.
Bit 5 – ADATE: ADC Auto Trigger Enable
When this bit is written to one, Auto Triggering of the ADC is enabled. The ADC will start
a conversion on a positive edge of the selected trigger signal. The trigger source is
selected by setting the ADC Trigger Select bits, ADTS in ADCSRB.
Bit 4 – ADIF: ADC Interrupt Flag
This bit is set when an ADC conversion completes and the data registers are updated.
Bit 3 – ADIE: ADC Interrupt Enable
When this bit is written to one and the I-bit in SREG is set, the ADC Conversion Complete
Interrupt is activated.
Bits 2:0 – ADPS2:0: ADC Prescaler Select Bits
These bits determine the division factor between the system clock frequency and the
input clock to the ADC.
ADPS2 ADPS1 ADPS0 Division Factor
0 0 0 2
0 0 1 2
0 1 0 4
0 1 1 8
1 0 0 16
1 0 1 32
1 1 0 64
1 1 1 128 = наш вариант
*/
WDTCR |= (1<<WDCE) | (1<<WDE);//записываем 1 в биты WDCE и WDE для разрешения изменений в течении 4 циклов
WDTCR = 0x00;//выключение вочдог
ADCSRA |= (1<<ADSC); //запуск единичного ADC преобразования
}
else //кнопку нажимали, значение Р после обработки прерывания INT0 изменилось и не равно 0
{
if ((bit_is_set(PINB,PB1))) /*кнопка не нажата
проверили "1" на PB1
PB1 настроен как вход с подтягивающим резистором
на входе "1" если кнопка УЖЕ не нажата */
{ //Здесь получаем КОРОТКОЕ нажатие кнопки
if ((P==1) || (P==4)) /*лог ИЛИ;
Р=1 если была нажата кнопка первый раз <.>(короткое нажатие).
Дальше ничего не делаем, т.к. контакт пропал менее чем за 16мс
(установлен вочдог в ISR(INT0_vect))
*/
{
if (P==4) Cod=1; //закончен ввод комбинации нажатий
NB=0;
P=0;
}
else
{
if (P==3) //было нажатие, дольше 16мс, кнопку отпустили
{ //короткое нажатие кнопки
B|=(1<<NB); //В число "В" в регистр № (NB) записывается единица
NB++; // увеличиваем на 1, т.о. единички ползут от 0 бита в лево при коротком нажатии
}
P=4;
}
WDTCR |= (1<<WDCE) | (1<<WDE);// записываем 1 в биты WDCE и WDE для разрешения изменений в течении 4 циклов
WDTCR = 0x46; //0b01000110 изменяет таймаут = 128K (131072) cycles 1.0 s
MCUCR=0x00;//The low level of INT0 generates an interrupt request т.е. нажатие кнопки вызывает прерывание
}
else //кнопка еще нажата здесь получаем ДЛИННОЕ нажатие кнопки
{
if (P==5)
{
WDTCR |= (1<<WDCE) | (1<<WDE);//записываем 1 в биты WDCE и WDE для разрешения изменений в течении 4 циклов
WDTCR = 0x00; //выключаем вочдог
}
else
{
if (P==2)
{ //это длинное нажатие кнопки
P=5;
B|=((1<<NB)<<4);//В число "В" в регистр № (NB+4) записывается единица
NB++; // увеличение на единицу
WDTCR |= (1<<WDCE) | (1<<WDE); //записываем 1 в биты WDCE и WDE для разрешения изменений в течении 4 циклов
WDTCR = 0x00; //выключаем вочдог
}
else //кнопка была нажата Р=1 и осталась нажатой = получили одно длинное нажатие и Р=2
{
P=2;//определили длинное нажатие кнопки <__>
WDTCR |= (1<<WDCE) | (1<<WDE);// записываем 1 в биты WDCE и WDE для разрешения изменений в течении 4 циклов
WDTCR = 0x44; //0b01000100 изменяем таймаут. 32K (3276 cycles 0.25 s
}
}

MCUCR=0x03;// The rising edge of INT0 generates an interrupt request т.е. при отпускании нажатой кнопки прерывание
}
GIMSK=0x40;//0b01000000 внешнее прерывание по INT0 разрешено
}
}

ISR (ADC_vect) //обработка прерывания измерения напряжения
{
adch_val = ADCH; //присваиваем измеренное значение напряжения переменной
ADCSRA = 0; //выключаем ADC
DDRB = 0x19; //11001 настраиваем на выход PB4,PB3,PB0
PORTB |= _BV(PB1); //установить бит PB1//т.о. делитель отсоединяем от земли и он не потребляет ток
if (adch_val<146) //146 - минимальное напряжение на аккуме - задается только в ЭТОМ месте программы
{
Cod=1; //перейдем в изменение режима по выходу из прерывания
B=0b00000011; //изменяем режим на 1 вниз = такое сочетание <..> выбрано для перехода на режим вниз
if (adch_val<130) //сравниваем полученное значение с минимально возможным 130 - задано только здесь в программе
{
nV++; //увеличиваем на 1
if (nV>3) B=0b00010000; //выключаем фонарь после трехкратно измеренного низкого значения - код <_> нажатия кнопки
}
else nV=0; //напряжение подросло после смены режима, еще не минимально допустимое, а выше. сбрасываем в ноль nV
}
WDTCR |= (1<<WDCE) | (1<<WDE); //записываем 1 в биты WDCE и WDE для разрешения изменений в течении 4 циклов
WDTCR = 0x61; //0b01100001 изменяем таймаут вочдога 1024K (1048576) cycles 8.0 s //вочдог был выключен при измерении напряжения
GIMSK=0x40; //0b01000000 внешнее прерывание по INT0 разрешено
}


Теперь про драйвер. В KING стоит драйвер на трех полевиках AOD436 которые открываются с помощью AMC7136. Для ограничения тока в каждом канале стоят резисторы 0,1 Ом (для тока 1,5А - три штуки в параллель, для тока в 3А - 6штук). Т.е. напряжение на входе обратной связи АМС7136 = 50мВ.
Изначально драйвер имеет кошмарный ШИМ в 192Гц.
После замены микроконтроллера на ATtyni13 частота ШИМ выбрана 1,1кГц. При 9кГц не успевают отрабатывать AMC7136 - на их выходе ничего нет.

1. Потребление фонаря в спящем режиме (выключенном): 0,2мА.
2. 4 уровня яркости.
3. Переключение вверх - короткое нажатие < . > (в макс 4 режим не переходит) и вниз - двойное короткое < . . > (в мин 1 режим не переходит).
4. Включение самого слабого < _ _ > и самого яркого < _ _ _ > режима: двумя и тремя длинными нажатиями.
5. Включение/выключение длинным нажатием (< _ >). Включается в том режиме, в котором выключился.
6. Возможно непосредственное включение макс и мин режимов ( < _ _ _ >, < _ _ >)
7. Высасыватель батареи – переключение режимов, при низком напряжении, вниз.
В первый режим (мин), принудительного переключение нет.
При напряжении меньше 2.9В -- отключение фонаря.
8. Индикация напряжения на батарее, тройное короткое нажатие < . . . >. Заряжено – 5 миганий, разряжено – одно мигание.

Железная переделка драйвера.
Выпаиваем старый МК. ATtyni13 на проводках подпаиваем согласно рисунку. Делитель напряжения собрал на 20кОм и 5,1кОм - тоже подпаиваем в удобное место.


Перерезаем дорожки к управлению AMC7136 и припаиваем туда провода от МК.
Соединяем между собой Drain (средний вывод) полевиков AOD436, поэтому диоды получаются соединенными параллельно.

Фьюзы как в прошивке ceramic

з.ы. Я пробовал делать один выход с ШИМ на три независимых полевика - но их отбалансировать не получилось (резюками по 0,1Ом в ОС) - в мунлайте один светится, два других уже еле тлеют/не горят.
Поэтому так сделал...
Но, никто не заставляет так же делать, как у меня. В программе можно легко переделать количество ножек на выход. Можно оставить только одну PB0 с ШИМ и без, и управлять тремя транзисторами без переделки дорожек. Будут три канала, 1,1кГц ШИМ, режимов сколько захотите

Миниатюры
Нажмите на изображение для увеличения
Название: IMG.jpg
Просмотров: 3263
Размер:	93.7 Кб
ID:	98149
Вложения
Тип файла: zip KING.zip (4.3 Кб, 219 просмотров)
MSS вне форума   Ответить с цитированием Вверх
Поблагодарили: 4 раз(а)
Ikepod (06.12.2014), Leeo74 (27.11.2023), shurko_3 (19.03.2014), vladik0000 (23.02.2014)
Старый 19.03.2014, 17:07 Автор темы   2
MSS
Ветеран Фонарёвки
 
Аватар для MSS
 
Регистрация: 28.04.2013
Последняя активность: 08.01.2024 23:25
Адрес: Харьков
Сообщений: 3980
Сказал(а) спасибо: 529
Поблагодарили: 921 раз(а) в 628 сообщениях

По умолчанию Re: Модифицируем драйвер SKYRAY KING под народную прошивку

вместо рампинга добавил термоконтроль
https://forum.fonarevka.ru/...
MSS вне форума   Ответить с цитированием Вверх
Поблагодарили: 1 раз
shurko_3 (19.03.2014)
Старый 19.03.2014, 17:43   3
shurko_3

 
Аватар для shurko_3
 
Регистрация: 06.06.2010
Последняя активность: Вчера 11:44
Адрес: Беларусь, Минск
Сообщений: 2013
Сказал(а) спасибо: 693
Поблагодарили: 856 раз(а) в 359 сообщениях

По умолчанию Re: Модифицируем драйвер SKYRAY KING под народную прошивку

MSS,

спасибо за работу.
shurko_3 вне форума   Ответить с цитированием Вверх
Старый 19.03.2014, 18:03 Автор темы   4
MSS
Ветеран Фонарёвки
 
Аватар для MSS
 
Регистрация: 28.04.2013
Последняя активность: 08.01.2024 23:25
Адрес: Харьков
Сообщений: 3980
Сказал(а) спасибо: 529
Поблагодарили: 921 раз(а) в 628 сообщениях

По умолчанию Re: Модифицируем драйвер SKYRAY KING под народную прошивку

Самому интересно. Потестирую, наверняка еще косяки какие-то вылезут.
MSS вне форума   Ответить с цитированием Вверх
Старый 19.03.2014, 18:57   5
shurko_3

 
Аватар для shurko_3
 
Регистрация: 06.06.2010
Последняя активность: Вчера 11:44
Адрес: Беларусь, Минск
Сообщений: 2013
Сказал(а) спасибо: 693
Поблагодарили: 856 раз(а) в 359 сообщениях

По умолчанию Re: Модифицируем драйвер SKYRAY KING под народную прошивку

на форуме стало все больше и больше прошивок(переделок) народного драйвера, это очень радует.
shurko_3 вне форума   Ответить с цитированием Вверх
Старый 19.03.2014, 19:01   6
Tamagotchi

 
Аватар для Tamagotchi
 
Регистрация: 07.09.2011
Последняя активность: 04.08.2023 18:59
Адрес: Волгоградская обл.
Сообщений: 13705
Сказал(а) спасибо: 3333
Поблагодарили: 7886 раз(а) в 3523 сообщениях

Отправить сообщение для Tamagotchi с помощью Skype™
По умолчанию Re: Модифицируем драйвер SKYRAY KING под народную прошивку

Tamagotchi вне форума   Ответить с цитированием Вверх
Старый 19.03.2014, 19:28   7
shurko_3

 
Аватар для shurko_3
 
Регистрация: 06.06.2010
Последняя активность: Вчера 11:44
Адрес: Беларусь, Минск
Сообщений: 2013
Сказал(а) спасибо: 693
Поблагодарили: 856 раз(а) в 359 сообщениях

По умолчанию Re: Модифицируем драйвер SKYRAY KING под народную прошивку

лучше роше 170 брать, корпус поприличнее, больше возможностей для творчества.
shurko_3 вне форума   Ответить с цитированием Вверх
Старый 19.03.2014, 19:39   8
INFERION

 
Аватар для INFERION
 
Регистрация: 07.04.2013
Последняя активность: 13.06.2023 02:24
Адрес: Украина, Полтава
Сообщений: 5774
Сказал(а) спасибо: 340
Поблагодарили: 8154 раз(а) в 2385 сообщениях

По умолчанию Re: Модифицируем драйвер SKYRAY KING под народную прошивку

Цитата:
Посмотреть сообщение Сообщение от Tamagotchi :
Что-то я себе кинга захотел...
Нафиг. Бестолковое поделие, имхо. Даже под переделку скучное... Я себе взял Roche M170. Земля и небо...
Хотя за полтинник можно взять подержанный NiteCore TM11, но как фонарь он такой же бестолковый как и Кинг (хоть качество и выше на порядок, да и управление удобнее) - рефлектор хрень. Если оптику менять, тогда толк будет.

[Исправлено: INFERION, 19.03.2014 в 19:41]
INFERION вне форума   Ответить с цитированием Вверх
Старый 19.03.2014, 20:02   9
DeathDoom
Recovery
 
Аватар для DeathDoom
 
Регистрация: 19.03.2013
Последняя активность: 12.03.2024 19:49
Адрес: Крым. СЕВАСТОПОЛЬ.
Сообщений: 132
Сказал(а) спасибо: 57
Поблагодарили: 40 раз(а) в 22 сообщениях

По умолчанию Re: Модифицируем драйвер SKYRAY KING под народную прошивку

Цитата:
Посмотреть сообщение Сообщение от INFERION :
Нафиг. Бестолковое поделие, имхо. Даже под переделку скучное... Я себе взял Roche M170. Земля и небо...
Хотя за полтинник можно взять подержанный NiteCore TM11, но как фонарь он такой же бестолковый как и Кинг (хоть качество и выше на порядок, да и управление удобнее) - рефлектор хрень. Если оптику менять, тогда толк будет.
в двух словах о хреновидном рефлекторе можно услышать? что не так-то?
__________________
Petzl e+LITE. Sofirn SP36. Astrolux MF-01, C8. Convoy M2. Supbeam x40(xm-l2) в ремонте, Supbeam k40(xm-l2 dedomed, driver mod 6A), MTE H8-1S (xhp50.2), Trustfire x6(xm-l2 dedomed), Trustfire z6(xm-l2 dedomed), DQG EDC 18650 1-rst, Roche f6, Varta(4 Watt LED Camping Lantern 3D). Ну, и мелочевка.
DeathDoom вне форума   Ответить с цитированием Вверх
Старый 19.03.2014, 20:09   10
INFERION

 
Аватар для INFERION
 
Регистрация: 07.04.2013
Последняя активность: 13.06.2023 02:24
Адрес: Украина, Полтава
Сообщений: 5774
Сказал(а) спасибо: 340
Поблагодарили: 8154 раз(а) в 2385 сообщениях

По умолчанию Re: Модифицируем драйвер SKYRAY KING под народную прошивку

Неглубокий он. Как результат - тусклый желтый хотспот с бесполезной синюшной широкой засветкой. Ни в какое сравнение с нормальной TIR оптикой тех же размеров. Глубокие рефлекторы (как в TM15 и Roche M170) терпеть ещё можно, но с TIR они всё равно ни в какое сравнение не идут. Кто сравнивал свет TM11 или триплозебры (s6330) со светом того же трипла ничий (или просто держал в руках действительно нормальный фонарь) - прекрасно понимает о чём я.

[Исправлено: INFERION, 19.03.2014 в 20:14]
INFERION вне форума   Ответить с цитированием Вверх
Старый 19.03.2014, 20:18   11
DeathDoom
Recovery
 
Аватар для DeathDoom
 
Регистрация: 19.03.2013
Последняя активность: 12.03.2024 19:49
Адрес: Крым. СЕВАСТОПОЛЬ.
Сообщений: 132
Сказал(а) спасибо: 57
Поблагодарили: 40 раз(а) в 22 сообщениях

По умолчанию Re: Модифицируем драйвер SKYRAY KING под народную прошивку

Цитата:
Посмотреть сообщение Сообщение от INFERION :
Неглубокий он. Как результат - тусклый желтый хотспот с бесполезной синюшной широкой засветкой. Ни в какое сравнение с нормальной TIR оптикой тех же размеров. Глубокие рефлекторы (как в TM15 и Roche M170) терпеть ещё можно, но с TIR они всё равно ни в какое сравнение не идут. Кто сравнивал свет TM11 или триплозебры (s6330) со светом того же трипла ничий (или просто держал в руках действительно нормальный фонарь) - прекрасно понимает о чём я.
иначе говоря рефлектор неудачен в симбиозе с хмелем. с эмтэжэ2 картинка полагаю былабы куда интереснее.
DeathDoom вне форума   Ответить с цитированием Вверх
Старый 19.03.2014, 20:36   12
Tamagotchi

 
Аватар для Tamagotchi
 
Регистрация: 07.09.2011
Последняя активность: 04.08.2023 18:59
Адрес: Волгоградская обл.
Сообщений: 13705
Сказал(а) спасибо: 3333
Поблагодарили: 7886 раз(а) в 3523 сообщениях

Отправить сообщение для Tamagotchi с помощью Skype™
По умолчанию Re: Модифицируем драйвер SKYRAY KING под народную прошивку

Цитата:
Посмотреть сообщение Сообщение от INFERION :
Нафиг. Бестолковое поделие, имхо. Даже под переделку скучное... Я себе взял Roche M170. Земля и небо...
похоже я так и сделаю.
Tamagotchi вне форума   Ответить с цитированием Вверх
Старый 19.03.2014, 20:44   13
INFERION

 
Аватар для INFERION
 
Регистрация: 07.04.2013
Последняя активность: 13.06.2023 02:24
Адрес: Украина, Полтава
Сообщений: 5774
Сказал(а) спасибо: 340
Поблагодарили: 8154 раз(а) в 2385 сообщениях

По умолчанию Re: Модифицируем драйвер SKYRAY KING под народную прошивку

Цитата:
Посмотреть сообщение Сообщение от DeathDoom :
иначе говоря рефлектор неудачен в симбиозе с хмелем. с эмтэжэ2 картинка полагаю былабы куда интереснее.
Не знаю. По мне так сам подход у такой оптической схемы неудачный. Захватывается очень мало света, и только на том участке диаграммы направленности светодиодов, где оттенок гораздо теплее. Остальное отправляется в засветку. Нормальная оптика работает со всем светом, и старается устранить разложение спектра на составляющие. Рефлектор на такое просто физически не способен - такая у него конструкция. А у неглубокого эти неприятные эффекты просто ярче выражены. После прогулки с триплозеброй, и стирки своих кроссовок от человеческого коричневого и вонючего... я решил с такой оптикой не связываться...

[Исправлено: INFERION, 19.03.2014 в 20:47]
INFERION вне форума   Ответить с цитированием Вверх
Старый 19.03.2014, 21:45 Автор темы   14
MSS
Ветеран Фонарёвки
 
Аватар для MSS
 
Регистрация: 28.04.2013
Последняя активность: 08.01.2024 23:25
Адрес: Харьков
Сообщений: 3980
Сказал(а) спасибо: 529
Поблагодарили: 921 раз(а) в 628 сообщениях

По умолчанию Re: Модифицируем драйвер SKYRAY KING под народную прошивку

Цитата:
Посмотреть сообщение Сообщение от shurko_3 :
на форуме стало все больше и больше прошивок(переделок) народного драйвера, это очень радует.
Просто к нему были исходники. Самому такое написать не реально, без опыта и каких-то знаний. Применительно к кингу от народного остается только микроконтроллер
Но процесс очень интересный. Это лучше, чем изучать теоретически программирование МК по статьям в инете.
Даже когда написана программа и вроде бы все в ней как надо, она или зависает, или не так работает... Я много раз заливаю ее в МК пока получится то, что примерно хотелось.
Опыта мало совсем.

Транзистор в корпусе TO-92 хорошо зажало между рефлектором и пластиной со светодиодами. Похоже он одинаковый по толщине получился.

[Исправлено: MSS, 19.03.2014 в 22:04]
MSS вне форума   Ответить с цитированием Вверх
Старый 19.03.2014, 21:54   15
Tamagotchi

 
Аватар для Tamagotchi
 
Регистрация: 07.09.2011
Последняя активность: 04.08.2023 18:59
Адрес: Волгоградская обл.
Сообщений: 13705
Сказал(а) спасибо: 3333
Поблагодарили: 7886 раз(а) в 3523 сообщениях

Отправить сообщение для Tamagotchi с помощью Skype™
По умолчанию Re: Модифицируем драйвер SKYRAY KING под народную прошивку

MSS, Лучший способ обучения программированию - написание сразу полезной программы, а не долгое изучение оторванной от практики теории.
Tamagotchi вне форума   Ответить с цитированием Вверх
Старый 19.03.2014, 21:58 Автор темы   16
MSS
Ветеран Фонарёвки
 
Аватар для MSS
 
Регистрация: 28.04.2013
Последняя активность: 08.01.2024 23:25
Адрес: Харьков
Сообщений: 3980
Сказал(а) спасибо: 529
Поблагодарили: 921 раз(а) в 628 сообщениях

По умолчанию Re: Модифицируем драйвер SKYRAY KING под народную прошивку

Да, по вашим с ceramic исходникам и ползаю Если пару месяцев назад для меня это был темный лес, то теперь я могу сказать что, где и зачем. Но до написания своего чего-то я еще не созрел
MSS вне форума   Ответить с цитированием Вверх
Старый 20.03.2014, 17:46 Автор темы   17
MSS
Ветеран Фонарёвки
 
Аватар для MSS
 
Регистрация: 28.04.2013
Последняя активность: 08.01.2024 23:25
Адрес: Харьков
Сообщений: 3980
Сказал(а) спасибо: 529
Поблагодарили: 921 раз(а) в 628 сообщениях

По умолчанию Re: Модифицируем драйвер SKYRAY KING под народную прошивку

После того, как удалил делитель, резистор перед диодом Шотки и еще какой-то диод (это все хозяйчтво осталось от подключения кнопки к PIC контроллеру) потребляемый в выключенном состоянии ток стал 0,05мА. Выделены желтым на фотке.
В варианте с термоконтролем схема включения на рисунке.
Более-менее рабочая прошивка, исходники в архиве
Фьюзы
Low 0x71
Hight 0xFD
Комбинации кнопок в исходнике. запись значения для термоконтроля нажатие < _ . . .>
стирание - нажатие < . . . _>
Миниатюры
Нажмите на изображение для увеличения
Название: King.png
Просмотров: 1845
Размер:	856.4 Кб
ID:	100850 Нажмите на изображение для увеличения
Название: 11225.png
Просмотров: 850
Размер:	18.0 Кб
ID:	100851
Вложения
Тип файла: rar Termo13A.rar (5.1 Кб, 107 просмотров)
MSS вне форума   Ответить с цитированием Вверх
Поблагодарили: 1 раз
shurko_3 (21.03.2014)
Старый 21.03.2014, 15:22 Автор темы   18
MSS
Ветеран Фонарёвки
 
Аватар для MSS
 
Регистрация: 28.04.2013
Последняя активность: 08.01.2024 23:25
Адрес: Харьков
Сообщений: 3980
Сказал(а) спасибо: 529
Поблагодарили: 921 раз(а) в 628 сообщениях

По умолчанию Re: Модифицируем драйвер SKYRAY KING под народную прошивку

Дал на работе поиграться фонарем, в итоге мне сбили настройку термоконтроля и я долго не мог её снова поймать. Значение с которым нормально все работало (2 минуты до перегрева и сброс на режим вниз) было 0х82.
Я думаю, запишу его в память по умолчанию и оставлю по нажатию <. . . _> просто возможность термоконтроль включать/выключать или вобще не буду такой возможности делать. Будет не отключаемым. Заодно места много освободится в памяти.
MSS вне форума   Ответить с цитированием Вверх
Старый 21.03.2014, 17:38 Автор темы   19
MSS
Ветеран Фонарёвки
 
Аватар для MSS
 
Регистрация: 28.04.2013
Последняя активность: 08.01.2024 23:25
Адрес: Харьков
Сообщений: 3980
Сказал(а) спасибо: 529
Поблагодарили: 921 раз(а) в 628 сообщениях

По умолчанию Re: Модифицируем драйвер SKYRAY KING под народную прошивку

В итоге остановился на таком варианте

/*
* Created: 10.02.2014 19:50:34
* Author: Serp
*/
#include "termo13A.h"
#include<avr/io.h>
#include<avr/delay.h>
#include<avr/interrupt.h>

unsigned char P = 0;
volatile unsigned char B = 0;
unsigned char NB = 0;
volatile unsigned char Cod = 1;

//register uint8_t calibrator10 asm("r10"); /* WARNING */
register uint8_t MAX_THEMP asm("r12"); // ìàêñèìàëüíàÿ òåìïåðàòóðà ÷èòàåòñÿ èç EEPROM

unsigned char adch_val;
unsigned char adch_v;
unsigned char adch_t;
unsigned char nV=0;
unsigned char nT=0;
unsigned char Power=0;

unsigned char Nmode=2;//áóäåì ìåíÿòü òðåòüå çíà÷åíèå ØÈÌ ðàìïèíãîì
unsigned char Mode[5]={26,45,95,0b00001,0b1001}; //21 íà Min åëå òëååò, ìàêñ íå îòëè÷àåòñÿ ïî÷òè îò ñðåäíåãî

/*
static NOINLINE void WriteEEPROMByte(uint8_t adress, uint8_t byte)
{
while(EECR & _BV(EEPE));
EEAR = adress; // set address
EEDR = byte; // set data
cli(); // disable interrupts
EECR |= _BV(EEMWE); // set "write enable" bit
EECR |= _BV(EEWE); // set "write" bit
sei();
}
static NOINLINE uint8_t ReadEEPROMByte(uint8_t adress)
{
while(EECR & 0x02);
EEAR = adress; // set address
EECR |= _BV(EERE); // set "read enable" bit
return (EEDR);
}
*/

static inline void blink(uint8_t i) //ìîðãàåò äèîä i-ðàç
{
TCCR0A = 0x00; //ØÈÌ âûêëþ÷åí
PORTB &=~ 0b1001; // ~ çíàê ïîðàçðÿäíîãî èíâåðòèðîâàíèÿ PB3 PB0 âûêëþ÷èò âñå âûõîäû
do{
_delay_ms(50); //çàäåðæêà
PORTB |= 0b00001; //âêëþ÷àåì âûõîä PB0 (ïÿòàÿ íîãà)
_delay_ms(100); //çàäåðæêà
PORTB &=~ 0b00001; //âûêëþ÷àåì PB0
}while(--i);
}
static inline void Off() // âûêëþ÷àåì âñå è ñïèì
{
Power = 0;
OCR0A = 0x00; //ØÈÌà íåò 0 íà âûõîäå
TCCR0B = 0x00; //ñ÷åò÷èê âûêëþ÷åí
TCCR0A = 0x00; ///ØÈÌ âûêëþ÷åí
PORTB = 0x32;//02; 5.4.1 k + ///0b00000010 âûõîäû âûêëþ÷åíû PB4 PB3 PB0; PB1 Pull-up - ëîã "1" ïîêà íå íàæàòà êíîïêà
WDTCR |= (1<<WDCE) | (1<<WDE); //çàïèñûâàåì 1 â áèòû WDCE è WDE äëÿ ðàçðåøåíèÿ èçìåíåíèé â òå÷åíèè 4 öèêëîâ
WDTCR = 0x00; //îòêëþ÷åíèå âî÷äîã
MCUCR=0x30; //b110000 áèò5(SE)=1 ñïÿùèé ðåæèì ðàçðåøåí.áèò4=1 ðåæèì ñíà - power down îñòàíàâëèâàåòñÿ ïðàêòè÷åñêè âñ¸, êðîìå îáðàáîòêè âíåøíèõ ïðåðûâàíèé, ñòîðæåâîãî òàéìåðà
GIMSK=0x40; //b1000000 Bit 6 – INT0: External Interrupt Request 0 Enable
BODCR = 0x03;
BODCR = 0x02; //10
sei();
asm("sleep"); //ïåðåâîäèò ÌÊ ñïàòü ñ çàäàííûì ðåæèìîì (powerDown)
MCUCR &=~(1<<SE); //îáíóëÿåì áèò SE - ñïÿùèé ðåæèì íå ðàçðåøåí
TCCR0B = 0x02; //äåëèòåëü íà 8
}

static inline void SwitchMode()

{
unsigned char n;
if (B == 0b00011110) /// íàæàòèå < _ . . .>
{ if(MAX_THEMP)
{
MAX_THEMP = 0;
blink(5);
Off();
}
else
MAX_THEMP = 0x82;
goto m2;
}
else if ((B == 0b00000001) & (Power == 1)) //êîðîòêîå íàæàòèå < . >
{
if (Nmode<3) Nmode++; // Ïåðåêëþ÷åíèå ââåðõ òîëüêî â òðåõ ñðåäíèõ ðåæèìàõ ÿðêîñòè òåêóùåé ãðóïïû
}
else if ((B == 0b00000011) & (Power == 1)) // äâîéíîå êîðîòêîå < . . >
{
if (Nmode>1) Nmode--; //Ïåðåêëþ÷åíèå âíèç òîëüêî â òðåõ ñðåäíèõ ðåæèìàõ ÿðêîñòè òåêóùåé ãðóïïû
}
else if (B == 0b01110000) Nmode=4; //< _ _ _ > ñàìûé ÿðêèé
else if (B == 0b00110000) Nmode=0; //< _ _ > ñàìûé ñëàáûé
else if ((Power == 0) & (B == 0b00010000)); //Âêëþ÷åíèå äëèííûì íàæàòèåì < _ >
else
{
if ((Power == 0) || (B == 0b00010000)) Off(); //Âûêëþ÷åíèå äëèííûì íàæàòèåì < _ >
goto m2;
}
Power = 1;


m2: Cod=0;
n=Mode[Nmode];
if (Power==1)
{
TCCR0A = 0x00; //âûêëþ÷àåì ØÈÌ
PORTB &=~ 0b1001; //~ çíàê ïîðàçðÿäíîãî èíâåðòèðîâàíèÿ âûêëþ÷àåì âñå âûõîäû PB3 PB0
if (Nmode>2) PORTB |= n; //Nmode>2 âêëþ÷àåò ñîãëàñíî ðåæèìó ñîîòâåòñòâóþùèå âûõîäû PB0 PB3 PB4 áåç ØÈÌ
else
{
TCCR0A = 0x81;
OCR0A = n; //ðåæèì ÿðêîñòè â çàâèñèìîñòè îò ãðóïïû ðåæèìîâ NGroupe è Mode
}
}
else Off();
}

void main(void) __attribute__((__noreturn__));
void main(void)
{
PORTB = 0x30; // 110000 PB4 (òåðìîäàò÷èê), PB5 ïîäòÿæêà ê +
DDRB = 0b1001;
CLKPR = 0x80;
CLKPR = 0x01;
ACSR = 0x80; // 1000 0000 Analog Comparator Disable
ADMUX = 0x61; // 0110 0001 Internal Voltage Reference (1.1V) , ADC1 , 01 PB2 - íàïðóãà (èëè 10 PB4 - òåìïåðàòóðà)
ADCSRA = 0xA7; // 0xA7 - 1010 1111 âêëþ÷àåì, íî íå àêòèâèðóåì, ADC Interrupt Enable, Division Factor = 128
ADCSRB = 0;
MAX_THEMP = 0x82;
while(1)
{
if (Cod==1) SwitchMode();
}
}

ISR(INT0_vect)
{
GIMSK=0x00;
if (P==0)
{
P=1;
B=0;
}
else if (P==2) P=3;
else if (P==4) P=6;
WDTCR |= (1<<WDCE) | (1<<WDE);
WDTCR = 0x40;
}

ISR(WDT_vect)
{
GIMSK=0x00;
if (P==0)
{
if (ADMUX == 0x61) //èçìåðåíèå íàïðÿæåíèÿ íà äåëèòåëå
{
DDRB = 0xB;
PORTB &= ~_BV(PB1);//ïåðèîäè÷åñêîå ïîäêëþ÷åíèå äåëèòåëÿ
}

ADCSRA = 0x8F;
WDTCR |= (1<<WDCE) | (1<<WDE);
WDTCR = 0x00;
ADCSRA |= (1<<ADSC);
}
else
{
if ((bit_is_set(PINB,PB1)))
{
if ((P==1) || (P==4))
{
if (P==4) Cod=1;
NB=0;
P=0;
}
else
{
if (P==3)
{
B|=(1<<NB);
NB++;
}
P=4;
}
WDTCR |= (1<<WDCE) | (1<<WDE);
WDTCR = 0x46;
MCUCR=0x00;
}
else
{
if (P==5)
{
WDTCR |= (1<<WDCE) | (1<<WDE);
WDTCR = 0x00;
}
else
{
if (P==2)
{
P=5;
B|=((1<<NB)<<4);
NB++;
WDTCR |= (1<<WDCE) | (1<<WDE);
WDTCR = 0x00;
}
else
{
P=2;
WDTCR |= (1<<WDCE) | (1<<WDE);
WDTCR = 0x44;
}
}

MCUCR=0x03;
}
GIMSK=0x40;
}
}

ISR (ADC_vect)
{
adch_val = ADCH;
ADCSRA = 0;//âûêë èçìåðåíèå
if (ADMUX == 0x61)
{
ADMUX = 0x62;
DDRB = 0x09;
PORTB |= _BV(PB1);
if (adch_val<146)
{
Cod=1;
B=0b00000011;
if (adch_val<130)
{
nV++;
if (nV>5) B=0b00010000;
}
else nV=0;
}

}
else
{
adch_t = adch_val;
ADMUX = 0x61;
if (MAX_THEMP) //Åñëè 0 - îòêëþ÷àåì òåðìî çàùèòó èëè çíà÷åíèå ñ òåðìîêàëèáðîâêè
{
if(adch_t< MAX_THEMP) // ðåæèìû 0 - ñëàáî 3 - ñèëüíî
{
nT++; // åñëè òåìïåðàòóðà âåëèêà - íà÷èíàåì ñ÷èòàòü, ÷òîáû óáåäèòüñÿ, ÷òî ýòî íå ïîìåõà
if (nT>5)

Cod=1;
B=0b00000011;
}
else nT=0; // åñëè òåìïåðàòóðà íîðìàëèçîâàëàñü - îòáîé

}
}
WDTCR |= (1<<WDCE) | (1<<WDE);
WDTCR = 0x46; //0õ46 - 1sec\\\0x61 - 8ñåê;
GIMSK=0x40;
}

Странно, что в eeprom сохранялось значение 0х91 при холодном фонаре, но с ним он не сбрасывал режим вниз. А с вручную записанным 0х82 сбрасывает через 2,5 минуты прогрева...
MSS вне форума   Ответить с цитированием Вверх
Старый 21.03.2014, 23:25   20
shurko_3

 
Аватар для shurko_3
 
Регистрация: 06.06.2010
Последняя активность: Вчера 11:44
Адрес: Беларусь, Минск
Сообщений: 2013
Сказал(а) спасибо: 693
Поблагодарили: 856 раз(а) в 359 сообщениях

По умолчанию Re: Модифицируем драйвер SKYRAY KING под народную прошивку

Цитата:
Посмотреть сообщение Сообщение от MSS :
запишу его в память по умолчанию
температура ведь меряется напряжение на транзисторе ? оно будет отличаться при использовании разных, и от напряжения на акб ? не очень правильно получается.
shurko_3 вне форума   Ответить с цитированием Вверх
Ответ  Создать новую тему
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск





Copyright ©2007 - 2024, FONAREVKA.RU

Powered by vBulletin®
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd. Перевод: zCarot

Правила форума | Отказ от ответственности

Время генерации страницы 0.24017 секунды с 17 запросами