Once upon a time, lifes goes on as usual, boring. Until one day my friend showing me a weird clock on youtube. i said “wow, that was awesome!”, “how it works?”, “i should make one!”. Basically, i have experienced on electronic DIY stuffs. i started to figure out on how to make it, lots of information found. so basicaly, propeller clock based on POV (Persistence of vision)
http://en.wikipedia.org/wiki/Persistence_of_vision
The clock’s graph formed by cheating human eyes, one array of leds burst on constant interval/delay in one motor rotation, continuously (in this case divided to 360 degree in one rotation, can be more for higher resolution).
After i’ve found, understand, (and yet still confused on how it works :P). i started making prototypes with existing MCU module (atmega8535), wired to array of 8 leds. it works, and not good!! it’s too heavy, no index reference, the text is very unstable. i need to design new board which is lighter and throw out all unnecessary components. there are two web site that i’m using as references, when building this clock.
http://www.microsyl.com/index.php/2010/03/18/propeller-clock/
i used the codes from there with lots of modification, original code is writen using ICCAVR, i converted it to AVR Studio.
http://www.oocities.org/tjacodesign/propclock/propclock.html
i used his isolated power supply, to power up the propeller clock module.
For remote control, it was stolen from here: 😀
http://www.dharmanitech.com/2009/01/ir-remote-controlled-car-pwm-motor.html
picture
Isolated Power Supply / Wireless Power Transmission
the propeller clock works properly, only haven’t fix jitter yet when remote control is used ( i used SIRC/ sony IR remote control).
Video
Schematic
This is my first attempt designing propeller clock, i’ve been thinking using several shift register to drive more leds array.
Propeller Clock
Isolated Power Supply/ Wireless Power Transmission
Partlists Propeller Clock
Part Value C1 22pF C2 22pF C3 470uF C4 470uF C5 470uF C6 470uF C7 100nF C8 10nF C9 10uF D1 1N4004 D2 1N4004 D3 1N4004 D4 1N4004 IC1 MEGA16-A IC2 A1301UA IC3 LM7805 JP1 AVR-ISP-10 LED1 RED LED2 RED LED3 RED LED4 RED LED5 RED LED6 RED LED7 RED LED8 RED LED9 RED LED10 RED LED11 RED LED12 RED LED13 RED LED14 RED LED15 RED LED16 GREEN PAD1 P1 PAD2 P2 R1 1k R2 330 R3 330 R4 330 R5 330 R6 330 R7 330 R8 330 R9 330 R10 330 R11 330 R12 330 R13 330 R14 330 R15 330 R16 330 R17 330 R18 100 S1 RESET U$1 TSOP1838 X1 16MHz
most of all reststor, led, capacitor are smd1206
Code
#include <avr/interrupt.h> //#include <avr/wdt.h> #include <util/delay.h> #include <string.h> #include <stdio.h> #include <math.h> #define TRUE 0x01 #define FALSE 0x00 #define ANALOG 0x01 #define DIGITAL 0x02 #define WIDTH 9 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 volatile int WeelPosition; volatile unsigned char Pos; volatile unsigned int Adder; volatile unsigned char LatchedIrData; volatile unsigned int Rps, CountRps; volatile unsigned char Sec; volatile unsigned char Min; volatile unsigned char Hrs; volatile int SecComp; volatile int MinComp; volatile int HrsComp; volatile unsigned char ClockStyle; unsigned int TimeString[50]; unsigned int *TimeStringPtr; void One(void); void Two(void); void Three(void); void Six(void); void Nine(void); void Hari(void); unsigned char i; void Time(unsigned char); void Display(void); void CopyData(int Value); void CopyDot(void); unsigned int read_IR (void); int main(void) { //WDTCR |= ((1 << WDE) | (1 << WDP2) | (1 << WDP1)); // Enable WatchDog at 1.0 sec MCUCR |= ((1<<ISC11)|(1<<ISC01)); // Int0 Int1 generate int on falling eadge GICR |= ((1 << INT0) | (1 << INT1)); // Int0 and Int1 enable TCCR0 |= ((1 << CS02) | (1 << CS00)); // Timer0 / 1024 //TCCR1B |= ((1 << CS11) | (1 << CS10) | (1 << WGM12)); // Timer1 prescaling 8 CTC //TCCR1B |= ((1 << CS10) | (1 << ICES1) | (1 << WGM12)); // Timer1 no prescaling TCCR1B |= ((1 << CS10) | (1 << WGM12)); // Timer1 no prescaling TCCR2 |= ((1 << CS22)|(1 << CS21) | (1 << CS20)); //TIMSK |= ((1 << OCIE1A) | (1 << TICIE1) | (1 << TOIE0)); TIMSK |= ((1 << OCIE1A) | (1 << TOIE0)); DDRA = 0xFF; PORTA = 0x00; DDRC = 0xFF; PORTC = 0x01; DDRD = 0x00; PORTD = 0x0C; Hrs = 2; Min = 40; Sec = 10; ClockStyle = ANALOG; sei(); //wdt_disable(); //wdt_enable(WDTO_2S); while(1) { //wdt_reset(); //for (i=0;i<200;i++); //if (LatchedIrData == 16) Time(TRUE); //if (LatchedIrData == 18) ClockStyle = DIGITAL; //if (LatchedIrData == 19) ClockStyle = ANALOG; //LatchedIrData = 0; } } void Time(unsigned char Fast) { if (Fast == FALSE) { Sec++; } //else Sec += 60; else { Min += 1; if (Min > 59) { Min = 0; Hrs++; if (Hrs > 11) { Hrs = 0; } } } 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); } } 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]; } } void CopyDot(void) { for (i=0;i<6;i++) *TimeStringPtr++ = table[10][i]; } ISR(INT0_vect) { unsigned int LastWeel; LastWeel = WeelPosition; // get lasst wheel position either less/more than 360 WeelPosition = 0; // reset wheel count // this will make degree lock to 360 if (LastWeel > 360) { Adder += 1; } else if (LastWeel < 360) { Adder -= 1; } CountRps++; OCR1A = 1852 + Adder; // set TIMER1 compare value + offset (+/-) TIFR = (1 << OCF1A); // reset TIMER1 Display(); } ISR(TIMER1_COMPA_vect) { OCR1A = 1852 + Adder; Display(); } void Display(void) { unsigned char Min_Portc[5] = {0xF8, 0xFC, 0xFE, 0xFC, 0xF8}; unsigned char Min_Porta[5] = {0X00, 0xF0, 0xFF, 0xF0, 0x00}; unsigned char Hrs_Portc[5] = {0x00, 0x00, 0x80, 0x00, 0x00}; unsigned char Hrs_Porta[5] = {0x70, 0xF8, 0xFF, 0xF8, 0x70}; unsigned char port_c; //unsigned char port_a; PORTC = 0x00; PORTA = 0x00; if (ClockStyle == ANALOG) { // BEGIN HOURS // BEGIN HOUR on 12 if ((WeelPosition == HrsComp) && (WeelPosition == 0)) { PORTC |= Hrs_Portc[2]; PORTA |= Hrs_Porta[2]; } if (((WeelPosition - 1) == HrsComp) && (WeelPosition == 1)) { PORTC |= Min_Portc[3]; PORTA |= Min_Porta[3]; } if (((WeelPosition - 2) == HrsComp) && (WeelPosition == 2)) { PORTC |= Hrs_Portc[4]; PORTA |= Hrs_Porta[4]; } if (((WeelPosition - 358) == HrsComp) && (WeelPosition == 358)) { PORTC |= Hrs_Portc[0]; PORTA |= Hrs_Porta[0]; } if (((WeelPosition - 359) == HrsComp) && (WeelPosition == 359)) { PORTC |= Hrs_Portc[1]; PORTA |= Hrs_Porta[1]; } // END HOUR on 12 if (((WeelPosition + 2) == HrsComp) && (WeelPosition > 2) && (WeelPosition < 358)) { PORTC |= Hrs_Portc[0]; PORTA |= Hrs_Porta[0]; } if (((WeelPosition + 1) == HrsComp) && (WeelPosition > 2) && (WeelPosition < 358)) { PORTC |= Hrs_Portc[1]; PORTA |= Hrs_Porta[1]; } if ((WeelPosition == HrsComp) && (WeelPosition > 2) && (WeelPosition < 358)) { PORTC |= Hrs_Portc[2]; PORTA |= Hrs_Porta[2]; } if (((WeelPosition - 1) == HrsComp) && (WeelPosition > 2) && (WeelPosition < 358)) { PORTC |= Hrs_Portc[3]; PORTA |= Hrs_Porta[3]; } if (((WeelPosition - 2) == HrsComp) && (WeelPosition > 2) && (WeelPosition < 358)) { PORTC |= Hrs_Portc[4]; PORTA |= Hrs_Porta[4]; } // END HOURS // BEGIN MINUTE // BEGIN MINUTE on 12 if ((WeelPosition == MinComp) && (WeelPosition == 0)) { PORTC |= Min_Portc[2]; PORTA |= Min_Porta[2]; } if (((WeelPosition - 1) == MinComp) && (WeelPosition == 1)) { PORTC |= Min_Portc[3]; PORTA |= Min_Porta[3]; } if (((WeelPosition - 2) == MinComp) && (WeelPosition == 2)) { PORTC |= Min_Portc[4]; PORTA |= Min_Porta[4]; } if (((WeelPosition - 358) == MinComp) && (WeelPosition == 358)) { PORTC |= Min_Portc[0]; PORTA |= Min_Porta[0]; } if (((WeelPosition - 359) == MinComp) && (WeelPosition == 359)) { PORTC |= Min_Portc[1]; PORTA |= Min_Porta[1]; } // END MINUTE on 12 if (((WeelPosition + 2) == MinComp) && (WeelPosition > 2) && (WeelPosition < 358)) { PORTC |= Min_Portc[0]; PORTA |= Min_Porta[0]; } if (((WeelPosition + 1) == MinComp) && (WeelPosition > 2) && (WeelPosition < 358)) { PORTC |= Min_Portc[1]; PORTA |= Min_Porta[1]; } if ((WeelPosition == MinComp) && (WeelPosition > 2) && (WeelPosition < 358)) { PORTC |= Min_Portc[2]; PORTA |= Min_Porta[2]; } if (((WeelPosition - 1) == MinComp) && (WeelPosition > 2) && (WeelPosition < 358)) { PORTC |= Min_Portc[3]; PORTA |= Min_Porta[3]; } if (((WeelPosition - 2) == MinComp) && (WeelPosition > 2) && (WeelPosition < 358)) { PORTC |= Min_Portc[4]; PORTA |= Min_Porta[4]; } // END MINIUTE // second in circle bar mode if (WeelPosition == SecComp) { //PORTC |= 0x02; //PORTA |= 0x00; PORTC |= 0xFE; PORTA |= 0xFF; } // dot every 5 minutes 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)) { PORTC |= 0x02; PORTA |= 0x00; } //green if (((WeelPosition % 6) == 0) && (WeelPosition < 360)) PORTC |= 0x01; One(); Two(); Three(); Six(); Nine(); Hari(); } else { if (((WeelPosition % 6) == 0) && (WeelPosition < 360)) PORTC |= 0x01; Pos = ((WeelPosition-100) / 3); if (Pos < 49) { // shifted by 1 to MSB , we have different wiring port_c = (TimeString[48-Pos] << 1); PORTC |= port_c; } } WeelPosition++; } ISR(TIMER0_OVF_vect) { static unsigned char Tick; Tick++; if (Tick > 62) { Time(FALSE); Tick = 0; Rps = CountRps; CountRps=0; } TCNT0 = 0x04; // reload counter } ISR(INT1_vect) { unsigned char count; //, code, address; unsigned int IR_input; PORTC = 0x00; PORTA = 0x00; TCNT2 = 0; while(!(PIND & 0x08)); count = TCNT2; if(count < 30) //to verify start pulse (2.4 ms long) { //delay_ms(20); //ENABLE_INT0; _delay_ms(20); sei(); return; } //PORTC |= 0x20; IR_input = read_IR (); //code = (unsigned char) ((IR_input & 0xff00) >> 8); //address = (unsigned char) (IR_input & 0x00ff); //motorControl ( code, address ); LatchedIrData = (unsigned char) ((IR_input & 0xFF00) >> 8); if (LatchedIrData > 0) { if ((LatchedIrData & 0xFF) == 0x10) Time(TRUE); if ((LatchedIrData & 0xFF) == 0x12) ClockStyle = DIGITAL; if ((LatchedIrData & 0xFF) == 0x13) ClockStyle = ANALOG; LatchedIrData = 0; } _delay_ms(250); //PORTC &= ~0x20; } unsigned int read_IR (void) { unsigned char pulseCount=0, code = 0, address = 0, timerCount; unsigned int IR_input; while(pulseCount < 7) { while(PIND & 0x08); TCNT2 = 0; while(!(PIND & 0x08)); pulseCount++; timerCount = TCNT2; if(timerCount > 14) code = code | (1 << (pulseCount-1)); else code = code & ~(1 << (pulseCount-1)); } pulseCount = 0; while(pulseCount < 5) { while(PIND & 0x08); TCNT2 = 0; while(!(PIND & 0x08)); pulseCount++; timerCount = TCNT2; if(timerCount > 14) address = address | (1 << (pulseCount-1)); else address = address & ~(1 << (pulseCount-1)); } IR_input = (((unsigned int)code) << 8) | address; return(IR_input); } void One(void) { unsigned char Two_Portc[3] = {0x10, 0xF8, 0x00}; unsigned char Two_Porta[3] = {0x40, 0xC0, 0x40}; if ((WeelPosition >= 357) && (WeelPosition <= 359)) { PORTC |= Two_Portc[WeelPosition-357]; PORTA |= Two_Porta[WeelPosition-357]; } } void Two(void) { unsigned char Two_Portc[5] = {0x10, 0x08, 0x88, 0x48, 0x30}; unsigned char Two_Porta[5] = {0x40, 0xC0, 0x40, 0x40, 0x40}; if ((WeelPosition >= 2) && (WeelPosition <= 6)) { PORTC |= Two_Portc[WeelPosition-2]; PORTA |= Two_Porta[WeelPosition-2]; } } void Three(void) { unsigned char Two_Portc[7] = {0xF8, 0x10, 0x20, 0x10, 0x08, 0x88, 0x70}; if ((WeelPosition >= 88) && (WeelPosition <= 94)) { PORTC |= Two_Portc[WeelPosition-88]; } } void Six(void) { unsigned char Two_Portc[5] = {0x30, 0x48, 0x48, 0x48, 0xF0}; unsigned char Two_Porta[5] = {0x00, 0x40, 0x40, 0x80, 0x00}; if ((WeelPosition >= 178) && (WeelPosition <= 182)) { PORTC |= Two_Portc[WeelPosition-178]; PORTA |= Two_Porta[WeelPosition-178]; } } void Nine(void) { unsigned char Two_Portc[7] = {0x30, 0x40, 0x80, 0xF0, 0x88, 0x88, 0x70}; if ((WeelPosition >= 267) && (WeelPosition <= 273)) { PORTC |= Two_Portc[WeelPosition-267]; } } void Hari(void) { unsigned char P_Porta[65] = { 0x3E, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x3E, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00 }; if ((WeelPosition >= 148) && (WeelPosition <= 211)) { PORTA |= P_Porta[WeelPosition-148]; } }
good day, I like your project, just not yet quite understand you see an image that still have March 1 plate, this function is that the feeding of the main board where the LEDs are as voltage is fed into the remote that works to change the clock mode, even I have several questions, I would like to replicate your project but I hope I can resolve these questions at the moment, has the engine as it feeds that I fail to see, that RPM should be.
greetings ..
ok, still don’t understand your actual question. do you mean you have problem with power supply feed to the rotating board?
1.- yes. how power the rotating board of 5V?
brushes?
2.- I have the HardDisk engine but that RMP should be, and how control this (RPM)
3.- For remote control what about for this.? how to change the hour, ? or how function this?
4.- and this. what is it?
U$1 TSOP1838
X1 16MHz
5.- and JP1 AVR-ISP-10. what is the function for this?
1. the board is powered using air core transformer. i’ve posted schematic diagram.
2. i’ve never use harddisk motor. but as far as i know they’re (spindle) using three phase motor. you would need to provide each phase a voltage pulse in sequence to create rotation.
3. modify the code so you can increase hour when specific remote’s button pressed. it’s in “Time” function. void Time(unsigned char Fast)
4. it’s IR remote receiver. and x-tal for ticking (clock source) the atmega.
5. that’s data cable for uploading binary compiled code from your computer to atmega chipset (proppeler clock).
1.- ok is the “Isolated Power Supply/ Wireless Power Transmission” and this what power 5V or 12V?
2.- then, Can I to use the fan desktop? and what about RPM?
3.- waht type remote do you use for remote control? or I need to build this
5.- Ok this is for programing or upload the code for the chipset
Thnaks
1. yes
2. i used cooling fan that’s the easiest part i can find. as far as i know i’m using 25 rotation per second motor.
3. i’m using sony IR Remote protocol.
4. yes, i’m using avr studio for coding and compiling. for uploading you can use any software/downloader as you like.
1. how power use the (12v?, 5v?) “Isolated Power Supply/ Wireless Power Transmission” and Partlists for this?
2. ok
3. ok
4. ok
5. what happen with the time, when the clock turn off?.
6. and when the clock turn on, there that programing?
7. if this happens, is possible to add some batery for save the time.
1. i’m using 5 volt for supplying the board, part lists are on the schematic diagram.
original schematic from here:
2. –
3. –
4. –
5. when turn of clock back to preset value, not current time. but you can easily set it up using remote control, or you can modify schematic and add RTC with backup battery.
6. when clock turn on, it will display preset time
7. already answered in point 5
cheers
1.- ok
2.-
3.-
4.-
5.- Ok I will try
6.- ok
7.- ok
Ok thanks, if I have any questions I ask
help me! delay of msp430
Convert to IC msp430 of code here.Help Me,thank
ISR(INT0_vect)
{
unsigned int LastWeel;
LastWeel = WeelPosition; // get lasst wheel position either less/more than 360
WeelPosition = 0; // reset wheel count
// this will make degree lock to 360
if (LastWeel > 360)
{
Adder += 1;
}
else if (LastWeel < 360)
{
Adder -= 1;
}
CountRps++;
OCR1A = 1852 + Adder; // set TIMER1 compare value + offset (+/-)
TIFR = (1 << OCF1A); // reset TIMER1
Display();
}
ISR(TIMER1_COMPA_vect)
{
OCR1A = 1852 + Adder;
Display();
}
i’ve never used msp430, but basically it’s just setting OCR1A with fixed value added by effset (Adder) when motor spinning get drifted.
algorithms display any character in the desired location. can you help me! ex : display number 9 at position 9h. thank you!
it’s in
function, as i remember that was done by dividing elapse time in one rotation to 360 degree. that started when hall effect sensor reach magnet. that’s our zero degree reference (WeelPosition variable).
you should measure your motor speed, so you can figure out value that should you set in OCR1A (aproximately).
Adder was just like fine tuning when motor drift below or higher than 360 degree.
so when you want to put 3 o’clock for example you should lit the array of led when they reach position at 45 degree.
examine these code section
it’s all there.
cheers.
how many coils are there in the power trasmitter?
and how much big are they?
is a1301ua bipolar or unipolar????
any replacement for a1301ua??
it’s bipolar if i recall correctly, you can use both north or south side of your magnet.it’s a long long time project
What type of magnet is required for Hall Effect Sensor ??
any neodymium block magnets would be fine
Also can you help me with the IR Remote i.e. what type or which remote is to be used for you given receiver i.e. TSOP1838 ??
any remote control that operate at 38khz with sony infrared protocol will work just fine
Could you help me?
Is the Isolated Power Supply work! I’ve built it but it isn’t work. I use C2383/A1013 instead of BC547/BC557.
100p = 101 ceramic capacitor
100n = 2A104J Polyester Capacitor
1uF/MKT = 105J/400V
4n7 = 2A472J
Is it OK?
i got the original schematic from here
http://www.oocities.org/tjacodesign/propclock/propclock.html
you should take a look on original transistor specification, and replace for their compatible.
i guess it doesn’t really matter for passive components.
check if ic4047n really generating wave form.
Thanks leenoux!
I’d done the circuit on website you suggest. But the result is the same. I’ll try another 4047 and find the BC547/BC557. The static is 20turns/50mm and the rotation is 25turns/40mm and what is the diameter of the wire ? Could you tell me how thick they are!
Thanks Leenoux!
I’d done http://www.oocities.org/tjacodesign/propclock/propclock.html and the result is the same (still not work). I can measure the output voltage at C4 in the original schematic is 150V/AC. What should i do? Maybe there are problems in Receiver!
i’m not really exactly following that site, i used this very cool software http://www.dl5swb.de/mini_ringcore_calculator.html, with trial and error of course 🙂
Thanks so much. Let’s me try!
Hi I am Santosh I impressed by this project I am studying E&CE So I want to do this project please provide me details how I can start
Hi I am Santosh Biradar I am studying in E& ce I want to do this Propellar clock Projedct So please provide me fulll details How I can Start This
wow, that’ll take too long to explain in details. when i’ve first seen this clock, i’ve done alot of research . lot of trials and errors, hardware and coding. just tell me what’s your progress, and i’ll help you as much as i can do if you’ve had a probrlem 🙂
1. where is the battery connected?
2. How does connect the battery, brushes? or what?
3. How is connected the Isolated Power Supply/ Wireless Power Transmission?
Please explain me detail
1. no battery
2. no brushes
3. yes, it’s wireless, there’s a small circuit that resonate at certain frequency, that induce secondary coil at propeller board.
Hi, qhat is generated by AC1301UA? I’m using a falling edge sensor (H21A2)to generate interruption but it doesn’t work
the MCU INT0 detecting falling edge as far as i remember. look at the code.
also, how can i use it without the remote control?
you can hardcode it into the program
Hrs = 2;
Min = 40;
Sec = 10;
ClockStyle = ANALOG; // or DIGITAL
thanks leenoux, that’s what i was thinking
i’m simulating the hall effect captor with a square signal at 50Hz that i put into pin 11, i only have one Led always lighting
Are you using an Atmega1284P?
i was using atmega16, might be different with the initialization. please check the atmega manual how to set the ports (INT, INPUT/OUTPUT).
I already verified, all the ports are the same as on the schematic.I’m using the same as yours, just instead of the captor, i simulate it by a square signal at 50Hz for tests, i don’t understand why it doesn’t work
have you tested it with simple program, turn on/off all of your LEDs?if it’s ok, then there’s something wrong with INT port, or at least with initialization. did you enable your INT/GICR?
MCUCR |= ((1<<ISC11)|(1<<ISC01)); // Int0 Int1 generate int on falling eadge
GICR |= ((1 << INT0) | (1 << INT1)); // Int0 and Int1 enable
and don't forget to set your PORT which are connected to LEDs as OUTPUT and INT port as INPUT.
DDRA = 0xFF;
PORTA = 0x00;
DDRC = 0xFF;
PORTC = 0x01;
DDRD = 0x00;
PORTD = 0x0C;
cheers 🙂
where have you put the magnet for hall effect sensor to work upon??
in project i put the magnet at 12 o’clock position. the hall effect is on the edge of pcb. the magnet is under hall effect.
in the PCB,i saw one unknown component adjacent to rest switch of light blue color,so would you please tell me what’s that?
i saw one component light blue in color adjacent to reset switch in the PCB,would you help me to figure it out what is that?
i saw one component,blue in color adjacent to reset switch in PCB,would you please help me to figure it out what it is?
could you tell the shape of component