Перейти к содержимому

Фото
- - - - -

Часы-пропеллер своими руками


  • Вы не можете создать новую тему
  • Please log in to reply
18 ответов в этой теме

#1 OverDoze

OverDoze

    Зизибау

  • Постоялец
  • 8 236 сообщений
  • Откуда:Таллинн

Отправлено 07 Февраль 2009 - 21:40

http://www.yapfiles....512eed.flv.html
Хочу себе такие же :) Мего позитивные часики своими руками :)

Сообщение изменено: OverDoze (07 Февраль 2009 - 21:41 )

  • 0
Мы на самом деле лояльны по отношению к пользователям. Преды и баны - это уж крайне редкие случаи, которые получаются только когда модератор выходит из себя из-за идиотизма пользователя. Мы не хотим говна. Но уважать порядок и правила хотя бы чуть-чуть нужно, иначе будет жесткий срач и флуд.

#2 DriveR

DriveR

    Digital | d(-_-)b | Punk

  • Постоялец
  • 1 180 сообщений
  • Откуда:Таллин

Отправлено 07 Февраль 2009 - 22:12

Вот это супер темка :)
  • 0

#3 MrDron

MrDron
  • Референт
  • 9 931 сообщений

Отправлено 07 Февраль 2009 - 22:16

вещь
  • 0

Чувака с форума я не стал бы обманывть)) он же может меня потом найти)


#4 DDoS web killer

DDoS web killer

    Тяжёлая артиллерия 5000-байтных снарядов по 1000 секунд

  • Постоялец
  • 6 935 сообщений
  • Откуда:суровый центр свирепых кибератак

Отправлено 07 Февраль 2009 - 23:18

В юлемисте кескусе видел похожие. Надо будет на досуге попробовать повторить или замутить что-то похожее.
  • 0

∫f(пирожок)dпирожок; пирожок ≠ 0


#5 Turetskii

Turetskii
  • Модератор
  • 11 589 сообщений
  • Откуда:Тапа

Отправлено 07 Февраль 2009 - 23:26

А я хочу часы, которые идут в обратную сторону..
  • 0
Работаю в Servisa ICT(Acme), занимаюсь гарантийным ремонтом ноутбуков Asus и DELL.

#6 Медвевонок

Медвевонок

    Плюшевая плоть

  • Постоялец
  • 3 677 сообщений
  • Откуда:Tallinn

Отправлено 07 Февраль 2009 - 23:31

Надо будет на досуге попробовать повторить или замутить что-то похожее.

сомневаюсь, что ты на это способен
  • 0
When choosing between two evils I always like to take the one I.ve never tried before. © Mae West

#7 Zero

Zero

    TRUST NO ONE

  • Постоялец
  • 9 132 сообщений
  • Откуда:Таллин

Отправлено 09 Февраль 2009 - 05:13

В "Радио" есть статья. Могу поискать номер.
  • 0
Моя Родина - СССР! Пролетарии всех стран, соединяйтесь!
-----------------------------------------------------------------------
Ясность - одна из форм полного тумана. Форумчане, давайте жить дружно!

#8 DDoS web killer

DDoS web killer

    Тяжёлая артиллерия 5000-байтных снарядов по 1000 секунд

  • Постоялец
  • 6 935 сообщений
  • Откуда:суровый центр свирепых кибератак

Отправлено 09 Февраль 2009 - 09:04

Главное, правильно рассчитать угловую скорость и при прошивании не запороть программный код.
  • 0

∫f(пирожок)dпирожок; пирожок ≠ 0


#9 Медвевонок

Медвевонок

    Плюшевая плоть

  • Постоялец
  • 3 677 сообщений
  • Откуда:Tallinn

Отправлено 09 Февраль 2009 - 09:10

Zero, будь добр! :)
  • 0
When choosing between two evils I always like to take the one I.ve never tried before. © Mae West

#10 OverDoze

OverDoze

    Зизибау

  • Постоялец
  • 8 236 сообщений
  • Откуда:Таллинн

Отправлено 09 Февраль 2009 - 12:47

здесь можно найти дополнительное инфо по изготовлению :) http://www.yaplakal....opic232425.html
DDoS web killer, покажи потом если сделаешь :)

Сообщение изменено: OverDoze (09 Февраль 2009 - 12:47 )

  • 0
Мы на самом деле лояльны по отношению к пользователям. Преды и баны - это уж крайне редкие случаи, которые получаются только когда модератор выходит из себя из-за идиотизма пользователя. Мы не хотим говна. Но уважать порядок и правила хотя бы чуть-чуть нужно, иначе будет жесткий срач и флуд.

#11 DDoS web killer

DDoS web killer

    Тяжёлая артиллерия 5000-байтных снарядов по 1000 секунд

  • Постоялец
  • 6 935 сообщений
  • Откуда:суровый центр свирепых кибератак

Отправлено 09 Февраль 2009 - 13:10

Вообще всё гениально и просто. Ставится на эту платку микроконтроллер, можно любой даже самый слабенький. 20 Мгц вполне хватит. делается матрица из диодов и ставится моторчик со счётчиком оборотов или же обычный моторчик но к нему приделывается Synchro или shaft encoder. Эти данные подводятся к микропроцессору. ну и всё. допустим платка делает 60 оборотов в секунду... 60 герц.. проц может включать-выключать диоды со скоростью 20 Мгц. теперь просто в зависимости угла поворота включаются разные диоды, а т.к. происходит это быстро - мы и видим следующую картинку.

А всё это программируется через компьютер. Если присмотреться... снизу на платке разъем квадратный... JTAG зовут =) Подключается с одной стороны ЮСБ к компу. Создаешь код, есть даже симуляция потом... ну и вот получается штука. Выглядит здорово но на самом деле не так сложно.



Чё-то появилось сильное желание замутить что-то похожее. Только прошивать буду по ходу ещё несколько месяцев после сборки.
  • 0

∫f(пирожок)dпирожок; пирожок ≠ 0


#12 DDoS web killer

DDoS web killer

    Тяжёлая артиллерия 5000-байтных снарядов по 1000 секунд

  • Постоялец
  • 6 935 сообщений
  • Откуда:суровый центр свирепых кибератак

Отправлено 09 Февраль 2009 - 13:21

Ну-ка проверяйте, кто в этом деле лучше шарит :)

//**************************************
// Clock 16Mhz
// [Version here]
// [Author here]
//**************************************

//**************************************
//			I N C L U D E
//**************************************
#include <io2313v.h>
#include <macros.h>

//**************************************
//			D E F I N E
//**************************************
#define TRUE	  0x01
#define FALSE	 0x00
#define ANALOG	0x01
#define DIGITAL   0x02

//**************************************
//  I N T E R R U P T   H A N D L E R
//**************************************
#pragma interrupt_handler Crossing_interrupt:2 
#pragma interrupt_handler IR_interrupt:4
#pragma interrupt_handler Degre_interrupt:5 
#pragma interrupt_handler Ticker_interrupt:7

//**************************************
//		  P R O T O T Y P E
//**************************************

void Crossing_interrupt(void);
void Degre_interrupt(void);
void Time(unsigned char);
void IR_interrupt(void);
void Ticker_interrupt(void);
void Display(void);
void CopyData(int Value);
void CopyDot(void);

//**************************************
//   G L O B A L   V A R I A B L E
//**************************************

int WeelPosition;
unsigned char Pos;
unsigned int Adder;

unsigned char LatchedIrData;

unsigned char Sec;
unsigned char Min;
unsigned char Hrs;

int SecComp;
int MinComp;
int HrsComp;

unsigned char ClockStyle;

unsigned char TimeString[50];
unsigned char *TimeStringPtr;


unsigned char i;

//**************************************
//		   C O N S T A N T
//**************************************
const unsigned char table[12][6] = {{ 0x3e, 0x41, 0x41, 0x41, 0x3e, 0x00 }, // 0 
									{ 0x00, 0x21, 0x7f, 0x01, 0x00, 0x00  }, // 1 
									{ 0x21, 0x43, 0x45, 0x49, 0x31, 0x00  }, // 2 
						   		{ 0x42, 0x41, 0x51, 0x69, 0x46, 0x00  }, // 3
									{ 0x0c, 0x14, 0x24, 0x5f, 0x04, 0x00  }, // 4
									{ 0x72, 0x51, 0x51, 0x51, 0x4e, 0x00  }, // 5
									{ 0x1e, 0x29, 0x49, 0x49, 0x06, 0x00  }, // 6
									{ 0x40, 0x47, 0x48, 0x50, 0x60, 0x00  }, // 7
									{ 0x36, 0x49, 0x49, 0x49, 0x36, 0x00  }, // 8
									{ 0x30, 0x49, 0x49, 0x4a, 0x3c, 0x00  }, // 9
									{ 0x00, 0x36, 0x36, 0x00, 0x00, 0x00  }, // :
									{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  }};// space


//**************************************
//			M A I N
//**************************************
void main()
{
WDTCR = 0x0e;		// Enable WatchDog at 0.97 sec

PORTD = 0x0d;		// Pull up on PD2&PD3 & Led White ON
DDRD = 0x03;		 // PD0-O PD1-O PD2-I PD3-I PD4-I PD5-I PD6-I PD7-I

//INT 0
MCUCR = 0x02;		// Int0 generate int on falling eadge
GIMSK = 0x40;		// Int0 enable

//Timer0
TCCR0 = 0x05;		// Timer0 / 1024 

//Timer1
TCCR1B = 0x42;	   // Timer1 / 8 & Input Capture on Rising eadge
TIMSK = 0x4a;		// int enable on Timer1 Compare Match 
				  // int enable on Timer 1 Input Capture
				  // int enable on Timer0 Overflow
PORTB = 0x00;
DDRB = 0xff;		 // PB0-7 as output

Hrs = 0;
Min = 0;
Sec = 0;
ClockStyle = ANALOG;

SEI();

while(1)
   {
   asm("WDR");
   for (i=0;i<200;i++);
   if ((LatchedIrData == 0xbb) || (LatchedIrData == 0x92)) Time(TRUE);
   if ((LatchedIrData == 0xb3) || (LatchedIrData == 0xb0)) ClockStyle = DIGITAL;
   if ((LatchedIrData == 0xb4) || (LatchedIrData == 0xb1)) ClockStyle = ANALOG;

   LatchedIrData = 0;
   }
}

/**********************************************************

Name:	   void Time(void)

Description:   

Input:		 none

Output:		none

Misc:	   

**********************************************************/
void Time(unsigned char Fast)
{
if (Fast == FALSE) Sec++;
else Sec += 60;
if (Sec > 59)
   {
   Sec = 0;
   Min++;
   if (Min > 59)
		{
	 Min = 0;
	 Hrs++;
	 if (Hrs > 11)
	   {
	   Hrs = 0;
	   }
	 }
   }

if (ClockStyle == ANALOG)
   {
   SecComp = Sec*6;
   MinComp = Min*6;
   HrsComp = (Hrs*30)+(Min/2);
   }
else
   {
   TimeStringPtr = &TimeString[0];
   CopyData(Hrs);
   CopyDot();
   CopyData(Min);
   CopyDot();
   CopyData(Sec);
   }
}

/**********************************************************

Name:	   void CopyData(int Value)

Description:   

Input:		 none

Output:		none

Misc:	   

**********************************************************/

void CopyData(int Value)
{
if (Value < 10)
   {
   for (i=0;i<6;i++) *TimeStringPtr++ = table[0][i];
   for (i=0;i<6;i++) *TimeStringPtr++ = table[Value][i];
   }
else
   {
   for (i=0;i<6;i++) *TimeStringPtr++ = table[Value/10][i];
   for (i=0;i<6;i++) *TimeStringPtr++ = table[Value-((Value/10)*10)][i];
   }
}

/**********************************************************

Name:	   void CopySpace(void)

Description:   

Input:		 none

Output:		none

Misc:	   

**********************************************************/

void CopyDot(void)
{
for (i=0;i<6;i++) *TimeStringPtr++ = table[10][i];
}

/**********************************************************

Name:	   void Crossing_interrupt(void

Description:   

Input:		 none

Output:		none

Misc:	   

**********************************************************/
void Crossing_interrupt(void)
{
static unsigned int LastCount;
static unsigned int TotalCount;
static int Latch;
static unsigned char Lap;

Latch = TCNT1;
TotalCount = Latch - LastCount;
LastCount = Latch;
Lap++;
if (Lap > 250)
   {
   Adder = TotalCount / 378;
   Lap = 0;
   }

WeelPosition = 0;
OCR1 = Latch + Adder;
TIFR |= 0x80;
Display();
}

/**********************************************************

Name:	   void Degre_interrupt(void)

Description:   

Input:		 none

Output:		none

Misc:	   

**********************************************************/
void Degre_interrupt(void)
{
OCR1 = TCNT1 + Adder;
Display();
}

/**********************************************************

Name:	   void Display(void)

Description:   

Input:		 none

Output:		none

Misc:	   

**********************************************************/

void Display(void)
{
PORTB = 0x00;

if (ClockStyle == ANALOG)
   {
   if (WeelPosition == HrsComp) PORTB = 0x80;
   if (WeelPosition == MinComp) PORTB = 0xff;
   if (WeelPosition == SecComp) PORTB |= 0x03;

   if ((WeelPosition == 0) ||
	  (WeelPosition == 30) ||
	 (WeelPosition == 60) ||
	 (WeelPosition == 90) ||
	 (WeelPosition == 120) ||
	 (WeelPosition == 150) ||
	 (WeelPosition == 180) ||
	 (WeelPosition == 210) ||
	 (WeelPosition == 240) ||
	 (WeelPosition == 270) ||
	 (WeelPosition == 300) ||
	 (WeelPosition == 330)) PORTB |= 0x01;
   }
else
   {
   Pos = ((WeelPosition-100) / 3);
   if (Pos < 49)
		{
	 PORTB = TimeString[48-Pos];
	 }
   }
WeelPosition++;
}

/**********************************************************

Name:	   void IR_interrupt(void)

Description:   This routine is called whenever a rising edge (beginning
				of valid IR signal) is received.

				- The data codes are sent using pulse coding.
				- Each packet has 12 bits and a header.
				- The basic time period T = 550us.
				- The header length = 4T (2.2ms)
				- 0 = pulse with length T followed by space of length T.
				- 1 = pulse with length 2T followed by space of length T.
				- The last 5 bits represent the Addess.
				- The first 7 bits represent the command.
				- A packet is transmitted every 25ms while a button is down.

Input:		 none	 

Output:		Global variable LatchedIrData

Misc:	   Sony VCR protocol

**********************************************************/
void IR_interrupt(void)
{
static unsigned int LastCapture;
unsigned int PulseWidth;
static unsigned int IrPulseCount;
static unsigned int IrData;

PulseWidth = ICR1 - LastCapture;
LastCapture = ICR1;


if (PulseWidth > 4000)
   {
   IrPulseCount = 0;
   IrData = 0;
   }
else
   {
   IrData = IrData >> 1;
   if (PulseWidth > 2800) IrData = IrData | 0x8000;
   IrPulseCount++;
   if (IrPulseCount == 12) LatchedIrData = ((IrData >> 4) & 0x00ff);
   }
}

/**********************************************************

Name:	   void Ticker_interrupt(void)

Description:   

Input:		 none

Output:		none

Misc:	   

**********************************************************/
void Ticker_interrupt(void)
{
static unsigned char Tick;
Tick++;
if (Tick > 62)
   {
   Time(FALSE);
   Tick = 0;
   }
TCNT0 = 0x04; // reload counter
}

  • 0

∫f(пирожок)dпирожок; пирожок ≠ 0


#13 MLK

MLK
  • Пользователь
  • 12 сообщений

Отправлено 09 Февраль 2009 - 14:59

Сначала эти детали нужно найти, а потом уже думать как делать

Используйте транслит

Сообщение изменено: OverDoze (17 Февраль 2009 - 10:38 )

  • 0

#14 Медвевонок

Медвевонок

    Плюшевая плоть

  • Постоялец
  • 3 677 сообщений
  • Откуда:Tallinn

Отправлено 09 Февраль 2009 - 15:06

MLK, блин, а ведь действительно! :)
  • 0
When choosing between two evils I always like to take the one I.ve never tried before. © Mae West

#15 MLK

MLK
  • Пользователь
  • 12 сообщений

Отправлено 09 Февраль 2009 - 15:09

Которая крутится фигня, её легко найти, а ту фигню, которая крутит, не очень, в ней сама проблема

Используйте транслит

Сообщение изменено: OverDoze (17 Февраль 2009 - 10:39 )

  • 0

#16 kosher

kosher

    Pure intelligence

  • Постоялец
  • 10 723 сообщений
  • Откуда:Таллинн

Отправлено 09 Февраль 2009 - 15:31

клевые часы)
  • 0
Коша

#17 Vitalts

Vitalts
  • Постоялец
  • 1 842 сообщений

Отправлено 09 Февраль 2009 - 15:56

kotoraja krutit ne o4env nej sama problema

На видео, вроде, моторчик с харда, так сложно найти его?
  • 0

#18 Медвевонок

Медвевонок

    Плюшевая плоть

  • Постоялец
  • 3 677 сообщений
  • Откуда:Tallinn

Отправлено 09 Февраль 2009 - 16:08

400 крон вся радость: моторчик, зеркальце и пенал.
  • 0
When choosing between two evils I always like to take the one I.ve never tried before. © Mae West

#19 Zero

Zero

    TRUST NO ONE

  • Постоялец
  • 9 132 сообщений
  • Откуда:Таллин

Отправлено 09 Февраль 2009 - 16:18

MLK, не ерунди :)
Медвевонок, найду.
  • 0
Моя Родина - СССР! Пролетарии всех стран, соединяйтесь!
-----------------------------------------------------------------------
Ясность - одна из форм полного тумана. Форумчане, давайте жить дружно!