Sasha,
You wrote to All:
SS> есть такое самодельное зарядное SS>
formatting link
SS>
SS> оно норм работает SS> но индикация недоделана SS>
SS> там так: SS> вкл - пробежались диоды по очереди - погасли SS> вставли акк - его потрогало и если все ном - вкл ток заряда - диод SS> горит когда их 4, видно, что раз 0.5 где то сек пробегает пауза SS> коротенькая по очереди (смотрят на акк - в это время снята зарядка) SS>
SS> по окончании диод тупо тухнет SS>
SS> в итоге фиг поймешь - акк заряжен или неконтачит и тп SS>
SS> добавить бы, что бы в конце вспыхивал изредка SS>
SS> я в си авр не очень SS>
SS> исходный код SS>
formatting link
SS>
SS> добавить бы мигания подпрограиму, но как понимаю, если она через SS> ожидания - раком остальное стоит, пока диод мыргает SS>
SS> те, хотя бы пример пофиг чего, где в каком месте апппарат моргает - SS> оттуда спереть как сделано навсидку гуглил - как то не то
=== Begin of S_Timer.h === //=============================================================== #ifndef _S_TIMER_H_ #define _S_TIMER_H_
#ifdef S_TIMER_D #define EXTERN #else #define EXTERN extern #endif //
EXTERN volatile unsigned int time_1ms; EXTERN volatile unsigned int time_1sec; EXTERN volatile unsigned int mmi_time;
EXTERN void Init_Timer (void); EXTERN void Reset_Timer(void);
#endif /* __TIMER_H__ */
=== End of S_Timer.h =====
=== Begin of S_Timer.c === #define S_TIMER_D
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <string.h>
//#include <avr/iocan128.h>
//#include <avr/iocanxx.h>
#include "macros.h" #include "S_Timer.h"
//-------------------------------------------------------------------- //--- Timer Inizialisieren //-------------------------------------------------------------------- void Init_Timer (void) { time_1ms = 0; time_1sec = 0; mmi_time = 0;
// ATMEGA128 TCNT2 = 5; TIMSK |= 0x40; //Timer/Counter2 Overflow Interrupt Enable TCCR2 = 0x6B; //Fast PWM, Clear OC2 on compare match, // set OC2 at TOP, 64-> 1kHz = 1mS
// AT90CAN128 /* TCNT2 = 5; TIMSK2 |= 0x01; //Timer/Counter2 Overflow Interrupt Enable TCCR2A = 0x6C ; //Fast PWM, Clear OC2 on compare match, // set OC2 at TOP, 64-> 1kHz = 1mS
*/ // инициализация таймера в привденном тобой коде есть своя }
//-------------------------------------------------------------------- //#pragma interrupt_handler OCR2_CC_handler:iv_TIMER2_OVF //void OCR2_CC_handler(void) // в разных компиляторах вектор прерывания обзывается по разному //-------------------------------------------------------------------- SIGNAL(SIG_OVERFLOW2) { TCNT2 = 5;
mmi_time++; time_1ms++; if (time_1ms == 1000) { time_1ms = 0; time_1sec++; } }
//-------------------------------------------------------------------- // Timer Reset //-------------------------------------------------------------------- void Reset_Timer(void) { time_1ms = 0; time_1sec = 0; mmi_time = 0; } === End of S_Timer.c =====
Корректируешь, то что уже есть, ну а дальше, манипулируя той же mmi_time (при необходимости, добавив ещё переменных) в имеющемся бесконечном цикле:
while(1) { ... }
по какому-то числу и условию что-то включаешЬ, по достижению другого числа
- сбрасываешь. Вообщем как-то так.
Можно даже заменить и эти delay(150000);
Andrey