
Timer 12V a relè con il microcontrollore AVR ATmega8. Ecco un semplice timer a 12V che può essere utilizzato per accendersi/spegnersi dopo un tempo specificato dall'utente.
I timer sono ampiamente utilizzati nelle applicazioni industriali e domestiche per mansioni automatiche. I microcontrollori possono essere utilizzati per progettare dei timer versatili e precisi.
Il timer relè (a 12V perche il rele è alimentato a 12V) utilizza un modulo LCD 16x2 per l'interfaccia utente (UI). L'utente può impostare il tempo utilizzando una tastiera a 3 tasti. Dopo, il Timer viene avviato. Mentre il conto alla rovescia è in corso, il tempo rimasto viene visualizzato sullo schermo. Il prototipo è stato sviluppato utilizzando la xBoard MINI, una scheda di sviluppo a basso costo ATmega8. Il programma è stato scritto nella memoria flash del microcontrollore AVR ATmega8 utilizzando eXtreme Burner - AVR Software e Hardware.
Nota:
- il fusibile deve essere impostato cosi: HIGH FUSE=C9 LOW FUSE=FF
- se lo schermo è bianco, si prega di regolare l'RV1
Timer Relè con AVR ATmega8
01 ATmega8-16 PU -> U1
02 16x2 LCD Module -> LCD1
03 16 MHz Crystal -> X1
04 BC548 Transistor -> Q1
05 1N4007 Diode -> D1
06 4.7K Resistor -> R1,R2
07 10K Variable Resistor -> VR1
08 22pF Disk Capacitor -> c1,c2
09 0.1uF Disk Capacitor -> c3,c4
10 Large Push Buttons -> s1,s2,s3
11 PCB Mountable Relay -> RL1
Codice Sorgente del timer relè 12V con AVR ATmega8
#include#include #include "lcd.h" //Connection of Load #define LOAD_DDR DDRC #define LOAD_PORT PORTC #define LOAD_POS PC0 //Global variable for the clock system volatile unsigned int clock_millisecond=0; volatile char clock_second=0; volatile char clock_minute=0; volatile char clock_hour=0; void Wait(uint8_t n) { uint8_t i,temp; temp=n*28; for(i=0;i "); if(selection == 1) LCDWriteStringXY(11,1,"^"); if(selection == 2) LCDWriteStringXY(14,1,"^"); _delay_loop_2(0); _delay_loop_2(0); _delay_loop_2(0); _delay_loop_2(0); _delay_loop_2(0); _delay_loop_2(0); _delay_loop_2(0); _delay_loop_2(0); } //Start the Load LoadOn(); //Now start the timer clock_hour = hr; clock_minute = min; clock_second =0; LCDClear(); LCDWriteString(" Power Off In "); while(1) { LCDWriteIntXY(4,1,clock_hour,2); LCDWriteString(":"); LCDWriteIntXY(7,1,clock_minute,2); LCDWriteString(":"); LCDWriteIntXY(10,1,clock_second,2); if((clock_hour == 0) && (clock_minute == 0) && (clock_second == 0)) { //Time Out LoadOff(); LCDClear(); LCDWriteString("Load Turned Off"); while(1) { LCDWriteStringXY(0,1,"*Press Any Key*"); Wait(1); LCDWriteStringXY(0,1," "); Wait(1); if((~PINB) & 0b00000111) break; } break; } _delay_loop_2(0); _delay_loop_2(0); _delay_loop_2(0); _delay_loop_2(0); } //Continue again } } //The output compate interrupt handler //We set up the timer in such a way that //this ISR is called exactly at 1ms interval ISR(TIMER1_COMPA_vect) { clock_millisecond++; if(clock_millisecond==1000) { clock_second--; clock_millisecond=0; if(clock_second==-1) { clock_minute--; clock_second=59; if(clock_minute==-1) { clock_hour--; clock_minute=59; } } } }
Timer 12V Relè con AVR ATmega8
