Arduino Project‎ > ‎

03. LED 8x8

การต่อโมดูล LED 8X8


กรณีที่ใช้ LED 8x8 รุ่น ตามรูป

ให้ดูการต่อสัญญาณจาก  http://narong.ece.engr.tu.ac.th/learn_play/micro/lcd8x8_psoc/index.html

สำหรับตัวอย่างนี้ใช้ โมดูล  LED 8X8
 
ซึ่งมีขาสัญญาณอยู่ 16 ขา โดยตำแหน่งสัญญาณเป็นดังนี้

การต่อเข้ากับพอร์ทของ Arduino ใช้ Port B Port C (พอร์ท Analog ) ต่อกับ C0 - C7   และ PORT D ต่อกับ R0 - R7



การติดตั้ง Library timer 1

เนื่องจากในตัวอย่างนี้ต้องใช้การอินเตอร์รัพท์ของ Timer 1  ดังนั้นต้องติดตั้ง Library timer 1  โดยมีขั้นตอนดังนี้

  1. ดาวน์โหลดไลบรารี่จาก  http://www.arduino.cc/playground/code/timer1  หรือ  ที่นี่้ TimerOne-v9.zip
  2. แตกไฟล์ จะได้ไฟล์เป็น  examples  keywords.txt  TimerOne.cpp  TimerOne.h
  3. นำไฟล์ทั้งหมด ไปเก็บที่โฟลเดอร์เดียวกัน ภายใต้โฟลเดอร์  libraries เช่น  C:\Program Files\arduino-1.0.1\libraries\TimerOne
เท่านี้ก็สามารถใช้ Timer 1 อินเตอร์ได้แล้ว

หมายเหตุ  การอินเตอร์รัพท์ของ Timer  ดูได้จาก http://www.protostack.com/blog/2010/09/timer-interrupts-on-an-atmega168/ 

ข้อควรจำ  เนื่องจากขา Digital 0 (PD0) เป็นขา RxD และ Digital 1 (PD1) เป็นขา ธxD ของพอร์ทอนุกรม UART ซึ่ง Arduino ใช้เป็นพอร์ทดาวน์โหลดโปรแกรมลงชิพ AVR ดังนั้นขณะดาวน์โหลดโปรแกรมนี้  ห้ามต่อขา D0 และ D1 เข้ากับวงจรใดๆ 

โปรแกรมที่ 1


#include <TimerOne.h>        //เรียกใช้ ไลบรารี่ TimerOne

unsigned char col;   
const unsigned char pattern[] = {0xff,0x7e,0x3c,0x18,0x81,0x42,0x24,0x18};    //ภาพที่ต้องการแสดง
unsigned char dis_buf[8];              //บัฟเฟอร์สำหรับแสดงภาพ
//--------------------------------------------------------------------------------
void setup() {                
  DDRD = B11111111;                      //Port D as output  
  DDRC = B11111111;                      //Port C as output 
  DDRB = B11111111;                      //Port B as output 

  Timer1.initialize(1000);         // กำหนดระยะเวลาการอินเตอร์รัพท์ของ timer 1 ให้เป็นทุกๆ  1000 microseconds 
  Timer1.attachInterrupt( timerIsr );     // กำหนดตำแหน่งโปรแกรมรองรับการอินเตอร์รัพท์ 
  
  col = 0;
  
  copymem(pattern);                        //คัดลอกภาพที่จะแสดงไปเก็บที่บัฟเฟอร์สำหรับแสดง
}
//--------------------------------------------------------------------------------
void copymem(const unsigned char image[])
{
  int i;
  for (i=0;i<8;i++) // Draw the columns to print the character.
  {
    dis_buf[i]=image[i];
  }
}
//--------------------------------------------------------------------------------
void loop() {

}
//--------------------------------------------------------------------------------
/// Scan display  
/// ทุกครั้งที่อินเตอร์รัพท์ จะทำการสแกน 1 คอลัมน์ 
//--------------------------------------------------------------------------------
void timerIsr()
{
   switch (col) {
    case 0:
      PORTD = dis_buf[col];
      PORTC = 0B11111110;
      PORTB = 0B11111111; 
      break;
    case 1:
      PORTD = dis_buf[col];
      PORTC = 0B11111101;
      PORTB = 0B11111111;
      break;      
    case 2:
      PORTD = dis_buf[col];
      PORTC = 0B11111011;
      PORTB = 0B11111111;
      break;      
    case 3:
      PORTD = dis_buf[col];
      PORTC = 0B11110111;
      PORTB = 0B11111111;
      break; 
    case 4:
      PORTD = dis_buf[col];
      PORTC = 0B11101111;
      PORTB = 0B11111111;
      break; 
    case 5:
      PORTD = dis_buf[col];
      PORTC = 0B11011111;
      PORTB = 0B11111111;
      break; 
    case 6:
      PORTD = dis_buf[col];
      PORTC = 0B11111111;
      PORTB = 0B11101111;
      break; 
    case 7:
      PORTD = dis_buf[col];
      PORTC = 0B11111111;
      PORTB = 0B11011111;
      break;       
   }
  col++;
  if (col > 7) col = 0; 
}

โปรแกรมที่ 2

video-2012-11-10-20-04-37.mp4


ไฟล์ LED_8x8_2.ino
โปรแกรมที่ 3

video-2012-11-10-20-16-03.mp4

ไฟล์ 
LED_8x8_3.ino
อีกตัวอย่าง

video-2012-11-11-12-04-23.mp4


ċ
LED_8x8_2.ino
(3k)
Narong Buabthong,
Nov 10, 2012, 6:17 AM
ċ
LED_8x8_3.ino
(2k)
Narong Buabthong,
Nov 10, 2012, 6:23 AM
ċ
TimerOne-v9.zip
(6k)
Narong Buabthong,
Nov 10, 2012, 5:47 AM
Comments