ARV 1 20 января, 2010 Опубликовано 20 января, 2010 · Жалоба Мануалы настоящие любители трудностей читают только в состоянии крайнего отчаяния. Это не наш метод :)настоящее отчаяние возникает после 600? видимо, здесь не читатели мануалов собрались, а писатели... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 20 января, 2010 Опубликовано 20 января, 2010 · Жалоба Мда. 300+ постов. Один(!) человек, который прочитал мануал. Я счастлив, что он прочитал мануал от чего-то, что в руках не держал. А как быть с фонарями, которые есть у меня? Вот вам программа для алгоритма по коротким включениям: #include <ioavr.h> #include <intrinsics.h> volatile __regvar __no_init unsigned char mode @ 15; volatile __regvar __no_init unsigned char power_low_counter @ 14; volatile __regvar __no_init unsigned int adc_c @ 12; __no_init __eeprom unsigned char ee_mode; #ifdef __cplusplus extern "C" { #endif char __low_level_init() { CLKPR|=(1<<CLKPCE); CLKPR=3; //Снизим тактовую частоту до 9.6/8 МГц DDRB=(0<<DDB5)|(0<<DDB4)|(0<<DDB3)|(0<<DDB2)|(1<<DDB1)|(1<<DDB0); PORTB=(0<<PORTB5)|(0<<PORTB4)|(0<<PORTB3)|(0<<PORTB1)|(0<<PORTB0); ACSR=(1<<ACD); //Analog Comparator Disable DIDR0=(1<<ADC0D)|(0<<ADC1D)|(1<<ADC2D)|(1<<ADC3D)|(1<<AIN1D)|(1<<AIN0D); PRR=(1<<PRTIM0)|(0<<PRADC); ADMUX=(1<<REFS0)| 1; // Vref=1.1V , ADC1 ADCSRA=(1<<ADEN)|(0<<ADSC)|(1<<ADATE)|(0<<ADIF)|(1<<ADIE)|(0<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); ADCSRB=0; return 1; } #ifdef __cplusplus } #endif #pragma vector=ADC_vect __interrupt void ADC_Interrupt(void) { switch(mode) { case 0: // Яркость 100% if(ADC<600) power_low_counter++; else power_low_counter=0; if(power_low_counter>100) { ee_mode=0; mode=2; power_low_counter=0; } PORTB|=(1<<PORTB1); PORTB|=(1<<PORTB0); break; case 1: // Яркость 40% if(ADC<600) power_low_counter++; else power_low_counter=0; if(power_low_counter>100) { ee_mode=1; mode=2; power_low_counter=0; } PORTB|=(1<<PORTB0); PORTB&=~(1<<PORTB1); break; case 2: // Яркость 4% if(ADC<558) power_low_counter++; else power_low_counter=0; if(power_low_counter>100) { ee_mode=2; mode++; } PORTB&=~(1<<PORTB1); PORTB|=(1<<PORTB0); __delay_cycles(10); PORTB&=~(1<<PORTB0); break; default: // Защитное выключение PORTB&=~(1<<PORTB1); PORTB&=~(1<<PORTB0); MCUCR=(1<<SE)|(2<<SM0); //Power Down __sleep(); break; } }; int main( void ) { __delay_cycles(100000); adc_c=0; mode=ee_mode; switch(mode) { case 0: case 1: ee_mode++; break; default: mode=2; ee_mode=0; break; } power_low_counter=0; ADCSRA|=(1<<ADSC); __enable_interrupt(); for(;;) { MCUCR=(1<<SE)|(1<<SM0); //Sleep __sleep(); if(adc_c<16000) adc_c++; else { if(adc_c==16000) { __disable_interrupt(); PORTB&=~(1<<PORTB1); PORTB&=~(1<<PORTB0); adc_c++; ee_mode=mode; __delay_cycles(75000); __enable_interrupt(); } } } } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stells 12 20 января, 2010 Опубликовано 20 января, 2010 (изменено) · Жалоба VladislavS, Вы драйвера так и не зашунтировали? хотелось бы уже отбросить и забыть про этот вариант. правда в какую сторону дальше думать - непонятно. а алгоритм ARV, как я понял, так никто и не попробовал? Изменено 20 января, 2010 пользователем stells Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 20 января, 2010 Опубликовано 20 января, 2010 · Жалоба А как быть с фонарями, которые есть у меня? И тем не менее. Несмотря на некоторую избитость этих слов, проверьте внимательно, может все-таки время включения (а не выключения) пляшет? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Petka 0 20 января, 2010 Опубликовано 20 января, 2010 · Жалоба И тем не менее. Несмотря на некоторую избитость этих слов, проверьте внимательно, может все-таки время включения (а не выключения) пляшет? а ещё лучше выложите видео на какой-нибудь youtube. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 1 20 января, 2010 Опубликовано 20 января, 2010 · Жалоба а алгоритм ARV, как я понял, так никто и не попробовал?попробовал... :unsure: я сам... боюсь, что мои эксперименты с STK500 давали эффект все же за счет остаточного напряжения на емкостях по питанию - там их куча... когда я стал передергивать питание перемычкой V.TARGET - эффект исчез :( это был выстрел в молоко :( Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость @Ark 20 января, 2010 Опубликовано 20 января, 2010 · Жалоба Не совсем понятно, что, в конечном итоге, желает автор данной темы. Переключение режимов по времени включения питания - сложности никакой не представляет. Алгоритмы переключения по времени выключения - также были предложены. Причем, вполне работоспособные, в том числе - в рамках приведенной схемы фонарика. Хотите непременно узнать, как работает данное конкретное "китайское чудо"? А оно Вам нужно? Пока только видно настойчивое желание реализовать переключение по "любимому состоянию" регистров. IMHO, это метод изначально "кривой" и ненадежный, и не заслуживает того, чтобы на него опираться. По крайней мере, я бы никогда так делать не стал. Тем более в серийных изделиях. Ну, если автор темы хочет, то как говорится - флаг в руки. :) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stells 12 20 января, 2010 Опубликовано 20 января, 2010 · Жалоба мои эксперименты с STK500 давали эффект все же за счет остаточного напряжения на емкостях по питанию - там их куча... да, экспериментировать проще на конкретной платке, я из-за питания тоже накололся, пришел к выводу, что за сотню-другую миллисекунд и РОН, и ячейки ОЗУ теряют значение и принимают любимое - единицы секунд на этом эффекте не поймать Не совсем понятно, что, в конечном итоге, желает автор данной темы. Переключение режимов по времени включения питания - сложности никакой не представляет. Алгоритмы переключения по времени выключения - также были предложены. Причем, вполне работоспособные, в том числе - в рамках приведенной схемы фонарика. Хотите непременно узнать, как работает данное конкретное "китайское чудо"? А оно Вам нужно? так-то оно так, но очень любопытно все-таки узнать, как реализовано переключение по времени отключения в оригинальной прошивке Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 1 20 января, 2010 Опубликовано 20 января, 2010 · Жалоба так-то оно так, но очень любопытно все-таки узнать, как реализовано переключение по времени отключения в оригинальной прошивкеа вот мне чисто из академического интереса хотелось бы получить надежный алгоритм решения задачи, даже не алгоритм, а конкретный код, применимый всегда или почти всегда :) главное, одинаковый результат, а процесс его достижения не обязательно должен совпадать... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость @Ark 20 января, 2010 Опубликовано 20 января, 2010 · Жалоба но очень любопытно все-таки узнать, как реализовано переключение по времени отключения в оригинальной прошивке Точно это можно узнать, только считав прошивку. Либо спросить непосредственно у автора. :) В любом случае, imho, метод будет основан на RC-цепочке с постоянной времени порядка 1с, в том или ином виде. Других методов (если не считать "просадку" батареи и саморазогрев) я что-то не вижу. Может кто предложит? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stells 12 20 января, 2010 Опубликовано 20 января, 2010 · Жалоба а вот мне чисто из академического интереса хотелось бы получить надежный алгоритм решения задачи ну для АВР с делителем на питании и внутренним АЦП алгоритм понятен и опробован. он сбоил, но видимо потому, что контроллер отключался спонтанно. если ловить момент отключения питания и оставлять кондер УВХ в одинаковом состоянии, то сбои исчезнут Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mp41 0 20 января, 2010 Опубликовано 20 января, 2010 · Жалоба Может заняться вопросом поиска сколупывающего прошивку устройства? ;) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kool 0 20 января, 2010 Опубликовано 20 января, 2010 · Жалоба Этот алгоритм уже предлагали в #106. ... Перевод не верен. 106-пост начинается со слов "Я бы сделал так...". Я же привел алгоритм с сайта, на котором продается данный драйвер, а не привел свою собственную реализацию алгоритма. А дословно я и не переводил. Просто пересказал принцип. Хотя соглашусь, что между "переключить" и "оставить" в данном случае есть небольшая разница. ... эти инструкции или не про этот фонарик, или автор темы чего-то недоговаривает (о времени включения никто ничего не спрашивал)... Я счастлив, что он прочитал мануал от чего-то, что в руках не держал. А как быть с фонарями, которые есть у меня? 2 VladislavS: Я и не утверждал, что это алгоритм именно вашего драйвера. Я привел алгоритм драйвера по указанной ссылке (которых схемотехнически полностью повторяет Ваш) Но, честно говоря, я сомневаюсь, что для данного девайса китайцы наштамповали кучу разных прошивок. Хотя кто их знает. Китайцев много :) Еще есть вероятность того, что писатели мануала ошиблись. И все-таки, попробуйте по приведенному алгоритму попереключать. В частности, сменить группу режимов. Если группа менятся не будет, то прошивка точно не та. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 20 января, 2010 Опубликовано 20 января, 2010 · Жалоба Нет там никаких групп режимов... А что-то попробовать смогу только посоле того как вот эту штуку починю. A-50 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kool 0 20 января, 2010 Опубликовано 20 января, 2010 · Жалоба Нет там никаких групп режимов... А что-то попробовать смогу только посоле того как.... Поражает Ваша категоричность. Еще не пробывали, а уже заявляете, что групп нету. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться