Timer 12 V a relè con AVR ATmega8

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


Schema Timer relè con AVR ATmega8

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

Scarica subito una copia gratis
Tags:,

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend