Translate

Cara Membuat Sinyal PWM ( PULSE WIDTH MODULATION ) Dengan Frequency dan Duty Cycle Tertentu Dan Dapat Diatur BASCOM AVR

Cara Membuat Sinyal PWM ( PULSE WIDTH MODULATION ) Dengan Frequency dan Duty Cycle Tertentu BASCOM AVR


               Pada kesempatan yang berbahagia kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah sinyal PWM dengan frequency dan duty cycle yang bisa diatur sesuai keinginan. pada contoh kali ini saya menggunakan Frequency 40 Khz dengan Duty Cycle bisa diatur menggunakan potensiometer. fungsi dari alat ini yaitu untuk push pull MOSFET buck atau boost converter, karena rangkaian boost atau buck membutuhkan frequency PWM dan Duty Cycle yang bisa diatur dan sesuai perhitungan. yang perlu diperhatikan yaitu Crystal yang digunakan adalah 16 Mhz agar didapat frequency yang bagus. untuk lebih jelasnya berikut adalah program dan skemanya.



a. Minimum System

  



b. Potensiometer 





c. Program Bascom AVR

$regfile = "m8535.dat"
$crystal = 16000000

Config Adc = Free , Prescaler = 64 , Reference = Avcc

Config Timer1 = Pwm , Pwm = 8 , Compare B Pwm = Clear Up , Prescale = 1

'untuk menghasilkan frequency 40 Khz
Const Inisial = &HFFB0

Dim Dataadc As Word

On Timer1 Timer1_isr

Tcnt1l = Low(inisial)
Tcnt1h = High(inisial)

Enable Timer1
Enable Interrupts

Do

Loop


Timer1_isr:

   Tcnt1l = Low(inisial)
   Tcnt1h = High(inisial)

 Dataadc = Getadc(4)

 'output di PORTD.4 = OC1B
 Pwm1b = Dataadc

Return




d. Cara Mengatur Frequency

1. Pertama buka aplikasi KAVRCalc lalu set seperti gambar dibawah ini


2. Untuk menghasilkan Frequency diatas atau dibawah 40 Khz bisa dengan merubah nilai VALUE
3. Setelah dirubah maka pada TCNT Base akan tertera suatu nilai
4. Copy nilai tersebut dan masukkan kedalam program jangan lupa harus diawali &H untuk heksa
5. Atur frequency sesuai keinginan
6. Untuk mengatur duty cycle bisa dengan memberikan nilai langsung seperti berikut
     PWM1B = 100
7. Jika ingin menggunakan POTENSIOMETER maka gunakan program berikut
     PWM1B = dataadc 
  



e. Gambar Hasilnya





f. VIDEO HASILNYA












Membuat Mesin Antrian Dengan Mikrokontroller dan Bascom AVR

Membuat Mesin Antrian Dengan Mikrokontroller dan Bascom AVR


            Pada kesempatan yang berbahagia kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yaitu mesin antrian dengan menggunakan mikrokontroller dan bahasa bascom avr. Prinsip kerja alat ini sangatlah sederhana yaitu terdapat enam buah tombol untuk visitor yang mana akan disimpan didalam mikrokontroller dan upcounter aktif, terdapat 6 buah pilihan pelayanan yang visitor bisa pilih yaitu pelayanan a, b, c, d, e, f. misal visitor menekan tombol pada pelayanan a maka akan tertulis pada lcd 16x2 yaitu a1, begitu juga yang lainnya. kemudian terdapat 6 buah tombol pemanggilan yang terdapat pada CS layanan, jika CS pada layanan a menekan maka akan mengeluarkan nilai a1 tersebut pada Hyperterminal atau SERIAL UART, jika CS layanan a menekan lagi padahal tidak ada visitor lagi maka yang dikirimkan ke Hyperterminal adalah kosong. begitu juga dengan yang lainnya. berikut adalah skema dan programnya. 




a. Minimum System





b. Modul Serial RS232





c. Push Button





d. Program Bascom AVR

$regfile = "m16def.dat"
$crystal = 11059200
$baud = 9600

Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.1 , Db4 = Portc.2
Config Lcdpin = Pin , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5
Config Lcd = 16 * 2

Cursor Off
Cls


Ddrb = &B00000000
Ddrd.2 = 0
Ddra = &B00000000

Portb = &B11111111
Porta = &B11111111
Portd.2 = 1

Dim Count As Integer
Count = 0

Dim X As Integer
X = 0

Dim A As Integer , B As Integer , C As Integer , D As Integer , E As Integer , F As Integer
A = 0
B = 0
C = 0
D = 0
E = 0
F = 0

Dim Cs1 As Integer , Cs2 As Integer , Cs3 As Integer , Cs4 As Integer , Cs5 As Integer , Cs6 As Integer
Dim Vs1 As Integer , Vs2 As Integer , Vs3 As Integer , Vs4 As Integer , Vs5 As Integer , Vs6 As Integer

Cs1 = 0
Cs2 = 0
Cs3 = 0
Cs4 = 0
Cs5 = 0
Cs6 = 0

Vs1 = 0
Vs2 = 0
Vs3 = 0
Vs4 = 0
Vs5 = 0
Vs6 = 0


Do

Upperline
Lcd "a" ; Vs1 ; " " ; "b" ; Vs2 ; " " ; "c" ; Vs3
Lowerline
Lcd "d" ; Vs4 ; " " ; "e" ; Vs5 ; " " ; "f" ; Vs6


If Pinb.0 = 0 Then
Waitms 200
Incr A

If A <= Vs1 Then
X = 0
End If

If A > Vs1 Then
A = Vs1
End If

If A <= Vs1 And X = 1 Then
Print " "
End If

If A <= Vs1 And X = 0 Then
Print "a" ; A
X = 1
End If

End If




If Pinb.1 = 0 Then
Waitms 200
Incr B

If B <= Vs2 Then
X = 0
End If

If B > Vs2 Then
B = Vs2
End If

If B <= Vs2 And X = 1 Then
Print " "
End If

If B <= Vs2 And X = 0 Then
Print "b" ; B
X = 1
End If

End If





If Pinb.2 = 0 Then
Waitms 200
Incr C

If C <= Vs3 Then
X = 0
End If

If C > Vs3 Then
C = Vs3
End If

If C <= Vs3 And X = 1 Then
Print " "
End If

If C <= Vs3 And X = 0 Then
Print "c" ; C
X = 1
End If

End If




If Pinb.3 = 0 Then
Waitms 200
Incr D

If D <= Vs4 Then
X = 0
End If

If D > Vs4 Then
D = Vs4
End If

If D <= Vs4 And X = 1 Then
Print " "
End If

If D <= Vs4 And X = 0 Then
Print "d" ; D
X = 1
End If

End If





If Pinb.4 = 0 Then
Waitms 200
Incr E

If E <= Vs5 Then
X = 0
End If

If E > Vs5 Then
E = Vs5
End If

If E <= Vs5 And X = 1 Then
Print " "
End If

If E <= Vs5 And X = 0 Then
Print "e" ; E
X = 1
End If

End If





If Pind.2 = 0 Then
Waitms 200
Incr F

If F <= Vs6 Then
X = 0
End If

If F > Vs6 Then
F = Vs6
End If

If F <= Vs6 And X = 1 Then
Print " "
End If

If F <= Vs6 And X = 0 Then
Print "f" ; F
X = 1
End If

End If



'=================================================



If Pina.0 = 0 Then
Waitms 200
Incr Vs1
End If

If Pina.1 = 0 Then
Waitms 200
Incr Vs2
End If

If Pina.2 = 0 Then
Waitms 200
Incr Vs3
End If

If Pina.3 = 0 Then
Waitms 200
Incr Vs4
End If

If Pina.4 = 0 Then
Waitms 200
Incr Vs5
End If

If Pina.5 = 0 Then
Waitms 200
Incr Vs6
End If

Loop





e. Cara Penggunaan alat

              Jadi pada saat ditekan tombol visitor pada layar lcd akan upcounter, misal layanan a dan b ditekan, maka akan tertampil a1, b1, c0, d0, e0, f0. jika tombol CS layanan a ditekan maka akan tampil pada Hyperterminal atau serial UART interface adalah a0, a1. jika ditekan lagi akan kosong. jika visitor pada layanan a ada 5 orang maka saat tombol CS layanan a ditekan, akan menampilkan a2, a3, a4, a5. meneruskan dari sebelumnya. begitu juga yang lainnya. 











Membuat Radar Deteksi Jarak Benda Dengan Arduino dan Sensor Ultrasonik

Membuat Radar Deteksi Jarak Benda Dengan Arduino dan Sensor Ultrasonik

        
             Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang digunakan untuk mendeteksi jarak benda, sistemnya seperti radar yang bergerak memantau kondisi benda. jadi jika ada benda yang mendekat maka akan membunyikan buzzer dan menghidupkan led. alat ini terdiri dari sensor ultrasonik dan servo. mikroprosesor yang dipakai yaitu Arduino Mega. untuk lebih jelasnya berikut skema dan programnya.




a. Arduino Mega





b. Micro Servo





c. Sensor Ultrasonik SRF04





d. Program Arduino

#include <Servo.h>

#define trigPin 13
#define echoPin 12
#define led 11
#define led2 10

Servo myservo; 
int x = 50;
int y = 0;
int buzzer = 2;
int ledx = 3;


void setup() {
  myservo.attach(9);
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(ledx, OUTPUT);
  pinMode(echoPin, INPUT);
  }

void loop() {
 
 
  myservo.write(x);
 
  if(y == 0){
  x = x + 5;
  }
 
  if(y == 1){
  x = x - 5;
  }
   
  if(x > 150){
  y = 1; 
  }
 
  if(x < 50){
  y = 0; 
  } 
 
  long duration, distance;
  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);
//  delayMicroseconds(1000); - Removed this line
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  Serial.print(distance);
  Serial.println(" cm");
 
  if (distance < 10) {  // This is where the LED On/Off happens
    digitalWrite(buzzer, HIGH);
    digitalWrite(ledx, LOW);
}
  else {
    digitalWrite(buzzer, LOW);
    digitalWrite(ledx, HIGH);
  }
 
  delay(200);
 
 
}






e. VIDEO HASILNYA











 

MEMBUAT PASIEN MONITOR DENGAN ARDUINO LOADCELL HX711 AMPLIFIER, HEARTBEAT PULSE SENSOR, TEMPERATURE SENSOR DS18B20

MEMBUAT PASIEN MONITOR DENGAN ARDUINO LOADCELL HX711 AMPLIFIER, HEARTBEAT PULSE SENSOR, TEMPERATURE SENSOR DS18B20


            Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat alat untuk pasien monitor, alat ini dikhususkan untuk bayi jadi detak jantung, suhu tubuh dan beratnya harus sangat diperhatikan, maka dari itu sensor yang digunakan juga harus yang terbilang akurat, sensor yang dipakai yaitu loadcell 5Kg, pulse sensor, dan sensor suhu DS18B20. jika BPM lebih dari 150 maka buzzer akan berbunyi, dan juga jika ingin memulai counter BPM, bisa menekan tombol PLAY atau push button. untuk lebih jelasnya berikut skema dan programnya.



a. ARDUINO MEGA





b.PULSE SENSOR / HEART BEAT SENSOR





c.Loadcell + HX711





c. Sensor Suhu DS18B20 water proof






d. Program ARDUINO IDE

//library HX711 bisa di download di link berikut
//https://github.com/bogde/HX711 

#include <Wire.h>
#include <OneWire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
#include "HX711.h"

// HX711.DOUT    - pin #21
// HX711.PD_SCK    - pin #20

HX711 scale(21, 20);        // parameter "gain" is ommited; the default value 128 is used by the library

OneWire  ds(10);  //output ds18b20 ke pin 10 arduino

int n = 0;
int bpm = 0;
int x = 0;
int suhux = 0;
int bpmx = 0;
int buzzer = 8;

const int buttonPin1 = 52;
int buttonState1 = 0;
const int buttonPin2 = 53;
int buttonState2 = 0;



void setup() {
 
  pinMode(buttonPin1, INPUT);
  digitalWrite(buttonPin1, HIGH);
  pinMode(buttonPin2, INPUT);
  digitalWrite(buttonPin2, HIGH);

  pinMode(buzzer, OUTPUT);
  digitalWrite(buzzer, LOW);

  lcd.begin(16, 2);
  lcd.clear();
  lcd.noCursor();
  pinMode(13, OUTPUT);
  Serial.begin(9600);

  Serial.println("Before setting up the scale:");
  Serial.print("read: \t\t");
  Serial.println(scale.read());            // print a raw reading from the ADC

  Serial.print("read average: \t\t");
  Serial.println(scale.read_average(20));      // print the average of 20 readings from the ADC

  Serial.print("get value: \t\t");
  Serial.println(scale.get_value(5));        // print the average of 5 readings from the ADC minus the tare weight (not set yet)

  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1);    // print the average of 5 readings from the ADC minus tare weight (not set) divided
                        // by the SCALE parameter (not set yet) 

  scale.set_scale(2280.f);                      // this value is obtained by calibrating the scale with known weights; see the README for details
  scale.tare();                        // reset the scale to 0

  Serial.println("After setting up the scale:");

  Serial.print("read: \t\t");
  Serial.println(scale.read());                 // print a raw reading from the ADC

  Serial.print("read average: \t\t");
  Serial.println(scale.read_average(20));       // print the average of 20 readings from the ADC

  Serial.print("get value: \t\t");
  Serial.println(scale.get_value(5));        // print the average of 5 readings from the ADC minus the tare weight, set with tare()

  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1);        // print the average of 5 readings from the ADC minus tare weight, divided
                        // by the SCALE parameter set with set_scale

  Serial.println("Readings:");

 
//  lcd.setCursor(0, 0);
//  lcd.print("WELLCOME");
//  delay(20000);
//  lcd.clear();

}

void loop() {
 
  buttonState1 = digitalRead(buttonPin1);
  buttonState2 = digitalRead(buttonPin2);
   
  int berat = scale.get_units(10) * -1;
  float fix = (berat - 0.036) / 0.191;
 
  if (fix < 0 ) {
  fix = 0;
  }
 
 // Serial.print("one reading:\t");
 // Serial.print(scale.get_units(), 1);
 // Serial.print("\t| average:\t");
 // Serial.println(scale.get_units(10), 1);

  lcd.setCursor(0, 0);
  lcd.print("Berat= ");
  lcd.print(fix);
  lcd.print(" gr");

  scale.power_down();                    // put the ADC in sleep mode
  delay(1000);
  scale.power_up();
 
  if (buttonState1 == LOW) {
  lcd.clear();
  n = 0;
  bpm = 0;
  delay(200);
 
 // buttonState1 = digitalRead(buttonPin1);
 // buttonState2 = digitalRead(buttonPin2);

  while(n <= 300 ){
       
  n = n + 1;
  delay(200);
  int dataadc1 = analogRead(A0);         

  lcd.setCursor(0, 0);
  lcd.print("n = ");
  lcd.print(n);
  
  lcd.setCursor(0, 1);
  lcd.print("BPM = ");
  lcd.print(bpm);

  if (n > 300) {
  lcd.clear();
  }

  if ((dataadc1 > 512) && (x > 1)) { 
  digitalWrite(13, HIGH);
  x = 0;
  bpm = bpm + 1;
  }

  else if ((dataadc1 < 512) && (x < 1)) {
  x = 2;
  digitalWrite(13, LOW);

  }
 
  }
 
  }
 

//  if ( n > 300 ) {

  datatampil();
//  }


}


void datatampil() {
  n = 0;
 
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  int celsius, fahrenheit;

  if ( !ds.search(addr)) {
    ds.reset_search();
    delay(250);
    return;
  }


  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end

  delay(1000);     // maybe 750ms is enough, maybe not

  present = ds.reset();
  ds.select(addr); 
  ds.write(0xBE);     

  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();

  }

  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;


  lcd.setCursor(0, 1);
  lcd.print("T= ");
  lcd.print(celsius);
  lcd.print("C");
 
 // lcd.clear();
 
  lcd.setCursor(9, 1);
  lcd.print("BPM= ");
  lcd.print(bpm);
 
  if (bpm > 150) {
     digitalWrite(buzzer, HIGH);
  }else
  {
     digitalWrite(buzzer, LOW); 
  }
 
  delay(200);
 // lcd.clear();
 
 
 // Serial.println(bpm);
 // Serial.println(celsius);


 // n = 0;
 // bpm = 0;
 // lcd.clear();

}





e. VIDEO HASILNYA












MEMBUAT ALAT DENGAN KENDALI RFID READER ID-12 dan ACCELEROMETER ( CV AVR ) CODE VISION AVR

MEMBUAT ALAT DENGAN KENDALI RFID READER ID-12 dan ACCELEROMETER ( CV AVR ) CODE VISION AVR


              Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat alat yang digunakan untuk mengendalikan sepeda motor dengan menggunakan kartu atau tag card RFID. reader yang digunakan pada alat ini yaitu ID-12 atau bisa juga dengan RDM630 / 6300 sama saja. output pada alat ini seharusnya adalah relay namun simulasi kali ini hanya menggunakan led. sensor accelerometer yang digunakan adalah GY 61 sebagai detektor maling, jadi jika motor berubah kemiringannya, maka buzzer akan ON otomatis. untuk lebih jelasnya berikut adalah skema dan programnya.



 a. Minimum System





b. RFID Reader ID-12





c. Sensor ACCELEROMETER GY-61 








d. Program CV AVR (Code Vision AVR)

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

Project :
Version :
Date    : 6/23/2016
Author  : NeVaDa
Company : HP InfoTech s.r.l.
Comments:


Chip type               : ATmega16
Program type            : Application
AVR Core Clock frequency: 12.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

#include <mega16.h>

#include <delay.h>
#include <string.h>
#include <stdlib.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

// Standard Input/Output functions
#include <stdio.h>

#define ADC_VREF_TYPE 0x40

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

// Declare your global variables here

unsigned char pass[13] = "6F0085C0173";
unsigned char passx[13] = "780027BA5FB";

unsigned char code[13];
int val = 0;
int bytesread;
int count = 0;
int Dataadcx;
char tampungx[100];
int Dataadcy;
char tampungy[100];


void tampil(){

          PORTB.2 = 0;
          PORTB.3 = 0;
          PORTB.4 = 0;
          PORTB.5 = 0; 
       
         Dataadcx = read_adc(0);
    
         itoa(Dataadcx,tampungx);    
         lcd_gotoxy (0,1);
         lcd_puts(tampungx);
        
     if ((Dataadcx > 350 )||( Dataadcx < 300)){
       PORTB.6 = 1;
      }
      else{
       PORTB.6 = 0;
      }
 
         Dataadcy = read_adc(1);
    
         itoa(Dataadcy,tampungy);    
         lcd_gotoxy (5,1);
         lcd_puts(tampungy);
        
         delay_ms(1000);
     
       
      if (PIND.2 == 0){     
      tampil();     
      }
     

     
     
}


void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

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

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 750.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA4;
SFIOR&=0x1F;

PORTD.2 = 1;

// LCD module initialization
lcd_init(16);

while (1)
      {
     
      if (PIND.2 == 0){     
      lcd_clear();
      tampil();     
      }
     
     
     Dataadcx = read_adc(0);
     Dataadcy = read_adc(1);
    
           
    // Place your code here
    if((val=getchar()) == 2) {
    bytesread = 0;
    while(bytesread<11) {
      val = getchar();
      if((val==3)) {
        break;
      }
  
      code[bytesread] = val;
      bytesread++;
    }
   
    if(bytesread == 11) {
      lcd_clear();
      lcd_puts(code);
                    
    }        
   
          if( strcmp(code,pass) == 0 )
          {
          count++;
         
          if(count > 5 ){
          count = 1;
          }
         
         
          if(count == 1){
        
         Dataadcx = read_adc(0);
    
         itoa(Dataadcx,tampungx);    
         lcd_gotoxy (0,1);
         lcd_puts(tampungx);
 
         Dataadcy = read_adc(1);
    
         itoa(Dataadcy,tampungy);    
         lcd_gotoxy (5,1);
         lcd_puts(tampungy);
        
         delay_ms(1000);
 
          tampil();
         
         }
         
          if(count == 2){
          lcd_gotoxy(0,1); 
          lcd_puts("RELAY 1 ON");
         
          PORTB.2 = 1;
          PORTB.3 = 0;
          PORTB.4 = 0;
          PORTB.5 = 0;
         
          }
          if(count == 3){
          lcd_gotoxy(0,1); 
          lcd_puts("RELAY 2 ON");
         
          PORTB.2 = 0;
          PORTB.3 = 1;
          PORTB.4 = 0;
          PORTB.5 = 0;
         
          }
          if(count == 4){
          lcd_gotoxy(0,1); 
          lcd_puts("RELAY 3 ON");
         
          PORTB.2 = 0;
          PORTB.3 = 0;
          PORTB.4 = 1;
          PORTB.5 = 0;
          }          
         
          if(count == 5){
          lcd_gotoxy(0,1); 
          lcd_puts("RELAY 4 ON");
         
          PORTB.2 = 0;
          PORTB.3 = 0;
          PORTB.4 = 0;
          PORTB.5 = 1;
         
          }
         
         
          } 
          else {
            lcd_gotoxy(0,1); 
            lcd_puts("salah");        
          }
          
         
         
           if( strcmp(code,passx) == 0 )
          {
          count++;
         
          
          if(count > 5 ){
          count = 1;
          }
         
         
          if(count == 1){
        
         Dataadcx = read_adc(0);
    
         itoa(Dataadcx,tampungx);    
         lcd_gotoxy (0,1);
         lcd_puts(tampungx);
 
         Dataadcy = read_adc(1);
    
         itoa(Dataadcy,tampungy);    
         lcd_gotoxy (5,1);
         lcd_puts(tampungy);
        
         delay_ms(1000);
 
          tampil();
         
         }
         
          if(count == 2){
          lcd_gotoxy(0,1); 
          lcd_puts("RELAY 1 ON");
         
          PORTB.2 = 1;
          PORTB.3 = 0;
          PORTB.4 = 0;
          PORTB.5 = 0;
         
          }
          if(count == 3){
          lcd_gotoxy(0,1); 
          lcd_puts("RELAY 2 ON");
         
          PORTB.2 = 0;
          PORTB.3 = 1;
          PORTB.4 = 0;
          PORTB.5 = 0;
         
          }
          if(count == 4){
          lcd_gotoxy(0,1); 
          lcd_puts("RELAY 3 ON");
         
          PORTB.2 = 0;
          PORTB.3 = 0;
          PORTB.4 = 1;
          PORTB.5 = 0;
          }          
         
          if(count == 5){
          lcd_gotoxy(0,1); 
          lcd_puts("RELAY 4 ON");
         
          PORTB.2 = 0;
          PORTB.3 = 0;
          PORTB.4 = 0;
          PORTB.5 = 1;
         
          }
         
         
          } 
          else {
            lcd_gotoxy(0,1); 
            lcd_puts("salah");        
          }
            
    bytesread = 0;
  }
             
      };
}





e. VIDEO HASILNYA









 

Mengakses RFID ID-12 atau RDM6300 / RDM630 Menggunakan CV AVR ( Code Vision AVR )

Mengakses RFID ID-12 atau RDM6300 / RDM630 Menggunakan CV AVR ( Code Vision AVR )


              Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara mengekses RFID RDM630 / RDM6300 atau RFID ID-12, sebenarnya keduanya hampir sama output datanya maka dari itu pakai program ini bisa untuk kedua reader tersebut, yang perlu diketahui yaitu output dari reader ID-12 sebelum di filter adalah misal |||F6000657A780## maka dari itu harus dilakukan filter, jadi data dimulai dari pointer nomer 3 sampai 12. Untuk RFID RDM630 atau RDM6300 sama saja tergantung output yang didapat dan dilakukan filterisasi.untuk lebih jelasnya berikut adalah skema dan programnya. 



a. Minimum System 





b. RFID Reader ID-12





c. RFID Reader RDM6300 / RDM630





d. Program CV AVR 

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

Project :
Version :
Date    : 6/23/2016
Author  : NeVaDa
Company : HP InfoTech s.r.l.
Comments:


Chip type               : ATmega16
Program type            : Application
AVR Core Clock frequency: 12.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

#include <mega16.h>

#include <delay.h>
#include <string.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

// Standard Input/Output functions
#include <stdio.h>

#define ADC_VREF_TYPE 0x40

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

// Declare your global variables here

unsigned char pass[13] = "6F0085C0173";
unsigned char code[13];
int val = 0;
int bytesread;


void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

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

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 750.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA4;
SFIOR&=0x1F;

// LCD module initialization
lcd_init(16);

while (1)
      {
     
    // Place your code here
    if((val=getchar()) == 2) {
    bytesread = 0;
    while(bytesread<11) {
      val = getchar();
      if((val==3)) {
        break;
      }
  
      code[bytesread] = val;
      bytesread++;
    }
   
    if(bytesread == 11) {
      lcd_clear();
      lcd_puts(code);
                    
    }        
   
          if( strcmp(code,pass) == 0 )
          {
          lcd_gotoxy(0,1); 
          lcd_puts("benar");
          } 
          else {
            lcd_gotoxy(0,1); 
            lcd_puts("salah");        
          }
 
   
    bytesread = 0;
  }

             
      };
}




e. VIDEO HASILNYA











MEMBUAT RUNNING LED /LED BERJALAN DENGAN PENGATUR KECEPATAN

MEMBUAT RUNNING LED /LED BERJALAN DENGAN PENGATUR KECEPATAN


              Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat RUNNING LED atau LED BERJALAN menggunakan rangkaian analog. IC yang dipakai adalah IC yang banyak dijual dipasaran, jadi sangatlah mudah untuk membuatnya, kecepatan RUNNING atau berjalannya led bisa diatur menggunakan potensiometer 200K. aplikasi dari alat ini yaitu untuk hiasan toko atau rumah saat hari raya atau bisa juga untuk hiasan dinding. untuk lebih jelasnya berikut adalah skema rangkaiannya. Untuk simulasi PROTEUS dari rangkaian ini bisa di download di LINK berikut.





a. Rangkaian / Skema Alat




 *Ket : Ganti Resistor 200K dengan potensiometer 200k atau 500k




b. Cara Penggunaan Alat

           Untuk menggunakan alat ini pertama yaitu berikan power supply 5v ke rangkaian, kemudian led akan berjalan searah, untuk mengatur kecepatannya, putar potensiometer perlahan dan lihat apa yang terjadi pada gerakan led. semakin diputar maka akan semakin cepat gerakannya, begitu sebaliknya, jika tombol ditekan maka gerakan led akan berhenti. 
 



c. VIDEO