การทดลองที่ 5 Scan 7 Segment

การเขียนโปรแกรมเพื่อแสดงตัวเลข 7 segment จะใช้หลักการ ให้ตัวเลขติดทีละหลัก เรียงกันไปด้วยความถี่ที่ตาคนเราแยกไม่ออก ปกติแล้วจะใช้ interrupt timer มาเป็นฐานเวลาในการสแกนตัวเลข เนื่องจากให้คาบเวลาที่แน่นอน ถ้าเขียนโปรแกรมวนลูปใน while(1) เวลาไมโครคอนโทรลเลอร์ประมวลผลอย่างอื่นไปด้วย ตัวเลข 7 segment จะกระตุก

7 Segment ที่ผมเอามาทดลองนี้ เค้าขายอยู่ข้างทางแพ๊คละสิบบาทมีอยู่ 10 ตัวหน้าตาเป็นแบบนี้ครับ แบบนี้จะ wire สายหรือทำ PCB ง่ายหน่อย เพราะ 4 หลักใช้ขา common ร่วมกัน

รูปที่ 1

เทียบกับเหรียญบาทครับ

รูปที่ 2

ในการทดลองนี้ผมเอาไปต่อกับ Key up และ Key Down เพื่อเปลี่ยนแปลงค่าตัวเลข ถ้าใครจะไปประยุกต์ใช้กับงานอื่นก็ copy ส่วนสแกน 7 segment ไปใช้ได้ครับ

หลังจากต่อวงจรเสร็จ ให้โปรแกรม HEX ลง 89S52 จะเห็นตัวเลขติด 0000 ถ้าไม่ได้ตามนี้ลองกลับไปเช็ควงจรดูนะครับ ลองกด Key up ดูครับถ้ากดแล้วปล่อยจะเพิ่มทีละ 1 ค่า ถ้ากดค้างจะเห็นตัวเลขเพิ่มขึ้นอย่างต่อเนื่อง ส่วน Key Down ก็เป็นในทางตรงกันข้ามกับ Key Up คือเมื่อกดแล้วปล่อยค่าจะลดลงทีละ 1 ค่า เมื่อกดค้างค่าจะลดลงไปเรื่อยๆ

null

รูปที่ 3 วงจรที่ใช้ในการทดลอง

รูปที่ 4 ทำการทดลองในแผ่นปริ๊นต์อเนกประสงค์

Download Code การทดลองที่ 5

สร้างเครื่องโปรแกรมสมา์ร์ตการ์ด Memprog

รูปที่ 1 เครื่องโปรแกรมสมาร์ตการ์ด Memprog

หลังจากที่ช่วงนี้ไม่ค่อยได้ Update เวบเท่าไหร่นัก เนื่องจากภารกิจรัดตัวครับ วันนี้พอมีเวลาเลยขอเอาผลงานเก่า ที่เคยทำไว้ตอนเรียนอยู่ที่ลาดกระบัง เป็นเครื่องโปรแกรมสมาร์ตการ์ด สามารถอ่านบัตรรุ่น SLE4436/SLE4442 และเขียนได้เฉพาะรุ่น SLE4442 สำหรับบัตรรุ่น SLE4442 มีหน่วยความจำขนาด 256 ไบต์ โดยตำแหน่งที่เราสามารถเขียนได้จะเป็นไบต์ที่ 31-255 สำหรับตำแหน่งที่ 0-31 จะเป็นส่วนเก็บข้อมูลถาวร

บัตรรุ่น SLE4442 เราสามารถประยุกต์ใช้งานได้หลายอย่าง

  • Access Control หรือบัตรผ่านทางเข้า-ออก
  • E-purse ระบบจ่ายเงินอิเล็กทรอนิกส์ หรือที่ใช้กันในเซเว่น/อีเลฟเว่น นั่นแหล่ะครับ
  • ID Card พวกบัตรประจำตัวพนักงาน/นักเรียน

การที่จะเอาบัตรไปใช้งานต้องมีการเขียนข้อมูลลงไปในบัตรเสียก่อน ทีนี้เรามาทำเครื่องโปรแกรมสมาร์ตการ์ดกันครับ เครื่องโปรแกรมสมาร์ตการ์ดนี้จะใช้ไมโครคอนโทรลเลอร์เป็นตัวกลางระหว่างคอมพิวเตอร์และการ์ด ไมโครคอนโทรลเลอร์ที่ใช้จะเป็นเบอร์ AT89C4051 สามารถหาซื้อได้ทั่วไปตามบ้านหม้อครับ

ในส่วนของโปรแกรมคอมพิวเตอร์ซึ่งเป็นส่วน Graphic User Interface ผมเขียนโปรแกรมขึ้นมาเองโดยใช้ Visual Basic 6

จากวงจรในรูปที่ 2 จะเป็นว่ามีอุปกรณ์เพียงไม่กี่ชิ้นเท่านั้น สามารถประกอบลงแผ่นปริ๊นอเนกประสงค์ได้อย่างสบายๆ หรือถ้าอยากจะได้เป็นไฟล์ PCB ก็สามารถดาว์นโหลดไฟล์ แล้วนำไปกัดปริ๊นเองก็ได้ครับ

รูปที่ 2 วงจรเครื่องโปรแกรมสมาร์ตการ์ด Memprog คลิกที่ภาพเพื่อขยาย

สำหรับ Software ที่จะเอาไปลงที่คอมพิวเตอร์ผมได้ทำไฟล์ Setup ไว้แล้วสามารถดาว์นโหลด แล้วลงโปรแกรมก็ใช้งานได้เลยครับ

ผมสมมุติว่าได้ลงโปรแกรม Memprog และประกอบ PCB เสร็จสิ้นเรียบร้อยแล้ว ให้ทำการจ่ายไฟ DC 9-12 โวลต์เข้าที่ Jack DC ถ้าทุกอย่างถูกต้องจะเห็น LED สีแดงกระพริบ จากนั้นต่อสายแพ 3 เส้นเข้าที่บอร์ดปลายสายอีกด้านหนึ่งต่อไปยัง Serial Port ของคอมพิวเตอร์

รูปที่ 3 ภาพการต่อใช้งาน

ขั้นตอนการใช้งาน

ทำการเรียกโปรแกรมที่ติดตั้งขึ้นมา Start –> All Programs –> Memprog V1.0 –> Memprog V1.0

1. Menu Port เลือก Port ที่จะใช้ในการติดต่อสื่อสาร Com1-Com4 โดนตัวอักษรจะแสดงให้เห็นเฉพาะ Com Port ที่ใช้งานได้

รูปที่ 4 เลือก Com Port ใช้งาน

2. เลือกรุ่นของสมา์ร์ตการ์ด และทำการเสียบบัตรสมาร์ตการ์ดลงไปในซ๊อกเกต

3. กดปุ่ม Read เพื่อทำการอ่านข้อมูลภายในการ์ด บัตรที่ยังไม่มีการใช้งาน ข้อมูลภายในการจะเป็นดังรูปที่ 5

รูปที่ 5 ข้อมูลที่อ่านได้ภายในการ์ด

4. ที่เมนู Edit –> Edit buffer enabled เพื่อ Enable การแก้ไขข้อมูล

5. เอาเมาส์ไปคลิกเพื่อแก้ไขข้อมูล สามารถใส่ข้อมูลได้ทั้งเลขฐานสิบ (Decimal), เลขฐาน 16 (Hexadecimal) และ Ascii

รูปที่ 6 Fill Buffer

6. ถ้าต้องการใส่ค่าลงไปมากกว่า 1 ไบต์ ให้คลิกทางฝั่งขวา (Ascii)

รูปที่ 7 Fill Buffer Ascii

7. ใส่ค่า PSC ลงไปในช่อง Current PSC PSC ที่ใส่ลงไปจะอยู่ใน format เลขฐาน 16 แล้วคั่นด้วยเครื่องหมาย คอมม่า “,” เช่น 61,6f,6e สำหรับสมาร์ตการ์ด SLE4442 ค่า PSC จากโรงงานจะเป็น ff,ff,ff เมื่อกดปุ่ม Defaulf ก็จะใส่ค่า ff,ff,ff ให้โดยอัตโนมัติ

รูปที่ 8 ใส่ค่า PSC

8. กดปุ่ม Write เพื่อเขียนข้อมูลลงไปในการ์ด

การลบข้อมูลในการ์ด

1. ใส่ค่า PSC ลงช่อง Current PSC

2. กดปุ่ม Erase จะมีหน้าต่างขึ้นมาถามอีกครั้งว่าต้องการเติมค่า 0xFF ลงใน buffer ใช่หรือไม่? ให้กด Yes

การเปลี่ยนค่า PSC

1. ใส่ค่า PSC ปัจจุบันลงช่อง Current PSC

2. ใส่ค่า PSC ใหม่ที่ต้องการลงในช่อง New PSC

3. กดปุ่ม Change PSC code

โปรแกรม Memprog ท่านสามารถ Download ไปใช้งานได้ฟรี ทางผู้เขียนโปรแกรม Memprog ไม่รับประกันว่าโปรแกรมจะทำงานได้อย่างถูกต้อง และไม่รับผิดชอบต่อความเสียหายที่เกิดขึ้น ไม่ว่ากรณีใดๆ

หมายเหตุ. เครื่องโปรแกรมนี้ไม่สามารถอ่าน/เขียนการ์ด UBC, การ์ดเครื่อง Dreambox และบัตรประชนได้

โปรแกรมนี้อ่านได้เฉพาะ SLE4436/SLE4442 เท่านั้น กรุณาอย่าโทรมาสอบถามว่าอ่านการ์ดอื่นได้หรือเปล่า

เครื่องนี้ไม่ได้ทำขาย ต้องการเผยแพร่เพื่อเป็นวิทยาทานเท่านั้น กรุณาอย่าโทรมาขอซื้อ หรือโทรมาขอ code

Download

หมายเหตุ. ปัจจุบันผมหาซื้อการ์ด SLE4442 ไม่ได้ครับ

การแทรก assembly ในภาษา C

มีคำถาม คำถามนึงที่ถามบ่อยมากว่าจะใส่คำสั่ง assembly ลงไปในภาษา C ยังไง จริงๆแล้วมันก็มีวิธีอยู่ แต่ตั้งแต่ผมเขียนโปรแกรมมาผมก็ไม่เคยใช้เหมือนกัน คือภาษา C ผมว่ามันก็ cover ดีแล้ว แต่รู้ไว้ก็ไม่เสียหายครับ

  • เริ่มจากการสร้าง Project ตามปกติ Keil จะถามเราว่า ต้องการจะ copy ตัว Start up code เข้าไปใน Project ไหม ให้กด No

รูปที่ 1

  • จากนั้นก็ทำการสร้าง File.C ขึ้นมาแล้ว Add เข้าไปใน Project
//****************************************************************//
//Project : insertasm
//Description : Inline assembly
//Device : 89S52
//XTAL : 11.0592 MHz
//By : ThaiEmbedded 2007
//****************************************************************//
#include <REGX51.H>

//————————————————————————//
// Delay (mSec)
//————————————————————————//
void dmsec(unsigned int cnt)
{
?????unsigned char i;
?????while(cnt)
?????{
??????????for (i=1;i<=228;i++);
??????????cnt–;
?????}
}
//————————————————————————//
// Main
//————————————————————————//
void main (void)
{?????while(1)
?????{
??????????#pragma ASM
??????????MOV P0,#0FH
??????????#pragma ENDASM
??????????dmsec(300);

??????????#pragma ASM
??????????MOV P0,#0F0H
??????????#pragma ENDASM
??????????dmsec(300);
?????}
}

  • ที่ Project Window Tab แรกเราจะเห็น File.C ที่เรา add เพิ่มเข้ามา ให้คลิกขวา
  • เลืือก Option for

รูปที่ 2

  • ติ๊ก Generate Assembler SRC file
  • ติ๊ก Enable Assemble SRC file.
  • ทำการ compile เราจะได้ HEX file ออกมา

เมื่อนำไปต่อกับ hardware จริงเราจะเห็น LED ติดสลับกันที่ละ 4 ดวง

รูปที่ 3 วงจรที่ใช้ในการทดลอง

Download Code การแทรก assembly ในภาษา C