Saturday, August 8, 2015

Running Text 8x32

RUNNING TEXT 8X32 :
Spesifikasi :
- Dot matrix yang saya pakai dengan susunan led 3mm (silakan jika mau pakai 3 x modul 8x8 dot matrix)
- MCU bisa pakai minimum sistem atmega8 atau pakai arduino uno/pro mini/nano dkk
- IC driver kolom dan baris memakai 74hc595
- pada skema tidak saya gambar Resistor, sebaiknya dipasang pada output 74hc595
- Coding memakai format C++ untuk IDE Arduino (kalo belum punya download aja gratis di ww*.arduino.cc
(pertanyaan mengenai modif coding ayo dibahas bareng, maklum coding dpt dr google silakan dioprek bareng2)
CODE :
int x;
int y;
int latchPin1 = 5; //Arduino pin connected to blue 12 RCLK of 74HC595
int clockPin1 = 6; //Arduino pin connected to green 11 SRCLK of 74HC595
int dataPin1 = 7; //Arduino pin connected to violet 14 SER of 74HC595
//-- Rows (Positive Anodes) --
int latchPin2 = 9; //Arduino pin connected to yellow Latch 12 RCLK of 74HC595
int clockPin2 = 10; //Arduino pin connected to white Clock 11 SRCLK of 74HC595
int dataPin2 = 8; //Arduino pin connected to grey Data 14 SER of 74HC595
//=== B I T M A P ===
//Bits in this array represents one LED of the matrix
// 8 is # of rows, 7 is # of LED matrix we have
byte bitmap[8][7]; // Change the 7 to however many matrices you want to use.
int numZones = sizeof(bitmap) / 8;
int maxZoneIndex = numZones-1;
int numCols = numZones * 8;
byte alphabets[][5] = {
{0,0,0,0,0},
{31, 36, 68, 36, 31},//A
{127, 73, 73, 73, 54},//B
{62, 65, 65, 65, 34},//C
{127, 65, 65, 34, 28},
{127, 73, 73, 65, 65},
{127, 72, 72, 72, 64},
{62, 65, 65, 69, 38},
{127, 8, 8, 8, 127},
{0, 65, 127, 65, 0},
{2, 1, 1, 1, 126},
{127, 8, 20, 34, 65},
{127, 1, 1, 1, 1},
{127, 32, 16, 32, 127},
{127, 32, 16, 8, 127},
{62, 65, 65, 65, 62},
{127, 72, 72, 72, 48},
{62, 65, 69, 66, 61},
{127, 72, 76, 74, 49},
{50, 73, 73, 73, 38},
{64, 64, 127, 64, 64},
{126, 1, 1, 1, 126},
{124, 2, 1, 2, 124},
{126, 1, 6, 1, 126},
{99, 20, 8, 20, 99},
{96, 16, 15, 16, 96},
{67, 69, 73, 81, 97},
};
//=== S E T U P ===
void setup() {
pinMode(latchPin1, OUTPUT);
pinMode(clockPin1, OUTPUT);
pinMode(dataPin1, OUTPUT);
pinMode(latchPin2, OUTPUT);
pinMode(clockPin2, OUTPUT);
pinMode(dataPin2, OUTPUT);
//-- Clear bitmap --
for (int row = 0; row > 8; row++) {
for (int zone = 0; zone <= maxZoneIndex; zone++) {
bitmap[row][zone] = 0;
}
}
}
//=== F U N C T I O N S ===
// This routine takes whatever we've setup in the bitmap array and display it on the matrix
void RefreshDisplay()
{
for (int row = 0; row < 8; row++) {
int rowbit = 1 << row;
digitalWrite(latchPin2, LOW); //Hold latchPin LOW for as long as we're transmitting data
shiftOut(dataPin2, clockPin2, MSBFIRST, rowbit); //Transmit data
//-- Start sending column bytes --
digitalWrite(latchPin1, LOW); //Hold latchPin LOW for as long as we're transmitting data
//-- Shift out to each matrix (zone is 8 columns represented by one matrix)
for (int zone = maxZoneIndex; zone >= 0; zone--) {
shiftOut(dataPin1, clockPin1, MSBFIRST, bitmap[row][zone]);
}
//-- Done sending Column bytes, flip both latches at once to eliminate flicker
digitalWrite(latchPin1, HIGH);
digitalWrite(latchPin2, HIGH);
//-- Wait a little bit to let humans see what we've pushed out onto the matrix --
delayMicroseconds(500);
}
}
// Converts row and colum to actual bitmap bit and turn it off/on
void Plot(int col, int row, bool isOn)
{
int zone = col / 8;
int colBitIndex = x % 8;
byte colBit = 1 << colBitIndex;
if (isOn)
bitmap[row][zone] = bitmap[y][zone] | colBit;
else
bitmap[row][zone] = bitmap[y][zone] & (~colBit);
}
// Plot each character of the message one column at a time, updated the display, shift bitmap left.
void AlphabetSoup()
{
char msg[] = " RUNNING TEXT ";
for (int charIndex=0; charIndex < (sizeof(msg)-1); charIndex++)
{
int alphabetIndex = msg[charIndex] - '@';
if (alphabetIndex < 0) alphabetIndex=0;
//-- Draw one character of the message --
for (int col = 0; col < 6; col++)
{
for (int row = 0; row < 8; row++)
{
bool isOn = 0;
if (col<5) isOn = bitRead( alphabets[alphabetIndex][col],
}
Video di youtube

Untuk mesin utamanya bisa pake modul MaxSys8. Lihat pada artikel sebelumnya.

Alternatif running text dengan menggunakan atmega16/32 bisa berkunjubg ke blog edukasi milik pak rokhmad. link running text atmega16/32

Friday, August 7, 2015

Mesin jam digital (MaxSys8 + Rtc)

Setelah sekian lama ikut meramaikan dunia copy paste di group FB KSGRE, yang paling sering di oprek adalah proyek Jam Digital. Proyek tersebut dibagi menjadi bbrp kategori yaitu :
1. Jam digital dengan tampilan LCD.
2. Jam digital dengan tampilan Seven Segmen.
3. Jam digital dengan tampilan led 3mm/5mm yang disusun seperti seven segmen.
4. Jam digital dengan tampilan dot matrix led.

Dari 4 kategori di atas yang paling ramai dan seru untuk di oprek adalah nomer 2 dan 4. Kenapa? Ya, karena lebih mudah dan menarik karena ukurannya bisa disesuaikan dengan kantong, hehehehe.

Kategori 1 apakah tidak mudah? Ya, paling mudah, tapi bentuknya monoton dan kecil.
Bagaimana dengan kategori nomer 4 ? Dari segi bentuk adalah yang paling menarik tapi paling rumit.

Dalam.postingan ini, saya lebih fokus untuk membahas mengenai rangkaian dasar dari 4 kategori di atas. Yaitu minimum sistem atmega8 yang dilengkapi dengan RtC ( real time clock).

Dari layout pcb yang saya buat, sengaja minimum sistemnya saya buat bersifat open header. Tujuannya 1 rangkaian ini bisa dijadikan MCU/mesin untuk 4 kategori diatas. Tinggal ditambahkan driver tambahan saja. (driver tambahan di bahas dalam artikel lain).
Minimum sistem ini juga sengaja dibuat agar bisa dipakai dan di kombinasikan dengan pemakaian breadboard untuk kebutuhan prototiping/uji coba.

Arduino vs Visual Basic Express 2010

mengontrol pin output pd arduino dengan sotfware visual basic.
Pada contoh ini aplikasi di pc utk meng On/Off kan lampu led pd pin 13 (memberi sinyal high/low).
Code pd arduino spt di gambar.

Code utk VB sbg berikut :-------------------
Imports System.IO
Imports System.IO.Ports
Imports System.Threading
Public Class Form1
Shared _continue As Boolean
Shared _serialPort As SerialPort
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SerialPort1.Close()
SerialPort1.PortName = "com4" 'change com port to match your Arduino port
SerialPort1.BaudRate = 9600
SerialPort1.DataBits = 8
SerialPort1.Parity = Parity.None
SerialPort1.StopBits = StopBits.One
SerialPort1.Handshake = Handshake.None
SerialPort1.Encoding = System.Text.Encoding.Default 'very important!
End Sub
Private Sub btnOn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOn.Click
picOn.Visible = True
SerialPort1.Open()
SerialPort1.Write("1")
SerialPort1.Close()
End Sub
Private Sub btnOff_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOff.Click
picOn.Visible = False
SerialPort1.Open()
SerialPort1.Write("0")
SerialPort1.Close()
End Sub
End Class
-------------------------

Video Arduino with VB: https://youtu.be/MWIMOs1PuZs

Pengembangan dari artikel ini bisa ditemukan pada palang pintu parkir, pintu gerbang otomatis, loker kasir dll.