- Beranda
- Hobby & Community
Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks
...
TS
ahocool
Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks
DIGITAL ELECTRONICS HOBBY FORUM

UPDATE 8/JUNI/2014
DUKUN FUSEBIT AKAN MENGHIDUPKAN IC MU YANG MATI !

Selengkapnya dibahas di sini gan !!
CLINOMETER SEDERHANA MEMANFAATKAN ADC

Selengkapnya dibahas di post berikut
Proyek2 micro yg sudah jadi
I.N.D.E.X F.O.R.U.M
Biar ngiler, ane kasih contoh hasil karya TS...
.

Spoiler for apa aja sih yang dibahas?:
Spoiler for "Hobby Microcontroller Itu Mahal ? Kreativitasmu Itu yg Mahal Gan !":
UPDATE 8/JUNI/2014
DUKUN FUSEBIT AKAN MENGHIDUPKAN IC MU YANG MATI !

Selengkapnya dibahas di sini gan !!
CLINOMETER SEDERHANA MEMANFAATKAN ADC

Selengkapnya dibahas di post berikut
Spoiler for Buka Jika Mau Paket Belajar:
Proyek2 micro yg sudah jadi
Quote:
I.N.D.E.X F.O.R.U.M
Quote:
Biar ngiler, ane kasih contoh hasil karya TS...
Spoiler for Contact TS lewat dimari yahh:
.
Diubah oleh ahocool 14-06-2025 11:27
0
1M
8.6K
Komentar yang asik ya
Mari bergabung, dapatkan informasi dan teman baru!
Hobby & Community
10.5KThread•7.2KAnggota
Tampilkan semua post
TS
ahocool
#1853
SOURCE CODE kita bahas satu persatu
inisialisasi awal
Inisialisasi USART dari attiny2313
Routine pengiriman text lewat progmem/flash memory
Interupt saat menerima input data serial dari PC
Interupt saat Tombol ditekan dan mengirim data ke PC
Program utama / main
Jika sudah di compile & didownload ke AVR, maka hubungkan output MAX232 ke PORT Serial PC ato port USB-serial Converter. Gunakan Hyperterminal/putty/secureCrt untuk melakukan koneksi ke COM PORT dari serial port/Usb-serial converter dengan setting BAUDRATE 9600bps
hasilnya seperti video dibawah
SELAMAT MENCOBA
inisialisasi awal
Code:
#define F_CPU 7372800UL //frek xtal yang dipake
#include <avr/io.h>
#include <util/delay.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
//rumus penentuan baudrate
#define USART_BAUDRATE 9600 // baudrate 9600 bps
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
//deklarasi menu & tulisan .
// digunakan memori flash(PROGMEM) karena attiny cukup kecil RAM nya
const char menu[] PROGMEM = "
\r* AVR ATTiny2312 - Rs232 COM by: ahocool@gmail.com *
\r Petunjuk:
\r ** TRANSMIT: Tekan Tombol Keyboard 1 & 2 untuk On/Off LED 1 & 2
\r ** RECEIVE: Tekan Tombol Switch untuk Menerima Data dari Micro
\r" ;
const char tombol[] PROGMEM ="
\r Tombol Ditekan
\r" ;
const char led1on[] PROGMEM ="
\r LED 1 ON
\r" ;
const char led1off[] PROGMEM ="
\r LED 1 OFF
\r" ;
const char led2on[] PROGMEM ="
\r LED 2 ON
\r" ;
const char led2off[] PROGMEM ="
\r LED 2 OFF
\r" ;
int led1, led2 ; //variabel untuk led
Inisialisasi USART dari attiny2313
Code:
void init_usart(void)
{
cli();
UCSRB |= (1 << RXEN) | (1 << TXEN); // kirim & terima
UCSRC |= (1 << UCSZ0) | (1 << UCSZ1);
UBRRL = BAUD_PRESCALE;
UBRRH = (BAUD_PRESCALE >> 8);
UCSRB |= (1 << RXCIE); //interupt serial usart
sei();
}
Routine pengiriman text lewat progmem/flash memory
Code:
//function untuk mengirim text single
void USART_Tx(unsigned char data)
{
while (!(UCSRA & (1<<UDRE)));{} // wait till transmit Data register is empty
UDR = data; // Send data to the computer
}
//function untuk kirim kalimat
void kirim_text(const char *data)
{
while (pgm_read_byte(data) != 0x00)
USART_Tx(pgm_read_byte(data++));
}
Interupt saat menerima input data serial dari PC
Code:
ISR(USART_RX_vect)
{
char databyte;
\t databyte = UDR; \t
\t
switch (databyte) // pemilah data yg diterima dari PC
\t
\t\t{
\t
\t case 0xD : { // jika yg diterima ENTER (0xD)
kirim_text(menu) ;
\t\t\t break; }
\t case '1' : { //jika diterima karakter 1
\t\t
if(led1 == 0) // jika kondisi awal 0
{
\t\t\t PORTB ^=(1<<0); //toogle dari kondisi sebelumnya
kirim_text(led1on) ;//kirim kalimat
\t\t\t led1=1;
\t\t\t }
\t\t\t else
\t\t\t {
\t\t\t PORTB ^=(1<<0); //toogle dari kondisi sebelumnya
kirim_text(led1off) ; //kirim kalimat
\t\t\t led1=0;
\t\t\t }
\t\t\t break; }
\t case '2' : {
if(led2 == 0) // jika kondisi awal 0
{
\t\t\t PORTB ^=(1<<1); //toogle dari kondisi sebelumnya
kirim_text(led2on) ; //kirim kalimat
\t\t\t led2=1;
\t\t\t }
\t\t\t else
\t\t\t {
\t\t\t PORTB ^=(1<<1); //toogle dari kondisi sebelumnya
kirim_text(led2off) ; //kirim kalimat
\t\t\t led2=0;
\t\t\t }
\t\t\t break; }
\t\t
\t\t}
}
Interupt saat Tombol ditekan dan mengirim data ke PC
Code:
SIGNAL (SIG_INT0)
{
kirim_text(tombol); //kirim kalimat bahwa tombol ditekan
}
Program utama / main
Code:
int main(void)
{
DDRB=0b11; //B0,B1 = Output ke led
MCUCR |= (1<<ISC01) | (1<<ISC00) ; //inisialisai interupt 0 rise edge
GIMSK |= (1<<INT0) ; // tombol ada di INT 0
led1=0; //kondisi awal led1
led2=0; //kondisi awal led2
init_usart();
kirim_text(menu) ;
PORTB=0b00; // matikan LED
\twhile(1) //muter tiada henti
\t {
\t }
return 0;
}
Jika sudah di compile & didownload ke AVR, maka hubungkan output MAX232 ke PORT Serial PC ato port USB-serial Converter. Gunakan Hyperterminal/putty/secureCrt untuk melakukan koneksi ke COM PORT dari serial port/Usb-serial converter dengan setting BAUDRATE 9600bps
hasilnya seperti video dibawah
SELAMAT MENCOBA
0
