ahocoolAvatar border
TS
ahocool
Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks
DIGITAL ELECTRONICS HOBBY FORUM




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 08-06-2014 04:14
0
1M
8.6K
GuestAvatar border
Guest
Tulis komentar menarik atau mention replykgpt untuk ngobrol seru
Mari bergabung, dapatkan informasi dan teman baru!
Hobby & Community
Hobby & CommunityKASKUS Official
10.4KThread6.1KAnggota
Tampilkan semua post
ahocoolAvatar border
TS
ahocool
#1008
SHARE PROJECT LAGI

KOMUNIKASI ATTiny2313 UART(RS232) vs PC untuk Remote Sensing


kebetulan kemaren ada yg tanya mengenai komunikasi RS232
ya sekalian aja aku share proyek yg udah kelar
daku bikin komunikasi PC ke Relay / input untuk mengetahui status ON/OFF misale status lampu, pintu , dan sebgainya asal yg dibaca kondisi ON atau OFF dan kemudian AVR membaca sebagai sinyal 5V (on) dan 0V (off)

aku pake ATtiny 2313 yg murah meriah tapi handal, dan MAX232 sebagai pengubah level tegangan TTL (5V) menuju RS232 / PC serial (+- 15 v)

rangkaiannya seperti berikut :

Spoiler for lumayan gede gambarnya:



input yang digunakan sebanyak 9 input, dan masih menggunakan cara pooling aja...alat ini bisa dihubungkan ke PC lewat rs232/serial dan Hyperterminal baud rate 9600 , untuk mengetahui status koneksi tekan keyboard "0" dan untuk melihat status port tekan "1" dan alat akan merespon ke layar hyperterminal

codingnya sebagai berikut:

Code:


// Fuse SUT_CKSEL dirubah jadi internal clock 8MHZ , err com= 0,2%
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/eeprom.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#include <avr/iotn2313.h>
#include <avr/pgmspace.h>
#include <string.h>
#include <stdlib.h>

// definisi port yg digunakan
#define INPUT1 PIND2
#define INPUT2 PIND3
#define INPUT3 PIND4
#define INPUT4 PIND5
#define INPUT5 PIND6
#define INPUT6 PINB0
#define INPUT7 PINB1
#define INPUT8 PINB2
#define INPUT9 PINB3

//definisi baud rate usart/serial

#define USART_BAUDRATE 9600
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)


const char awal[] PROGMEM = " * AHOCOOL's AVR ATTiny2313-RS232 Remote Sensing *

\r";

const char ok[] PROGMEM ="[11]"; //jika com OK

char kondisi[11];


void USART_Tx(unsigned char data)
{

while (!(UCSRA & (1<<UDRE)));{} // wait till transmit Data register is empty
UDR = data; // Send data to the computer
}

void kirim_text(const char *data)
{
while (pgm_read_byte(data) != 0x00)
USART_Tx(pgm_read_byte(data++));
}




void init_usart(void)
{

cli();

UCSRB |= (1 << RXEN) | (1 << TXEN);
UCSRC |= (1 << UCSZ0) | (1 << UCSZ1);
UBRRL = BAUD_PRESCALE;
UBRRH = (BAUD_PRESCALE >> 8);
UCSRB |= (1 << RXCIE); //interupt serial usart
sei();
}



void checkport(void) // cek kondisi port
{


kondisi[0]='[';

if(bit_is_set(PIND, INPUT1)) kondisi[1]='1';
else if(bit_is_clear(PIND, INPUT1)) kondisi[1]='0';

if(bit_is_set(PIND, INPUT2)) kondisi[2]='1';
else if(bit_is_clear(PIND, INPUT2)) kondisi[2]='0';

if(bit_is_set(PIND, INPUT3)) kondisi[3]='1';
else if(bit_is_clear(PIND, INPUT3)) kondisi[3]='0';

if(bit_is_set(PIND, INPUT4)) kondisi[4]='1';
else if(bit_is_clear(PIND, INPUT4)) kondisi[4]='0';

if(bit_is_set(PIND, INPUT5)) kondisi[5]='1';
else if(bit_is_clear(PIND, INPUT5)) kondisi[5]='0';

if(bit_is_set(PINB, INPUT6)) kondisi[6]='1';
else if(bit_is_clear(PINB, INPUT6)) kondisi[6]='0';

if(bit_is_set(PINB, INPUT7)) kondisi[7]='1';
else if(bit_is_clear(PINB, INPUT7)) kondisi[7]='0';

if(bit_is_set(PINB, INPUT8)) kondisi[8]='1';
else if(bit_is_clear(PINB, INPUT8)) kondisi[8]='0';

if(bit_is_set(PINB, INPUT9)) kondisi[9]='1';
else if(bit_is_clear(PINB, INPUT9)) kondisi[9]='0';

kondisi[10]=']';


}


ISR(USART_RX_vect)
{
char databyte;
uint8_t a;

\t databyte = UDR; \t
\t
\t
switch (databyte)
\t
\t\t{
\t
case '1' : { // jika PC kirim karakter '1'
checkport();
\t //reply status port ke PC\t\t
for(a=0;a<11;a++) {USART_Tx(kondisi[a]); _delay_ms(10);}
\t\t\t break;\t\t

\t\t\t}
\t case '0' : { // jika PC kirim karakter '0'
\t\t \t kirim_text(ok); //reply text ok
\t\t\t break; }
}
}


int main(void)
{

DDRD &= ~_BV(PD2) & ~_BV(PD3) & ~_BV(PD4) & ~_BV(PD5) & ~_BV(PD6) ;
DDRB &= ~_BV(PB0) & ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3) ;

init_usart();

kirim_text(awal);




\twhile(1)
\t {


\t }


}




Karena rekuest dari yg mesen untuk bikin visual programmingnya, daku bikinin berbasis flash +swfkit ..ane ga ahli delphi / c# hehehe
hasilnya seperti berikut ini



SELAMAT MENCOBA ..
0
Ikuti KASKUS di
© 2023 KASKUS, PT Darta Media Indonesia. All rights reserved.