Ещё один программный таймер

Решил тоже поучаствовать в конкурсе «у кого таймер проще» :)
Это даже не велосипед, а так, самокат :)

Времени расписывать особо нет, поэтому буду краток.
Да и пояснять особо нечего.
typedef enum eTimerStatus
{
	etsTimerIDLE = 0,
	etsTimerCount,
	etsTimerEvent
} eTimerStatus;

typedef struct stTimer
{
	volatile ShortTimer *Count;
	volatile eTimerStatus Status;
} stTimer;

Это базовые определения. Теперь функционал:

#include "Timers.h"

/**
*	\brief Пул таймеров
*/
static ShortTimer volatile TimersPool[eTimersNumber];
static eTimerStatus volatile TimersStatusPool[eTimersNumber];

void TickTimers()
{
	for(int i=0; i < eTimersNumber; i++)
	{
		if(TimersPool[i] > 0)
		{
			TimersPool[i] --;
			if(0 == TimersPool[i])
			{
				TimersStatusPool[i] = etsTimerEvent;
			}
		}
	}
}

void StartTimer(eTimerIndex timer, ShortTimer period_ms)
{
	TimersPool[timer] = period_ms;
	TimersStatusPool[timer] = etsTimerCount;
}

eTimerStatus GetTimerStatus(eTimerIndex timer)
{
	if(etsTimerEvent == TimersStatusPool[timer])
	{
		TimersStatusPool[timer] = etsTimerIDLE;
		return(etsTimerEvent);		
	}
	else
	{
		return(TimersStatusPool[timer]);
	}
}

ShortTimer GetTimerCount(eTimerIndex timer){
	return(TimersPool[timer]);
}


Ну и пример использования.
typedef unsigned int ShortTimer;

typedef enum eTimerIndex
{
	eADC1Timer = 0,
	eADC2Timer,
	eADC3Timer,
	eADCProcessTimer,
	eChanDiapSwitchDelayTimer,
	eModbusTimer,
	eTimersNumber
} eTimerIndex;

void SysTick_Handler(void){

	TickTimers();
}

void main(){
    ...
    StartTimer(eADCProcessTimer, 5);

    while (1){
	...
	if(etsTimerEvent == GetTimerStatus(eADCProcessTimer)){
	    ProcessADC();
	    StartTimer(eADCProcessTimer, 5);
	}
        ...
    }
}


Если что непонятно (что вряд ли), спрашивайте, добавлю.
Главное удобство в простоте использования. Нужен ещё один таймер — добавили имя в enum eTimerIndex и можно пользоваться.

PS: Сейчас глянул ещё раз — а зачем мне вообще stTimer? Наверно, изначально что-то другое задумывал. Ну да ладно.

Макетная плата контроллера электродвигателя. Часть 2. Драйверы MOSFET.

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


Читать дальше

Вернулся из велопоездки. Ощущения.

Решили крутнуть с товарищем на великах на выходные. Маршрут, в принципе, давно хотели опробовать, но выбраться из рутины города никак не получалось — то сессичные в универе, то работы подкинут. В итоге стек переполнился, сгенерировав исключение «А пошло оно всё на!». И вот, в пятницу утром начал я обзванивать друзей. И только один согласился.
Друг закрыл мастерскую пораньше и мы начали сборы. Собирались в спешке, поэтому чего-то не взяли, а чего-то было слишком много. Но обо всём по порядку.

Читать дальше

Yet another POV –Wheel POV

Как-то раз, бродя по интернету, я наткнулся на проекты по выводу всяких картинок на колесо велосипеда с помощью механической развертки ( так вроде переводится POV). Прикольно, подумал я, и забыл, так как велика у меня не было. Ну а прошлым летом, он у меня появился, ну и я загорелся сделать подобную штуку.

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


Читать дальше

Программа учета деталей для дома

С ростом числа деталей вроде как назрела необходимость как-то их учитывать. Чтобы хоть примерно знать: что есть, чего нет, чего по сколько. И чтобы для этого не перерывать каждый раз все загашники.

Решил изобрести велосипед…

Читать дальше

Снова о LaunchPad, или как мне пришлось изобретать часы

Как и, наверно, многие, кто слышал о ланчпаде, я незамедлительно пошел на сайт добывать халяву. Доставка федексом порадовала и примерно в течении недели посылка (ящик 40х30х30) оказался у меня. Ну и в преддверии нового года халява была забыта и осталась пылиться где то в углу.
Параллельно с этим в гости ко мне нагрянула бабушка. А бабушки они такие капризные… То ее носки разбросанные по квартире не устраивают, то кран капает, то часы в комнате тикают и спать мешают. Из часов незамедлительно была вынута батарейка, но бабушке вдруг стало необходимо вести логи во сколько она спать уложила себя и внука, во сколько и сколько раз просыпалась для походов известно куда для последующих многочасовых пересказов еще чьим то бабушкам. Да и сериалы пропустить нельзя. В общем будильник мой быстро был реквизирован.

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


Читать дальше
  • 0
  • 13 февраля 2012, 23:33
  • xar
  • 2

Навешиваем динамогенератор на велосипед

Привет Всем! Это моя первая статья. В ней я расскажу как собрал динамогенератор (ДГ) для велосипеда, который питает светодиод переднего фонаря.

Идея:
Во времена СССР динамогенераторы были довольно широко распространены, но источники света оставляли желать лучшего. В наше время в качестве ДГ используются динамовтулки или обычные генераторы приставляемые к колесу велосипеда. Мощность первых около 5 Вт, вторых 3 Вт, прямо скажем не густо, да и КПД их неизвестен. В предлагаемой конструкции в качестве генератора было решено использовать шаговый мотор Mitsumi M49SP-1 (рис.3) с небольшой доработкой. Реализации подобной идеи в интернете уже есть, но об их эффективности не сказано ни слова.

Читать дальше