CV. ZENTRONIC - Perusahaan Jasa Listrik dan Elektronika

Rabu, 28 Juni 2023

LED Blinking dengan ATmega32 Microcontroller di CodevisionAVR

 

LED berkedip adalah langkah pertama yang ingin Anda lakukan untuk memulai dengan elektronik. Pada tutorial kali ini kita akan menghubungkan LED dengan ATmega32 yang merupakan mikrokontroler seri AVR. Kita akan mengedipkan LED dengan kecepatan 2 detik.

 

Components Required

 Hardware:

ATmega32A Microcontroller

Power supply (5v)

AVR-ISP Programmer

LED

100uF Capacitor

220 Ohm

Software

Codevision AVR

Progisp or flash magic

Circuit and Working Explanation

 


Seperti yang ditunjukkan pada diagram rangkaian di atas untuk menghubungkan LED dengan mikrokontroler AVR, tidak perlu menghubungkan kristal eksternal di sini. Karena ATMEGA bekerja pada osilator Resistor-Kapasitor internal 16 MHz secara default. Hanya ketika keakuratan jam diperlukan, sebagai penerapan penghitungan presisi tinggi, kristal eksternal dipasang. Saat pengontrol pertama kali dibeli, pengontrol ini menyatu untuk bekerja pada kristal internal secara default.

Resistor dihubungkan di sini untuk membatasi gambar arus dari LED. Ingat, pengontrol tidak dapat menyediakan lebih dari 30mA di terminal.

 


Programming

Program untuk mikrokontroler ATmega32 untuk berkedip LED ditunjukkan di bawah ini.menggunakan software CodevisionAVR.







Code

/*******************************************************

This program was created by the CodeWizardAVR V3.49

Automatic Program Generator

© Copyright 1998-2022 Pavel Haiduc, HP InfoTech S.R.L.

http://www.hpinfotech.ro

 

Project :

Version :

Date    : 6/28/2023

Author  :

Company :

Comments:

 

 

Chip type               : ATmega32A

Program type            : Application

AVR Core Clock frequency: 16.000000 MHz

Memory model            : Small

External RAM size       : 0

Data Stack size         : 512

*******************************************************/

 

// I/O Registers definitions

#include <mega32a.h>

#include <delay.h>

 

// Declare your global variables here

 

void main(void)

{

// Declare your local variables here

 

// Input/Output Ports initialization

// Port A initialization

// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In

DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);

// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T

PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

 

// Port B initialization

// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In

DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);

// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T

PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

 

// Port C initialization

// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In

DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);

// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T

PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

 

// Port D initialization

// Function: Bit7=In Bit6=In Bit5=Out Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In

DDRD=(0<<DDD7) | (0<<DDD6) | (1<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);

// State: Bit7=T Bit6=T Bit5=0 Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T

PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

 

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

// Mode: Normal top=0xFF

// OC0 output: Disconnected

TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00);

TCNT0=0x00;

OCR0=0x00;

 

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer1 Stopped

// Mode: Normal top=0xFFFF

// OC1A output: Disconnected

// OC1B output: Disconnected

// 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=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);

TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);

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=0xFF

// OC2 output: Disconnected

ASSR=0<<AS2;

TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);

TCNT2=0x00;

OCR2=0x00;

 

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);

 

// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

// INT2: Off

MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);

MCUCSR=(0<<ISC2);

 

// USART initialization

// USART disabled

UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);

 

// Analog Comparator initialization

// Analog Comparator: Off

// The Analog Comparator's positive input is

// connected to the AIN0 pin

// The Analog Comparator's negative input is

// connected to the AIN1 pin

ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);

SFIOR=(0<<ACME);

 

// ADC initialization

// ADC disabled

ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);

 

// SPI initialization

// SPI disabled

SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);

 

// TWI initialization

// TWI disabled

TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

 

while (1)

      {

      // Place your code here

      PORTD.5=0;

      delay_ms(1000);

      PORTD.5=1;

      delay_ms(1000);

      }

}


 

 

 

 

 

 

 

 

 

 

VIDEO


 

Kamis, 08 Juni 2023

Komunikasi RFID Reader dengan Arduino


 

Pernahkah Anda bertanya-tanya bagaimana sistem antipencurian di supermarket bekerja? Atau bagaimana cara kerja sistem pembayaran tol otomatis seperti fast tag? Semua jawaban atas keraguan Anda adalah RFID atau Radio Frequency Identification. Seperti namanya, RFID menggunakan gelombang elektromagnetik dalam spektrum frekuensi radio untuk komunikasi dan transfer data. Tag RFID digunakan di banyak industri dan Anda dapat menemukannya di tag produk dari toko hingga kartu akses keamanan. Tag RFID dapat mempercepat pembayaran dan dapat digunakan untuk tindakan antipencurian. Mereka juga dapat digunakan untuk mengidentifikasi ternak, produk, dll. Dalam tutorial ini, kita akan mempelajari bagaimana kita dapat menggunakan teknologi RFID dengan Arduino. Kita akan belajar bagaimana menghubungkan pembaca RFID RC522 dengan Arduino.

RC522 RFID Reader/Writer Module Pinout

Modul RC522 memiliki total 8 pin. Modul ini mendukung berbagai protokol komunikasi dan setiap pin memiliki fungsi yang berbeda untuk setiap protokol komunikasi. Pinout modul RFID Reader adalah sebagai berikut:

 


How is the RFID Works?

Sistem RFID terdiri dari dua komponen: pembaca RFID dan tag. Mereka juga disebut PCD (Proximity Coupling Device) dan PICC (Proximity Integrated Circuit Card).

Pembaca RFID terdiri dari antena untuk memancarkan gelombang EM frekuensi tinggi dan pembaca/penulis. MFRC522 dari NXP adalah contoh sirkuit terintegrasi semacam itu. Karena kami menggunakan gelombang frekuensi tinggi dalam kisaran megahertz, ukuran antena bisa jadi kecil.

 


Tag RFID dapat berupa pasif atau aktif. Tag aktif ditenagai oleh baterai sedangkan tag RFID pasif ditenagai oleh energi dari gelombang EM interogasi pembaca. Tag tersedia dalam berbagai bentuk atau bentuk seperti kartu, tag, gantungan kunci, atau stiker. Apapun bentuknya, tag RFID akan terdiri dari antena dan chip RFID yang akan menyimpan semua data. Saat dipicu oleh pulsa interogasi elektromagnetik dari pembaca RFID terdekat, tag akan mengirimkan data kembali ke pembaca. Pembaca kemudian akan menganalisis data ini untuk mengidentifikasi tag. Tidak seperti barcode atau kode QR, tag tidak harus berada dalam jarak pandang pembaca. Ini membuatnya lebih mudah untuk diproses dan dapat digunakan untuk melacak objek di ruang tertutup.

 

Arduino RC522 RFID Reader Interfacing Circuit Diagram

Untuk menghubungkan modul RFID RC522 dengan Arduino, kita akan menggunakan antarmuka SPI. Ikuti diagram sirkuit dan buat koneksi sesuai itu.

 


Pin VCC dan GND modul masing-masing terhubung ke pin 3.3V dan GND Arduino. Pin Reset terhubung ke pin D9 dan SS, MOSI, MISO, dan SCK masing-masing terhubung ke pin D10, D11, D12, dan D13 dari Arduino. Pin SS dan RST dapat dikonfigurasi dan dapat dihubungkan ke pin digital lainnya di Arduino.

 


Arduino RC522 RFID Module Code

Saat koneksi dibuat, mari kita lihat bagian pengkodean. Untuk itu, kita akan menggunakan Perpustakaan Arduino MFRC522 oleh Miguel André Balboa. Karena Library tidak tersedia di pengelola Library Arduino, unduh dari repositori MFRC522 GitHub dan pasang di folder Library Arduino. Anda dapat menginstalnya baik melalui Arduino IDE, dengan masuk ke Sketch -> Include Library -> Add ZIP Library dan memilih file .ZIP yang diunduh, atau hanya dengan mengekstrak file Zip ke dalam folder library Arduino.

Setelah Library diinstal, kami dapat menguji pengaturan kami dengan kode contoh. Untuk itu, buka contoh DumpInfo dari Library MFRC522. Ini contoh kodenya.

 

#include <SPI.h>

#include <MFRC522.h>

#define RST_PIN         9          // Configurable, see typical pin layout above

#define SS_PIN          10         // Configurable, see typical pin layout above

MFRC522 mfrc522(SS_PIN, RST_PIN);  // Create MFRC522 instance

void setup() {

Serial.begin(115200);                       // Initialize serial communications with the PC

while (!Serial);                       // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)

            SPI.begin();                             // Init SPI bus

            mfrc522.PCD_Init();              // Init MFRC522

            delay(4);                                             // Optional delay. Some board do need more time after init to be ready, see Readme

            mfrc522.PCD_DumpVersionToSerial();      // Show details of PCD - MFRC522 Card Reader details

            Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks..."));

}

void loop() {

            // Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle.

            if ( ! mfrc522.PICC_IsNewCardPresent()) {

                        return;

            }

            // Select one of the cards

            if ( ! mfrc522.PICC_ReadCardSerial()) {

                        return;

            }

            // Dump debug info about the card; PICC_HaltA() is automatically called

            mfrc522.PICC_DumpToSerial(&(mfrc522.uid));

}

 

Setelah dikompilasi dan diunggah ke Arduino, buka monitor serial dan tunjukkan tag apa pun di dekat modul RC522. Ketika tag berada di sekitarnya, reader akan membaca semua data dari tag tersebut dan akan membuangnya ke monitor serial seperti yang ditunjukkan di bawah ini.

Dump data akan berisi semua detail seperti Card UID, Card SAK, tipe PICC, dan semua peta memori. UID atau ID Unik adalah Unik untuk setiap tag seperti namanya. Jika Anda mendapatkan kesalahan gagal komunikasi, itu karena baud rate serial kami terlalu lambat. Tingkatkan baud rate ke 115200 dalam kode dan itu akan menyelesaikan masalah. Di sini, di data dump, kita dapat melihat bahwa tipe PICC adalah MIFARE 1KB. Itu berarti tag berisi chip MIFARE dengan memori 1KB.

 

 

Arduino – LM35 Temperature Sensor

  Sensor Suhu seri LM35 adalah perangkat suhu sirkuit terpadu presisi dengan tegangan keluaran yang berbanding lurus dengan suhu Celcius. ...