Category Archives: Dasar

Pengetahuan dasar umum yang membantu memahami PC Control

Pengetahuan Dasar Grounding Pada Rangkaian Elektronik

[draft]

Pengetahuan Dasar Grounding Pada Rangkaian Elektronik

  • Grounding dalam 1 rangkain PCB
  • Grounding pada chasis
  • Siklus/loop  Grounding
  • Grounding Power supply
  • grounding pada sinyal input
  • grounding pada sinyal output
  • Koneksi ground antar pcb
  • Shielding
  • safety earth

 

 

Advertisements

Menambah Pin Input dan output modul Arduino dgn IC IO expander PCF8574

[Draft]

Menambah Pin Input dan output modul Arduino dgn IC IO expander PCF8574

i2ccircuit

kita akan menyalakan dan mematikan led di modul LCD i2c  yg menggunakan IC PCF8574 .   sckematik modul LCD i2c adalah sbb:

lcdi2ccirkuit

Kita lihat dari gambar diatas led back light LCD dihubungkan ke P3 dari ic PCF8574.

 

Library yang digunakan :  PCF8574.h

Contoh Code   pin P3 PCF8574 sebagai OUTPUT

#include “PCF8574.h”

PCF8574 GPIOtambahan(0x27);   // Set alamat ic PCF8574
void setup(){

Serial.begin(9600);

GPIOtambahan.pinMode(P3, OUTPUT);    // Set pinMode P3 sebagai OUTPUT

GPIOtambahan.begin();

}
void loop()

{

GPIOtambahan.digitalWrite(P3, HIGH);

delay(1000);

GPIOtambahan.digitalWrite(P3, LOW);

delay(1000);

}

 

Contoh Code pin P1   PCF8574  sebagai INPUT

#include “PCF8574.h”

PCF8574   pcf8574(0x27);  // Set i2c address

void setup()

{

Serial.begin(9600);

pcf8574.pinMode(P1, INPUT);
pcf8574.begin();

}
void loop()

{

uint8_t val = pcf8574.digitalRead(P1);

if (val==HIGH) Serial.println(“KEY PRESSED”);

delay(50);

}

Dasar pemrograman I2C pada Arduino

[DRAFT]

Sebelum memprogram I2C pada arduino ada baiknya  Anda mengetahui dasar komunikasi i2c  .Dasar  Cara kerja I2C  bisa dibaca disini

Contoh  device yang sering dikoneksi ke arduino  melalui komunikasi i2c antara lain : io expander  , memory eeprom external , LCD , dsb.

berikut ini contoh koneksi Arduino (sebagai master )  dengan beberapa  device slave berikut ini : ic RTC ds1307,  ic EEPROM At24C32(ada di modul RTC)  dan ic io expander PCF8574  (yg dipakai di LCD matrix.) .adapun koneksinya adalah sbb:

RTC_LCD_I2C

..

i2ccircuit2

 

library  utama yg digunakan untuk  komunikasi i2c adalah wire.h  yang anda bisa dicek  di library manager . ( jika hanya cek library  apakah sdh terinstal atau blm  internet anda tdk perlu  online. Untuk intsall library baru melalui library manager internet harus online)

menulibrarymanager
setelah muncul menu library manager  , ketik wire pada kolom pencarian.

wirelib.jpg

pada gambar diatas terlihat bahwa library wire telah terinstall (INSTALLED

selain itu dibutuhkan juga library khusus device slave yg kita gunakan antara lain

  1. untuk RTC DS1307 :  DS1307RTC.h
  2. untuk AT24C32       :  At24CXX.h
  3. untuk LCD i2c         : LiquidCrystal_I2C.H

(anda bisa menggunakan library selain yg diatas, banyak pilihan ada di menu library manager  ).  saat menginstall library melalui library manager pastikan internet anda aktif.

Langkah langkah memprogram device I2C

  1. cek alamat device   dengan sketch scan device yg terkoneksi ke arduino
  2. instal library device tsb
  3. buat sketch untuk read/write device i2c
  4. upload sketch ke arduino

Berikut ini contoh sketch untuk scan alamat device slave  i2c yang terkoneksi dengan master i2c (arduino).

#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
while (!Serial);
Serial.println(“\nI2C Scanner”);
}

 

void loop()
{
byte kode_eror, alamat;
int nDevices;
Serial.println(“Scanning…cari chip i2c pd alamat 1 – 127”);
nDevices = 0;
for(alamat = 1; alamat < 127; alamat++ )
{
Wire.beginTransmission(alamat);
kode_eror = Wire.endTransmission();
if (kode_eror == 0)
{
Serial.print(“I2C device alamat: 0x”);
Serial.println(alamat,HEX);
nDevices++;
}
else if (kode_eror==4)
{
Serial.print(“ada device eror”);
}
}
if (nDevices == 0)
Serial.println(“tak terdeteksi device i2c \n”);
else
Serial.println(“selesai\n”);
delay(5000);
}

upload sketch diatas  dan buka menu monitor serial  contoh hasil scan :

scanSlavei2c

alamat 0x27  adalah alamat  IO expander  pcf8574 yg digunakan pada modul i2c  untuk LCD matrix

alamat 0x50 adalah alamat  EEProm At24C32

alamat 0x68 adalah alamat RTC DS1307

contoh Kode sketch untuk  LCD i2c dan DS2307 bisa dilihat di artikel sebelumnya .


Berikut ini contoh kode sketch  menulis dan membaca memori i2c 24X32 yang ada di modul RTC.

#include <Wire.h>

void write(unsigned int address, byte data);
byte _pageSize=32;
byte _id=0x50; // id /alamat  chip 24C32
byte _b[8];

 

void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
Wire.begin();
}

unsigned int alamatMemori=0;
void loop() {
// put your main code here, to run repeatedly:
writeInt(8,999);
delay(1000);
Serial.print(“alamat=”);
Serial.println(alamatMemori);
Serial.print(“data=”);
Serial.println(readInt(alamatMemori++));
delay(2000);
if(alamatMemori==32)alamatMemori=0; //reset alamat counter
}

/**
* Write byte
*/
void write(unsigned int address, byte data)
{
Wire.beginTransmission(_id);
if(Wire.endTransmission()==0) {
Wire.beginTransmission(_id);
Wire.write(address >> 8);
Wire.write(address & 0xFF);
Wire.write(data);
Wire.endTransmission();
delay(20);
}
}

//=======================

/**
* Write sequence of n bytes
*/
void write(unsigned int address, byte *data, int n)
{
// status quo
int c = n; // bytes left to write
int offD = 0; // current offset in data pointer
int offP; // current offset in page
int nc = 0; // next n bytes to write

// write alle bytes in multiple steps
while (c > 0) {
// calc offset in page
offP = address % _pageSize;
// maximal 30 bytes to write
nc = min(min(c, 30), _pageSize – offP);
write(address, data, offD, nc);
c-=nc;
offD+=nc;
address+=nc;
}
}

/**
* Write sequence of n bytes from offset
*/
void write(unsigned int address, byte *data, int offset, int n)
{
Wire.beginTransmission(_id);
if (Wire.endTransmission()==0) {
Wire.beginTransmission(_id);
Wire.write(address >> 8);
Wire.write(address & 0xFF);
byte *adr = data+offset;
Wire.write(adr, n);
Wire.endTransmission();
delay(20);
}
}
/**
* Read byte
*/
byte read(unsigned int address) {
byte b = 0;
int r = 0;
Wire.beginTransmission(_id);
if (Wire.endTransmission()==0) {
Wire.beginTransmission(_id);
Wire.write(address >> 8);
Wire.write(address & 0xFF);
if (Wire.endTransmission()==0) {
Wire.requestFrom(_id, 1);
while (Wire.available() > 0 && r<1) {
b = (byte)Wire.read();
r++;
}
}
}
return b;
}

 

void writeInt(unsigned int address, unsigned int data)
{
write(address, (byte*)&data, 2);
}

 

/**
* Read integer
*/
unsigned readInt(unsigned int address) {
read(address, _b, 2);
return *(unsigned int*)&_b[0];
}

 

/**
* Read sequence of n bytes
*/
void read(unsigned int address, byte *data, int n) {
int c = n;
int offD = 0;
// read until are n bytes read
while (c > 0) {
// read maximal 32 bytes
int nc = c;
if (nc > 32)
nc = 32;
read(address, data, offD, nc);
address+=nc;
offD+=nc;
c-=nc;
}
}

 

/**
* Read sequence of n bytes to offset
*/
void read(unsigned int address, byte *data, int offset, int n) {
Wire.beginTransmission(_id);
if (Wire.endTransmission()==0) {
Wire.beginTransmission(_id);
Wire.write(address >> 8);
Wire.write(address & 0xFF);
if (Wire.endTransmission()==0) {
int r = 0;
Wire.requestFrom(_id, n);
while (Wire.available() > 0 && r<n) {
data[offset+r] = (byte)Wire.read();
r++;
}
}
}
}


Membaca Tulis memory EEPROM AT24Cxx  Menggunakan library AT24CX.h

#include <Wire.h>
#include <AT24CX.h>
//EEPROM object
AT24CX mem;
//setup
void setup()
{
Serial.begin(9600);
delay(1000);
}

// main loop
void loop()
{
// read and write integer
Serial.println(“Write 65000 to address 15”);
mem.writeInt(15, 65000);
Serial.println(“Read integer from address 15 …”);
unsigned int i = mem.readInt(0);
Serial.print(“… read: “);
Serial.println(i, DEC);
Serial.println();

}

 

 

 

Contoh Code Parsing Data string Serial Arduino

 

String readString; //main captured String

String data1; //data String
String data2;
String data3;
String data4;
String data5;

//format data diterima   dari pc atau arduino lainya : 123a123b123c123d123*

void setup()
{
Serial1.begin(9600);

}

void loop()
{
TerimaData();
}//loop

void TerimaData(void)
{

if( Serial1.available())
{

//=================
char c = Serial1.read();           //gets one byte from serial buffer
if (c == ‘*’)
{
ind1 = readString.indexOf(‘a’); //finds location of first ,
data1 = readString.substring(0, ind1); //captures first data String

ind2 = readString.indexOf(‘b’, ind1+1 ); //finds location of second ,
data2 = readString.substring(ind1+1, ind2+1); //captures second data String

ind3 = readString.indexOf(‘c’, ind2+1 );
data3 = readString.substring(ind2+1, ind3+1);

ind4 = readString.indexOf(‘d’, ind3+1 );
baris4 = readString.substring(ind3+1); //captures remain part of data after last ,

ind5 = readString.indexOf(‘*’, ind4+1 );
data5 = readString.substring(ind4+1); //captures remain part of data after last ,

readString=””; //clears variable for new input

data1=””;
data2=””;
data3=””;
data4=””;
data5=””;
}
else
{
readString += c;     //  data serial yg dibaca gabungkan
}

}

Pengetahuan Dasar Arduino: Dasar RTC DS1307 Menampilkan Jam dan Tanggal pada LCD

#include <TimeLib.h>
#include <Wire.h>
#include <DS1307RTC.h> // library ini berisi class  RTCDS1307
#include <LiquidCrystal.h>
LiquidCrystal lcd( 5,6,7,8,9,10);//(rs, en,d0, d1, d2, d3)    pin rw di hubungkan dg GND
tmElements_t  waktu;     //membuat objeck dari class  DS1307RTC

void setup() {
lcd.begin(20, 4);
lcd.setCursor(0, 0); // Set LCD cursor position (column, row)
lcd.print(“TEST RTC DS1307”);
lcd.setCursor(0, 1); // Set LCD cursor position (column, row)
lcd.print(“JAM:”);
//lcd.setCursor(0, 2); // Set LCD cursor position (column, row)
//lcd.print(“TGL:”);
//lcd.setCursor(0, 3); // Set LCD cursor position (column, row)
//lcd.print(“Day:”);

}

void loop()
{
digitalClockDisplay();
delay(1000);
}

void digitalClockDisplay()
{

if (RTC.read(waktu))
{
lcd.setCursor(4, 1); // Set LCD cursor position (column, row)
print2digits(waktu.Hour);
lcd.print(“:”);
print2digits(waktu.Minute);
lcd.print(“:”);
print2digits(waktu.Second);

//lcd.setCursor(4, 2);
//print2digits(waktu.Day);
//lcd.print(“/”);
//print2digits(waktu.Month);
//lcd.print(“/”);
// lcd.print(tmYearToCalendar(waktu.Year));  //atau lcd.print(waktu.year+1970);
//lcd.setCursor(4, 3);
//lcd.print(waktu.Wday);
}

}
//=================
void print2digits(int number)
{
if (number >= 0 && number < 10) {
lcd.print(‘0’);
}
lcd.print(number);
}

 

Video Tutorial Dasar Arduino Bag-4: Built in Function

Video Tutorial Dasar Arduino Bag-4: built in function

Video Tutorial Dasar Arduino Bag-3: Sofware Arduino

Video Tutorial Dasar Arduino Bag-3: Sofware Arduino

Video Tutorial Dasar Arduino Bag-2: hardware Arduino

Video Tutorial Dasar Arduino Bag-2: hardware Arduino

Video Tutorial Dasar Arduino Bag-1: Mengenal Arduino

Tutorial Dasar Arduino Bag-1: Mengenal Arduino

 

Ebook Pemrograman Android Berbahasa Indonesia Resmi dari Google

https://chromplex.com/unduh-ebook-pemrograman-android-berbahasa-indonesia-resmi-dari-google/