Arduino MEGA328P

Started by tha, September 10, 2017, 10:04:41 AM

Previous topic - Next topic

tha

กราวน์ก็ต่อถึงกันด้วยนะ พอดีใช้ power supply ร่วมกันอยู่แล้ว เลยต่อกราวน์ถึงกัน ท่านใดบอกมานะ มีจุดไหนไม่ถูกต้องโปรดชี้แนะด้วยครับ

tha

13.9. 13.9. Timer/Counter Oscillator นี่คงจะใช้ให้เป็นประโยชน์ เมื่อเราใช้ฟังชั่น Timer/Counter คงให้ถึงบท Timer/Counter ก่อนถึงจะทำตัวอย่างได้ ตอนนี้คงจะจนปํญญา ขอผ่านไปก่อนเด้อ

tha

ตอนนี้บอร์ด(เจ้าสวิทช์แดง)ของเรา สัญญานนาฬิกาตั้งเป็น External Clock อยู่ใช่ใหม คราวนี้เรามาลองตั้งสัญญานนาฬิกากลับไปเป็น Low Power Crystal Oscillator เพื่อกลับไปใช้ crystal เหมือนเดิม (ดูโพสต์นี้แถวที่10 13.3. Low Power Crystal Oscillator ประกอบ)

ทีนี้เราก็มาดูว่า Low Power Crystal Oscillator  (ดูโพสต์นี้แถวที่ 10 ประกอบนะ) ว่า บิท CKSEL[0] มีค่าเท่าไหร่ บิท CKSEL[3:1] มีค่าเท่าไหร่ SUT[1:0] จะเอาค่าเท่าไหร่ดี ก็ดูในตาราง
           CKSEL[0] = 1
          CKSEL[3:1] = 111
          SUT[1:0]    = 01        จะเลือกเปิด brown out detection enable ตรวจจับว่าโวลท์ขึ้นมาสูงถึงระดับที่ตั้งไว้แล้วหรือยัง จะตั้งไว้ 4.3v ตั้งได้ที่ fuse bits(ด้านบน) ก็จะได้ค่า extended fuse bits = 0xFC (ดูโพสต์นี้แถวที่ 13 ประกอบ) เพราะจะกลับมาใช้ power supply 5v

ส่วนบิท CKSEL[0], CKSEL[3:1], SUT[1:0] อยู่ตำแหน่งไหนใน fuse bits (fuse low byte) ก็ดูที่ตาราง fuse bits (ดูโพสต์นี้แถวที่ 13 ประกอบนะ) เราก็จะได้ค่า
                                                          D       F
           fuse low byte = 0xDF = 0b1101 1111  ใช่ใหม



กด program ไป คราวนี้เราก็มาบัดกรี crystal 16MHz กลับคืนไปที่บอร์ดเจ้าสวิทช์แดง ลองใส่ไฟ power supply 5v ไป บอร์ดก็สามารถทำงานได้เป็นปกติ แต่ไฟกระพริบถี่ เราก็แก้เวลาให้ตรงก็เสร็จ

Quote
#define F_CPU 16000000UL    // set to 16000000Mhz because it effect to delay.h


tha

เอาบทไหนต่อกันดีหล่ะพวกเรา I/O PORT ใช่ใหมยังค้างอยู่ คงไม่ก่อนวันจันทร์ เดี๋ยวจะดูทบทวนก่อนสักหน่อย มันยุ่งตอนที่มันเกี่ยวพันกับบทอื่น ทำให้ยกตัวอย่างยาก เพราะเรายังไม่ได้ศึกษาในบทนั้น แปลๆไปก่อนใช่ใหม ยังไม่ต้องยกตัวอย่าง พอเราแปลบทนั้นแล้วค่อยยก อย่างนี้ดีใหม หนังสือ AVR ก็ขายไปซะแล้ว เลยศึกษาบทอื่นก่อนไม่ได้เลย

tha

ลองเอาถ่าน๓ก้อนมาใส่ก็ได้ ผมลองดูแล้ว ตั้ง Brown out detection 4.3V บอร์ดมันไม่ทำงาน ทั้งๆที่วัดไฟถ่านได้ 4.6V เลยลองมาตั้งดู Brown out detection 2.7V จึงจะทำงานได้

BOOTSIZE เราไม่ได้ใช้งาน ก็ตั้งไว้น้อยๆก็ได้





เอาพวกที่ชาร์ตมือถือเก่าๆ มาใช้เป็น power supply 5V ก็ได้ พอดีผมมี ET-CONV USB-B เลยเอามาใส่ หรือตัดสาย USB มาต่อเอาก็ได้ แค่นี้ก็มี power supply ใช้แล้ว ถ้าจะใช้ในรถ ก็เอาที่ชาร์ตมือถือในรถมาใช้ก็ได้ เดี๋ยวจะไปหาซื้อในร้านทุกอย่าง ๒๐ บาทดู


tha

ลองใช้ถ่าน๓ก้อนใส่บอร์ด แล้วลองวัดไฟดูได้ประมาณ 4.15V แต่ก็มีแกว่งด้วย แต่ตอนไม่เสียบบอร์ดวัดได้ 4.55V พอมาดูที่ในดาต้าชีทหน้า๒ บอกว่า
                Power Consumption at 1MHz, 1.8V, 25°C
                      ̶ Active Mode: 0.2mA
                      ̶ Power-down Mode: 0.1μA
                       • Power-save Mode: 0.75μA (Including 32kHz RTC)

กินไฟแค่ 0.2mA เอง แล้วผมใช้ไฟกระพริบ LED หลอดเดียวเอง ทำใมไฟถึงตกเยอะจัง ถ่านก็ยังใหม่อยู่นะ งง

tha

มาลอง Arduino กับบอร์ด http://www.ett.co.th/prod2012/AVR-EASY32U4/ET-BASE-AVR-EASY32U4.html ดูบ้าง ลองแบบกำหนดเป็นแบบ GCC ดู ก็ทำงานได้ Arduino นี่ คงจะใช้ avr8 gnu toolchain ดูในไฟล์                                     C:\Program Files\Arduino\hardware\tools\avr

https://www.microchip.com/mplab/avr-support/avr-and-arm-toolchains-c-compilers

เลยทำให้คอมไพล์โค้ดแบบ GCC ก็ผ่านได้ แต่จะกินพื้นที่มากเลย อย่างโค้ดนี้ก็กินไป 3722 bytes(12%) ถ้าเอาโค้ดนี้ไปคอมไพล์กับ AVR Studio 4.17 + winavr ก็จะกินพื้นที่ไป 162bytes(0.5%) เอง ใครชำนาญแล้วเอาผสมกันก็ได้นะ ผมไม่ค่อยจะเป็น Arduino เลยขอใช้ Studio 4.17 + winavr ไปก่อน Arduino คงจะมีคนเป็นมากอยู่แล้ว มีตัวอย่างโค้ดครับ

http://www.mediafire.com/file/amiqphsuwhl1582/blink1.ino/file

เมื่อวานบอกไปว่า
QuoteBOOTSIZE เราไม่ได้ใช้งาน ก็ตั้งไว้น้อยๆก็ได้
ถ้าบอร์ดใครเป็น Arduino ไม่รู้บู๊ตโค้ดจะหายใหม ถ้าเป็น Arduino คงต้องตั้ง BOOTSZ ไว้มากสุด และติ๊กถูกไว้ที่ BOOTRST ด้วย เดี๋ยวได้แปลเรื่อง Interrupt จะมีเรื่องพวกนี้

ปล. ท่านใดสนใจ เอาเรื่องที่ผมแปลไปทำรูปเล่ม ก็ทำได้เลย ก็เผยแผ่อยู่แล้ว ไม่มีลิขสิทธิ์แต่ประการใด


tha

ที่มีปัญหา ใช้ถ่าน ๓ ก้อน แล้วไฟตกเหลือ 4.2V เวลาตั้ง BOD 4.3V แล้วบอร์ดไม่ทำงาน ตอนแรกว่ารังถ่านมันเก่า เลยไปซื้อรังถ่านใหม่มาใส่ แต่ก็เป็นเหมือนเดิม เลยซื้อถ่านมาใหม่ ปรากฎว่าถ่าน ๓ ก้อนวัดไฟได้ 4.8V วัดไฟแต่ละก้อนได้ประมาณ 1.65V คือถ่านชุดเก่าที่ซื้อมามันเก่าเก็บ วัดไฟได้ประมาณ 1.52V ไอ้เราก็ไม่รู้ นึกว่ามันเท่านี้ พอใส่เข้าบอร์ดไป ไฟมันก็ตกสิ มันไม่มีไฟแล้ว เราก็ไม่รู้เพราะมันใหม่มาจากร้านนี่ ทำงานไปก็มีปัญหาอะไรแปลกๆนะ แต่ก็เพลินดีมีงานทำ