Minggu, 03 Agustus 2014

SEVEN SEGMEN DENGAN TOMBOL DAN LED


Seven segmen dengan tombol dan LED dengan awal perinsip kerja nilai seven segmen dimulai dari nilai 320 dan LED pertama aktif dan LED lainnya tidak aktif, saat tombol UP ditekan bersamaan dengan tombol Key ditekan maka akan menghasilkan nilai 320 menjadi 330 maka LED kedua aktif dan LED lainnya tidak aktif  sampai dengan nilai 370.



PROGRAM CV AVR

/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :   PUSH BUTTON 7seg dan LED
Version :
Date    : 19/11/2013
Author  :
Company : Gunawan Amsari
Comments:


Chip type               : ATmega8535
Program type            : Application
AVR Core Clock frequency: 11.059200 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 128
*****************************************************/
#include 
#include 
unsigned char angka[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
int satuan,puluhan,ratusan,data,data_temp,x;  

void ambil_data()
{
data_temp=data;
puluhan=(data_temp/10)%10;
ratusan=(data_temp/100)%10;
}

void tampilkan_seven_segment()
{
PORTD.0=0;
PORTD.1=0;
PORTD.2=1;
PORTB=angka[satuan];
delay_ms(1);
          
PORTD.0=0;
PORTD.1=1;
PORTD.2=0;
PORTB=angka[puluhan];
delay_ms(1);
            
PORTD.0=1;
PORTD.1=0;
PORTD.2=0;
PORTB=angka[ratusan];
delay_ms(1);
           
}

void main(void)
{
data=320;

PORTA=0xFF;
DDRA=0x00;

PORTB=0xFF;
DDRB=0xFF;

PORTC=0xFF;
DDRC=0xFF;

PORTD=0xFF;
DDRD=0xFF;

while (1)
      {
      for(x=0;x<50 br="" nbsp="" x="">        {
        ambil_data();
        tampilkan_seven_segment();
        } 
      if (PINA.0==0)
      if (PINA.1==0)
        {
        data++;
        if (data>=370)
            data=370;
            PORTC.2=data;
            PORTC.2=0;
            PORTC.3=1;
            PORTC.4=1;
            PORTC.5=1;
            PORTC.6=1;
            PORTC.7=1; 
        }
       else if (data>=370)
       {
            data=370;
            PORTC.2=data;
            PORTC.2=0;
            PORTC.3=1;
            PORTC.4=1;
            PORTC.5=1;
            PORTC.6=1;
            PORTC.7=1; 
        } 
       
      else  if (data>=360) 
        {
            data=360;
            PORTC.3=data;
            PORTC.2=1;
            PORTC.3=0;
            PORTC.4=1;
            PORTC.5=1;
            PORTC.6=1;
            PORTC.7=1;  
        }
        else if (data>=350)    
        {
            data=350;
            PORTC.4=data;
            PORTC.2=1;
            PORTC.3=1;
            PORTC.4=0;
            PORTC.5=1;
            PORTC.6=1;
            PORTC.7=1;  
        }         
        else if (data>=340)   
        {
            data=340;
            PORTC.5=data;
            PORTC.2=1;
            PORTC.3=1;
            PORTC.4=1;
            PORTC.5=0;
            PORTC.6=1;
            PORTC.7=1;  
        }   
        else if (data>=330)    
        {
            data=330;
            PORTC.6=data;
            PORTC.2=1;
            PORTC.3=1;
            PORTC.4=1;
            PORTC.5=1;
            PORTC.6=0;
            PORTC.7=1; 
        }
        else if (data>=320)   
        {
            data=320;
            PORTC.7=data;
            PORTC.2=1;
            PORTC.3=1;
            PORTC.4=1;
            PORTC.5=1;
            PORTC.6=1;
            PORTC.7=0;
        }
      if (PINA.0==0)      
      if (PINA.2==0)
        {
        data--;
        if (data<=320)
            data=320;
            PORTC.7=data;
            PORTC.2=1;
            PORTC.3=1;
            PORTC.4=1;
            PORTC.5=1;
            PORTC.6=1;
            PORTC.7=0;
        }  
        else if (data<=320)
        {
            data=320;
            PORTC.7=data;
            PORTC.2=1;
            PORTC.3=1;
            PORTC.4=1;
            PORTC.5=1;
            PORTC.6=1;
            PORTC.7=0;
        }
      else if (data<=330)
        {
            data=330;
            PORTC.6=data;
            PORTC.2=1;
            PORTC.3=1;
            PORTC.4=1;
            PORTC.5=1;
            PORTC.6=0;
            PORTC.7=1;
        } 
        else if (data<=340)   
        {
            data=340;
            PORTC.5=data;
            PORTC.2=1;
            PORTC.3=1;
            PORTC.4=1;
            PORTC.5=0;
            PORTC.6=1;
            PORTC.7=1;   
        }   
        else if (data<=350)   
        {
            data=350;
            PORTC.4=data;
            PORTC.2=1;
            PORTC.3=1;
            PORTC.4=0;
            PORTC.5=1;
            PORTC.6=1;
            PORTC.7=1; 
        } 
        else if (data<=360)  
       {
            data=360;
            PORTC.3=data;
            PORTC.2=1;
            PORTC.3=0;
            PORTC.4=1;
            PORTC.5=1;
            PORTC.6=1;
            PORTC.7=1;   
        }  
        else if (data<=370)
        {
            data=370;
            PORTC.2=data;
            PORTC.2=0;
            PORTC.3=1;
            PORTC.4=1;
            PORTC.5=1;
            PORTC.6=1;
            PORTC.7=1; 
            }
                  
      };
}
READ MORE - SEVEN SEGMEN DENGAN TOMBOL DAN LED

SENSOR SUHU DAN KELEMBAPAN SHT 11

SENSOR SUHU DAN KELEMBAPAN SHT 11

TAMPIL 1




TAMPIL 2



TAMPIL 3

TAMPIL SHT 11


PROGRAM CV AVR

/*****************************************************
Program SHT11 dengan CodeVision AVR
Programmer : GUNAWAN AMSARI
Company    :
*****************************************************/

#include //crystal 8MHz
#include
#include
#include
#include
#include

//Deklarasi varaibel
unsigned char buf[33];
unsigned char error,checksum;
char inp;
                       
typedef union
{ unsigned int i;
  float f;
} value;
enum {TEMP,HUMI};
#define        DATA_OUT           PORTC.6
#define        DATA_IN            PINC.6
#define        SCK                PORTC.7
#define noACK 0
#define ACK   1       
                            //adr  command  r/w
#define STATUS_REG_W 0x06   //000   0011    0
#define STATUS_REG_R 0x07   //000   0011    1
#define UKUR_SUHU    0x03   //000   0001    1
#define UKUR_HUMI    0x05   //000   0010    1
#define RESET        0x1e   //000   1111    0

unsigned int nilaisuhu[2]={0,0};

//Untuk menulis data ke SHT11
char tulis_SHT(unsigned char bytte)
{
  unsigned char i,error=0; 
  DDRC = 0b11000000;    
  for (i=0x80;i>0;i/=2) //shift bit
  {
    if (i & bytte)      
    DATA_OUT=1;
    else DATA_OUT=0;                      
    SCK=1;      //clk
    delay_us(5); //delay 5 us         
    SCK=0;      
  }
  DATA_OUT=1;                         
  DDRC = 0b10000000;    // DATA Output
  SCK=1;                //clk #9 ack
  delay_us(2);
  error=DATA_IN;       //cek ack (DATA akan di pull down oleh SHT11)
  delay_us(2);
  SCK=0;       
  return error;       //cek jika ada error
}

//Untuk membaca data dari SHT11
char baca_SHT(unsigned char ack)
{
  unsigned char i,val=0;
  DDRC = 0b10000000;    // DATA Input
  for (i=0x80;i>0;i/=2)             //shift bit
  { SCK=1;                          //clk      
    delay_us(2);
    if (DATA_IN) val=(val | i);        //baca bit 
    delay_us(2);
    SCK=0;
  }  
  DDRC = 0b11000000;    // DATA Output
  DATA_OUT=!ack;        //"ack==1" pull down DATA-Line
  SCK=1;                //clk #9 ack
  delay_us(5);          //delay 5 us
  SCK=0;
  DATA_OUT=1;           //DATA-line                                                               
  return val;
}
//----------------------------------------------------------------------------------
// menghasilkan sinyal awal untuk transmisi data
//       _____         ________
// DATA:      |_______|
//           ___     ___
// SCK : ___|   |___|   |______
//----------------------------------------------------------------------------------

//Untuk memulai transmisi data
void start_SHT(void)
{                       
   DDRC = 0b11000000;    // DATA Output
   DATA_OUT=1; SCK=0;   //Inisial state
   delay_us(2);
   SCK=1;
   delay_us(2);
   DATA_OUT=0;
   delay_us(2);
   SCK=0; 
   delay_us(5);
   SCK=1;
   delay_us(2);
   DATA_OUT=1;                  
   delay_us(2);
   SCK=0;     
   DDRC = 0b10000000;    // DATA Input
}
//----------------------------------------------------------------------------------
// reset: DATA-line=1 dengan 9 SCK cycle di awal
//       _____________________________________________________         ________
// DATA:                                                      |_______|
//          _    _    _    _    _    _    _    _    _        ___     ___
// SCK : __| |__| |__| |__| |__| |__| |__| |__| |__| |______|   |___|   |______
//----------------------------------------------------------------------------------

//Untuk mereset koneksi dengan SHT11
void reset_SHT(void)

  unsigned char i;
  DDRC = 0b11000000;    // DATA output
  DATA_OUT=1; SCK=0;                    //Inisial state
  for(i=0;i<9 br="" cycle="" i="" nbsp="" sck="">  { SCK=1;
    delay_us(1);
    SCK=0;
    delay_us(1);
  }
  start_SHT();                   //start transmisi data
  DDRC = 0b10000000;    // DATA Input
}

//Mengecek status register sensor
char StatusReg_SHT(unsigned char *p_value, unsigned char *p_checksum)
{
  unsigned char error=0;
  start_SHT();                   //start transmisi data
  error=tulis_SHT(STATUS_REG_R); //mengirim command ke sensor
  *p_value=baca_SHT(ACK);        //baca status register (8-bit)
  *p_checksum=baca_SHT(noACK);   //baca checksum (8-bit) 
  return error;                     //error=1 jika tidak ada respon dari sensor
}

//Membaca data hasil pengukuran
char ukur_SHT(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode)
{
  unsigned error=0;
 unsigned int temp=0;
  start_SHT();                   //start transmisi data   

  switch(mode){                     //mengirim command ke sensor
    case TEMP        : error+=tulis_SHT(UKUR_SUHU); break;
    case HUMI        : error+=tulis_SHT(UKUR_HUMI); break;
    default     : break;        
  }                 
  DDRC = 0b10000000;    // DATA input
 while (1)
 {       
   if(DATA_IN==0) break; //tunggu hingga sensor selesai melakukan pengukuran
  }
  if(DATA_IN) error+=1;                // jika sudah timeout (2 detik)    

  switch(mode){                     //mengirim command ke sensor
    case TEMP        : temp=0;
                       temp=baca_SHT(ACK);
                       temp<<=8;
                       nilaisuhu[0]=temp;
                       temp=0;
                       temp=baca_SHT(ACK);
                       nilaisuhu[0]|=temp;
                       break;
    case HUMI        : temp=0;
                       temp=baca_SHT(ACK);
                       temp<<=8;
                       nilaisuhu[1]=temp;
                       temp=0;
                       temp=baca_SHT(ACK);
                       nilaisuhu[1]|=temp;
                       break;
    default     : break;        
  }  
  *p_checksum =baca_SHT(noACK);  //baca checksum    
  return error;
}

const float C1=-4.0;             
const float C2=+0.0405;          
const float C3=-0.0000028;       
const float T1=+0.01;            
const float T2=+0.00008;               
 

float hitung_SHT(float p_humidity, float *p_temperature)
{
  float rh_lin;                     // rh_lin:  Kelembaban linear
  float rh_true;                    // rh_true: Suhu untuk kompensasi kelembaban
  float t_C;                        // t_C   :  nilai Suhu

  t_C=*p_temperature*0.01-40; //mengubah nilai Suhu menjadi derajat Celcius [°C]
  rh_lin=C3*(p_humidity)*(p_humidity) + C2*(p_humidity) + C1; //mengubah nilai kelembaban dalam % [%RH] 
  rh_true=(t_C-25)*(T1+T2*(p_humidity))+rh_lin; //mengkompensasikan nilai suhu dan kelembaban[%RH]
  if(rh_true>100)rh_true=100;
  if(rh_true<0 .1="" br="" rh_true="0.1;">
  *p_temperature=t_C;
   return rh_true;
}                     
                                 

void main(void)
{
value humi_val,temp_val;

PORTA=0x00;
DDRA=0x00;

PORTB=0xFF;
DDRB=0x00;

PORTC=0x00;
DDRC=0xC0;

PORTD=0xF0;
DDRD=0xF0;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;

ACSR=0x80;
SFIOR=0x00;
ADCSRA=0x00;
SPCR=0x00;
TWCR=0x00;

// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTA Bit 0
// RD - PORTA Bit 1
// EN - PORTA Bit 2
// D4 - PORTA Bit 4
// D5 - PORTA Bit 5
// D6 - PORTA Bit 6
// D7 - PORTA Bit 7
// Characters/line: 16
lcd_init(16);
lcd_clear();
lcd_gotoxy(3,0);
lcd_putsf("Data Suhu");
lcd_gotoxy(1,1);
lcd_putsf("dan Kelembaban");
delay_ms(1000);

lcd_init(16);
lcd_clear();
lcd_gotoxy(1,0);
lcd_putsf("GUNAWAN AMSARI");
lcd_gotoxy(0,1);
lcd_putsf("===============");
delay_ms(1000);

lcd_init(16);
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("LOADING");
lcd_gotoxy(0,1);
lcd_putsf("WAIT....");
delay_ms(1000);

reset_SHT();   

while (1)
   {
      //delay_ms(500);       
      error=0;           
      error+=ukur_SHT((unsigned char*)( &humi_val.i),&checksum,HUMI);  //mengukur kelembaban
      error+=ukur_SHT((unsigned char*) (&temp_val.i),&checksum,TEMP);  //mengukur suhu              
      error += StatusReg_SHT(&inp, &checksum);
      if(error!=0)
       {
       reset_SHT();                 //jika ada error, reset koneksi
       putsf("Error");  
       }      
      else
       {
       humi_val.f=(float)nilaisuhu[1];                   //mengubah integer menjadi float
       temp_val.f=(float)nilaisuhu[0];                  
       humi_val.f=hitung_SHT(humi_val.f,&temp_val.f);      //menghitung suhu, kelembaban
       //menampilkan pada LCD  
       lcd_clear();
       lcd_gotoxy(0,0);
       sprintf(buf,"SUHU = %0.2f \xdfC",temp_val.f); 
       lcd_puts(buf); 
       lcd_gotoxy(0,1);
       sprintf(buf,"RH   = %0.2f %%",humi_val.f);
       lcd_puts(buf);
       }              
    delay_ms(1000);   
   }
}


 
READ MORE - SENSOR SUHU DAN KELEMBAPAN SHT 11