Iklan

Posts from the ‘Mikrokontroller’ Category

Belajar Mikrokontroller: Menyalakan Buzzer Dan Komunikasi Serial


Buzzer adalah salah satu alat peraga yang dapat dikendalikan dengan mudah, termasuk dapat dikendalikan Nyala-Mati dengan mikrokontroller. Sehingga dapat dibuat suara dengan mengatur irama dengan PWM.

Pada kesempatan ini akan ditampilkan bagaimana menyalakan sebuah buzzer dan komunikasi melalui serial dengan mikrokontroller.

Slide18 Slide19 Slide20 Slide21 Slide22 Slide23 Slide24 Slide25 Slide26 Slide27 Slide28 Slide29 Slide30

Iklan

Belajar Mikrokontroller: Latihan Menyalakan LED


Belajar mikrokontroller pada kali ini adalah belajar bagaimana menyalakan LED dengan menggunakan mikrokontroller AVR.

Slide9 Slide10 Slide11 Slide12 Slide13 Slide14 Slide15 Slide16

Berikutnya: Menyalakan Buzzer

Belajar Mikrokontroller


Belajar Mikrokontroller dapat dimulai dengan mengenal dimana mikrokontroller dipakai, kemudian memahami fungsi/peranan mikrokontroller pada sistem tersebut. Selanjutnya dari cara kerja mikrokontroller berperan pada sistem otomatis yang ada akan memberi gambaran tentang mikrokontroller itu sendiri.

Pada kali ini akan ada slide sederhana yang dapat digunakan untuk belajar dari yang mudah.

Slide1 Slide2 Slide3 Slide4 Slide5 Slide6 Slide7 Slide8

Selanjutnya: Latihan 1: Menyalakan LED

Demikian, semoga bermanfaat.

Sensor Temperatur Termokopel Tipe-K MAX6675


Gambaran Umum

MAX6675 dibentuk dari kompensasi cold-junction yang outputnya didigitalisasi dari sinyal termokopel tipe-K. data output memiliki resolusi 12-bit dan mendukung komunikasi SPI mikrokontroller secara umum. Data dapat dibaca dengan mengkonversi hasil pembacaan 12-bit data.

Fitur

  • Konversi digital langsung dari output termokopel tipe-K
  • Kompensasi cold-junction
  • Komunikasi kompatibel dengan protocol SPI
  • Open thermocouple detection

Karakteristik

typical MAX6675 2

(sumber datasheet MAX6675)

Cold-Junction Compensation

Fungsi dari termokopel adalah untuk mengetahui perbedaan temperature di bagian ujung dari dua bagian metal yang berbeda dan disatukan. Termokopel tipe hot junction dapat mengukur mulai dari 0oC sampai +1023,75oC. MAX6675 memiliki bagian ujung cold end yang hanya dapat mengukur -20oC sampai +85oC. Pada saat bagian cold end MAX6675 mengalami fluktuasi suhu maka MAX6675 akan tetap dapat mengukur secara akurat perbedaan temperature pada bagian yang lain. MAX6675 dapat melakukan koreksi atas perubahan pada temperature ambient dengan kompensasi cold-junction.

Device

mengkonversi temperature ambient yang terjadi ke bentuk tegangan menggunakan sensor temperature diode. Untuk dapat melakukan pengukuran actual, MAX6675 mengukur tegangan dari output termokopel dan tegangan dari sensing diode.

Performance optimal MAX6675 dapat tercapai pada waktu termokopel bagian cold-junction dan MAX6675 memiliki temperature yang sama. Hal ini untuk menghindari penempatan komponen lain yang menghasilkan panas didekat MAX6675.

[baca selengkapnya]

Membuat Frekuensi Counter Dengan AVR


CAM00416

CAM00417

CAM00418

CAM00419CAM00420

Pada posting ini saya mencoba menyampaikan contoh bagaimana membuat sebuah counter frekuensi dengan menggunakan ATMega32A. Seperti foto di atas dapat dilihat bahwa hasil memperlihatkan bahwa tidak terdapat perbedaan signifikan antara display mikrokontroller dan frekuensi output Sinyal Generator. Dengan demikian maka alat dapat dikatakan berfungsi dengan baik dan dapat digunakan.

[baca selengkapnya]

 

Membuat Gelombang Sinus Dengan 12-Bit DAC MCP4921


pin

MCP4921 adalah DAC keluaran Microchip Technology Inc, yang memiliki fitur:

  • resolusi 12-bit
  • Single/dual channel DAC
  • Rail-to-Rail Output
  • Interface SPI dengan clock support sampai 20 MHz
  • Dapat beroperasi secara simultan
  • Setling time 4,5 uS
  • Power Supply Single 2,7Volt – 5,5Volt

Untuk dapat menggunakan DAC ini dapat merujuk pada datasheet yang menunjukkan timing SPI sebagai berikut:

spi timing

Untuk rangkaian dapat mengukuti seperti digambarkan berikut:

rangkaian

Dengan menggunakan software Code Vision dapat dibuat sebuah program untuk menuliskan data ke DAC seperti berikut:


void TulisDAC(unsigned  int data,int config)
{
// Take the top 4 bits of config and the top 4 valid bits (data is actually a 12 bit number) and or them together
int top_msg = (config & 0xF0) | (0x0F & (data >> 8));

// Take the bottom octet of data
int lower_msg = (data & 0x00FF);

PORTB.5=1;
//--CS low
PORTB.4=0;
// Send first 8 bits
spi(top_msg);
// Send second 8 bits
spi(lower_msg);
//--CS high
PORTB.4=1;
PORTB.5=0;
}


 

File Utama:

/*******************************************************
This program was created by the
CodeWizardAVR V3.10 Advanced
Automatic Program Generator
© Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date    : 21/05/2014
Author  :
Company :
Comments: 

Chip type               : ATmega128
Program type            : Application
AVR Core Clock frequency: 10,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 1024
*******************************************************/

#include <mega128.h>

// Alphanumeric LCD functions
#include <alcd.h>

// sin function
#include <math.h>

// Look-up table dimension
#define SIN_TABLE_DIM 100

// Look-up table with values needed to obtain a sinusoidal waveform
unsigned int sin_table[SIN_TABLE_DIM];
// Look-up table index
#if SIN_TABLE_DIM>255
unsigned int index;
#else
unsigned char index;
#endif
// SPI functions
#include <spi.h>
#include "perpus.c"
void TulisDAC(unsigned  int data,int config)
{
  // Take the top 4 bits of config and the top 4 valid bits (data is actually a 12 bit number) and or them together
  int top_msg = (config & 0xF0) | (0x0F & (data >> 8));
 
  // Take the bottom octet of data
  int lower_msg = (data & 0x00FF);
 
  PORTB.5=1;
  //--CS low
  PORTB.4=0;
  // Send first 8 bits
  spi(top_msg);
  // Send second 8 bits
  spi(lower_msg);
  //--CS high
  PORTB.4=1;
  PORTB.5=0;
}

// Declare your global variables here

// Timer1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer1 value
TCNT1H=0xFFEC >> 8;
TCNT1L=0xFFEC & 0xff;
// Place your code here
if (index>=SIN_TABLE_DIM) index=0;
TulisDAC(sin_table[index++],0x30);
}

void main(void)
{
// Initialize the lookup table for sinusoidal waveform
for (index=0; index<SIN_TABLE_DIM; index++)
    sin_table[index]=(unsigned int) (2047.0*sin(index*((2*PI)/SIN_TABLE_DIM))+2047.0);

// Waveform generation will start with 0 phase
index=0;
awal();
lcd_init(16);

// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here

      }
}

File pendukung.

void awal(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=Out Bit4=Out Bit3=In Bit2=Out Bit1=Out Bit0=Out
DDRB=(0<<DDB7) | (0<<DDB6) | (1<<DDB5) | (1<<DDB4) | (0<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
// State: Bit7=T Bit6=T Bit5=0 Bit4=0 Bit3=T Bit2=0 Bit1=0 Bit0=0
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=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T 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);

// Port E initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRE=(0<<DDE7) | (0<<DDE6) | (0<<DDE5) | (0<<DDE4) | (0<<DDE3) | (0<<DDE2) | (0<<DDE1) | (0<<DDE0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTE=(0<<PORTE7) | (0<<PORTE6) | (0<<PORTE5) | (0<<PORTE4) | (0<<PORTE3) | (0<<PORTE2) | (0<<PORTE1) | (0<<PORTE0);

// Port F initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRF=(0<<DDF7) | (0<<DDF6) | (0<<DDF5) | (0<<DDF4) | (0<<DDF3) | (0<<DDF2) | (0<<DDF1) | (0<<DDF0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTF=(0<<PORTF7) | (0<<PORTF6) | (0<<PORTF5) | (0<<PORTF4) | (0<<PORTF3) | (0<<PORTF2) | (0<<PORTF1) | (0<<PORTF0);

// Port G initialization
// Function: Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRG=(0<<DDG4) | (0<<DDG3) | (0<<DDG2) | (0<<DDG1) | (0<<DDG0);
// State: Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTG=(0<<PORTG4) | (0<<PORTG3) | (0<<PORTG2) | (0<<PORTG1) | (0<<PORTG0);

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
ASSR=0<<AS0;
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: 10000,000 kHz
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// OC1C output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer Period: 2 us
// Timer1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<COM1C1) | (0<<COM1C0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
TCNT1H=0xFF;
TCNT1L=0xEC;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
TCCR2=(0<<WGM20) | (0<<COM21) | (0<<COM20) | (0<<WGM21) | (0<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2=0x00;

// Timer/Counter 3 initialization
// Clock source: System Clock
// Clock value: Timer3 Stopped
// Mode: Normal top=0xFFFF
// OC3A output: Disconnected
// OC3B output: Disconnected
// OC3C output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer3 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR3A=(0<<COM3A1) | (0<<COM3A0) | (0<<COM3B1) | (0<<COM3B0) | (0<<COM3C1) | (0<<COM3C0) | (0<<WGM31) | (0<<WGM30);
TCCR3B=(0<<ICNC3) | (0<<ICES3) | (0<<WGM33) | (0<<WGM32) | (0<<CS32) | (0<<CS31) | (0<<CS30);
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;
OCR3CH=0x00;
OCR3CL=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (1<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);
ETIMSK=(0<<TICIE3) | (0<<OCIE3A) | (0<<OCIE3B) | (0<<TOIE3) | (0<<OCIE3C) | (0<<OCIE1C);

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
// INT3: Off
// INT4: Off
// INT5: Off
// INT6: Off
// INT7: Off
EICRA=(0<<ISC31) | (0<<ISC30) | (0<<ISC21) | (0<<ISC20) | (0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
EICRB=(0<<ISC71) | (0<<ISC70) | (0<<ISC61) | (0<<ISC60) | (0<<ISC51) | (0<<ISC50) | (0<<ISC41) | (0<<ISC40);
EIMSK=(0<<INT7) | (0<<INT6) | (0<<INT5) | (0<<INT4) | (0<<INT3) | (0<<INT2) | (0<<INT1) | (0<<INT0);

// USART0 initialization
// USART0 disabled
UCSR0B=(0<<RXCIE0) | (0<<TXCIE0) | (0<<UDRIE0) | (0<<RXEN0) | (0<<TXEN0) | (0<<UCSZ02) | (0<<RXB80) | (0<<TXB80);

// USART1 initialization
// USART1 disabled
UCSR1B=(0<<RXCIE1) | (0<<TXCIE1) | (0<<UDRIE1) | (0<<RXEN1) | (0<<TXEN1) | (0<<UCSZ12) | (0<<RXB81) | (0<<TXB81);

// 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<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);

// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 2500,000 kHz
// SPI Clock Phase: Cycle Start
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
SPCR=(0<<SPIE) | (1<<SPE) | (0<<DORD) | (1<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);
SPSR=(0<<SPI2X);

// TWI initialization
// TWI disabled
TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 2
// EN - PORTC Bit 1
// D4 - PORTC Bit 4
// D5 - PORTC Bit 5
// D6 - PORTC Bit 6
// D7 - PORTC Bit 7
// Characters/line: 16
}

Referensi:

Artemis Synthesizer 2: Interfacing with the MCP4921 SPI DAC

Membaca RTC DS1307 Dengan AVR


Pada tulisan ini akan diberikan contoh bagaimana membaca modul I2C RTC DS1307 dengan menggunakan modul AVR dan menampilkannya pada sebuah LCD 16×2. Semua produk dapat dibeli pada online shop Produk-Inovatif. Peralatan yang dibutuhkan adalah:

  1. Modul LCD 16×2

di-lcd16x2

  1. Modul AVR

OLYMPUS DIGITAL CAMERA

  1. Downloader

  1. Modul I2C RTC DS1307

rtc module

Selanjutnya, mari kita rangkai masing-masing modul seperti berikut:

Pertama, hubungkan modul LCD 16×2 dengan PORTA pada modul AVR, seperti gambar berikut:

LCD con 2LCD con

Kedua, hubungkan header AVR ISP USBasp pada konekto ISP PORT pada modul AVR, seperti gambar berikut:

ISP 3ISP

Ketiga, hubungkan konektor USB AVR ISP USBasp ke USB Laptop/PC, seperti gambar berikut:

USB ISP

Keempat, pasang modul RTC I2C DS1307 seperti gambar berikut:

Dengan catatan pin koneksi ada:

AVR  –> RTC

VCC  –> VCC

GND –> GND

PORTD.0 –> SDA

PORTD.1 –> SCL

rtc 3rtc 2

rtc 1rtc 4

 

Setelah semua siap, buatlah sebuah program dengan menggunakan Code Vision.

  1. Buat sebuah project

new

  1. Klik YES

YES

  1. Pilih ATmega, klik OK

ATmega

  1. Pilih Chip ATmega32A dan clock 11,059200 MHz, atau sesuai dengan yang ada pada modul AVR Anda.

Chip

  1. Pilih Alphanumeric LCD, dan atur sesuai setting berikut

LCD

  1. Samakan setting RTC seperti berikut:

RTC

  1. Simpan project dengan nama RTC

  2. Isikan code berikut:

a. Tambahkan delay

delay

b.Tambahkan deklarasi variabel berikut

declare

c. Tambahkan tulisan pembuka

pembuka

d. Tambahkan perintah membaca RTC

get time

e. Tambahkan perintah menampilkan waktu ke LCD

view

  1. Compile program yang telah dibuat, dengan CTRL+F9

  2. Selanjutnya, download ke mikrokontroller dan lihat hasilnya.

pembuka

jam

Demikian, semogar bermanfaat.

%d blogger menyukai ini: