Lab 1 AVR I/O Port

หลังจากที่ได้ติดตั้ง CodeVisionAVR ไปแล้วเรามาทำการทดลองเลยครับ การทดลองนี้จะทดลองเกี่ยวกับ I/O Port ของ AVR ขา PORT ของ AVR จะมี Register ที่เกียวข้องอยู่ 3 Register

1. Data Register – PORTx คือค่าที่ต้องการส่งไปยัง PORT

2. Data Direction Register – DDRx เป็น Register ที่ใช้กำหนดทิศทางของ port ว่าจะให้เป็นอินพุตหรือเอาต์พุต ถ้ามีค่าเป็น “1″ จะเป็นเอาต์พุต ในทางตรงกันข้ามถ้ามีค่าเป็น “0″ จะเป็นการกำหนดให้พอร์ตนั้นเป็นอินพุต

3. Port Input Pins – PINx เป็นค่าอินพุตของพอร์ตนั้นสามารถอ่านได้อย่างเดียว

นอกจาก Register 3 ตัวแล้วยังมี Register ที่กำหนดว่าจะให้พอร์ตนั้นมีการ Pull-up หรือไม่ โดยการสั่งให้ pull-up ทำได้โดยให้บิต PUD ใน SFIOR(Speacial Function I/O Register) มีค่าเป็น “0″ จะได้ความสัมพันธ์ดังตารางที่ 1

ตารางที่ 1 Port/Pin Configuration

หลังจากที่ได้เรียนรู้หลักการคร่าวๆ ไปแล้วเรามาลองต่อวงจรทดลองกันเลยครับ

?คลิกที่รูปเพื่อขยายภาพ

รูปที่ 1 วงจรการทดลอง

การทดลองนี้ผมกำหนดให้ PORT A1 และ A2 เป็นเอาต์พุตซึ่งจะแสดงผลที่ LED และ PORT B3 และ A5 จะเป็นอินพุต รับค่าจากสวิตช์ เมื่อทำการกดสวิตช์ SW1 (PINB.0) LED1(PORTA.2) ก็จะติด และเมื่อทำการกดสวิตช์ SW2 (PINA.5) LED2(PORTA.1) ก็จะติด

รูปที่ 2 ทำการทดลอง

หลังจากโปรแกรม HEX file ลง IC แล้ว ถ้าไม่ได้ผลลัพธ์ดังข้างบนให้ลองเช็คไฟที่จุดต่างๆดูครับ โดยเฉพาะขา RESET จะต้องมีค่าเป็น “1″ ถึงจะทำงาน หลังจากการทดลองนี้คิดว่าคงจะพอเข้าใจหลักการทำงานของ Port I/O มากขึ้นนะครับ

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

บทความอื่นๆที่เกี่ยวข้อง

3 thoughts on “Lab 1 AVR I/O Port

  1. ถ้าเกิดในกรณีที่เราต่อ input แบบไม่ต้อง r พูลอัพ ในโปรแกรมเรากำหนดportให้มันตอนแรก active “1″ ไปเลยนะครับ พอเราก็ sw ที่ต่อinputลงกราวน์มันก็จะลงกราวน์ไป พอเราไม่กดมันจะเป็น active “1″ ค้างที่เราตั้งมาตั้งแต่แรกเปล่าครับ

  2. ต่อใช้งานเป็น input ต้องมี R Pull up ครับ MCU บางตัวดีหน่อยสามารถสั่ง Pull up ทาง software ได้ สำหรับคำถามที่ถามมาถ้าไม่ได้ต่อ R pull up บางทีมันก็มั่ว ไม่ชัวร์ แต่ถ้าต่อ R Pull up ไว้ เวลากด SW ลง GND ก็จะเป็น ’0′ และเมื่อปล่อยก็เป็น ’1′ ครับ

  3. ใช่ครับต้องต่อ R ไว้ผมเจอกับวงจรจริงๆ คือใช้โวลมิเตอร์วัดมีค่า “1″ แต่พอทำงานจริงๆบางที่เราไม่ได้กด SW. โปรแกรมรับค่าเป็ฯ “0″เฉยเลย

    (พอดีหาข้อมูลใน Google เจอเวปนี้ คนทำดีมากครับ ไว้สำหรับพัฒนา วงการอิเล็คไทย)

Leave a Reply