Electoday 2025

ไมโครคอนโทรลเลอร์ => AVR and Arduino => Topic started by: tha on September 10, 2017, 10:04:41 AM

Title: Arduino MEGA328P
Post by: tha on September 10, 2017, 10:04:41 AM
   หยุดทำไมโครคอนโทรลเลอร์(ARM Cortex-M) ไปสองปีกว่า ไปทำเรื่องของจิตใจ คือไปบวชมา(ได้เดือนเดียว) เอาความโกรธความอยากออกจากจิตใจ  สัมมาสติสัมมาสมาธิ นั่งสมาธิเดินกรมจง แล้วก็มีทีมงานช่วยดึงความโกรธความอยากออก นั่งสมาธินี้ทำมานานเป็นสิบปีเชียวแหละ(ทำบ้างพักบ้าง) จนไม่มีวิตกวิจาร แล้วจึงจะเกิดปิติ(ความอิ่มเอิบขึ้นที่หน้า) ความโกรธความอยากถึงจะหลุด กิเลสเบาบางลงแล้วก็สุขไปอย่าง สมาธิจะดีขึ้นเป็นลำดับ(จะอ่านหนังสือได้ดีขึ้นด้วย แต่ต้องที่เย็นๆด้วยนะถึงจะอ่านหนังสือได้ดี นี่เป็นเหตให้ประเทศโซนหนาวเจริญทางด้านวัตถุมากกว่าประเทศโซนร้อน)
   ลืมไปหมดแล้ว ARM ไม่รู้จะทำอะไร เลยสั่ง Arduino UNO R3 มาลองเล่น ชอบที่ตรงโปรแกรมมันฟรี ไม่ต้องกังวลใจใช้โปรแกรมแคร๊ค ก็จะศึกษาอย่างละเอียดเลย จะอ่าน MEGA328P data sheet ด้วย ไหนๆก็อ่านแล้ว ก็จะแปลเก็บไว้ที่โพสต์นี้ด้วย เผื่อท่านใดสนใจจะติดตามอ่าน คงต้องใช้เวลาศึกษาสักพักเพราะลืมสำนวณลืมโครงสร้างของ mcu ไปหมดแล้ว ใครจะชี้แนะแนะนำตรงไหนก็โพสต์มาได้นะครับ
Title: Re: Arduino MEGA328P
Post by: anurak2528 on September 10, 2017, 04:01:22 PM
Quote from: tha on September 10, 2017, 10:04:41 AM
   หยุดทำไมโครคอนโทรลเลอร์(ARM Cortex-M) ไปสองปีกว่า ไปทำเรื่องของจิตใจ คือไปบวชมา(ได้เดือนเดียว) เอาความโกรธความอยากออกจากจิตใจ  สัมมาสติสัมมาสมาธิ นั่งสมาธิเดินกรมจง แล้วก็มีทีมงานช่วยดึงความโกรธความอยากออก นั่งสมาธินี้ทำมานานเป็นสิบปีเชียวแหละ(ทำบ้างพักบ้าง) จนไม่มีวิตกวิจาร แล้วจึงจะเกิดปิติ(ความอิ่มเอิบขึ้นที่หน้า) ความโกรธความอยากถึงจะหลุด กิเลสเบาบางลงแล้วก็สุขไปอย่าง สมาธิจะดีขึ้นเป็นลำดับ(จะอ่านหนังสือได้ดีขึ้นด้วย แต่ต้องที่เย็นๆด้วยนะถึงจะอ่านหนังสือได้ดี นี่เป็นเหตให้ประเทศโซนหนาวเจริญทางด้านวัตถุมากกว่าประเทศโซนร้อน)
   ลืมไปหมดแล้ว ARM ไม่รู้จะทำอะไร เลยสั่ง Arduino UNO R3 มาลองเล่น ชอบที่ตรงโปรแกรมมันฟรี ไม่ต้องกังวลใจใช้โปรแกรมแคร๊ค ก็จะศึกษาอย่างละเอียดเลย จะอ่าน MEGA328P data sheet ด้วย ไหนๆก็อ่านแล้ว ก็จะแปลเก็บไว้ที่โพสต์นี้ด้วย เผื่อท่านใดสนใจจะติดตามอ่าน คงต้องใช้เวลาศึกษาสักพักเพราะลืมสำนวณลืมโครงสร้างของ mcu ไปหมดแล้ว ใครจะชี้แนะแนะนำตรงไหนก็โพสต์มาได้นะครับ
ขอบคุณครับ ผมก็เพิ่งเริ่มซื้อ Board Arduino มาศึกษา   ขอติดตาม  ครับ
Title: Re: Arduino MEGA328P
Post by: az on September 11, 2017, 09:34:55 AM
Quote from: tha on September 10, 2017, 10:04:41 AM
    ลืมไปหมดแล้ว ARM ไม่รู้จะทำอะไร เลยสั่ง Arduino UNO R3

ArduinoZero (https://www.arduino.cc/en/Guide/ArduinoZero)
ARM Cortex-M0+ Arduino platform

เผิ่ออยากกลับไปเล่น 32 บิต
Title: Re: Arduino MEGA328P
Post by: tha on September 12, 2017, 06:20:11 AM
มีบอร์ดขายในไทยหรือยังครับ ตัวไหน Arduino 32 บิตบ้าง ตอนนี้เอา 8 บิตไปก่อนครับ ลืมหมดแล้ว
Title: Re: Arduino MEGA328P
Post by: avr_lover on September 12, 2017, 08:18:45 AM
32Bit ในไทยคงต้อง Arduino Due ครับ หาซื้อไม่ยาก :)
Title: Re: Arduino MEGA328P
Post by: az on September 12, 2017, 10:15:21 AM
Arduino 32 บิต
- Arduino Zero(Pro) SAMD21 MCU
- Arduino Due  SAM3X CPU
Title: Re: Arduino MEGA328P
Post by: tha on September 12, 2017, 12:50:10 PM
ได้มาแล้วบอร์ด Arduino UNO R3 แบบ ship surface mount ราคา 165 บาท เอามาเสียบเข้ากับโน๊ตบุ๊ค แล้วไม่ขึ้นหา driver ตรวจเช็คแล้วพบว่า สาย usb ที่แถมมากับบอร์ดชำรุด บัดกรี pin ที่หัว type B เส้นสีเขียวหลุดไปเส้น เลยต้องหาสาย usb มาเปลี่ยนใหม่


ได้หนังสือเล่มนี้ซื้อไว้นานแล้ว ทำให้เร้วขึ้น

(https://i.imgur.com/79blr7u.jpg?1)

(https://i.imgur.com/OQPQOrx.jpg?1)

ได้แล้วโปรเจคแรกไฟกระพริบ

http://www.mediafire.com/file/ncb1gw8b5wr67o1/blink.rar (http://www.mediafire.com/file/ncb1gw8b5wr67o1/blink.rar)

array pointer ชักจะลืมๆแล้ว คงต้องทบทวนใหม่ อีกนานกว่าจะเข้าที่ครับ
Title: Re: Arduino MEGA328P
Post by: tha on September 12, 2017, 02:48:22 PM
ได้หัวชาร์ตของมือถือ samsung ปลอม มาใช้เป็น power supply ของบอร์ดในยามที่ไม่ได้เปิดโน๊ตบุ๊ค ใช้ได้ดีทีเดียว บอกว่าจ่ายไฟได้ 1000mA ไม่รู้จะถึงหรือป่าว

(https://i.imgur.com/Oo0ZFsO.jpg?1)
Title: Re: Arduino MEGA328P
Post by: tha on September 14, 2017, 08:11:29 AM
http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf (http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf)
ATmega328/P
DATASHEET COMPLETE
Introduction(แนะนำตัว)
  The Atmel® picoPower® ATmega328/P คือ a low-power CMOS 8-bit microcontroller บนฐานของ the AVR® enhanced RISC architecture. โดยการปฏิบัติคำสั่ง(powerful instructions) ใน clock cycle เดียว, the ATmega328/P ทำงานสำเร็จได้ถึงล้านคำสั่งในหนึ่งวินาที( 1MIPS per MHz) ด้วยการออกแบบระบบอย่างมีกำลังนี้ทำให้ mcu มีอัตราส่วนการกินพลังงานต่อความเร็วของการทำงานที่ดีขึ้น
Title: Re: Arduino MEGA328P
Post by: tha on September 15, 2017, 06:56:17 AM
Feature(ลักษณะหน้าตา)
High Performance, Low Power Atmel®AVR® 8-Bit Microcontroller Family
  • Advanced RISC Architecture
    – 131 Powerful Instructions (มี 131 คำสั่ง)
    – Most Single Clock Cycle Execution (ส่วนมากปฏิบัติงานใช้เวลาเพียง Clock Cycle เดียว)
    – 32 x 8 General Purpose Working Registers
    – Fully Static Operation
    – Up to 20 MIPS Throughput at 20MHz (ทำงานได้ถึง 20 ล้านคำสั่งที่ 20 MHz)
    – On-chip 2-cycle Multiplier (ตัวคูณใช้เวลา 2-cycle ใน chip)
  • High Endurance Non-volatile Memory Segments
    – 32KBytes of In-System Self-Programmable Flash program Memory
    – 1KBytes EEPROM
    – 2KBytes Internal SRAM
    – Write/Erase Cycles: 10,000 Flash/100,000 EEPROM
    – Data Retention: 20 years at 85°C/100 years at 25°C(1) (การเก็บรักษาข้อมูล)
    – Optional Boot Code Section with Independent Lock Bits (มีทางเลือกส่วน Boot Code พร้อมด้วย Lock Bits อิสระ)
       • In-System Programming by On-chip Boot Program (โปรแกรมโดย On-chip Boot Program)
       • True Read-While-Write Operation
    – Programming Lock for Software Security
  • Atmel® QTouch® Library Support
    – Capacitive Touch Buttons, Sliders and Wheels
    – QTouch and QMatrix® Acquisition
    – Up to 64 sense channels
  • Peripheral Features
    – Two 8-bit Timer/Counters with Separate Prescaler and Compare Mode
    – One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode
    – Real Time Counter with Separate Oscillator
    – Six PWM Channels
    – 8-channel 10-bit ADC in TQFP and QFN/MLF package
      • Temperature Measurement
    – 6-channel 10-bit ADC in PDIP Package
      • Temperature Measurement
    – Two Master/Slave SPI Serial Interface
    – One Programmable Serial USART
    – One Byte-oriented 2-wire Serial Interface (Philips I2C compatible)
    – Programmable Watchdog Timer with Separate On-chip Oscillator
    – One On-chip Analog Comparator
    – Interrupt and Wake-up on Pin Change
  • Special Microcontroller Features
    – Power-on Reset and Programmable Brown-out Detection
    – Internal Calibrated Oscillator
    – External and Internal Interrupt Sources
    – Six Sleep Modes: Idle, ADC Noise Reduction, Power-save, Power-down, Standby, and Extended Standby
  • I/O and Packages
    – 23 Programmable I/O Lines
    – 28-pin PDIP, 32-lead TQFP, 28-pad QFN/MLF and 32-pad QFN/MLF
  • Operating Voltage:
    – 1.8 - 5.5V
  • Temperature Range:
    – -40°C to 105°C
  • Speed Grade:
    – 0 - 4MHz @ 1.8 - 5.5V
    – 0 - 10MHz @ 2.7 - 5.5V
    – 0 - 20MHz @ 4.5 - 5.5V
  • 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)
Title: Re: Arduino MEGA328P
Post by: tha on September 15, 2017, 05:33:57 PM
เสร็จแล้วเรื่อง switch ยังไม่ได้อ่านทำความเข้าใจเลย อั๊พมาก่อน :D
http://www.mediafire.com/file/fdmfmw8b8c5kuf7/switch.rar (http://www.mediafire.com/file/fdmfmw8b8c5kuf7/switch.rar)
Title: Re: Arduino MEGA328P
Post by: tha on September 15, 2017, 06:05:05 PM
วงจรของบอร์ด arduino uno r3 ch340 schematic
https://www.terraelectronica.ru/%2Fds%2Fpdf%2FU%2FUNO_R3%28CH340G%29.pdf (https://www.terraelectronica.ru/%2Fds%2Fpdf%2FU%2FUNO_R3%28CH340G%29.pdf)
ได้มาแล้วครับ
Title: Re: Arduino MEGA328P
Post by: software on September 15, 2017, 07:06:29 PM
ATMEG328P เป็น MCU ที่เขียนภาษา Assembly ได้สนุกที่สุดติดใจเลยครับ
Title: Re: Arduino MEGA328P
Post by: tha on September 15, 2017, 07:17:00 PM
ของ ett ก็มีอยู่หลายบอร์ดเหมือนกัน เลือกใช้ไม่ถูก คุณภาพบอร์ดและลายปริ้นคงจะดีกว่า
http://www.ett.co.th/product/03000AVR.html (http://www.ett.co.th/product/03000AVR.html)

ของ es ก็มีขาย
http://www.es.co.th/vp.asp?keyword=arduino&catc=018001&mfrc=&t=1 (http://www.es.co.th/vp.asp?keyword=arduino&catc=018001&mfrc=&t=1)

บอร์ด arduino ที่ทำในไทยที่ไหนมีอีกครับ แนะนำหน่อย เผื่อเป็นทางเลือก คุณภาพปริ้นคงจะดีกว่าของ clone พอดีมีงบจำกัดและเพิ่งจะเริ่มต้น เลยซื้อของ clone มาลองเล่นๆครับ :'(
Title: Re: Arduino MEGA328P
Post by: tha on September 15, 2017, 07:56:59 PM
สาย usb ที่แถมมากับของ clone ก็ไม่มีคุณภาพ ไม่ผ่าน QC ของผมโดนไฟก็เจอเลย ไม่หา driver เช็คหากว่าจะเจอว่า ที่สาย usb ทางหัว type B สายกับพินบัดกรีกันไม่ติด สรุปได้ของถูกแต่ไม่คุ้มค่าเสียอารมณ์  ค่าน้ำมันรถไปตัวจังหวัดไปซื้อสาย usb ใหม่มาใช้แทน >:(
Title: Re: Arduino MEGA328P
Post by: tha on September 15, 2017, 08:10:30 PM
ของ inex ก็มี ลองหาดูครับ
www.inex.co.th (http://www.inex.co.th)
Title: Re: Arduino MEGA328P
Post by: tha on September 16, 2017, 04:55:56 AM
ใครอยากได้ของแท้ ก็มีครับ ที่ไหนมีอีก
http://www.thaieasyelec.com/ (http://www.thaieasyelec.com/)
Title: Re: Arduino MEGA328P
Post by: tha on September 16, 2017, 05:44:00 AM

Description(การพรรณา)
   The Atmel AVR® core ได้รวมเอาชุดคำสั่งที่เข้มข้น( a rich instruction set) เข้ากับ 32 general purpose working registers. registers ทั้งหมด 32 ตัวต่อโดยตรงถึง the Arithmetic Logic Unit ยอมให้ registers 2 ตัวที่เป็นอิสระถูกเข้าถึงในหนึ่งคำสั่งปฏิบัติงานใน clock cycle เดียว ผลที่ได้ของ architecture นี้คือประสิทธิภาพของ code มีมากขึ้น ขณะที่ปริมาณงานที่ได้เพิ่มขึ้นเป็น 10 เท่าที่เร็วกว่า CISC microcontrollers ทั่วไป
Title: Re: Arduino MEGA328P
Post by: tha on September 16, 2017, 07:37:20 AM
  The ATmega328/P จัดให้มีลักษณะคุณสมบัติดังต่อไปนี้: 32Kbytes of In-System Programmable Flash with Read-While-Write capabilities, 1Kbytes EEPROM, 2Kbytes SRAM, 23 general purpose I/O lines, 32 general purpose working registers, Real Time Counter (RTC), three flexible Timer/Counters with compare modes and PWM, 1 serial programmable USARTs , 1 byte-oriented 2-wire Serial Interface (I2C), a 6-channel 10-bit ADC (8 channels in TQFP and QFN/MLF packages) , a programmable Watchdog Timer with internal Oscillator, an SPI serial port, และ 6  power saving modes ที่เลือกได้ทางซอฟแวร์. The Idle mode หยุด the CPU ในขณะที่ยอมให้ the SRAM, Timer/Counters, SPI port, and interrupt system ทำงานตามหน้าที่ต่อไป The Power-down mode จะเซฟข้อมูลที่อยู่ใน register แต่จะแช่แข็ง  the Oscillator, ปิดการใช้งานหน่วยหน้าที่อื่นๆของ chip ทั้งหมด จนกระทั่ง  interrupt ถัดไป หรือ hardware reset. ใน Power-save mode, the asynchronous timer ยังรันต่อไป, ยอมให้ผู้ใช้คง a timer base อยู่ไว้ ในขณะที่ส่วนที่ของอุปกรณ์นอนพัก(sleeping). The ADC Noise Reduction mode หยุด the CPU and all I/O modules ยกเว้น asynchronous timer และ ADC เพื่อทำให้ switching noise น้อยลง ในระหว่างการแปลง ADC conversions. ใน Standby mode, the crystal/resonator oscillator รันอยู่ ในขณะที่ส่วนที่เหลือของ mcu นอนพัก นี้ยอมให้การ start-up เร็วมากรวมกับการกินพลังงานที่ต่ำ ใน Extended Standby mode, ทั้ง the main oscillator และ the asynchronous timer รันอยู่ต่อไป
Title: Re: Arduino MEGA328P
Post by: tha on September 16, 2017, 08:13:10 AM
Atmel เสนอให้มี the QTouch® library for embedding capacitive touch buttons, sliders and wheels functionality เข้าไปใน AVR microcontrollers. The patented charge-transfer signal acquisition เสนอให้มี robust sensing และรวมทั้ง fully debounced reporting ของ touch keys and includes Adjacent Key Suppression® (AKS™) technology สำหรับการตรวจจับที่คลุมเคลือของเหตการณ์ของ key(key events). The easy-to-use QTouch Suite toolchain ยอมให้คุณสำรวจ, พัฒนาและตรวจหาแก้จุดบกพร่องการใช้งาน touch applications ของคุณเอง

วันนี้ฝนตก เย็นไปได้มากหน่อย 8)
Title: Re: Arduino MEGA328P
Post by: software on September 16, 2017, 06:00:02 PM
มีข้อดีแต่ก็มีข้อเสียนะครับ มีแต่ mul แต่ไม่มี div ไม่มี decimal adjust ด้วยทำให้เขียนการบวกลบเลขฐานสิบต้องเขียนโปรแกรมแปลง r0-r15 มีข้อจำกัดในการใช้งานเยอะ แต่ชอบ r16-r31 มากๆทำให้รู้สึกเหมือนมี MCS51 16ตัวอยู่ใน chip เดียวตอนนี้รักเลยครับ
Title: Re: Arduino MEGA328P
Post by: tha on September 17, 2017, 05:44:03 PM
ขอบคุณที่แนะนำครับ หยุดไปสองปีกว่าลืมหมดเลย โน๊ตบุ๊ตที่มีเรื่องราว ARM Cortex-M ก็ขายไปแล้ว คล้ายๆจะลืมไปแล้ว แต่พอได้อ่านก็จำสัมนวณเก่าๆได้ ความทรงจำเริ่มกลับคืนมา แต่ก็ต้องร่ายกันต่อไป ถึงจะรู้เรื่อง ช่วงนี้ยุ่งๆจัดอาศม ติดมุ้งลวด เลยไม่ได้แปล  :)
Title: Re: Arduino MEGA328P
Post by: tha on September 18, 2017, 06:08:10 AM
The device ถูกผลิตโดยใช้ Atmel's high density non-volatile memory technology. The On-chip ISP Flash ยอมให้ the program memory ถูกโปรแกรมซ้ำใหม่ In-System ทาง an SPI serial interface, โดย a conventional nonvolatile memory programmer, หรือโดย an On-chip Boot program ที่รันใน the AVR core. The Boot program สามารถใช้ interface จำนวนหนึ่งเพื่อ download the application program ไปใน the Application Flash memory. Software ใน the Boot Flash section จะรันต่อไปในขณะที่ the Application Flash section ถูกอัฟเดต, จัดให้มี Read-While-Write operation ที่ถูกต้อง. โดยการรวม an 8-bit RISC CPU ด้วย In-System Self-Programmable Flash บน a monolithic chip, the Atmel ATmega328/P จึงเป็น a powerful microcontroller ที่มีความหยืดหยุ่นสูงและแก้ปัญหาด้านราคาอย่างมีประสิทธิภาพให้ embedded control applications จำนวนมาก

The ATmega328/P ถูกสนับสนุนด้วย a full suite of program และ system development tools รวมทั้ง: C Compilers, Macro Assemblers, Program Debugger/Simulators, In-Circuit Emulators, and Evaluation kits.
Title: Re: Arduino MEGA328P
Post by: tha on September 18, 2017, 09:44:38 AM
(https://i.imgur.com/wGrujN2.png)
Title: Re: Arduino MEGA328P
Post by: tha on September 18, 2017, 10:05:37 AM
(https://i.imgur.com/OW29XZ5.png)

(https://i.imgur.com/r7dG326.png)

(https://i.imgur.com/zReu4W1.png)

(https://i.imgur.com/qRsjsSe.png)

(https://i.imgur.com/ox5Wktl.png)
Title: Re: Arduino MEGA328P
Post by: tha on September 18, 2017, 11:57:24 AM
5.2. Pin Descriptions
5.2.1. VCC
Digital supply voltage.
5.2.2. GND
Ground.
5.2.3. Port B (PB[7:0]) XTAL1/XTAL2/TOSC1/TOSC2
Port B เป็น an 8-bit สองทิศทาง (bi-directional) I/O port พร้อมด้วยตัวต้านทานพูลอัพภายใน (internal pull-up resistors) (สามารถเลือกได้แต่ละบิท). The Port B output buffer มีคุณสมบัติการขับที่สมมาตรกัน (symmetrical drive characteristics) ด้วยเป็นทั้งตัวรับและตัวจ่ายที่มีความสามารถสูง ขณะที่เป็นอินพุท Port B pins ที่มีการดึงลงต่ำภาพนอก(ดึงลงกราวน์ภายนอก) จะจ่ายกระแสถ้าเปิดใช้งานตัวต้านทานพูลอัพ The Port B pins จะอยู่ในสถานะ tri-stated เมื่อมีการ reset ถึงแม้ว่า clock ไม่ได้รันก็ตาม

ขึ้นอยู่กับการตั้งค่า clock (the clock selection fuse settings), PB6 สามารถถูกใช้เป็นอินพุทของ the inverting Oscillator amplifier และเป็นอินพุทของ  the internal clock operating circuit.

ขึ้นอยู่กับการตั้งค่า clock (the clock selection fuse settings), PB7 สามารถถูกใช้เป็นเอ๊าท์พุทจาก the inverting Oscillator amplifier.

ถ้า the Internal Calibrated RC Oscillator ถูกใช้เป็น chip clock source, PB[7:6] ถูกใช้เป็นอินพุท TOSC[2:1] สำหรับ the Asynchronous Timer/Counter2 ถ้าบิท AS2 bit ใน ASSR รีจีสเตอร์ถูกเซต.
Title: Re: Arduino MEGA328P
Post by: tha on September 18, 2017, 12:22:00 PM
5.2.4. Port C (PC[5:0])
Port C เป็น an 7-bit สองทิศทาง (bi-directional) I/O port พร้อมด้วยตัวต้านทานพูลอัพภายใน (internal pull-up resistors) (สามารถเลือกได้แต่ละบิท). The PC[5:0] output buffer มีคุณสมบัติการขับที่สมมาตรกัน (symmetrical drive characteristics) ด้วยเป็นทั้งตัวรับและตัวจ่ายที่มีความสามารถสูง ขณะที่เป็นอินพุท Port C pins ที่มีการดึงลงต่ำภาพนอก(ดึงลงกราวน์ภายนอก) จะจ่ายกระแสถ้าเปิดใช้งานตัวต้านทานพูลอัพ The Port C pins จะอยู่ในสถานะ tri-stated เมื่อมีการ reset ถึงแม้ว่า clock ไม่ได้รันก็ตาม
Title: Re: Arduino MEGA328P
Post by: tha on September 18, 2017, 06:11:56 PM
ตัวอย่าง ADC ครับ ทดลองวันละนิดวันละหน่อย เพลินดีมีงานทำ
http://www.mediafire.com/file/9u62el5iyv0m92w/ADC.rar (http://www.mediafire.com/file/9u62el5iyv0m92w/ADC.rar)
Title: Re: Arduino MEGA328P
Post by: tha on September 18, 2017, 07:26:46 PM
มีปัญหาขอลาโปรเจ็ค ทำอย่างที่พูดไม่ได้แล้ว(ที่ว่าจะแปลให้หมดเล่ม) ต้องไปเอาเรื่องที่สำคัญกว่า คือเรื่องจิตใจ ขอโทษด้วยจริงๆครับ
Title: Re: Arduino MEGA328P
Post by: tha on September 19, 2017, 08:19:06 AM
กลับใจไปต่อกัน  ;)

5.2.5. PC6/RESET
ถ้า the RSTDISBL Fuse ถูกโปรแกรม, PC6 จะถูกใช้เป็น I/O pin. บันทึกไว้ว่า the electrical characteristics ของ PC6 แตกต่างจาก pin อื่นๆของ Port C. ถ้า the RSTDISB Fuse ไม่ถูกโปรแกรม, PC6 ถูกใช้เป็น Reset input. ลอจิกศูนย์(low level)บน pin นี้เป็นเวลาที่ยาวกว่าความยาวของพลัสที่สั้นสุด( the minimum pulse length)จะกำเนิดสัณญาน Reset, ถึงแม้ว่า clock ไม่ได้กำลังรัน. ถ้าสั้นกว่าพลัสไม่การันตีว่าจะกำเนิดสัณญาน Reset.

ลักษณะพิเศษต่างๆของ Port C ถูกอธิบายโดยละเอียดในหน้าที่ทางเลือกต่างๆ( Alternate Functions) ของ Port C section.
Title: Re: Arduino MEGA328P
Post by: tha on September 19, 2017, 12:14:04 PM
5.2.6. Port D (PD[7:0])
Port D เป็น an 8-bit สองทิศทาง (bi-directional) I/O port พร้อมด้วยตัวต้านทานพูลอัพภายใน (internal pull-up resistors) (สามารถเลือกได้แต่ละบิท). The Port D output buffer มีคุณสมบัติการขับที่สมมาตรกัน (symmetrical drive characteristics) ด้วยเป็นทั้งตัวรับและตัวจ่ายที่มีความสามารถสูง ขณะที่เป็นอินพุท Port D pins ที่มีการดึงลงต่ำภายนอก(ดึงลงกราวน์ภายนอก) จะจ่ายกระแสถ้าเปิดใช้งานตัวต้านทานพูลอัพ The Port D pins จะอยู่ในสถานะ tri-stated เมื่อมีการ reset ถึงแม้ว่า clock ไม่ได้รันอยู่ก็ตาม

5.2.7. AVCC
AVCC เป็น the supply voltage pin สำหรับ the A/D Converter, PC[3:0], และ PE[3:2]. มันควรที่จะถูกต่อภายนอกถึง VCC, ถึงแม้ว่า the ADC ไม่ได้ถูกใช้ก็ตาม ถ้า the ADC ถูกใช้, มันควรถูกต่อถึง VCC โดยผ่าน a low-pass filter. จำไว้ว่า PC[6:4] ใช้ digital supply voltage, VCC.

5.2.8. AREF
AREF คือ the analog reference pin สำหรับ the A/D Converter.

5.2.9. ADC[7:6] (TQFP and VFQFN Package Only)
ใน the TQFP and VFQFN package, ADC[7:6] รับใช้เป็น analog inputs ถึง the A/D converter. pins เหล่านี้ถูกจ่ายพลังงานมาจาก the analog supply และรับใช้เป็น 10-bit ADC channels.
Title: Re: Arduino MEGA328P
Post by: tha on September 19, 2017, 12:58:51 PM
6. I/O Multiplexing(เลือกได้หลายทางของขา I/O)
แต่ละ pin ถูกควบคุมโดยอัตโนมัติโดย the PORT ให้เป็น a general purpose I/O และ ทางมีเลือกอื่น มันสามารถถูกกำหนดให้เป็นหนึ่งของ the peripheral functions ได้ด้วย. ตารางต่อไปนี้อธิบาย the peripheral signals ที่มีหลากหลายทางเลือกถึง the PORT I/O pins.

(https://i.imgur.com/pB2KDYa.png)
(https://i.imgur.com/aqXzz9A.png)
Title: Re: Arduino MEGA328P
Post by: tha on September 20, 2017, 06:31:35 AM
7. Resources(ทรัพยากร)
ชุดที่เกี่ยวกับความเข้าใจของ development tools, application notes, and datasheets มีให้ดาวน์โหลดใน  http://www.atmel.com/avr (http://www.atmel.com/avr)

8. Data Retention(การคงอยู่ของข้อมูล)
Reliability Qualification results แสดงว่า the projected data retention failure rate น้อยกว่า 1 PPM อย่างมาก มากกว่า 20 ปีที่ 85°C หรือ 100 ปีที่ 25°C.

9. About Code Examples (เกี่ยวกับโค๊ดตัวอย่าง)
เอกสารนี้มีตัวอย่างโค๊ดอย่างง่ายๆที่แสดงแบบย่อๆของการใช้ส่วนต่างๆของ mcu. ตัวอย่างโค๊ดเหล่านี้ทึกทักเอาว่า the part specific header file ถูกรวมไว้แล้วก่อนการคอมไพล์ โปรดตะหนักไว้ว่าไม่มีผู้ขาย C compiler vendors ทั้งหมดรวบรวม bit definitions ไว้ใน the header files และ interrupt handling ไว้ใน C คือขึ้นอยู่กับตัวคอมไพล์. รับรองด้วย the C compiler documentation สำหรับรายละเอียดเพิ่มเติม

สำหรับ I/O Registers ที่อยู่ในส่วนขยาย extended I/O map, "IN", "OUT", "SBIS", "SBIC", "CBI", and "SBI" instructions ต้องถูกแทนที่ด้วย instructions ที่ยอมให้เข้าถึง extended I/O. Typically "LDS" and "STS" combined with "SBRS", "SBRC", "SBR", and "CBR".

ช่วงนี้แปลยาก  ;D
Title: Re: Arduino MEGA328P
Post by: tha on September 20, 2017, 09:59:35 AM

10. Capacitive Touch Sensing
10.1. QTouch Library
The Atmel® QTouch® Library จัดให้มีการใช้แก้ปัญหาอย่างง่ายๆของ realize touch sensitive interfaces ใน Atmel AVR® microcontrollers เกือบทั้งหมด. The QTouch Library ได้รวมการสนับสนุนสำหรับ the Atmel QTouch and Atmel QMatrix® acquisition methods เข้าไว้ด้วย Touch sensing สามารถถูกเพิ่มเข้าไปในโปรแกรมใช้งานต่างๆโดยการเชื่อมโยงถึง the appropriate Atmel QTouch Library สำหรับ the AVR Microcontroller. นี้ทำได้โดยการใช้ a simple set of APIs เพื่อกำหนด the touch channels and sensors, และดังนั้นการเรียก the touch sensing API's เพื่อดึงข้อมูล the channel information และตัดสินใจกำหนดสถานะ the touch sensor states.The QTouch Library แจกฟรีและสามารถดาวน์โหลดจาก the Atmel website ที่ตำแหน่งดังต่อไปนี้ : http://www.atmel.com/technologies/touch/ (http://www.atmel.com/technologies/touch/). สำหรับรายละเอียดการทำให้เกิดผลและข้อมูลอื่นๆ, อ้างอิงถึง the Atmel QTouch Library User Guide - มีให้ดาวน์โหลดจาก the Atmel website อีกด้วย
Title: Re: Arduino MEGA328P
Post by: tha on September 20, 2017, 01:16:00 PM
11. AVR CPU Core

11.1. Overview(การอธิบายอย่างคร่าวๆ)
ในส่วนนี้กล่าวถึง the AVR core architecture โดยทั่วไป. หน้าที่หลักของ the CPU core คือทำให้แน่ใจว่าการปฏิบัติโปรแกรมเป็นไปอย่างถูกต้อง ดังนั้น The CPU ต้องสามารถเข้าถึง memories, กระทำการคำนวณ calculations, ควบคุม peripherals, และจัดการการ interrupts.

(https://i.imgur.com/LIWIFuD.png)

เพื่อที่ว่า maximize performance และ parallelism, the AVR ใช้ a Harvard architecture – ด้วยการแยก memories และ buses สำหรับ program และ data. คำสั่ง(Instructions) ใน the program memory ถูกปฏิบัติด้วย a single level pipelining. ขณะที่คำสั่งหนึ่งกำลังถูกปฏิบัติอยู่, the next instruction ถูก pre-fetched จาก the program memory. ด้วยรูปแบบนี้สามรถปฏิบัติคำสั่งในทุกๆ clock cycle. The program memory เป็น In-System Reprogrammable Flash memory.

The fast-access Register File มี 32 x 8-bit general purpose working registers ด้วย a single clock cycle access time. นี้ยอมให้ single-cycle Arithmetic Logic Unit (ALU) operation. โดยปกติ  ALU operation, ตัวถูกดำเนินการ 2 ตัว(two operands) ถูกส่งออกจาก the Register File, การทำงานถูกปฏิบัติ, และผลท่ีได้ถูกส่งกลับไปเก็บใน the Register File – ในหนึ่ง clock cycle.
Title: Re: Arduino MEGA328P
Post by: tha on September 20, 2017, 03:04:15 PM
รีจีสเตอร์ 6 ตัวของ the 32 registers สามารถถูกใช้เป็น 16-bit indirect address register pointers 3 ตัวสำหรับ Data Space addressing – สามารถคำนวณแอดเดรสได้อย่างมีประสิทธิผล(enabling efficient address calculations) หนึ่งของ address pointers เหล่านี้สามารถใช้เป็น an address pointer สำหรับ มองดูตาราง(tables) ใน Flash program memory. added function registers เหล่านี้คือ the 16-bit X-, Y-, and Z-register, จะอธิบายภายหลังใน section นี้

The ALU สนับสนุน arithmetic and logic operations ระหว่าง registers หรือระหว่างค่าคงที่และ a register. Single register operations สามารถถูกปฏิบัติได้ใน the ALU. หลังจาก an arithmetic operation, the Status Register ถูกอัฟเดตเพื่อสะท้อนข้อมูลเกี่ยวกับผลของการทำงาน
Title: Re: Arduino MEGA328P
Post by: tha on September 21, 2017, 01:47:36 AM
Program flow ถูกจัดให้มีโดย conditional and unconditional jump and call instructions, สามารถระบุที่อยู่โดยตรง the whole address space. เกือบทั้งหมด AVR instructions มี a single 16-bit word format. ทุกๆ program memory address บรรจุ a 16- or 32-bit instruction.

Program Flash memory space ถูกแบ่งออกเป็น 2 ส่วนคือ, the Boot Program section และ the Application Program section. ทั้งสองส่วนนี้มี dedicated Lock bits สำหรับ write and read/write protection. The SPM instruction ที่เขียนไปใน the Application Flash memory section ต้องอาศัยอยู่ใน the Boot Program section.

ในระหว่าง interrupts and subroutine calls, the return address Program Counter (PC) ถูกจัดเก็บบน the Stack. The Stack ถูกจัดสรรอย่างมีประสิทธิผลใน the general data SRAM, และดังนั้น the Stack size ถูกจำกัดโดย the total SRAM size และการใช้งานของ the SRAM เท่านั้น  user programs ทั้งหมดต้องเริ่มต้นเตรียมพร้อม the SP ใน the Reset routine (ก่อน subroutines หรือ interrupts ถูกปฏิบัติ). The Stack Pointer (SP) ถูกอ่าน/เขียนเข้าถึงได้ใน the I/O space. The data SRAM สามารถถูกเข้าถึงโดยง่าย่ผ่าน the five different addressing modes ที่สนับสนุนให้มีใน in the AVR architecture.

The memory spaces ใน the AVR architecture เป็น all linear and regular memory maps.

A flexible interrupt module มี control registers ของมันใน the I/O space พร้อมด้วย an additional Global Interrupt Enable bit ใน the Status Register. interrupts ทั้งหมดมี a separate(แยกใครแยกมัน) Interrupt Vector ใน the Interrupt Vector table. The interrupts มีลำดับความสำคัญ(ก่อนหลัง)ซึ่งสอดคล้องกันกับ Interrupt Vector position ของมัน  the Interrupt Vector address ที่ต่ำกว่า, จะมี priority ที่สูงกว่า.
Title: Re: Arduino MEGA328P
Post by: tha on September 21, 2017, 02:20:31 AM
The I/O memory space บรรจุ 64 addresses สำหรับ CPU peripheral functions เป็น Control Registers, SPI, and other I/O functions. The I/O Memory สามารถถูกเข้าถึงโดยตรงหรือเป็น the Data Space locations ต่อจาก those of the Register File, 0x20 - 0x5F. นอกจากนี้, mcu นี้มี Extended I/O space จาก 0x60 - 0xFF ใน SRAM ในที่ซึ่ง the ST/STS/STD and LD/LDS/LDD instructions สามารถถูกใช้เท่านั้น

   แปลไปแปลมา คนแปลก็ไม่เคลียร์ หรือว่าพอแปลนานๆมันตื้อไป ก็ต้องหยุดพักถึงจะดี ตอนนี้เขาอาจกล่าวรวบยอดก่อน เลยยังไม่กระจ่าง พออ่านไปเรื่อยๆแล้วกลับมาอ่านอีกทีก็จะเข้าใจเอง อย่างนั้นใช่มั๊ย งั้นยังไม่เข้าใจก็ต่อไปก่อน  :)
Title: Re: Arduino MEGA328P
Post by: tha on September 21, 2017, 04:32:47 AM
11.2. ALU – Arithmetic Logic Unit
The high-performance AVR ALU ทำงานในทิศทางที่ต่อด้วย the 32 general purpose working registers ทั้งหมด ภายใน a single clock cycle, arithmetic operations ระหว่าง general purpose registers ด้วยกันหรือระหว่าง a register และ an immediate ถูกปฏิบัติ. The ALU operations ถูกแบ่งเป็น three main categories –arithmetic, logical, and bit-functions. บางการทำให้เกิดผลของ architecture (implementations of the architecture) จัดให้มี  a powerful multiplier อีกด้วยซึ่งสนับสนุนทั้ง signed/unsigned multiplication และ fractional format. ดู Instruction Set Summary section สำหรับการอธิบายที่ละเอียด

Related Links

Instruction Set Summary บนหน้า 432
Title: Re: Arduino MEGA328P
Post by: tha on September 21, 2017, 04:48:06 AM
11.3. Status Register
The Status Register บรรจุ information เกี่ยวกับผลของ the most recently executed arithmetic instruction. information นี้สามารถถูกใช้สำหรับเปลี่ยน program flow เพื่อที่กระทำ conditional operations. The Status Register ถูกอัพเดตหลังจาก ALU operations ทั้งหมด, ตามที่ระบุไว้ใน the Instruction Set Reference. นี้ในหลายกรณีจะขจัดความต้องการการใช้ the dedicated compare instructions, เป็นผลให้มีความเร็วมากกว่าและโค๊ดกระทัดรัดกว่า

The Status Register ไม่ได้ถูกเก็บโดยอัตโนมัติเมื่อเข้าสู่ an interrupt routine และคืนให้เมื่อกลับจาก an interrupt. นี้ต้องถูกจัดการโดย software.
Title: Re: Arduino MEGA328P
Post by: tha on September 22, 2017, 01:40:24 AM
11.3.1. Status Register
เมื่อระบุที่อยู่ I/O Registers เป็น data space โดยใช้ LD and ST instructions, การจัดให้มีระยะชดเชยต้องถูกใช้ เมื่อใช้ the I/O specific commands IN and OUT, the offset ถูกลดลง 0x20, เป็นผลให้ an I/O address offset อยูภายใน 0x00 - 0x3F.

(https://i.imgur.com/hVWib1e.png)

ถามหน่อย ระยะ offset นี่คือระยะที่ต้องเพิ่มหรือต้องลดลงจากตำแหน่งที่ระบุใช่หรือเปล่า? ชักจะลืมแล้ว
Title: Re: Arduino MEGA328P
Post by: tha on September 22, 2017, 02:12:49 AM
Bit 7 – I: Global Interrupt Enable(เปิดใช้งานอินเตอร์รัพท์โดยรวม)
The Global Interrupt Enable bit ต้องถูก set สำหรับ the interrupts ถูกเปิดใช้งาน. The individual(เฉพาะราย) interrupt enable control ถูกกระทำใน separate(แยกกัน) control registers. ถ้า the Global Interrupt Enable Register ถูก cleared, ไม่มี interrupts ใดถูกเปิดใช้งานโดยอิสระของ the individual interrupt enable settings. The I-bit ถูก cleared โดย hardware หลังจาก an interrupt เกิดขึ้น, และถูก set โดย the RETI instruction เพื่อเปิดใช้งาน interrupts ต่อมา. The I-bit สามารถถูก set และ cleared โดย the application ที่มี the SEI and CLI instructions อีกด้วย, ตามที่อธิบายใน the instruction set reference.
Title: Re: Arduino MEGA328P
Post by: tha on September 23, 2017, 05:29:33 AM

Bit 6 – T: Copy Storage
The Bit Copy instructions BLD (Bit LoaD) และ BST (Bit STore) ใช้ the T-bit เป็นดั่งต้นทางหรือปลายทางสำหรับการทำงานแบบบิท(the operated bit). A bit จาก a register ใน the Register File สามารถถูกก๊อปปี้ไปใน T โดย the BST instruction, และ a bit ใน T  สามารถถูกก๊อปปี้ไปใน a bit ใน a register ใน the Register File โดย the BLD instruction.

Bit 5 – H: Half Carry Flag
The Half Carry Flag H แสดง a Half Carry(การทศครึ่งเดียว) ในบาง arithmetic operations. Half Carry Flag ถูกใช้ให้เกิดประโยชน์ใน BCD arithmetic. ดู the Instruction Set Description สำหรับรายละเอียดของข้อมูล

Bit 4 – S: Sign Flag, S = N ㊉ V
The S-bit เป็นบิท an exclusive เสมอ หรือระหว่าง the Negative Flag N และ the Two's Complement Overflow Flag V. ดู the Instruction Set Description for detailed information.

Bit 3 – V: Two's Complement Overflow Flag
The Two's Complement Overflow Flag V สนับสนุน two's complement arithmetic. See the Instruction Set Description for detailed information.

Bit 2 – N: Negative Flag
The Negative Flag N แสดงผลลัพธ์ที่เป็นลบใน an arithmetic หรือ logic operation. See the Instruction Set Description for detailed information.

Bit 1 – Z: Zero Flag
The Zero Flag Z แสดงผลลัพธ์ที่เป็นศูนย์ใน an arithmetic or logic operation. See the Instruction Set Description for detailed information.


Bit 0 – C: Carry Flag
The Carry Flag C แสดงการทศใน an arithmetic or logic operation. See the Instruction Set Description for detailed information.
Title: Re: Arduino MEGA328P
Post by: tha on September 23, 2017, 07:36:45 AM
พิมพ์ไม่ค่อยถนัด ไปช้าหน่อย ใครจะแปลนำหน้าไปก่อนก็ได้นะครับ ส่วนมากแล้วคู่มือภาษาอังกฤษ จะมีประโยคเป็น passive voice เป็นส่วนมาก คือประธานเป็นผู้ถูกกระทำ มีรูปแบบดังนี้
                                ประธาน + verb to be + กริยาช่อง 3

และมีคำศัพย์ไม่กี่ตัววนๆใช้อยู่ในนี้แหละ(ให้ผมไปแปลข่าวการเมืองคงทำได้ลำบาก) กับคำที่มีส่วนขยายหลายๆคำรวมกัน จับเป็นคำๆได้ ก็แปลได้แล้วครับ  >:(
Title: Re: Arduino MEGA328P
Post by: tha on September 23, 2017, 08:07:03 AM
แล้วก็มีคำรวม เขาเรียกว่าอะไรนะ อย่างเช่น in order to, in acordance with ไม่กี่คำ

ส่วนดิกผมใช้โปรแกรม Highlight Dictionary ใช้เม้าท์ไฮไลท์คำศัพย์แล้วกดแปลได้เลย คำแปลขึ้นมาเลยสะดวกมากไม่ต้องพิมพ์ คำแปลก็มีหลากหลายครอบคุม จึงขอขอบคุณผู้จัดทำมา ณ ที่นี้ด้วยครับ ท่านอื่นใช้ตัวไหนอยู่?ดีมั๊ย?
Title: Re: Arduino MEGA328P
Post by: tha on September 23, 2017, 01:16:51 PM
11.4. General Purpose Register File
The Register File ถูกทำให้เหมาะสมสำหรับ the AVR Enhanced RISC instruction set. เพื่อที่ว่าการทำงานและความยืดหยุ่นสำเร็จผลตามที่ต้องการ, รูปแบบอินพุท/เอ๊าท์พุทดังต่อไปนี้ถูกสนับสนุนโดย the Register File:

    • One 8-bit output operand and one 8-bit result input ( 8-bit ตัวถูกดำเนินการเอาท์พุทหนึ่งตัวและหนึ่ง 8-bit ผลลัพธ์อินพุท)
    • Two 8-bit output operands and one 8-bit result input
    • Two 8-bit output operands and one 16-bit result input
    • One 16-bit output operand and one 16-bit result input

(https://i.imgur.com/yYlld0E.png)

คำสั่งส่วนใหญ่ทำงานบน the Register File มีการเข้าถึงโดยตรงสู่registers ทั้งหมด, และส่วนใหญ่ของมันเป็นคำสั่งไซเคิลเดียว ตามที่แสดงในรูป แต่ละรีจีสเตอร์ถูกระบุเป็น a data memory address, ระบุตำแหน่งของมันโดยตรงไปใน  32 ตำแหน่งแรกของ the user Data Space. ถึงแม้ว่าไม่ได้ทำมันให้เป็นผลทางกายภาพเหมือนกับ SRAM locations, memory organization นี้ จัดให้มีความหยืดหยุ่นที่สูงในการเข้าถึงของรีจีสเตอร์, ดังที่ the X-, Y-, and Z-pointer registers สามารถถูกเซทเพื่อชี้รีจีสเตอร์ต่างๆใน the file.

วันนี้ฝนตกทำกลางวันได้ ถ้าแดดออกร้อนหงุดหงิดแปลไม่ออก เดี๋ยวก็หน้าหนาวแล้ว ค่อยยังชั่ว :)
Title: Re: Arduino MEGA328P
Post by: tha on September 23, 2017, 01:43:33 PM
11.4.1. The X-register, Y-register, and Z-register
The registers R26...R31 มีบางหน้าที่เพิ่มเข้ามาจากการใช้ general purpose usage ของมัน. registers เหล่านี้เป็น 16-bit address pointers สำหรับ  indirect addressing ของ the data space. The three indirect address registers X, Y, and Z ถูกกำหนดตามการอธิบายในรูป

(https://i.imgur.com/2fh47Oq.png)

ใน the different addressing modes, address registers มีหน้าที่เป็น fixed displacement, automatic increment, และ automatic decrement (ดู the instruction set reference เพื่อรายละเอียด).
Title: Re: Arduino MEGA328P
Post by: tha on September 24, 2017, 02:21:07 AM
11.5. Stack Pointer
The Stack โดยหลักแล้วถูกใช้สำหรับเก็บข้อมูลชั่าคราว, สำหรับเก็บตัวแปร local variables และสำหรับเก็บตำแหน่งกลับคืน (return addresses) หลังจาก  interrupts และเรียกงานย่อย (subroutine) The Stack ถูกทำให้เป็นผลตามที่จะเพิ่มขึนจากที่สูงกว่าไปสู่ที่ต่ำกว่าของ memory locations. The Stack Pointer Register จะชี้ไปที่บนสุดของ the Stack.

The Stack Pointer ชี้ไปที่ the data SRAM Stack area ที่ๆ the Subroutine and Interrupt Stacks ถูกตั้งอยู่. A Stack PUSH command จะลด the Stack Pointer. The Stack ใน the data SRAM ต้องถูกกำหนดโดยโปรแกรมก่อนทุกๆการเรียกใช้งาน subroutine หรือเปิดใช้งาน interrupts. ค่าเริ่มต้นของ Stack Pointer เท่ากับ address สุดท้ายของ the internal SRAM และ the Stack Pointer ต้องงถูกตั้งเพื่อชี้ไปเหนือจุดเริ่มต้นของ the SRAM. ดูตารางเพื่อรายละเอียดของ Stack Pointer.

(https://i.imgur.com/qiIGh9n.png)

The AVR Stack Pointer ถูกทำให้เป็นผลดังที่จะเป็น 8-bit registers 2 ชุดใน the I/O space. จำนวนของ bits โดยที่จริงแล้วใช้ขึ้นอยู่กับการทำให้เป็นผลของงานนั้นๆ (implementation)  จำไว้ว่า the data space ในบาง implementations of the AVR architecture เล็กมากที่ๆต้องการใช้แต่ SPL เท่านั้น ในกรณีนี้, the SPH Register จะไม่ถูกปรากฏตัว
Title: Re: Arduino MEGA328P
Post by: tha on September 24, 2017, 12:45:37 PM
สั่งซื้อบอร์ด  ET-BASE-AVR-EASY32U4 มาแล้ว(ยังมาไม่ถึง) มี CD-ROM โปรแกรมมาให้ด้วย คงจะได้ตัวอย่างโปรแกรมมาเยอะเลย คราวนี้ที่ติดๆขัดๆคงจะไปกันต่อได้  :)

http://www.ett.co.th/prod2012/AVR-EASY32U4/ET-BASE-AVR-EASY32U4.html (http://www.ett.co.th/prod2012/AVR-EASY32U4/ET-BASE-AVR-EASY32U4.html)

http://www.ett.co.th/product2009/LCD/MTC-16205D%20LED%20BACKLIGHT.html

สายเสียบพินมีของเก่าเก็บแล้ว เสียบทดลองไปก่อน ต่อไปอาจทำบอร์ดเอง  ;)
Title: Re: Arduino MEGA328P
Post by: tha on September 25, 2017, 05:01:28 AM
11.5.1. Stack Pointer Register High byte
เมื่อใช้ the I/O specific commands IN and OUT, the I/O addresses 0x00 - 0x3F ต้องถูกใช้. เมื่อระบุตำแหน่ง I/O Registers เป็น data space โดยใช้ LD and ST instructions, 0x20 ต้องถูกเพิ่มไปใน offset addresses เหล่านี้.

(https://i.imgur.com/g23oIU4.png)

Bits 2:0 – (SP[10:8]) SPH: Stack Pointer Register
SPH และ SPL ถูกรวมเข้าไปใน SP. นั่นหมายถึง SPH[2:0] คือ SP[10:8].


11.5.2. Stack Pointer Register Low byte
เมื่อใช้ the I/O specific commands IN and OUT, the I/O addresses 0x00 - 0x3F ต้องถูกใช้. เมื่อระบุตำแหน่ง I/O Registers เป็น data space โดยใช้ LD and ST instructions, 0x20 ต้องถูกเพิ่มไปใน offset addresses เหล่านี้.

(https://i.imgur.com/3UJcdcG.png)

Bits 7:0 – (SP[7:0]) SPL: Stack Pointer Register
SPH และ SPL ถูกรวมเข้าไปใน SP. นั่นหมายถึง SPL[7:0] คือ SP[7:0].

ระยะ offset นี่เป็นระยะที่เพิ่มขึ้นหรือลดลงจากระยะปกติของมันใช่เปล่าไม่เคลียเลย
Title: Re: Arduino MEGA328P
Post by: tha on September 25, 2017, 05:53:42 AM
11.6. Instruction Execution Timing(เวลาการปฏิบัติคำสั่ง)
ในส่วนนี้อธิบาย the general access timing concepts(รูปแบบ) ของการปฏิบัติคำสั่ง (instruction execution). The AVR CPU ถูกขับเคลื่อนโดย the CPU clock clkCPU, กำเนิดโดยตรงจากแหล่งจ่ายสัณญานนาฬิกาที่เลือก( the selected clock source) สำหรับ the chip. ไม่มีการหารสัณญานนาฬิกาภายในถูกใช้. รูปข้างล่างนี้แสดงการขนานกันของ instruction fetches และ instruction executions สามารถทำได้โดย the Harvard architecture และ the fast-access Register File concept. นี้คือ the basic pipelining concept ที่ให้ความเร็วถึงล้านคำสั่งต่อวินาทีต่อ MHz(1 MIPS per MHz) ที่ให้ผลหนึ่งเดียวที่สอดคล้องกันของ functions ต่อ cost, functions per clocks, and functions per power-unit.

(https://i.imgur.com/CLJbByX.png)

รูปต่อไปนี้แสดงรูปแบบเวลาภายใน( the internal timing concept) สำหรับ the Register File. ใน clock cycle เดียว an ALU operation ใช้รีจีสเตอร์ตัวถูกดำเนินการ 2 ตัว (2 register operands) ปฏิบัติและผลที่ได้ถูกเก็บคืนไปที่รีจีสเตอร์ปลายทาง

(https://i.imgur.com/puIJ5q1.png)
Title: Re: Arduino MEGA328P
Post by: unseen on September 25, 2017, 06:49:11 PM
เยี่ยมมาก แอบอ่านไปเยอะเลย
ขอบคุณมากๆ
Title: Re: Arduino MEGA328P
Post by: tha on September 27, 2017, 04:12:09 AM
เว็บเป็นไร สดุดเลย ได้บอร์ด ET-BASE AVR EASY32U4 มาแล้ว มีตัวอย่างเพียบเลย คงได้มาลองเล่นเพลินๆ มีอะไรแนะนำบอกด้วย กลับมาคราวนี้สายตายาวแล้ว แถมเป็นเบาหวาน ตาพร่ามัว เซ็งเลย  :)
Title: Re: Arduino MEGA328P
Post by: tha on September 28, 2017, 01:03:42 AM
11.7. Reset and Interrupt Handling(การรับมือ)
The AVR จัดให้มี several different interrupt sources. interrupts and the separate Reset Vector เหล่านี้แต่ละตัวมี a separate program vector ใน the program memory space. interrupts ทั้งหมดนี้ถูกกำหนดโดย individual enable bits ของมันซึ่งต้องถูกเขียนด้วยลอจิกหนึ่งพร้อมด้วย the Global Interrupt Enable bit ใน the Status Register เพื่อเปิดใช้งาน the interrupt นั้นๆ. ขึ้นอยู่กับค่า the Program Counter value, interrupts อาจถูกปิดใช้งานโดยอัตโนมัติเมื่อ Boot Lock bits BLB02 or BLB12 ถูกโปรแกรม. ด้วยลักษณะนี้ทำให้ความปลอดภัยของซอฟท์แวร์นั้นดีขึ้น.

แอดเดรสต่ำสุดใน the program memory space โดยปกติถูกกำหนดให้เป็นตัวชี้ the Reset and Interrupt Vectors. มันมีการกำหนดลำดับความสำคัญของมัน: แอดเดรสต่ำกว่ามี the priority level ที่สูงกว่า. RESET มี the highest priority, และถัดมาคือ INT0 – the External Interrupt Request 0. The Interrupt Vectors สามารถถูกย้ายไปสู่ the start of the Boot Flash section โดยการเซท the IVSEL bit ใน the MCU Control Register (MCUCR). The Reset Vector สามารถถูกย้ายไปสู่ the start of the Boot Flash section โดยการโปรแกรม the BOOTRST Fuse ได้อีกด้วย.

เมื่อมี interrupt หนึ่งเกิดขึ้น, the Global Interrupt Enable I-bit จะถูกเคลียร์และ interrupts ทั้งหมดก็ถูก disabled. The user software สามารถเขียนลอจิกหนึ่งไปยัง the I-bit เพื่อเปิดใช้งาน nested interrupts (interrupt ซ้อน). interrupts ที่เปิดใช้งานทั้งหมดสามารถที่จะอินเตอร์รัพท์ the current interrupt routine. The I-bit ถูกเซทโดยอัตโนมัติเมื่อ a Return from Interrupt instruction – RETI – ถูกปฏิบัติ.
Title: Re: Arduino MEGA328P
Post by: tha on September 28, 2017, 05:11:13 AM
interrupts โดยพื้นฐานแล้วมี 2 ชนิด:

ชนิกแรกถูกจุดชนวนโดยเหตการณ์ที่เซท the Interrupt Flag. สำหรับ interrupts เหล่านี้, the Program Counter ถูกชี้(vectored)ไปยัง the actual Interrupt Vector เพื่อจะปฏิบัติ the interrupt handling routine, และ hardware เคลียร์ the corresponding Interrupt Flag นั้น. Interrupt Flags สามารถถูกเคลียร์โดยเขียนลอจิกหนึ่งไปยัง to the flag bit position(s) ที่ถูกเคลียร์นั้นได้อีกด้วย. ถ้า an interrupt condition เกิดขึ้นขณะที่ the corresponding interrupt enable bit ถูกเคลียร์, the Interrupt Flag จะถูกเซทและถูกจำไว้จนกระทั่ง the interrupt นั้นถูกเปิดใช้งาน, หรือ the flag นั้นถูกเคลียร์โดย software. ในทำนองเดียวกัน,ถ้า interrupt conditions หนึ่งหรือมากกว่าเกิดขึ้นขณะที่ the Global Interrupt Enable bit ถูกเคลียร์, the corresponding Interrupt Flag(s) จะถูกเซทและถูกจำไว้จนกระทั่ง the Global Interrupt Enable bit ถูกเซท, และจะถูกปฏิบัติโดยลำดับความสำคัญ.

ชนิดที่สองของ interrupts จะ trigger ตราบเท่าที่ the interrupt condition นั้นปรากฏอยู่. interrupts เหล่านี้ไม่จำเป็นต้องมี Interrupt Flags. ถ้า the interrupt condition หายไปก่อน the interrupt ถูกเปิดใช้งาน, the interrupt นั้นจะไม่ถูกกระตุ้น. เมื่อ the AVR ออกจาก an interrupt, มันจะกลับคืนสู่ the main program เสมอและปฏิบัติอีกหนึ่งคำสั่งก่อนบริการ interrupt ที่ค้างอยู่.

The Status Register ไม่ถูกเก็บโดยอัตโนมัติเมื่อเข้าสู่ an interrupt routine, ไม่เก็บกับเมื่อกลับจาก an interrupt routine. นี้ต้องถูกจัดการโดย software.

เมื่อใช้คำสั่ง the CLI instruction เพื่อปิดการใช้งาน interrupts, the interrupts จะถูกปิดใช้งานทันที. ไมีมี interrupt ใดจะถูกปฏิบัติหลังจากคำสั่ง the CLI instruction, ถึงแม้ว่ามันเกิดขึ้นพร้อมกันกับ the CLI instruction ก็ตาม.

ตัวอย่างต่อไปนี้แสดงสามารถใช้อย่างไรเพื่อหลีกเลี่ยง interrupts ในระหว่างเวลา the timed EEPROM write sequence.

(https://i.imgur.com/2sHfByM.png)

เมื่อใช้คำสั่ง the SEI instruction  เพื่อเปิดการใช้งาน interrupts, คำสั่งต่อจาก SEI จะถูกปฏิบัติก่อนทำอินเตอร์รัพท์ที่ค้างอยู่ (any pending interrupts), ตามที่แสดงในในตัวอย่างนี้.

(https://i.imgur.com/jUhY5oG.png)
Title: Re: Arduino MEGA328P
Post by: tha on September 29, 2017, 08:25:02 AM
11.7.1. Interrupt Response Time
The interrupt execution response สำหรับ all the enabled AVR interrupts คือสี่คล็อกไซเคิล (four clock cycles) เป็นอย่างต่ำ. หลังจากสี่คล็อกไซเคิล the program vector กำหนดตำแหน่ง(address) สำหรับ the actual interrupt handling routine ที่ถูกปฏิบัติ. ในระหว่างคาบเวลา four clock cycle นี้, the Program Counter ถูก pushed ไปบน the Stack. The vector โดยปกติ jump ไปที่ the interrupt routine, และการ jump นี้ใช้เวลา three clock cycles. ถ้า an interrupt เกิดขึ้นในระหว่างการปฏิบัติงานของคำสั่งที่ใช้เวลาหลายไซเคิล( a multi-cycle instruction), คำสั่งนี้ถูกทำให้เสร็จก่อนที่จะบริการ the interrupt. ถ้า an interrupt เกิดขึ้นเมื่อ the MCU อยู่ใน sleep mode, the interrupt execution response time ถูกเพิ่มขึ้นอีก four clock cycles. การเพิ่มขึ้นนี้มาจาก the start-up time จาก the selected(ที่เลือก) sleep mode. การกลับจาก an interrupt handling routine ใช้เวลา four clock cycles. ในระหว่าง four clock cycles นี้, the Program Counter (two bytes) ถูก popped กลับจาก the Stack, the Stack Pointer ถูกเพิ่มขึ้นอีกสอง, และ the I-bit ใน SREG ถูก set.
Title: Re: Arduino MEGA328P
Post by: tha on October 04, 2017, 10:59:55 AM
12. AVR Memories

12.1. Overview(การอธิบายคร่าวๆ)
ในส่วนนี้อธิบายหน่วยความจำชนิดต่างๆใน mcu. The AVR architecture มี two main memory spaces, the Data Memory และ the Program Memory space. ยิ่งไปกว่านั้น, the device มี an EEPROM Memory สำหรับ data storage. memory spacesทั้งหมดเป็นเส้นตรงและสม่ำเสมอ

12.2. In-System Reprogrammable Flash Program Memory
The ATmega328/P บรรจุด้วย 32Kbytes On-chip In-System Reprogrammable Flash memory สำหรับ program
storage. เนื่องจากคำสั่ง AVR instructions ทั้งหมดเป็นความกว้าง 16 or 32 bits, the Flash ถูกจัดระบบเป็น 16K x 16 บิท. สำหรับความปลอดภัยทางซอฟแวร์, the Flash Program memory space ถูกแบ่งออกเป็นสองส่วน - Boot Loader Section และ Application Program Section ใน the device .

The Flash memory มีความคงทนอย่างต่ำ 10,000 ของวงรอบการเขียน/ลบ. The ATmega328/P Program Counter (PC) เป็น 14 bits wide, ดังนั้นระบุตำแหน่งได้ the 16K program memory locations. การทำงานของ Boot Program section และ associated Boot Lock bits สำหรับ software protection ถูกอธิบายโดยละเอียดใน Boot Loader Support – Read-While-Write Self-Programming. อ้างอิงถึง Memory Programming สำหรับการอธิบายถึง Flash data serial ดาวน์โหลดโดยใช้ the SPI pins.

ตารางค่าคงที่สามารถถูกจัดแบ่งไว้ภายใน the entire program memory address space, โดยใช้คำสั่ง the Load Program Memory (LPM) instruction.

Timing diagrams ของ instruction fetch และ execution ถูกแสดงใน Instruction Exectution Timing.

(https://i.imgur.com/tU4DozS.png)
Title: Re: Arduino MEGA328P
Post by: tha on October 04, 2017, 11:13:18 AM
12.3. SRAM Data Memory
รูปดังต่อไปนี้แสดงว่า the device SRAM Memory ถูกจัดสรรอย่างไร.

The device เป็น a complex microcontroller ด้วย peripheral units มีมากกว่าที่จะสามารถถูกสนับสนุนให้อยู่ภายใน the 64 locations จองไว้ใน the
Opcode เพื่อคำสั่ง the IN and OUT instructions. สำหรับ the Extended I/O space จาก 0x60 - 0xFF ใน SRAM, มีเพียงคำสั่ง the ST/STS/STD and LD/LDS/LDD instructions สามารถถูกใช้.

The lower 2303 data memory locations ระบุตำแหน่งทั้ง the Register File, the I/O memory, Extended I/O memory, และ the internal
data SRAM. The first 32 locations ระบุตำแหน่ง the Register File, the next(ถัดไป) 64 location the standard I/O memory, จากนั้น 160
locations of Extended I/O memory, และ the next 2K locations ระบุตำแหน่ง the internal data SRAM.


The five different addressing modes สำหรับ the data memory cover:
  • Direct
   – The direct addressing reaches(ถึง) the entire data space.
  • Indirect with Displacement(โดยอ้อมด้วยการย้ายที่)
   – The Indirect with Displacement mode ถึง 63 address locations จาก the base address ให้โดย the Y- or Z-register.
  • Indirect
   – In the Register File, registers R26 to R31 feature(เป็น) the indirect addressing pointer registers.
  • Indirect with Pre-decrement(ลดลงก่อน)
   – The address registers X, Y, and Z ถูกลดลง.
  • Indirect with Post-increment(เพิ่มขึ้นทีหลัง)
   – The address registers X, Y, and Z ถูกเพิ่มขึ้น.

The 32 general purpose working registers, 64 I/O Registers, 160 Extended I/O Registers, and the 2K bytes of internal data SRAM ใน the device สามารถเข้าถึงได้ทั้งหมดผ่านทาง all these addressing modes.

(https://i.imgur.com/jarWX0P.png)

12.3.1. Data Memory Access Times
The internal data SRAM access ถูกกระทำใน two clkCPU cycles ดังที่อธิบายในรูปดังต่อไปนี้.

(https://i.imgur.com/gN2Ov8K.png)
Title: Re: Arduino MEGA328P
Post by: tha on October 06, 2017, 05:10:37 AM
12.4. EEPROM Data Memory
The ATmega328/P บรรจุ 1K bytes of data EEPROM memory. มันถูกจัดสรรเป็นดัง a separate data space, ในที่ซึ่ง single bytes สามารถถูก
read และ written. The EEPROM มีความคงทน 100,000 write/erase cycles เป็นอย่างต่ำ. การเข้าถึงระหว่าง the EEPROM และ the CPU ถูกอธิบายดังต่อไปนี้, ระบุ the EEPROM Address Registers, the EEPROM Data Register, และ the EEPROM Control Register.

ดูลิ้งอ้างอิงนี้สำหรับการอธิบายโดยละเอียดของ EEPROM Programming ใน SPI หรือ Parallel Programming mode.

Related Links
MEMPROG- Memory Programming on page 347

12.4.1. EEPROM Read/Write Access
The EEPROM Access Registers สามารถเข้าถึงได้ใน in the I/O space. The write access time สำหรับ the EEPROM ถูกแสดงไว้ใน Table 12-2. A self-timing function, อย่างไรก็ตาม, ได้ยอมให้ the user software ตรวจพบเมื่อ byte ถัดไปสามารถถูกเขียน. ถ้า the user code บรรจุคำสั่งที่เขียน the EEPROM, มีบางข้อควรระวังที่ต้องดูแล. ใน heavily(อย่างหนัก) filtered power supplies, VCC ค่อนข้างขึ้นหรือตกลงอย่างช้าๆขณะ power-up/down. นี้ทำให้ the device ในบางคาบเวลา run ที่ a voltage ต่ำกว่าที่กำหนดไว้เป็นค่าที่ต่ำสุดต่อ the clock frequency ที่ใช้. โปรดอ้างอิงถึง Preventing EEPROM Corruption สำหรับรายละเอียดว่าทำอย่างไรถึงจะหลีกเลี่ยงปัญหาในสถานะการณ์เช่นนี้

เพื่อที่จะป้องกันการเขียน EEPROM โดยไม่ได้ตั้งใจ, ต้องทำตามขบวนการเขียนที่กำหนดไว้. อ้างอิงถึงการอธิบายของ the EEPROM Control Register สำหรับรายละเอียดในเรื่องนี้.

เมื่อ the EEPROM ถูกอ่าน, the CPU จะถูกหยุดเป็นเวลา four clock cycles ก่อนที่คำสั่งถัดไปจะถูกปฏิบัติ. เมื่อ the EEPROM ถูกเขียน, the CPU จะถูกหยุดเป็นเวลา two clock cycles ก่อนที่คำสั่งถัดไปถูกปฏิบัติ

12.4.2. Preventing EEPROM Corruption(การป้องกันอีพรอมเสียหาย)
ระหว่างคาบเวลาที่ VCC ต่ำ, the EEPROM data อาจเสียหายเพราะว่า the supply voltage ต่ำเกินไปสำหรับ the CPU และ the EEPROM ทำงานอย่างถูกต้องเหมาะสม. ในเรื่องเหล่านี้ก็เหมือนกันหมดสำหรับ board level systems โดยใช้ EEPROM, และก็ใช้การออกแบบแก้ปัญหาที่เหมือนกัน

An EEPROM data corruption อาจเกิดจากสองสถานะการณ์เมื่อ the voltage ต่ำเกินไป. อย่างแรก, ลำดับการเขียนปกติ(a regular write sequence)ไปยัง the EEPROM ต้องการ voltage ขั้นต่ำเพื่อจะทำงานได้อย่างถูกต้อง. อย่างที่สอง, ตัว the CPU เองสามารถปฏิบัติคำสั่งได้ไม่ถูกต้อง, ถ้า the supply voltage นั้นต่ำเกินไป.

EEPROM data corruption สามารถหลีกเลี่ยงได้ง่ายๆโดยข้อเสนอแนะการออกแบบดังต่อไปนี้:

ทำให้ the AVR RESET active (low) ในระหว่างคาบเวลาที่ power supply voltage ไม่เพียงพอ. นี้สามารถทำโดยการเปิดใช้งาน the internal Brown-out Detector (BOD). ถ้า the detection level ของ the internal BOD ไม่พอดีกับ the needed detection level, an external low VCC reset Protection circuit สามารถถูกใช้. ถ้า a reset เกิดขึ้นขณะ a write operation กำลังดำเนินการ, the write operation จะทำจนเสร็จสิ้นโดยมีเงื่อนไขว่าแรงดันไฟฟ้าเพียงพอ.
Title: Re: Arduino MEGA328P
Post by: tha on October 06, 2017, 09:35:00 AM
บอร์ด  ET-BASE-AVR-EASY32U4 http://www.ett.co.th/prod2012/AVR-EASY32U4/ET-BASE-AVR-EASY32U4.html (http://www.ett.co.th/prod2012/AVR-EASY32U4/ET-BASE-AVR-EASY32U4.html)
ทำการรื้อฟื้นภาษา C ลองทำตามตัวอย่างที่มีมาให้ใน CD-ROM ของ ETT ไปพรางๆก่อน
http://www.mediafire.com/file/m6j8gs3fd879nr9/software_LAB.rar (http://www.mediafire.com/file/m6j8gs3fd879nr9/software_LAB.rar)
Title: Re: Arduino MEGA328P
Post by: tha on October 09, 2017, 06:52:09 AM
12.5. I/O Memory
The I/O space definition ของ the device ได้แสดงใน the Register Summary.

All device I/Os และ peripherals ถูกวางตำแหน่งอยู่ใน the I/O space. All I/O locations อาจจะเข้าถึงโดยคำสั่ง the LD/LDS/LDD and ST/STS/STD instructions, เคลื่อนย้าย data ระหว่าง the 32 general purpose working registers และ the I/O space. I/O Registers ที่อยู่ใน the address range 0x00-0x1F เข้าถึงบิทโดยตรงโดยใช้ the SBI and CBI instructions. ใน registers เหล่านี้, ค่าของแต่ละบิทสามารถเช็คได้โดยใช้คำสั่ง the SBIS and SBIC instructions.

เมื่อใช้คำสั่ง the I/O specific commands IN and OUT, the I/O addresses 0x00-0x3F ต้องถูกใช้. เมื่อระบุตำแหน่ง I/O Registers ราวกับเป็น data space โดยใช้ LD and ST instructions, 0x20 ต้องถูกเพิ่มเข้าไปยัง addresses เหล่านี้. The device เป็น a complex microcontroller ด้วย peripheral units มีมากกว่าที่จะสามารถสนับสนุนให้อยู่ใน the 64 location ที่สงวนรักษาไว้ใน Opcode สำหรับคำสั่ง the IN and OUT instructions. สำหรับ the Extended I/O space จาก 0x60..0xFF ใน SRAM, มีเพียงคำสั่ง the ST/STS/STD and LD/LDS/LDD instructions สามารถถูกใช้.

เพื่อให้เข้ากันได้กับ mcu ในอนาคต, bits ที่สำรองไว้ควรถูกเขียนด้วยศูนย์ถ้าเข้าถึง. Reserved I/O memory addresses ไม่ควรที่จะถูกเขียน

บาง the Status Flags ถูกเคลียร์โดยการเขียน '1' ถึงมัน; นี้ถูกอธิบายใน the flag descriptions. จำไว้ว่า, ไม่เหมือน AVRs ส่วนมากอื่นๆ, the CBI and SBI instructions จะทำงานบนเพียง the specified bit, และดังนั้นจึงสามารถถูกใช้ใน registers ที่บรรจุ Status Flags เช่นนั้น. The CBI and SBI instructions ทำงานด้วยกันกับ registers 0x00-0x1F เพียงเท่านั้น.

The I/O และ Peripherals Control Registers จะถูกอธิบายใน sections ต่อมา.

Related Links
MEMPROG- Memory Programming on page 347
Register Summary on page 428
Instruction Set Summary on page 432

12.5.1. General Purpose I/O Registers
The device บรรจุ three General Purpose I/O Registers, General Purpose I/O Register 0/1/2 (GPIOR0/1/2). registers เหล่านี้สามารถถูกใช้สำหรับการเก็บ information ต่างๆ, และมันถูกใช้ให้เกิดประโยชน์โดยเฉพาะเพื่อการเก็บ global variables และ Status Flags. General Purpose I/O Registers ที่อยู่ใน the address range 0x00 - 0x1F เข้าถึงบิทโดยตรงโดยใช้คำสั่ง the SBI, CBI, SBIS, and SBIC instructions.
Title: Re: Arduino MEGA328P
Post by: tha on October 09, 2017, 07:55:08 AM
arduino นี่มันใช้ตัวไหนเป็น compiler นะ avr8-gnu-toolchain ใช่หรือเปล่า ลองเขียนเป็นแบบเซทรีจีสเตอร์ก็ได้นี่ ทำเป็นไฟกระพริบก็ได็ เรื่องนี้เป็นเรื่อง I/O PORT แต่ไม่ถึงซักที ลองเอาไปดูก่อน รีจีสเตอร์ดูตามลิ้งค์นี้ก็ได้ http://www.thaiembedded.com/blog/?p=204 (http://www.thaiembedded.com/blog/?p=204)

ตัวอย่างไฟกระพริบที่ผมทำครับ http://www.mediafire.com/file/o3zfxsns0l55pyp/blink%282%29.rar (http://www.mediafire.com/file/o3zfxsns0l55pyp/blink%282%29.rar)

บอร์ด arduino DUE ตัวนี้เป็น ARM Cortex-M3 ไม่ใช่เหรอ ลอง add บอร์ดเข้ามา ไม่เห็นมี compiler gcc arm gnu toolchain เพิ่มเข้ามาเลย ตัวนี้ใช้ compiler ตัวไหนคอมไพล์กัน งง
(พิมพ์ชักจะคล่องแล้ว ค่อยยังชั่ว)
Title: Re: Arduino MEGA328P
Post by: tha on October 10, 2017, 08:15:34 AM
ทดลองทำ switch เปิดไฟ ของผมใช้ R pull up ภายนอก ก็ใช้ได้ครับ
http://www.mediafire.com/file/cf9zuryzzrxtrmc/switch%282%29.rar (http://www.mediafire.com/file/cf9zuryzzrxtrmc/switch%282%29.rar)
Title: Re: Arduino MEGA328P
Post by: tha on October 11, 2017, 07:48:32 AM
search ไป search มา เจอ stm32 มาทำเป็น arduino ได้ เลยลองเอา stm32f4-discovery เก่าเก็บที่ขายไม่ออกมาลองดูหน่อย ก็ไฟกระพริบได้ครับ  :)

http://thebcfactor.net/electronics/stm32-microcontrollers (http://thebcfactor.net/electronics/stm32-microcontrollers)

http://www.arduinotechs.com/article/12/%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87-stm32-arduino-%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B8%87%E0%B8%B2%E0%B8%99%E0%B8%A3%E0%B9%88%E0%B8%A7%E0%B8%A1%E0%B8%81%E0%B8%B1%E0%B8%9A-arduino-ide (http://www.arduinotechs.com/article/12/%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87-stm32-arduino-%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B8%87%E0%B8%B2%E0%B8%99%E0%B8%A3%E0%B9%88%E0%B8%A7%E0%B8%A1%E0%B8%81%E0%B8%B1%E0%B8%9A-arduino-ide)

โปรแกรมไฟกระพริบ http://www.mediafire.com/file/3s6qq74752oj80y/blink_stm32f4.ino (http://www.mediafire.com/file/3s6qq74752oj80y/blink_stm32f4.ino)
Title: Re: Arduino MEGA328P
Post by: tha on October 11, 2017, 12:14:56 PM
มาลองกับบอร์ด ET-STM32F103RB บ้าง ปรากฎว่า compile ได้บ้างไม่ได้บ้าง ลงโปรแกรมผ่าน serial port ก็ไม่ได้ ลงผ่าน usb port ก็ไม่เป็น 
ผ่านๆกันไปก่อน จะได้ขึ้น eeprom arduino mega328p กันต่อ
Title: Re: Arduino MEGA328P
Post by: tha on October 11, 2017, 04:37:05 PM
Quoteมาลองกับบอร์ด ET-STM32F103RB บ้าง ปรากฎว่า compile ได้บ้างไม่ได้บ้าง ลงโปรแกรมผ่าน serial port ก็ไม่ได้ ลงผ่าน usb port ก็ไม่เป็น 
ผ่านๆกันไปก่อน จะได้ขึ้น eeprom arduino mega328p กันต่อ

ลง flash loader v1.1 ที่ได้มาจาก external harddisk ที่เก็บข้อมูลไว้ พอดีสาย usb มันชำรุด นึกว่ามันพังเสียแล้ว เปลี่ยนสาย usb ใหม่ก็ใช้ได้เป็นปกติ ข้อมูลเก่าที่เก็บไว้กลับคืนมาแล้ว

ลองเอาโปรแกรม HEX file โปรแกรมตัวอย่างไฟกระพริบโหลดผ่าน flash loader ผ่าน port rs232 usart1 เข้าไป ก็ทำงานได้แล้วครับ ไม่เสีย

ตอนแรกที่ไม่ได้คือ ผมไม่ได้กด reset หลังจากที่ on BOOT0 แล้ว ตอนนี้โอเครแล้ว ลอง arduino ide ก็ได้แล้ว
gcc arm gnu toolchain ผมลง version 4.8 2014q3 ตัวเก่า ไฟกระพริบก็ทำงานได้ปกติครับ
http://www.mediafire.com/file/s21wztvxvo3v9qn/Blink_stm32f103r.ino (http://www.mediafire.com/file/s21wztvxvo3v9qn/Blink_stm32f103r.ino)
Title: Re: Arduino MEGA328P
Post by: tha on October 11, 2017, 05:16:29 PM
ขอบคุณที่เป็นธุระให้และคำแนะนำครับ บอร์ดยังใช้ได้ เอาเก็บไว้ก่อน มาเอาเรื่อง atmega328p กันต่อ  >:(
Title: Re: Arduino MEGA328P
Post by: tha on October 11, 2017, 06:59:57 PM
12.6. Register Description

12.6.1. EEPROM Address Register High
เมื่อระบุที่อยู่ I/O Registers ราวกับเป็น data space โดยใช้ LD and ST instructions, การจัดให้มีระยะชดเชยต้องถูกใช้ เมื่อใช้ the I/O specific commands IN and OUT, the offset ถูกลดลง 0x20, เป็นผลให้ an I/O address offset อยูภายใน 0x00 - 0x3F.

(https://i.imgur.com/3GoPXeU.png)

12.6.2. EEPROM Address Register Low
เมื่อระบุที่อยู่ I/O Registers ราวกับเป็น data space โดยใช้ LD and ST instructions, การจัดให้มีระยะชดเชยต้องถูกใช้ เมื่อใช้ the I/O specific commands IN and OUT, the offset ถูกลดลง 0x20, เป็นผลให้ an I/O address offset อยูภายใน 0x00 - 0x3F.

(https://i.imgur.com/wO67BqW.png)

Bits 7:0 – EEARn: EEPROM Address
The EEPROM Address Registers – EEARH and EEARL ระบุ the EEPROM address ใน the 1K Bytes EEPROM space. The EEPROM data bytes ถูกระบุตำแหน่งเป็นแนวระหว่าง 0 and 255/511/511. ค่าเริ่มต้นของ EEAR ไม่ถูกกำหนด. ค่าที่เหมาะสมต้องถูกเขียนก่อนที่ the EEPROM ถูกเข้าถึง.

12.6.3. EEPROM Data Register
เมื่อระบุที่อยู่ I/O Registers ราวกับเป็น data space โดยใช้ LD and ST instructions, การจัดให้มีระยะชดเชยต้องถูกใช้ เมื่อใช้ the I/O specific commands IN and OUT, the offset ถูกลดลง 0x20, เป็นผลให้ an I/O address offset อยูภายใน 0x00 - 0x3F.

(https://i.imgur.com/GW3ykxF.png)

Bits 7:0 – EEDR[7:0]: EEPROM Data
สำหรับการทำการเขียน the EEPROM , the EEDR Register บรรจุด้วย the data ที่จะถูกเขียนไปยัง the EEPROM ในตำแหน่ง the address ที่กำหนดโดย the EEAR Register. สำหรับการทำการ the EEPROM , the EEDR บรรจุ the data ที่อ่านออกจาก the EEPROM ที่ the address ที่ให้โดย EEAR.

12.6.4. EEPROM Control Register
เมื่อระบุที่อยู่ I/O Registers ราวกับเป็น data space โดยใช้ LD and ST instructions, การจัดให้มีระยะชดเชยต้องถูกใช้ เมื่อใช้ the I/O specific commands IN and OUT, the offset ถูกลดลง 0x20, เป็นผลให้ an I/O address offset อยูภายใน 0x00 - 0x3F.

(https://i.imgur.com/EZi8CMd.png)

Bits 5:4 – EEPMn: EEPROM Programming Mode Bits [n = 1:0]
The EEPROM Programming mode การตั้งบิทเพื่อกำหนด programming action ที่จะถูกทริกเมื่อเขียนEEPE. มันอาจจะโปรแกรมข้อมูลในการทำงานครั้งเดียว one atomic operation (ลบค่าเก่าและโปรแกรมค่าใหม่) หรือแตกออกเป็น the Erase และ Write operations ในสองการทำงานที่แตกต่างกัน. The Programming times สำหรับโหมดที่แตกต่างกันถูกแสดงในตารางข้างล่างนี้. ขณะที่ EEPE ถูกเซท, การเขียนอะไรต่างๆไปยัง EEPMn จะถูกเพิกเฉย. ในระหว่างที่ reset, the EEPMn bits จะถูก reset ให้เป็น 0b00 ถึงแม้ว่า the EEPROM กำลังโปรแกรมยุ่งอยู่ก็ตาม.

(https://i.imgur.com/DXWEImg.png)

Bit 3 – EERIE: EEPROM Ready Interrupt Enable
การเขียน EERIE เป็นหนึ่งจะเปิดการใช้งาน the EEPROM Ready Interrupt ถ้า the I bit ใน SREG ถูกเซท. การเขียน EERIE ให้เป็นศูนย์จะปิดการใช้งาน the interrupt นี้. The EEPROM Ready interrupt จะทำให้เกิด a constant interrupt เมื่อ EEPE ถูกเคลียร์. The interrupt จะไม่เกิดขึ้นในระหว่างการเขียน EEPROM หรือ SPM.

Bit 2 – EEMPE: EEPROM Master Write Enable
The EEMPE bit เป็นตัวกำหนดว่า EEPE เมื่อเป็น '1' เป็นเหตุให้ the EEPROM ถูกเขียน. เมื่อ EEMPE เป็น '1', การเซท EEPE ภายใน four clock cycles จะเขียน data ไปยัง the EEPROM ที่ the selected address.

ถ้า EEMPE เป็น 0, การเซท EEPE จะไม่มีผลอะไร. เมื่อ EEMPE ถูกเขียนให้เป็น '1' โดย software, hardware จะเคลียร์บิทให้เป็น 0 หลังจาก four clock cycles. ดู the description of the EEPE bit สำหรับ an EEPROM write procedure.
Title: Re: Arduino MEGA328P
Post by: tha on October 12, 2017, 03:45:47 PM
Bit 1 – EEPE: EEPROM Write Enable
The EEPROM Write Enable Signal EEPE คือ the write strobe ไปยัง the EEPROM. เมื่อ address และ data ถูก set up อย่างถูกต้อง, the EEPE bit ต้องถูกเขียนให้เป็น '1' เพื่อเขียนค่าไปใน the EEPROM. The EEMPE bit ต้องถูกเขียนให้เป็น '1' ก่อน EEPE ถูกเขียนเป็น '1', มิฉะนั้นไม่มีการเขียน EEPROM เกิดขึ้น. ขบวนการดังต่อไปนี้ควรทำตามเมื่อเขียน the EEPROM (ลำดับ steps 3 and 4 ไม่สำคัญ):

1. คอยจนบิท EEPE เป็น 0.
2. คอยจนบิท SPMEN ใน SPMCSR เป็น 0.
3. เขียน EEPROM address ค่าใหม่ไปยัง EEAR (ซึ่งเป็นทางเลือก).
4. เขียน EEPROM data ค่าใหม่ไปยัง EEDR (optional).
5. เขียน '1' ไปยัง the EEMPE bit ในขณะเขียน 0 ไปยัง EEPE ใน EECR.
6. ภายใน four clock cycles หลังจากการเซทบิท EEMPE, เขียน '1' ไปยังบิท EEPE.

The EEPROM ไม่สามารถโปรแกรมได้ในระหว่างที่ CPU เขียนไปยัง the Flash memory. The software ต้องเช็คว่า the Flash programming ถูกทำให้เสร็จก่อนเริ่มเขียน EEPROM ใหม่. Step 2 มีความสัมพันธ์เพียงถ้า the software บรรจุ a Boot Loader ยอมให้ the CPU ทำการโปรแกรม the Flash. ถ้า the Flash ไม่เคยมีการอัฟเดทโดย the CPU, step 2 สามารถข้ามได้.

Caution:
An interrupt ในระหว่าง step 5 และ step 6 จะทำให้ the write cycle ล้มเหลว, ดังนั้น the EEPROM Master Write Enable จะ time-out. ถ้า an
interrupt routine ที่เข้าถึง the EEPROM กำลัง interrupt การเข้าถึง EEPROM อื่นๆ, the EEAR หรือ EEDR Register จะถูกโมดิฟาย, เป็นเหตุให้ the interrupted EEPROM access ล้มเหลว. ขอสนับสนุนให้เคลียร์ the Global Interrupt Flag ในทุกๆ steps เพื่อหลีกเลี่ยงปัญหาเหล่านี้.

เมื่อ the write access time ได้ผ่านไป, the EEPE bit จะถูกเคลียร์โดย hardware. The user software สามารถวนตรวจสอบบิทนี้และคอยจนเป็น 0 ก่อนที่จะเขียนไบท์ต่อไป. เมื่อ EEPE ถูกเซท, the CPU จะหยุดเป็นเวลา two cycles ก่อนปฏิบัติคำสั่งต่อไป
Title: Re: Arduino MEGA328P
Post by: tha on October 13, 2017, 06:22:17 AM
Bit 0 – EERE: EEPROM Read Enable
The EEPROM Read Enable Signal EERE คือ the read strobe ไปยัง the EEPROM. เมื่อ the correct address ถูก set up ใน the EEAR Register, the EERE bit ต้องถูกเขียนให้เป็น '1' เพื่อทริกการอ่าน the EEPROM. The EEPROM read access ใช้เวลาหนึ่งคำสั่ง, และข้อมูลที่ต้องการสามารถใช้ประโยชน์ได้ทันที. เมื่อ the EEPROM ถูกอ่าน, the CPU จะหยุดเป็นเวลา four cycles ก่อนปฏิบัติคำสั่งถัดไป.

The user ควรวนตรวจ the EEPE bit ก่อนเริ่ม the read operation. ถ้า a write operation อยู่ในระหว่างทำงานก้าวหน้าอยู่, มันจะไม่สามารถที่จะอ่าน the EEPROM, ไม่สามารถที่จะเปลี่ยน the EEAR Register ได้.

The calibrated Oscillator ถูกใช้เพื่อให้เวลา the EEPROM accesses. ดูตารางดังต่อไปนี้เป็นแบบอย่าง typical programming times สำหรับ EEPROM access จาก the CPU.

(https://i.imgur.com/qe6Jnla.png)

The following code examples แสดง one assembly และ one C function สำหรับการเขียนไปยัง the EEPROM. The examples ทึกทักเอาว่า
interrupts ถูกควบคุม (ตัวอย่างเช่นปิดการใช้งาน interrupts globally) ดังนั้นไม่มี interrupts ใดจะเกิดขึ้นในระหว่างการปฏิบัติของหน้าที่เหล่านี้. The examples ทึกทักเอาว่าไม่มี Flash Boot Loader ถูกนำเสนอใน the software อีกด้วย. ถ้า code เช่นนี้ถูกนำเสนอ, the EEPROM write function ต้องคอยสำหรับ ongoing SPM command เสร็จสิ้นอีกด้วย

(https://i.imgur.com/EJH4yfD.png)
(https://i.imgur.com/5E98lAG.png)

The next code examples แสดง one assembly และ one C function สำหรับการอ่านไปยัง the EEPROM. The examples ทึกทักเอาว่า interrupts ถูกควบคุม ดังนั้นไม่มี interrupts ใดจะเกิดขึ้นในระหว่างการปฏิบัติของหน้าที่เหล่านี้

(https://i.imgur.com/2o5QjlZ.png)
Title: Re: Arduino MEGA328P
Post by: tha on October 13, 2017, 07:50:33 AM
ลองเอาตัวอย่าง arduino ของ ETT ที่มีมากับบอร์ด arduino leonardo มาทำ ก็ทำงานได้ครับ (เอาโปรแกรมมาโชว์นิดโชว์หน่อยไม่ว่ากันนะ ETT)
http://www.mediafire.com/file/wxbrwakjug4o6k9/EEPROM_INTERNAL_RS232.ino (http://www.mediafire.com/file/wxbrwakjug4o6k9/EEPROM_INTERNAL_RS232.ino)

เดี๋ยวจะลองใช้ C program read write ที่เขาให้มาใน data sheet นี้แทนฟังชั่น read and write ของ arduino ลองดูว่าจะทำงานได้ใหม เขาว่ายังไงนะ ต้องไม่มี interrupt กับไม่มีการเขียน Flash Boot Loader ใน software ด้วยใช่มั๊ย งงๆอยู่ เดี๋ยวมาลองกัน

Title: Re: Arduino MEGA328P
Post by: tha on October 13, 2017, 09:07:06 AM
เฮ อย่างนี้ก็ได้ด้วย ใช้ register ไปเลยก็ โอเคร http://www.mediafire.com/file/ffccie3v3zxn536/EEPROM_register_RS232.ino (http://www.mediafire.com/file/ffccie3v3zxn536/EEPROM_register_RS232.ino)

ตัวอย่างลองย้ายไปเขียน eeprom ที่ address 512 เพื่อที่จะไม่ต้องเขียนลบซ้ำๆที่ address 0 จะได้ใช้ไปนานๆ eeprom นี่ทนเขียนลบ 100000 ครั้งใช่มั๊ย อย่างนี้เข้าใจถูกต้องใช่หรือเปล่า?
Title: Re: Arduino MEGA328P
Post by: tha on October 14, 2017, 12:21:35 PM
อยากรู้ค่าบิทค่ารีจีสเตอร์ของ atmega32u4 และอื่นๆ ดูที่ iom32u4.h ในนี้
C:\Program Files\Arduino\hardware\tools\avr\avr\include\avr 
ใช่หรือเปล่า ไฟล์นี้ arduino IDE คง include มาให้เราแล้วเราถึงกำหนดเป็นรีจีสเตอร์ได้ใช่มั๊ย กำลังค้นๆหาความสัมพันธ์ของมันอยู่  :)

ส่วนตัว compile ของ arduino due ARM Cortex-M3 อยู่ในนี้
C:\Users\Administrator\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1\bin
folder AppData มันซ่อนอยู่ ผมเลยหาไม่เห็นในตอนแรก พอแก้ใข folder ไม่ซ่อนก็เลยมองเห็นแล้วครับ
Title: Re: Arduino MEGA328P
Post by: tha on October 16, 2017, 06:44:47 AM
12.6.5. GPIOR2 – General Purpose I/O Register 2
เมื่อระบุที่อยู่ I/O Registers ราวกับเป็น data space โดยใช้ LD and ST instructions, การจัดให้มีระยะชดเชยต้องถูกใช้ เมื่อใช้ the I/O specific commands IN and OUT, the offset ถูกลดลง 0x20, เป็นผลให้ an I/O address อ๊อฟเซทอยูภายใน 0x00 - 0x3F.

(https://i.imgur.com/qzkqAc0.png)

12.6.6. GPIOR1 – General Purpose I/O Register 1
เมื่อระบุที่อยู่ I/O Registers ราวกับเป็น data space โดยใช้ LD and ST instructions, การจัดให้มีระยะชดเชยต้องถูกใช้ เมื่อใช้ the I/O specific commands IN and OUT, the offset ถูกลดลง 0x20, เป็นผลให้ an I/O address อ๊อฟเซทอยูภายใน 0x00 - 0x3F.

(https://i.imgur.com/ucp81v8.png)

12.6.7. GPIOR0 – General Purpose I/O Register 0
เมื่อระบุที่อยู่ I/O Registers ราวกับเป็น data space โดยใช้ LD and ST instructions, การจัดให้มีระยะชดเชยต้องถูกใช้ เมื่อใช้ the I/O specific commands IN and OUT, the offset ถูกลดลง 0x20, เป็นผลให้ an I/O address อ๊อฟเซทอยูภายใน 0x00 - 0x3F.

(https://i.imgur.com/mQVrqL6.png)

GPIO นี่ไม่เหมือนกับของ stm32 ของตัวนี้ใช้เก็บ status register หรืออะไรนะเหมือนจะอ่านเลยมาแล้ว  ::)
Title: Re: Arduino MEGA328P
Post by: tha on October 16, 2017, 04:12:07 PM
13. System Clock and Clock Options

13.1. Clock Systems and Their Distribution
ภาพต่อไปนี้แสดงให้เห็นถึง the principal clock systems ในอุปกรณ์(mcu) และการกระจายของมัน the clocks ทั้งหมดไม่จำเป็นต้องทำงานในเวลาที่กำหนด. เพื่อที่จะลดการใช้พลังงาน, the clocks ไปยัง modules ที่ไมได้ใช้งาน สามารถหยุดโดยใช้ sleep modes ต่างๆ. The clock systems ถูกอธิบายในส่วนดังต่อไปนี้.
The system clock frequency อ้างอิงถึง the frequency ที่เกิดจาก the System Clock Prescaler. All clock outputs จาก the AVR Clock Control Unit รันใน  frequency เดียวกัน.

(https://i.imgur.com/z8F0VTV.png)

13.1.1. CPU Clock – clkCPU
The CPU clock จะถูกส่งไปยังบางส่วนของระบบที่เกี่ยวข้องกับการทำงานของ AVR core. ตัวอย่างของโมดูลดังกล่าวคือ the General Purpose Register File, the Status Register and the data memory ที่ถือครอง the Stack Pointer. การหยุด the CPU clock จะยับยั้ง the core จากการทำงานทั่วไปและการคำนวณ

13.1.2. I/O Clock – clkI/O
The I/O clock ถูกใช้โดยส่วนใหญ่ของโมดูล I/O modules, เช่น Timer/Counters, SPI, and USART. The I/O clock ถูกใช้โดย the External Interrupt module อีกด้วย, แต่ the start condition detection ใน the USI module ถูกดำเนินการให้เสร็จแบบ asynchronously เมื่อ clkI/O หยุด, TWI address recognition ใน all sleep modes.

บันทึกไว้ว่า: ถ้า a level triggered interrupt ถูกใช้สำหรับการ wake-up จาก Power-down, the required level ต้องถูกยืดนานพอที่ the MCU จะเสร็จการ the wake-up เพื่อ trigger the level interrupt. ถ้า the level หายไปก่อน the end of the Start-up Time, the MCU จะยังคง wake up, แต่จะไม่มี interrupt เกิดขึ้น. The start-up time ถูกกำหนดโดย the SUT and CKSEL Fuses.
.
13.1.3. Flash Clock – clkFLASH
The Flash clock ควบคุมการทำงานของ the Flash interface. The Flash clock ทำงานโดยปกติพร้อม ๆ กันกับ the CPU clock.

13.1.4. Asynchronous Timer Clock – clkASY
The Asynchronous Timer clock ยอมให้ Asynchronous Timer/Counters ถูกให้สัณญานนาฬิกาโดยตรงจาก an external clock หรือ an external 32kHz clock crystal. The dedicated clock domain เฉพาะของมันช่วยให้สามารถใช้ Timer/Counter นี้เป็น a real-time counter แม้ว่าอุปกรณ์จะอยู่ในโหมดสลีป

13.1.5. ADC Clock – clkADC
The ADC ถูกจัดให้มีด้วย a dedicated clock domain เฉพาะของมัน. นี้ยอมให้หยุด the CPU and I/O clocks เพื่อที่จะลด noise ที่เกิดโดย digital circuitry. นี้ทำให้  ADC conversion results แม่นยำขึ้น.
Title: Re: Arduino MEGA328P
Post by: tha on October 17, 2017, 07:32:00 AM
13.2. Clock Sources
The device มีตัวเลือกแหล่งสัญญานนาฬิกาต่อไปนี้, สามารถเลือกได้โดย Flash Fuse bits ตามที่แสดงข้างล่างนี้. The clock จากแหล่งที่เลือกเป็นอินพุทให้กับ the AVR clock generator, และถูกส่งไปยัง modules ที่เหมาะสม

(https://i.imgur.com/UcV8eM2.png)

13.2.1. Default Clock Source(แหล่งสัญญาณนาฬิกาเริ่มต้น)
The device ถูกจัดส่งด้วย with internal RC oscillator ที่ 8.0MHz และด้วย the fuse CKDIV8 ถูกโปรแกรม, ส่งผลให้ได้ 1.0MHz system clock. The startup time ถูกตั้งค่าให้เป็นค่าสูงสุดและเปิดใช้งานช่วงเวลาหมดเวลา: CKSEL=0010, SUT=10, CKDIV8=0. การตั้งค่าเริ่มต้นนี้ช่วยให้มั่นใจว่าผู้ใช้ทุกคนสามารถทำการตั้ง clock source ที่ต้องการของเขาได้โดยใช้ programming interface ที่มีอยู

13.2.2. Clock Startup Sequence
clock source ใดๆก็ต้องการ VCC ที่เพียงพอเพื่อเริ่มต้นการสั่นและจำนวนรอบการสั่นที่น้อยที่สุดก่อนที่มันจะสามารถพิจารณาว่ามีความเสถียร

เพื่อให้แน่ใจว่า VCC เพียงพอ, the device จะปล่อย an internal reset ที่มี a time-out delay (tTOUT) หลังจาก the device reset ถูกปลดเปลื้องโดยแหล่งการรีเซ็ตอื่น ๆ ทั้งหมด. ดูลิงค์ที่เกี่ยวข้องสำหรับคำอธิบายเกี่ยวกับ the start conditions สำหรับ the internal reset. The delay (tTOUT) เป็นเวลาจาก the Watchdog Oscillator และจำนวนรอบใน the delay ถูกตั้งโดย the SUTx and CKSELx fuse bits. The selectable delays ถูกแสดงในตารางข้างล่าง. The frequency ของ the Watchdog Oscillator เป็นขึ้นอยู่กับแรงดันไฟฟ้า

(https://i.imgur.com/8WCXj1Y.png)

วัตถุประสงค์หลักของการหน่วงเวลาคือการเก็บ the device ไว้ใน reset จนกระทั่งมันถูกจ่ายด้วย VCC ขั้นต่ำสุด. The delay จะไม่ตรวจสอบ the actual voltage, ดังนั้นจึงจำเป็นต้องเลือก a delay ยาวนานกว่า the VCC rise time. ถ้าอย่างนี้ไม่สามารถเป็นได้, an internal หรือ external Brown-Out Detection circuit ควรถูกใช้. A BOD circuit จะทำให้แน่ใจได้ว่า VCC เพียงพอก่อนปล่อยรีเซ็ตและสามารถปิดใช้งาน the time-out delay. ปิดการใช้งาน the time-out delay โดยไม่ใช้ a Brown-Out Detection circuit ไม่แนะนำให้ใช้.

The oscillator จำเป็นต้องสั่นเป็นจำนวนรอบขั้นต่ำสุดก่อน the clock ถูกพิจารณาว่ามีความเสถียร. An internal ripple counter ตรวจสอบ the oscillator output clock, และให้ the internal reset ทำงานเป็นจำนวนรอบสัญญานนาฬิกาที่กำหนด. The reset ดังนั้นถูกปลดเปลื้องและ the device จะเริ่มต้นการปฏิบัติงาน. The recommended oscillator start-up time ขึ้นอยู่กับ the clock type, และแตกต่างกันไปจาก 6 cycles สำหรับ an externally applied clock จนถึง 32K cycles สำหรับ a low frequency crystal.

The start-up sequence ของ the clock เพิ่มเข้ามาทั้ง the time-out delay และ the start-up time เมื่อ the device starts up จาก reset. เมื่อ starting up จาก Power-save หรือ Power-down mode, VCC จะถือว่าอยู่ในระดับที่เพียงพอและมีเพียง the start-up time เท่านั้นที่ถูกเพิ่มเข้ามา.
Title: Re: Arduino MEGA328P
Post by: tha on October 17, 2017, 12:16:00 PM
13.2.3. Low Power Crystal Oscillator
Pins XTAL1 and XTAL2 เป็นอินพุตและเอาต์พุตตามลำดับของ an inverting amplifier ซึ่งสามารถกำหนดค่าสำหรับใช้เป็น an On-chip Oscillator, ดังแสดงในรูปด้านล่าง. ทั้ง a quartz crystal หรือ a ceramic resonator อาจถูกใช้.

C1 และ C2 ควรมีค่าเท่ากันเสมอทั้งสำหรับ crystals และ resonators. ค่าที่ดีที่สุดของ the capacitors ขึ้นอยู่กับ the crystal หรือ resonator ในการใช้, ในหมู่ของ stray capacitance, และ the electromagnetic noise of the environment. บางแนวทางเบื้องต้นสำหรับการเลือกใช้ capacitors สำหรับใช้กับ crystals ถูกให้ไว้ในตารางถัดไป. สำหรับ ceramic resonators, the capacitor values ที่ให้ไว้โดยผู้ผลิตควรถูกใช้.

(https://i.imgur.com/J1yyeWZ.png)
Title: Re: Arduino MEGA328P
Post by: tha on October 17, 2017, 02:21:47 PM
13.3. Low Power Crystal Oscillator
Crystal Oscillator นี้เป็น a low power oscillator, ซึ่งลด voltage swing ของ the XTAL2 output. มันให้การใช้พลังงานต่ำสุด, แต่ไม่สามารถขับ clock inputs อื่นๆได้, และอาจมีความไวต่อสัญญานรบกวนใน noisy environments มากขึ้นด้วย ในกรณีเหล่านี้, โปรดดู Full Swing Crystal Oscillator.

The crystal ควรถูกต่อตามที่อธิบายใน Clock Source Connections.

The Low Power Oscillator สามารถทำงานได้ในโหมดที่แตกต่างกันสามแบบ, ซึ่งแต่ละแบบเหมาะสำหรับ a specific frequency range. The operating mode ถูกเลือกโดย the fuses CKSEL[3:1], ดังแสดงในตารางต่อไปนี้:

(https://i.imgur.com/OEir2DR.png)

Note(บันทึก):
1. ถ้าความถี่ของคริสตัลเกินข้อกำหนดของอุปกรณ์ (ขึ้นอยู่กับ VCC), the CKDIV8 Fuse สามารถถูกโปรแกรมเพื่อที่จะหาร the internal frequency ด้วย 8 โดยต้องมั่นใจว่า the resulting divided clock สอดคล้องกันกับ the frequency specification ของ the device.
2. นี้คือการเซท CKSEL ที่แนะนำสำหรับช่วงความถี่ที่ต่างกัน
3. ตัวเลือกนี้ไม่ควรใช้กับ crystals, ควรใช้กับเพียง ceramic resonators เท่านั้น

The CKSEL0 Fuse พร้อมกันกับ the SUT[1:0] Fuses เลือก the start-up times, ดังแสดงในตารางต่อไปนี้:

(https://i.imgur.com/GRCTFZS.png)

Note(บันทึก):
1. ตัวเลือกเหล่านี้ควรใช้เพียงเมื่อไม่ทำงานใกล้กันกับความถี่สูงสุดของอุปกรณ์และเฉพาะในกรณีที่ความเสถียรของความถี่ที่ start-up ไม่สำคัญสำหรับแอพพลิเคชัน ตัวเลือกเหล่านี้ไม่เหมาะสำหรับคริสตัล
2.  ตัวเลือกเหล่านี้มีความมุ่งหมายไว้สำหรับใช้กับ ceramic resonators และจะทำให้แน่นอนว่ามี frequency stability ที่ start-up. มันสามารถใช้กับ crystals ได้อีกด้วยเมื่อไม่ทำงานใกล้ถึง the maximum frequency ของ the device, และถ้า frequency stability ที่ start-up ไม่สำคัญสำหรับ the application.
Title: Re: Arduino MEGA328P
Post by: tha on October 17, 2017, 04:14:43 PM
13.4. Full Swing Crystal Oscillator
Crystal Oscillator นี้เป็น a full swing oscillator, พร้อมด้วย rail-to-rail swing บน the XTAL2 output.  นี้เป็นประโยชน์สำหรับการขับ clock inputs อื่นๆและใน noisy environments. The current consumption ที่สูงกว่าของ the Low Power Crystal Oscillator. จำไว้ว่า the Full Swing Crystal Oscillator จะทำงานได้กับเพียง VCC=2.7-5.5V เท่านั้น

บางแนวทางเบื้องต้นสำหรับการเลือก capacitors สำหรับใช้กับ crystals ถูกให้ไว้ใน Table 13-6. The crystal ควรถูกต่อตามที่อธิบายไว้ใน Clock Source Connections".

The operating mode จะถูกเลือกขึ้นอยู่กับ the fuses CKSEL[3:1] ดังแสดงในตาราง:

(https://i.imgur.com/yN0v2DF.png)

Note(บันทึก):
1. ถ้าความถี่ของคริสตัลเกินกว่าข้อกำหนดของอุปกรณ์ (ขึ้นอยู่กับ VCC), the CKDIV8 Fuse สามารถถูกโปรแกรมเพื่อที่จะหาร the internal frequency ด้วย 8. โดยต้องแน่ใจว่า the resulting divided clock สอดคล้องกันกับ the frequency specification ของ the device

สำหรับ the Crystall Oscillator connections ดูที่ Low Power Crystal Oscillator.

(https://i.imgur.com/ND8S5zq.png)

Note(บันทึก):
1. ตัวเลือกเหล่านี้ควรใช้เพียงเมื่อไม่ทำงานใกล้ถึงความถี่สูงสุดของอุปกรณ์และเฉพาะในกรณีที่ความเสถียรของความถี่ที่ start-up ไม่สำคัญสำหรับแอพพลิเคชัน ตัวเลือกเหล่านี้ไม่เหมาะสำหรับคริสตัล
2.  ตัวเลือกเหล่านี้มีความมุ่งหมายไว้สำหรับใช้กับ ceramic resonators และจะทำให้แน่นอนว่ามี frequency stability ที่ start-up. มันสามารถใช้กับ crystals ได้อีกด้วยเมื่อไม่ทำงานใกล้ถึงกับ the maximum frequency ของ the device, และถ้า frequency stability ที่ start-up ไม่สำคัญสำหรับ the application.


วันนี้อากาศคลึ้มฟ้าคลึ้มฝน เลยแปลได้เยอะหน่อย ถ้าวันไหนแดดออกก็จะทำไม่ได้อย่างนี้เพราะร้อน คงเหตุนี้กระมังเมืองไทยถึงไม่เจริญทางด้านวัตถุเหมือนประเทศโซนหนาวมีหิมะตก  >:(
Title: Re: Arduino MEGA328P
Post by: tha on October 18, 2017, 08:49:55 AM
13.5. Low Frequency Crystal Oscillator
The Low-frequency Crystal Oscillator เหมาะสำหรับใช้กับ a 32.768kHz watch crystal. เมื่อเลือก crystals, load capacitance และ crystal's Equivalent Series Resistance (ESR) ต้องถูกคำนึงถึง. ค่าทั้งสองนี้ถูกระบุไว้โดย the crystal vendor. The oscillator นี้เหมาะสำหรับ very low
power consumption, และดังนั้นเมื่อเลือก crystals, การพิจารณาถึง the Maximum ESR Recommendations:

(https://i.imgur.com/lfRqVZ5.png)

Note:
1. Maximum ESR เป็นค่าโดยทั่วไปขึ้นอยู่กับคุณลักษณะ

The Low-frequency Crystal Oscillator จัดให้มี an internal load capacitance ที่แต่ละ TOSC pin:

(https://i.imgur.com/PlJ1eI1.png)

The capacitance (Ce+Ci) ที่ต้องหารที่แต่ละ TOSC pin สามารถคำนวณได้โดยใช้:
(https://i.imgur.com/JoB0I15.png)
.
where:
• Ce - คือ optional external capacitors ดังอธิบายใน Figure 13-2.
• Ci - คือ the pin capacitance ในตารางข้างบน.
• CL - คือ the load capacitance สำหรับ a 32.768kHz crystal ที่ระบุไว้โดย the crystal vendor.
• CS - คือ the total stray capacitance ของ one TOSC pin.

Crystals ที่กำหนด a load capacitance (CL) สูงกว่า 6pF ต้องใช้ external capacitors ดังที่อธิบายใน Low Power Crystal Oscillator.

The Low-frequency Crystal Oscillator ต้องถูกเลือกโดยการเซท the CKSEL Fuses เป็น 0110 หรือ 0111.

(https://i.imgur.com/35mJmOB.png)

Note(จำไว้ว่า):
1. ตัวเลือกนี้ควรใช้เฉพาะเมื่อ frequency stability ที่ start-up ไม่สำคัญสำหรับ the application Start-up times ถูกกำหนดโดย the SUT Fuses ดังแสดงในตารางต่อไปนี้

(https://i.imgur.com/9d6ADFu.png)
Title: Re: Arduino MEGA328P
Post by: tha on October 18, 2017, 11:10:07 AM
13.6. Calibrated Internal RC Oscillator
โดยเริ่มต้น, the Internal RC Oscillator จัดเตรียมให้มี an 8.0MHz clock. แม้ว่าขึนอยู่กับ voltage และ temperature, clock นี้สามารถปรับเทียบได้อย่างแม่นยำโดยผู้ใช้. The device ถูกส่งออกพร้อมด้วย the CKDIV8 Fuse ถูกโปรแกรม

This clock อาจจะถูกเลือกเป็น the system clock โดยการโปรแกรม the CKSEL Fuses ดังแสดงในตารางต่อไปนี้. ถ้าเลือก, มันจะทำงานโดยไม่มีส่วนประกอบภายนอก. ในระหว่างที่ reset, hardware จะโหลดค่าการสอบเทียบที่โปรแกรมตั้งไว้ล่วงหน้าลงใน OSCCAL Register และด้วยเหตุนี้การปรับเทียบ RC Oscillator จึงเป็นไปโดยอัตโนมัติ

โดยการเปลี่ยน the OSCCAL register จากซอฟท์แวร์(SW), เป็นไปได้ที่จะได้รับความแม่นยำในการสอบเทียบที่สูงขึ้นกว่าโดยใช้ the factory calibration

เมื่อ Oscillator นี้ถูกใช้เป็น the chip clock, the Watchdog Oscillator จะยังคงถูกใช้สำหรับ the Watchdog Timer และสำหรับ the Reset Time-Out. สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ the pre-programmed calibration value.

(https://i.imgur.com/mIf372w.png)

Note:
1. ถ้าความถี่ 8MHz เกินข้อกำหนดของ the device (ขึ้นอยู่กับ VCC), the CKDIV8 Fuse สามารถได้รับการตั้งโปรแกรมเพื่อหาร the internal frequency ด้วย 8.
2. อุปกรณ์ถูกจัดส่งพร้อมกับตัวเลือกนี้ที่เลือกไว้

เมื่อ Oscillator ถูกเลือก, start-up times ถูกกำหนดโดย the SUT Fuses:

(https://i.imgur.com/kP9ypDa.png)
Title: Re: Arduino MEGA328P
Post by: tha on October 18, 2017, 12:49:06 PM
ลองทำตามในตัวอย่างใน arduino IDE ตัวอย่าง LiquidCystal ใช้กับ LCD 16x2 ก็ง่ายดี เสียบสายถูกก็ใช้ได้เลย แต่เราไม่รู้การทำงานของ library วันหลังว่าจะลองไล่เช็คดู เผื่อจะเขียน library เป็น

(https://i.imgur.com/V1esKn3.jpg?2)
Title: Re: Arduino MEGA328P
Post by: tha on October 18, 2017, 02:03:21 PM
13.7. 128kHz Internal Oscillator
The 128kHz internal Oscillator คือ a low power Oscillator จัดให้มี a clock of 128kHz. The frequency คือระบุที่ 3V and 25°C. clock นี้อาจถูกเลือกเป็น the system clock โดยการโปรแกรม the CKSEL Fuses ให้เป็น '0011':

(https://i.imgur.com/b6gXrTg.png)

Note:
1. The 128kHz oscillator เป็น a very low power clock source, และไม่ถูกออกแบบสำหรับ high accuracy.

เมื่อ Oscillator นี้ถูกเลือก, start-up times ถูกกำหนดโดย the SUT Fuses:

(https://i.imgur.com/ucDD8ud.png)
Title: Re: Arduino MEGA328P
Post by: tha on October 18, 2017, 02:51:50 PM
13.8. External Clock
หากต้องการขับ the device จาก an external clock source, ควรใช้ EXTCLK ในการขับเคลื่อนดังแสดงในรูปด้านล่าง. หากรัน the device ด้วย an external clock, the CKSEL Fuses ต้องถูกโปรแกรมเป้น '0000':

(https://i.imgur.com/FXP41ti.png)

Note:
1. ถ้าความถี่ crytal frequency เกินข้อกำหนดของ the device (ขึ้นอยู่กับ VCC), the CKDIV8 Fuse สามารถได้รับการตั้งโปรแกรมเพื่อหาร the internal frequency ด้วย 8. ต้องมั่นใจว่า the resulting divided clock สอดคล้องกันกับ the frequency specification of the device.

(https://i.imgur.com/Wf8sDQj.png)

เมื่อ Oscillator นี้ถูกเลือก, start-up times ถูกกำหนดโดย the SUT Fuses:

(https://i.imgur.com/wcXN21U.png)
(https://i.imgur.com/hreAYUQ.png)

เมื่อใช้ an external clock, จะต้องหลีกเลี่ยงการเปลี่ยนแปลงโดยทันทีใน the applied clock frequency เพื่อให้แน่ใจว่าการทำงานของ MCU มีความเสถียร. มีการเปลี่ยนแปลงความถี่มากกว่า 2% จากรอบนาฬิกาหนึ่งไปจนถึงรอบถัดไปอาจนำไปสู่พฤติกรรมที่คาดเดาไม่ได้. หากจำเป็นต้องเปลี่ยนแปลงมากกว่า 2%, ตรวจสอบให้แน่ใจว่า MCU ถูกเก็บไว้ในรีเซ็ตในระหว่างการเปลี่ยนแปลง

The System Clock Prescaler สามารถถูกใช้เพื่อทำให้สำเร็จผลของการ run-time changes ของ the internal clock frequency ในขณะที่ยังมั่นใจว่าการทำงานมีความมั่นคง
Title: Re: Arduino MEGA328P
Post by: tha on October 19, 2017, 06:33:29 AM
13.9. Timer/Counter Oscillator
The device นี้ใช้ the same(เดียวกัน) crystal oscillator สำหรับ Low-frequency Oscillator และ Timer/Counter Oscillator. ดู Low Frequency Crystal Oscillator สำหรับรายละเอียดเกี่ยวกับข้อกำหนดของ the oscillator และ crystal.

ในอุปกรณ์นี้, the Timer/Counter Oscillator Pins (TOSC1 and TOSC2) ใช้ร่วมกันกับ XTAL1 and XTAL2. เมื่อใช้ the Timer/Counter Oscillator, the system clock ต้องเป็นสี่เท่าของ the oscillator frequency นี้. เนื่องด้วยสิ่งนี้และการใช้ pin ร่วมกัน, the Timer/Counter Oscillator ถูกใช้เฉพาะเมื่อ the Calibrated Internal RC Oscillator ถูกเลือกให้เป็น system clock source.

การใช้ an external clock source กับ TOSC1 สามารถทำได้ถ้า the Enable External Clock Input bit ใน the Asynchronous Status Register
(ASSR.EXCLK) ถูกเขียนให้เป็น '1'. ดูรายละเอียดของ the Asynchronous Operation ของ Timer/Counter2 สำหรับรายละเอียดเพิ่มเติมในการเลือก external clock เป็น input แทนที่จะเป็น a 32.768kHz watch crystal.
Title: Re: Arduino MEGA328P
Post by: tha on October 19, 2017, 09:24:29 AM
13.10. Clock Output Buffer
The device สามารถส่งออก the system clock ไปบน the CLKO pin. เพื่อเปิดใช้งาน the output นี้, the CKOUT Fuse ต้องถูกโปรแกรม. mode นี้เหมาะเมื่อ the chip clock ถูกใช้เพื่อขับวงจรอื่นๆบน the system. The clock จะถูกส่งออกระหว่างการ reset อีกด้วย, และการทำงานตามปกติของ I/O pin จะถูกยกเลิก(ข้าม)เมื่อ the fuse นี้ถูกโปรแกรม  clock source ใดๆ, รวมทั้ง the internal RC Oscillator, สามารถถูกเลือกเมื่อ the clock ถูกส่งออกไปบน CLKO. ถ้า the System Clock Prescaler(รีจีสเตอร์ตัวหาร clock ใช่หรือเปล่า?) ถูกใช้, มันก็เป็น the divided(ที่หารแล้ว) system clock ที่ถูกส่งออก.

Title: Re: Arduino MEGA328P
Post by: tha on October 19, 2017, 10:49:49 AM
13.11. System Clock Prescaler
The device นี้มี a system clock prescaler, และ the system clock สามารถถูกหารโดยการกำหนดค่าให้ the Clock Prescale Register (CLKPR).
คุณลักษณะนี้สามารถใช้เพื่อลด the system clock frequency และ the power consumption เมื่อความต้องการสำหรับ processing power นั้นต่ำ. ซึ่งสามารถใช้ได้กับตัวเลือก clock source ทั้งหมด, และจะส่งผลต่อ the clock frequency ของ the CPU และ synchronous peripherals ทั้งหมด. clkI/O, clkADC, clkCPU, and clkFLASH ถูกหารโดย a factor ดังแสดงใน the CLKPR description.

เมื่อเปลี่ยนในระหว่างการตั้งค่า prescaler, the System Clock Prescaler ต้องตรวจสอบให้แน่ใจว่าไม่มีสัญญาณรบกวนเกิดขึ้นใน the clock system. ต้องแน่ใจอีกว่าไม่มีความถี่ตรงกลาง(intermediate frequency)ที่สูงกว่าทั้ง the clock frequency ที่ตรงกับค่าที่ตั้งไว่ก่อนหน้า, หรือ the clock frequency ที่ตรงกับที่ตั้งค่าใหม่. The ripple counter(ตัวนับที่กระเพื่อม)ที่ทำให้ the prescaler เป็นผลนั้นรันที่ the frequency ของ clock ที่ยังไม่ได้หาร( the undivided clock), ซึ่งอาจจะเร็วกว่า the CPU's clock frequency. ดังนั้นจึงไม่สามารถระบุสถานะของ the prescaler ได้ - ถึงแม้ว่ามันจะสามารถอ่านได้, เวลาที่แน่นอนที่ใช้ในการเปลี่ยนจาก clock division หนึ่งไปยังอีก clock division หนึ่งไม่สามารถคาดเดาได้อย่างแน่นอน จากช่วงเวลาที่ the Clock Prescaler Selection bits (CLKPS[3:0]) values ถูกเขียน, จะใช้เวลาระหว่าง T1 + T2 และ T1 + 2 * T2 ก่อนที่ the new clock frequency จะทำงาน. ในช่วงเวลานี้, two active clock edges ถูกสร้างขึ้น. Here, T1 คือ the previous(ก่อนหน้า) clock period, และ T2 คือ the period ที่ตรงกันกับ the new prescaler setting.

เพื่อหลีกเลี่ยงการเปลี่ยนของ clock frequency โดยไม่ได้ตั้งใจ, a special write procedure ต้องถูกปฏิบัติตามเพื่อเปลี่ยน the CLKPS bits:
1. เขียน the Clock Prescaler Change Enable (CLKPCE) bit เป็น '1' และบิทอื่นๆใน CLKPR เป็น 0:
CLKPR=0x80.
2. ภายใน four cycles, เขียนค่าที่ต้องการไปยัง CLKPS[3:0] ขณะที่เขียน 0 ไปยัง CLKPCE:
CLKPR=0x0N

Interrupts ต้องถูกปิดการใช้งานเมื่อกำลังเปลี่ยนการเซท prescaler เพื่อทำให้แน่ใจว่าขบวนการเขียนไม่ถูก interrupted.
Title: Re: Arduino MEGA328P
Post by: tha on October 19, 2017, 03:35:03 PM
13.12. Register Description

13.12.1. Oscillator Calibration Register

(https://i.imgur.com/Et76vlx.png)

Bits 7:0 – CALn: Oscillator Calibration Value [n = 7:0]
The Oscillator Calibration Register ถูกใช้สำหรับตัดแต่ง the Calibrated Internal RC Oscillator เพื่อลบ process variations ออกจาก the oscillator frequency. A pre-programmed calibration value จะถูกเขียนลงใน register นี้อย่างอัตโนมัติในระหว่างที่ chip reset, โดยให้ the Factory calibrated frequency ตามที่ระบุไว้ใน the Clock Characteristics section ของ Electrical Characteristics chapter.. The application software สามารถเขียน register นี้เพื่อเปลียน the oscillator frequency. The oscillator สามารถถูก calibrated ให้ได้กับ frequencies ดังที่ระบุไว้ใน the Clock Characteristics section ของ Electrical Characteristics chapter.. การ Calibration ออกนอกย่านนี้จะไม่รับประกัน.

โปรดทราบว่า oscillator นี้ถูกใช้ให้เวลาในการ EEPROM and Flash write accesses, และเวลาการเขียนเหล่านี้จะได้รับผลกระทบตามมา ถ้า the EEPROM หรือ Flash ถูกเขียน, อย่า calibrate ไปให้มากกว่า 8.8MHz.มิฉะนั้นการเขียน EEPROM หรือ Flash อาจล้มเหลว

The CAL7 bit จะกำหนด the range ของ operation สำหรับ the oscillator. การเซทบิทนี้เป็น 0 จะให้ the lowest frequency range, การเซทบิทนี้เป็น 1 จะให้ the highest frequency range. The two frequency ranges นี้จะทับซ้อนกัน, กล่าวคือการตั้งค่า OSCCAL = 0x7F ให้ความถี่ที่สูงกว่า OSCCAL = 0x80

บิต CAL [6: 0] ใช้เพื่อปรับความถี่ในช่วงที่เลือก(โดยบิท CAL7?) การตั้งค่า 0x00 ให้ค่าความถี่ต่ำสุดในช่วงนั้นและการตั้งค่า 0x7F จะให้ความถี่สูงสุดในช่วงนั้น
Title: Re: Arduino MEGA328P
Post by: tha on October 20, 2017, 04:23:13 AM
13.12.2. Clock Prescaler Register

(https://i.imgur.com/9mmiufN.png)

Bit 7 – CLKPCE: Clock Prescaler Change Enable
The CLKPCE bi tต้องถูกเขียนให้เป็นลอจิก 1 เพื่อเปิดใช้งานการเปลี่ยนของ the CLKPS bits. The CLKPCE bit ถูกอัฟเดทได้เพียงเมื่อบิทอื่นๆใน CLKPR ถูกเขียนเป็น 0 พร้อมกัน. CLKPCE ถูกเคลียร์โดยฮาร์ดแวร์ four cycles หลังจากที่มันถูกเขียนหรือเมื่อ CLKPS bits ถูกเขียน. การเขียน the CLKPCE bit ซ้ำภายใน time-out period นี้ จะไม่ยืด the time-out period, หรือจะไม่เคลียร์ the CLKPCE bit.

Bits 3:0 – CLKPSn: Clock Prescaler Select n [n = 3:0]
บิทเหล่านี้กำหนดแฟคเตอร์การหาร(the division factor) ระหว่าง the selected clock source และ the internal system clock. บิทเหล่านี้สามารถถูกเขียนขณะเวลารันเพื่อเปลี่ยน the clock frequency ให้เหมาะสมกับ the application requirements. ดังที่ตัวหารจะหาร the master clock ที่ส่งเข้าไปยัง the MCU, ความเร็วของ synchronous peripherals ทั้งหมดถูกลดลงเมื่อ a division factor ถูกใช้. The division factors ถูกให้ไว้ในตารางข้างล่างนี้.

The CKDIV8 Fuse กำหนดค่าเริ่มต้นของ the CLKPS bits. ถ้า CKDIV8 ไม่ได้ถูกโปรแกรม, the CLKPS bits จะถูกรีเซทเป็น "0000". ถ้า CKDIV8 ถูกโปรแกรม, CLKPS bits จะถูกรีเซทเป็น "0011", ให้ a division factor เป็น 8 ที่ start up. ควรใช้คุณลักษณะนี้หาก if the selected clock source มีค่าความถี่สูงกว่า the maximum frequency ของ the device ที่ the present operating conditions. โปรดทราบไว้ว่าค่าใด ๆสามารถเขียนลงใน the CLKPS bits โดยไม่ต้องคำนึงถึงการเซท the CKDIV8 Fuse. The Application software ต้องแน่ใจว่า a sufficient division factor ถูกเลือกถ้า the selected clock source มีค่าความถี่สูงกว่า the maximum frequency ของ the device ที่ the present operating conditions. The device ถูกส่งออกมาขายด้วยการโปรแกรม the CKDIV8 Fuse แล้ว.

(https://i.imgur.com/eNFG02z.png)
(https://i.imgur.com/74c4oW3.png)
Title: Re: Arduino MEGA328P
Post by: tha on October 20, 2017, 04:42:52 AM
มีพรายกระซิบให้ลองเปลี่ยน clock speed ดู  ;D
ดูใน TECH SPECS https://store.arduino.cc/usa/arduino-leonardo-with-headers (https://store.arduino.cc/usa/arduino-leonardo-with-headers)
เขาบอกว่า clock speed = 16 MHz เลยลองเปลี่ยนค่า prescaler ตามข้อมูลนี้
http://www.avrfreaks.net/forum/atmega48-how-set-system-clock-prescaler (http://www.avrfreaks.net/forum/atmega48-how-set-system-clock-prescaler)

ดูไฟกระพริบและ delay ที่หาร clock ด้วย 8 แล้วหาร clock ด้วย 1 สลับกัน หารด้วย 8 ก็จะช้าลง
http://www.mediafire.com/file/2g221q658rptcvm/blink1_clock.ino (http://www.mediafire.com/file/2g221q658rptcvm/blink1_clock.ino)
Title: Re: Arduino MEGA328P
Post by: tha on October 20, 2017, 05:01:39 AM
ถ้าดูที่ไฟล์ iom32u4.h ใน C:\Program Files\Arduino\hardware\tools\avr\avr\include\avr
CLKPCE มีค่าเท่ากับ 7 ในโปรแกรมเขียนอย่างนี้ก็หมายความว่าให้บิทที่ 7 ของรีจีสเตอร์ CLKPR เป็น 1 เพื่อ enable การเปลี่ยนค่าของ clock prescaler

QuoteCLKPR = (1 << CLKPCE); // enable a change to CLKPR
Title: Re: Arduino MEGA328P
Post by: tha on October 22, 2017, 07:37:08 AM
ตอนนี้สั่งซื้อตัวโปรแกรม http://www.ett.co.th/prod2010/ET-AVR/ET-AVR%20ISP%20mkII%20.html (http://www.ett.co.th/prod2010/ET-AVR/ET-AVR%20ISP%20mkII%20.html) ตัวนี้อยู่ จะมาดูสิว่าเราจะกำหนดเลือก clock source อย่างไร กำหนดที่ fuse bits ใช่หรือป่าว? ลองอ่านคู่มือดูก็ยังไม่เคลียร์ ต้องให้ได้ของจริงมาดูก่อน ใช้กับ avr studio 4.xx หรือใช้กับ arduino IDE ก็ได้มั๊ง?เห็นมีตัวเลือกอยู่

ตัวโปรแกรมนี้คงเหมาะสำหรับใครที่คิดจะทำบอร์ดเอง สามารถจะเลือกใส่ว่าจะให้มี clock เท่าไหร่ ตั้งแหล่ง clock source โปรแกรม bootloader ได้มั๊ย? เดี๋ยวได้ของมาก่อน จะได้มาลองว่าทำอะไรได้บ้างกัน
Title: Re: Arduino MEGA328P
Post by: tha on October 22, 2017, 08:11:55 AM
ท่านใดมีไอเดียจะทำอะไรหรือจะจ้างให้ผมทำก็ได้นะครับ ที่ es มี mcu avr เยอะแยะเลย แล้วแต่จะเลือกใช้
https://www.es.co.th/tabs.asp?keyword=avr&catc= (https://www.es.co.th/tabs.asp?keyword=avr&catc=)

คนจัดทำแผงวงจร pcb ก็มีแล้ว ใครมีไอเดียจะทำอะไร บอกมา  ;)
Title: Re: Arduino MEGA328P
Post by: tha on October 22, 2017, 08:26:55 AM
อยากได้ 2 เล่มนี้มาอ่าน จะได้แน่นๆ

http://www.appsofttech.com/store/product/view/%E0%B8%AB%E0%B8%99%E0%B8%B1%E0%B8%87%E0%B8%AA%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%80%E0%B8%82%E0%B8%B5%E0%B8%A2%E0%B8%99%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%84%E0%B8%A7%E0%B8%9A%E0%B8%84%E0%B8%B8%E0%B8%A1%E0%B9%84%E0%B8%A1%E0%B9%82%E0%B8%84%E0%B8%A3%E0%B8%AF_AVR_%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2_C_%E0%B9%80%E0%B8%A5%E0%B9%88%E0%B8%A1_1-19590643-th.html (http://www.appsofttech.com/store/product/view/%E0%B8%AB%E0%B8%99%E0%B8%B1%E0%B8%87%E0%B8%AA%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%80%E0%B8%82%E0%B8%B5%E0%B8%A2%E0%B8%99%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%84%E0%B8%A7%E0%B8%9A%E0%B8%84%E0%B8%B8%E0%B8%A1%E0%B9%84%E0%B8%A1%E0%B9%82%E0%B8%84%E0%B8%A3%E0%B8%AF_AVR_%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2_C_%E0%B9%80%E0%B8%A5%E0%B9%88%E0%B8%A1_1-19590643-th.html)

http://www.appsofttech.com/store/product/view/%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9B%E0%B8%A3%E0%B8%B0%E0%B8%A2%E0%B8%B8%E0%B8%81%E0%B8%95%E0%B9%8C%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B8%87%E0%B8%B2%E0%B8%99%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2_C_%E0%B8%81%E0%B8%B1%E0%B8%9A%E0%B9%84%E0%B8%A1%E0%B9%82%E0%B8%84%E0%B8%A3%E0%B8%84%E0%B8%AD%E0%B8%99%E0%B9%82%E0%B8%97%E0%B8%A3%E0%B8%A5%E0%B9%80%E0%B8%A5%E0%B8%AD%E0%B8%A3%E0%B9%8C_AVR_%E0%B9%80%E0%B8%A5%E0%B9%88%E0%B8%A1_2-19590698-th.html (http://www.appsofttech.com/store/product/view/%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9B%E0%B8%A3%E0%B8%B0%E0%B8%A2%E0%B8%B8%E0%B8%81%E0%B8%95%E0%B9%8C%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B8%87%E0%B8%B2%E0%B8%99%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2_C_%E0%B8%81%E0%B8%B1%E0%B8%9A%E0%B9%84%E0%B8%A1%E0%B9%82%E0%B8%84%E0%B8%A3%E0%B8%84%E0%B8%AD%E0%B8%99%E0%B9%82%E0%B8%97%E0%B8%A3%E0%B8%A5%E0%B9%80%E0%B8%A5%E0%B8%AD%E0%B8%A3%E0%B9%8C_AVR_%E0%B9%80%E0%B8%A5%E0%B9%88%E0%B8%A1_2-19590698-th.html)
Title: Re: Arduino MEGA328P
Post by: wlasoi on October 22, 2017, 01:31:51 PM
Quote from: tha on October 22, 2017, 08:26:55 AM
อยากได้ 2 เล่มนี้มาอ่าน จะได้แน่นๆ

http://www.appsofttech.com/store/product/view/%E0%B8%AB%E0%B8%99%E0%B8%B1%E0%B8%87%E0%B8%AA%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%80%E0%B8%82%E0%B8%B5%E0%B8%A2%E0%B8%99%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%84%E0%B8%A7%E0%B8%9A%E0%B8%84%E0%B8%B8%E0%B8%A1%E0%B9%84%E0%B8%A1%E0%B9%82%E0%B8%84%E0%B8%A3%E0%B8%AF_AVR_%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2_C_%E0%B9%80%E0%B8%A5%E0%B9%88%E0%B8%A1_1-19590643-th.html (http://www.appsofttech.com/store/product/view/%E0%B8%AB%E0%B8%99%E0%B8%B1%E0%B8%87%E0%B8%AA%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%80%E0%B8%82%E0%B8%B5%E0%B8%A2%E0%B8%99%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B8%84%E0%B8%A7%E0%B8%9A%E0%B8%84%E0%B8%B8%E0%B8%A1%E0%B9%84%E0%B8%A1%E0%B9%82%E0%B8%84%E0%B8%A3%E0%B8%AF_AVR_%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2_C_%E0%B9%80%E0%B8%A5%E0%B9%88%E0%B8%A1_1-19590643-th.html)

http://www.appsofttech.com/store/product/view/%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9B%E0%B8%A3%E0%B8%B0%E0%B8%A2%E0%B8%B8%E0%B8%81%E0%B8%95%E0%B9%8C%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B8%87%E0%B8%B2%E0%B8%99%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2_C_%E0%B8%81%E0%B8%B1%E0%B8%9A%E0%B9%84%E0%B8%A1%E0%B9%82%E0%B8%84%E0%B8%A3%E0%B8%84%E0%B8%AD%E0%B8%99%E0%B9%82%E0%B8%97%E0%B8%A3%E0%B8%A5%E0%B9%80%E0%B8%A5%E0%B8%AD%E0%B8%A3%E0%B9%8C_AVR_%E0%B9%80%E0%B8%A5%E0%B9%88%E0%B8%A1_2-19590698-th.html (http://www.appsofttech.com/store/product/view/%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9B%E0%B8%A3%E0%B8%B0%E0%B8%A2%E0%B8%B8%E0%B8%81%E0%B8%95%E0%B9%8C%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B8%87%E0%B8%B2%E0%B8%99%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2_C_%E0%B8%81%E0%B8%B1%E0%B8%9A%E0%B9%84%E0%B8%A1%E0%B9%82%E0%B8%84%E0%B8%A3%E0%B8%84%E0%B8%AD%E0%B8%99%E0%B9%82%E0%B8%97%E0%B8%A3%E0%B8%A5%E0%B9%80%E0%B8%A5%E0%B8%AD%E0%B8%A3%E0%B9%8C_AVR_%E0%B9%80%E0%B8%A5%E0%B9%88%E0%B8%A1_2-19590698-th.html)


http://www.nongnu.org/avr-libc/ 

ไม่จำเป็นก็ได้ ครับ! .. แนะนำ หาวิธีอ่าน/ศึกษา ตัวนี้ ครับ! นี่เป็น Core AVR อย่างแท้ จริง ทั้งหมดทั้งมวลคือ AVR libc นี่แหละ .. แรกๆ จะค่อนข้าง งง งวยๆพอสมควร ถ้าเข้าใจแล้สจะ โปร่ง โล่ง สบาย ครับ ที่จริงไม่ใช่เรื่องวไหลตัวหรือ พิสดารอะไร มันอยู่ใน Folder AVR Gcc นั่นแหละ! มันมาด้วยกันตั้งแต่แรก แต่ไม่ค่อยมีคนสนใจ

Title: Re: Arduino MEGA328P
Post by: tha on October 23, 2017, 07:31:29 AM
Quotehttp://www.nongnu.org/avr-libc/ 

ไม่จำเป็นก็ได้ ครับ! .. แนะนำ หาวิธีอ่าน/ศึกษา ตัวนี้ ครับ! นี่เป็น Core AVR อย่างแท้ จริง ทั้งหมดทั้งมวลคือ AVR libc นี่แหละ .. แรกๆ จะค่อนข้าง งง งวยๆพอสมควร ถ้าเข้าใจแล้สจะ โปร่ง โล่ง สบาย ครับ ที่จริงไม่ใช่เรื่องวไหลตัวหรือ พิสดารอะไร มันอยู่ใน Folder AVR Gcc นั่นแหละ! มันมาด้วยกันตั้งแต่แรก แต่ไม่ค่อยมีคนสนใจ

ขอบคุณคุณ wlasoi ครับสำหรับข้อมูล เดี๋ยวคงจะได้อ่านกัน ใครมีอะไรดีๆ คิดว่าเป็นประโยชน์ก็เอามาลงไว้นะครับ จะได้แน่น ผมก็ใหม่สำหรับ avr ก็ได้แต่แปลไปรู้ไป  ถ้ามีหนังสือภาษาไทยก็คงจะเร็วดี กันเหนียว:)
Title: Re: Arduino MEGA328P
Post by: tha on October 23, 2017, 07:55:38 AM
Quote13.2.1. Default Clock Source(แหล่งสัญญาณนาฬิกาเริ่มต้น)
The device ถูกจัดส่งด้วย with internal RC oscillator ที่ 8.0MHz และด้วย the fuse CKDIV8 ถูกโปรแกรม, ส่งผลให้ได้ 1.0MHz system clock. The startup time ถูกตั้งค่าให้เป็นค่าสูงสุดและเปิดใช้งานช่วงเวลาหมดเวลา: CKSEL=0010, SUT=10, CKDIV8=0. การตั้งค่าเริ่มต้นนี้ช่วยให้มั่นใจว่าผู้ใช้ทุกคนสามารถทำการตั้ง clock source ที่ต้องการของเขาได้โดยใช้ programming interface ที่มีอยู

มาว่าเรื่อง clock กันต่อ เขาบอกว่าเขาโปรแกรมตัว mcu มาแล้ว เป็น  internal RC oscillator 8.0MHz  และโปรแกรมหาร fuse CKDIV8 มาด้วย ทำให้ได้ system clock ที่ 1MHz ที่เริ่มต้น(default) ที่ส่งออกมาขาย คราวนี้ถ้าเราจะใช้ความถี่นี้ในการทำงานได้เราก็ทำได้ไม่ต้องมี crytal แต่ว่าถ้าเราทำวงจรใส่ crytal ไปอย่างเช่น 16MHz เราก็ต้องมาตั้ง clock กันใหม่ พวก start-up time ต่างๆด้วย ตั้งกันอย่างไรเดี๋ยวให้ได้ตัวโปรแกรม avr isp mkII มาก่อนคงได้รู้กันครับ
Title: Re: Arduino MEGA328P
Post by: tha on October 23, 2017, 12:24:38 PM
ดูในคู่มือของ คู่มือ ET-BASE ATMEGA64-128 R3  ใน http://www.ett.co.th/product/03A20.html (http://www.ett.co.th/product/03A20.html) ค่อนข้างจะสบสนหน่อย

(https://i.imgur.com/P8FlRA4.png)

ในนี่ก็มีเรื่องเซท bits fuse http://www.elecrom.com/configuring-avr-fuse-bits-for-clock-selection/ (http://www.elecrom.com/configuring-avr-fuse-bits-for-clock-selection/)
Title: Re: Arduino MEGA328P
Post by: tha on October 23, 2017, 04:15:21 PM
นี่ก็การเซท avr fuse bite
http://www.elecrom.com/avr-fuse-bits-settings/ (http://www.elecrom.com/avr-fuse-bits-settings/)

อย่างค่าเริ่มต้นที่เซทมาจากโรงงาน   มีค่า High byte fuse bits = 0x99 = 0b10011001
                                                  Low byte fuse bits = 0xE1 = 0b11100001

บิทไหนเป็นบิทไหนก็ดูเอา เอามาจากหน้า 348 section 31. MEMPROG- Memory Programming ของ data sheet atmega328p โน้นแหละ โดดไปโดดมา  ;D

(https://i.imgur.com/4Lvxpjf.png)
(https://i.imgur.com/gUbhw1e.png)
(https://i.imgur.com/94mWjoU.png)

เอะดูแล้วก็ไม่ตรงทั้งหมด ช่วยกันเช็คมั้ง  ;D
Title: Re: Arduino MEGA328P
Post by: tha on October 23, 2017, 05:09:33 PM
http://binaryupdates.com/setting-avr-fuse-bits/ (http://binaryupdates.com/setting-avr-fuse-bits/) อันนี้ก็อีก

CKSEL[3:0] ถ้าเป็น 0b0001 เป็น reserved ไม่ใช่เหรอ
                          0b0010 ถึงจะเป็น Calibrated Internal RC Oscillator

ดูที่ 13.2. Clock Sources

น่าจะเป็น 0xE2 มากกว่า ใน data sheet ถึงจะตรง
Title: Re: Arduino MEGA328P
Post by: tha on October 24, 2017, 04:54:41 AM
ดูใน data sheet แล้ว low byte เป็น 0x62 สิเพราะ CKDIV8 ถูกโปรแกรม high byte ก็เป็น 0xD9 ถึงจะตรงกับใน data sheet(ค่าเริ่มต้นจากโรงงาน(default))
Title: Re: Arduino MEGA328P
Post by: tha on October 24, 2017, 12:32:05 PM
http://www.123microcontroller.com/avr-codevision/How-to-Fuse-bits-AVR-setting (http://www.123microcontroller.com/avr-codevision/How-to-Fuse-bits-AVR-setting) อันนี้ก็ดี ของไทยเรา
Title: Re: Arduino MEGA328P
Post by: tha on October 24, 2017, 01:14:31 PM
จะเลือกใชแรงดันเท่าไหร่ความถี่เท่าไหร่ก็ดูที่ 32. Electrical Characteristics ของมัน ไม่จำเป็นต้อง 5V, 16MHz ก็ได้
http://www.123microcontroller.com/Basic-Microcontroller-Programming/hello-world-i-am-avr (http://www.123microcontroller.com/Basic-Microcontroller-Programming/hello-world-i-am-avr)

(https://i.imgur.com/FGgCu9K.png)

(https://i.imgur.com/09UfO1x.png)

(https://i.imgur.com/RSRixCR.png)
(https://i.imgur.com/3vTox2U.png)
Title: Re: Arduino MEGA328P
Post by: tha on October 29, 2017, 09:43:35 AM
อากาศที่กำแพงเพชรหนาวแล้ว ทางอื่นเป็นอย่างไรกันบ้าง หนาวอย่างนี้คงจะอ่านหนังสือได้เกือบทั้งวัน หนังสือ การเขียนโปรแกรมควบคุมไมโครคอนโทรลเลอร์ AVR ด้วยภาษา C กับ WinAVR C Compiler (AVR Book 1) ก็ได้มาแล้ว แต่ยังไม่ได้ตัวโปรแกรม AVR ISP mkII มาที่ไปรษณีย์แล้วยังไม่ได้ไปเอา

ตอนนี้โน๊ตบุ๊คผมลงทั้ง avr studio 4.19, Atmel Studio 6.2 ส่วนตัวคอมไพล์ก็ลงทั้ง winavr และ avr8-gnu-toolchain เลย จะได้ลองคอมไพล์ทั้ง 2 คอมไพล์เลอร์เลย arduinoด้วย คงต้องใช้เวลาศึกษาสักระยะ
http://www.atmel.com/tools/STUDIOARCHIVE.aspx (http://www.atmel.com/tools/STUDIOARCHIVE.aspx)

ว่าจะทำบอร์ดทดลอง AVR atmega328p-pu https://www.es.co.th/detail.asp?Prod=006503131 (https://www.es.co.th/detail.asp?Prod=006503131) จะทำแบบโล่งๆเลย เอา power supply อยู่นอกบอร์ด จะได้เปลี่ยน power supply เป็น 5v, 3.3v ได้ เปลียน clock ได้แค่เปลี่ยน crytal 16MHZ เป็น 20,12,10,8 MHz อย่างนี้ก็ flexible ดี ตอนนี้กำลังเขียนโปรแกรมลายวงจรอยู่ครับ

Title: Re: Arduino MEGA328P
Post by: tha on October 29, 2017, 12:38:37 PM
มีพรายกระซิบบอก ให้ลง avr studio 4.17 built666 แทน ส่วนมากใช้ตัวนี้กัน รับทราบ ปฏิบัติ ก็โอเครตามนั้นครับ (มือใหม่มีอะไรไม่ถูกต้อง โปรดชี้แนะ)  ;)
Title: Re: Arduino MEGA328P
Post by: tha on November 02, 2017, 03:45:42 PM
ได้มาแล้วครับ ET-AVR ISP mkII แต่ยังใช้ไม่เป็น ต้องศึกษาดูก่อน ตัวนี้ใช้กับ arduino IDE โปรแกรมลงบอร์ด ET-BASE AVR EASY32U4 ได้หรือเปล่า หรือใช้เฉพาะตอน burn bootloader อย่างเดียว แล้วถ้าใช้กับ AVR studio 4 ลงโปรแกรมลงใน ET-BASE AVR EASY32U4 ตัว bootloader ชอง arduino leonardo จะถูกลบไปหรือเปล่าครับ  :D
Title: Re: Arduino MEGA328P
Post by: tha on November 03, 2017, 01:36:06 PM
ตอนนี้ลองทำบอร์ดเอง ไม่ compatible กับ arduino UNO หรอก ไม่ใส่ IC power supply ลงในบอร์ดหรอก เผื่อเปลี่ยนเป็น 3.3v หรือใช้ถ่านไฟฉาย crytal ก็เปลี่ยนได้ง่ายๆอยู่แล้ว จะเปลี่ยนเป็น 20,16,10,8 MHz หรืออะไรก็ได้ ให้ได้กับ spec ของมันและเซท clock ให้ตรง และให้เข้ากับอุปกรณ์ pheriperal ของเราด้วย

บอร์ดที่ทำใช้ ATMEGA328P-PU DIP 28 ขา ลายปริ้นท์ก็ทำหน้าเดียวไปก่อน เลยกัดแผ่นปริ้นเอง(ยังไม่ได้จ้างใครทำแผ่นปริ้นท์ให้ ถ้ามีทำแบบ surface mount TQFP คงต้องได้อาศัยท่านๆผู้ชำนาญการทำให้) ตอนนี้ถ่ายแผ่นวงจรออกมาใส่กระดาษ A4 แล้วถ่ายเอกสารแผ่นใส A4 แล้วจะได้เอาแผ่นใสไปติดกับแผ่นปริ้นท์ เอาเตารีดน้าบ แล้วเอากรดกัดต่อไป (ตอนนี้รอแผ่นปริ้นท์อยู่)

(https://i.imgur.com/n4QNw5p.png)

(https://i.imgur.com/b8EMdNt.png)

(https://i.imgur.com/JktETO8.png)

วงจรครับ http://www.mediafire.com/file/vidj368618ykmae/ATMEGA328P2.pdf (http://www.mediafire.com/file/vidj368618ykmae/ATMEGA328P2.pdf)
Title: Re: Arduino MEGA328P
Post by: tha on November 03, 2017, 03:23:38 PM
นี่คือไฟล์บอร์ด atmega328p-pu รวมทั้ง library บน altium release 10 ครับ http://www.mediafire.com/file/88nu4itn7mi6yix/Altium_Projects.rar (http://www.mediafire.com/file/88nu4itn7mi6yix/Altium_Projects.rar)

ถ้าจะทำเป็นบอร์ด arduino uno ก็ใช้ ET-AVR ISP mkII ทำการ burn bootloader ทำใน Arduino IDE เสร็จแล้วเวลาโปรแกรมก็ใช้ usb to rs232 cp2102 ต่อ TX RX ถึงกัน แค่นี้ก็จะกลายเป็นบอร์ด arduino UNO แล้ใช่หรือเปล่าครับ
Title: Re: Arduino MEGA328P
Post by: tha on November 03, 2017, 07:32:26 PM
ทดลองบอร์ด  ET-BASE AVR EASY32U4 โดยใช้โปรแกรม AVR Studio 4.17 โดยใช้ร่วมกับตัวโปรแกรม ET-AVR ISP mkII ลองไปลองมาปรากฏว่าใช้ไม่ได้เงียบหายไปเลย โชว์ว่า  Entering programming mode.. FAILED! ตลอดหมายถึงอะไรท่าน ที่ตัว ET-AVR ISP mkII ไฟ ISP ก็ไม่ติดด้วย  :'(

(https://i.imgur.com/91c6Vgh.png)

http://www.mediafire.com/file/vwghd44mvgcmj6b/blink1.rar (http://www.mediafire.com/file/vwghd44mvgcmj6b/blink1.rar)
Title: Re: Arduino MEGA328P
Post by: tha on November 04, 2017, 03:57:36 PM
คงเป็นที่ เวลาปฺิดโปรแกรม AVR studio 4.17 แล้วเปิดใหม่ แล้ว fuse bit SPIEN มันหลุดไป คงต้องส่งบอร์ด ET-BASE AVR EASY32U4  ไปให้ทาง ETT เขาแก้ให้ ก็แก้เองไม่เป็นนิ  :P

ว่างๆก็ทำปริ้นท์ atmega328p-pu ไป แผ่นใสถ่ายเอกสารมันติดไม่ดีสักเท่าไหร่ เอาเตารีดน้าบนานไปลายปริ้นท์ก็ไหม้ เลยได้ผลงานออกมาไม่ดีสักเท่าไหร่ แต่ก็พอใช้งานได้ ได้ทำงานอดิเรกก็เพลินไปวัน ก็เหลือสั่งซื้ออุปกรณ์มาลง

(https://i.imgur.com/nXdlpUR.png)

(https://i.imgur.com/Fl6OVpF.png)

Title: Re: Arduino MEGA328P
Post by: wlasoi on November 04, 2017, 07:17:01 PM
Quote from: tha on November 02, 2017, 03:45:42 PM
ได้มาแล้วครับ ET-AVR ISP mkII แต่ยังใช้ไม่เป็น ต้องศึกษาดูก่อน ตัวนี้ใช้กับ arduino IDE โปรแกรมลงบอร์ด ET-BASE AVR EASY32U4 ได้หรือเปล่า หรือใช้เฉพาะตอน burn bootloader อย่างเดียว แล้วถ้าใช้กับ AVR studio 4 ลงโปรแกรมลงใน ET-BASE AVR EASY32U4 ตัว bootloader ชอง arduino leonardo จะถูกลบไปหรือเปล่าครับ  :D

ถ้าลง BootLoader ไว้แล้วห้ามจิ้ม ISP ใดๆลงไป ครับ เน่าทันที .. ต้อง Flash ใหม่ ซึ่งก็ไม่ยากหรอก
Title: Re: Arduino MEGA328P
Post by: tha on November 06, 2017, 09:39:58 AM
เน่าไปแล้วครับ ตอนผมลองโปรแกรมบอร์ด EASY32U4 กับ AVR studio 4.17 โดยใช้ ISP mkII เซท fuse bit ผมใช้ power supply 12v กับบอร์ด EASY32U4 ที่สายมันขาดใน ผมมารู้เมื่อวานนี้ตอนเอา power supply 12v ตัวนี้มาใช้กับมอเตอร์เจาะแผ่นปริ้นท์ มันติดๆดับๆเลยเช็ครู้ว่าสายมันขาดใน คงต้องส่งไปให้ทาง ETT ดูครับ
Title: Re: Arduino MEGA328P
Post by: tha on November 11, 2017, 03:34:58 PM
ได้บอร์ด ET-BASE AVR EASY32U4 คืนจากการส่งซ่อมมาแล้ว มาลองกับ AVR Studio 4.17 และ ET-AVR ISP mkII เลย โปรแกรมไฟกระพริบ พร้อมทั้งเซท Fuse Bit ไม่รู้ถูกต้องหรือเปล่า ยังไม่ค่อยแน่ใจ แต่ก็ทำงานได้ปกติแล้ว ไมรู้ bootloader ลบไปหรือเปล่า?อย่างนี้

(https://i.imgur.com/BUq0Emc.png)

(https://i.imgur.com/rx4CSEZ.png)

Title: Re: Arduino MEGA328P
Post by: tha on November 11, 2017, 04:10:49 PM
ลองใช้มืถือจับเวลาดูก็ตรงครับ พอเอา hex ไฟล์ bootloader ที่ทาง ETT ให้มาพร้อมกับบอร์ด โปรแกรมด้วย AVR Studio 4.17 กับ mkII ตั้ง fuse bit ตามที่ ETT ให้ข้อมูลมา บอร์ดก็กลับมาทำงานร่วมกับ arduino IDE ได้เหมือนเดิมครับ

นี้คือ fuse bit ที่ทาง ETT ให้มาครับ

(https://i.imgur.com/NGbLFVn.jpg)

(https://i.imgur.com/IlfFW9s.jpg)

ยังเป็นงงเรื่อง Fuse Bit  ???
Title: Re: Arduino MEGA328P
Post by: tha on November 11, 2017, 05:24:05 PM
พอดียังไม่ได้กด program fuse bit พอกดโปรแกรมไปแล้ว ขึ้น Entering programming Mode FAILED! เหมือนเดิม บอร์ดเงียบสนิทไปเลย ไม่รู้แก้ตรงไหน  :'(
http://www.mediafire.com/file/n93n7gzc3dsyn6j/bootloader.rar (http://www.mediafire.com/file/n93n7gzc3dsyn6j/bootloader.rar)
bootloader ของบอร์ด  ET-BASE AVR EASY32U4 ครับ
Title: Re: Arduino MEGA328P
Post by: wlasoi on November 11, 2017, 08:19:15 PM
ไปที่ Auto ครับ ตั้งลำดับการทำงาน .. Fuse bit  จะเป็นขั้นตอนสุดท้าย ..
Title: Re: Arduino MEGA328P
Post by: tha on November 12, 2017, 05:41:39 AM
บอร์ดเงียบไปแล้ว ไม่รู้เป็นไร คงต้องรอถามทาง ETT วันจันทร์

ดูแต่ data sheet ของ atmega328p ลืมดูของ 32u4 clock มันไม่เหมือนกันสักเท่าไหร่เพราะ 32u4 มันมี usb ด้วย
Title: Re: Arduino MEGA328P
Post by: tha on November 13, 2017, 01:12:36 PM
พอจะทราบสาเหตุของการเสียแล้วครับ น่าจะมาจาก clock selected มันไม่ต้องกลับบิทครับ ถ้าเราเลือกเป็น Low Power Crystal Oscillator บิท CKSEL[3:1] = 111, ก็ใส่ให้ตรงตามนั้นเลยไม่ต้องกลับบิท บิท SUT[2:1] ด้วย คือ FUSE LOW BYTE กำหนดเป็น 0xFF เลย ไม่ต้องกลับบิทเป็น 0xC0

ถ้าเราโปรแกรมด้วย FUSE LOW BYTE เป็น 0xC0 clock ก็จะกลายเป็น External Clock ไป ต้องเอาสัญญาน clock จากภายนอกเข้าที่ขา XTAL1 ไป จึงทำให้บอร์ดไม่ทำงาน

ทาง ETT แนะนำให้ใช้ oscillator 2MHz ตัวนี้ https://www.es.co.th/detail.asp?Prod=009901724 (https://www.es.co.th/detail.asp?Prod=009901724) เป็น External Clock เข้าที่ขา XTAL1 เพื่อให้บอร์ดทำงาน แล้วทำการแก้ CKSEL[3:1] = 111 เลือก clock เป็น  Low Power Crystal Oscillator 16MHz โดยโปรแกรม FUSE LOW BYTE ให้เป็น 0xFF ต่อไป  >:(

รอสั่งซื้อของอีกแล้ว  ;D
Title: Re: Arduino MEGA328P
Post by: az on November 13, 2017, 02:55:14 PM
Quote from: tha on November 13, 2017, 01:12:36 PM
พอจะทราบสาเหตุของการเสียแล้วครับ น่าจะมาจาก clock selected มันไม่ต้องกลับบิทครับ ถ้าเราเลือกเป็น Low Power Crystal Oscillator บิท CKSEL[3:1] = 111, ก็ใส่ให้ตรงตามนั้นเลยไม่ต้องกลับบิท บิท SUT[2:1] ด้วย คือ FUSE LOW BYTE กำหนดเป็น 0xFF เลย ไม่ต้องกลับบิทเป็น 0xC0

ถ้าเราโปรแกรมด้วย FUSE LOW BYTE เป็น 0xC0 clock ก็จะกลายเป็น External Clock ไป ต้องเอาสัญญาน clock จากภายนอกเข้าที่ขา XTAL1 ไป จึงทำให้บอร์ดไม่ทำงาน

ทาง ETT แนะนำให้ใช้ oscillator 2MHz ตัวนี้ https://www.es.co.th/detail.asp?Prod=009901724 (https://www.es.co.th/detail.asp?Prod=009901724) เป็น External Clock เข้าที่ขา XTAL1 เพื่อให้บอร์ดทำงาน แล้วทำการแก้ CKSEL[3:1] = 111 เลือก clock เป็น  Low Power Crystal Oscillator 16MHz โดยโปรแกรม FUSE LOW BYTE ให้เป็น 0xFF ต่อไป  >:(

รอสั่งซื้อของอีกแล้ว  ;D

จะเล่น fuse bit ใจต้องนิ่งนะครับ
ปล. High Voltage Parallel Programming ไว้แก้ fuse bit
Title: Re: Arduino MEGA328P
Post by: tha on November 14, 2017, 06:48:35 AM
Quoteจะเล่น fuse bit ใจต้องนิ่งนะครับ
ปล. High Voltage Parallel Programming ไว้แก้ fuse bit

ใช้ตัวไหน หาซื้อได้ที่ไหนครับ
Title: Re: Arduino MEGA328P
Post by: az on November 14, 2017, 11:22:39 AM
Quote from: tha on November 14, 2017, 06:48:35 AM
ใช้ตัวไหน หาซื้อได้ที่ไหนครับ

ลองติดต่อคุณ p_chusak  ดูนะครับ
Title: Re: Arduino MEGA328P
Post by: tha on November 15, 2017, 05:50:43 AM
ติดต่อยังไงครับ หมู่นี้เงียบหายกันไปเลย
ผมใช้ ET-AVR ISP mkII แก้ fuse bit ก็ได้เริ่มจะเป็นแล้ว
ของที่สั่งซื้อจาก es มาแล้ว ก็เลยประกอบบอร์ด จะเรียกว่าบอร์ดอะไรดีน๊า เรียกว่าบอร์ด I-DO-E-TO แล้วกันเพราะทำเลียนแบบบอร์ด ARDUINO
บัดกรีเสร็จก็ตรวจสอบหาจุดเสียก็โอเค ได้เป็นแบบนี้
(https://i.imgur.com/y4WN3La.jpg)
(https://i.imgur.com/Ar5Er0O.jpg)

power supply เอาไว้นอกบอร์ด usb to rs232 ก็ไม่ใส่ ใช้นอกบอร์ดทั้งหมด ใส่ atmega328p-pu แล้วก็ใช้ได้
ตื่นเช้ามาวันนี้ ก็ลองโดนไฟ  เปิด AVR Studio 4.17 เสียบ ET-AVR ISP mkII สร้าง new project
http://www.mediafire.com/file/dy8dry2lo9wjqw4/blink_1M.rar (http://www.mediafire.com/file/dy8dry2lo9wjqw4/blink_1M.rar)
atmega328p ตัวนี้เป็นตัวใหม่ clock ที่เขาตั้งไว้เริ่มแรก(default) เป็น internal RC oscillator 8M, CKDIV8 เหลือ clock เป็น 1MHz ตอนนี้ยังไม่ได้แก้ fuse bit พอโปรแกรม hex file เข้าไปแล้ว บอร์ดก็ทำงานได้ครับ
คราวนี้สร้าง new project ใหม่ แก้ fuse bit low byte = FF เลือก clock เป็น Low Power Crystal Oscillator 16MHz(ผมใส่ crytal 16MHz ในบอร์ดครับ) พอโปรแกรม hex file เข้าไป บอร์ดก็ทำงานได้ครับ
http://www.mediafire.com/file/1qi2r4a188t1c45/blink_16M.rar (http://www.mediafire.com/file/1qi2r4a188t1c45/blink_16M.rar)

ติดปัญหาเรื่อง fuse bit มานาน ส่งบอร์ด easy32u4 ไปให้เขาซ่อมรอบหนึ่งแล้ว ตั้ง fuse bit ผิดเป็น external clock ก็มาเสียอีกรอบนึ่ง ตอนนี้รอ External Oscillator 2MHz ที่สั่งซื้อ มาใส่เพื่อแก้ fuse bit ของบอร์ด easy32u4 ต่อไป เอ๊ะหรือว่าเอาบอร์ด atmega328p ตัวที่ทำใหม่นี้มาสร้างเป็นสัญญาน external clock ให้กับบอร์ด easy32u4 ก็ได้นี่ เดี๋ยวจะลองหาวิธีก่อน  :o
Title: Re: Arduino MEGA328P
Post by: tha on November 15, 2017, 01:23:28 PM
คราวนี้มาซ่อม easy32u4 ที่ไม่ทำงานเพราะโปรแกรม fuse bit ผิดเป็น external clock ผมทำดังนี้ครับ
สร้างสัญญาน clock pulse จากบอร์ด atmega328p (ที่ทำขึ้นมาใหม่) ให้สัญญาน clock pulse ออกมาจากขา PD7 โดยโปรแกรมนี้ครับ
http://www.mediafire.com/file/it2rnxbwhaamtw4/clock1.rar (http://www.mediafire.com/file/it2rnxbwhaamtw4/clock1.rar) AVR Studio 4.17
คราวนี้ใช้ saleae logic analyzer วัดปรับโปรแกรมจนได้สัญญาน clock pulse ที่ขา PD7 ออกมาได้ 500kHz พอดี เพราะเราต้องตั้งค่า ISP ของ mkII เป็น 125kHz ซึ่ง เป็น 1/4 ของสัญญาน clock พอดี
บัดกรีเอา crytal 16MHz บนบอร์ด easy32u4 ออกก่อน แล้วบัดกรีสายเข้าไปที่ XTAL1 เพื่อป้อน External clock จากขา PD7 ของบอร์ด atmega328p แล้วต่อ ground ถึงกันด้วย
เมื่อจ่ายไฟเข้าไป บอร์ด easy32u4 สามารถติดต่อกับ mkII ผ่านทาง avr studio 4.17 ได้แล้ว
คราวนี้ลองบอร์ด easy32u4 ด้วยโปรแกรมนี้ http://www.mediafire.com/file/udlb1j431j01pp8/blink1%282%29.rar (http://www.mediafire.com/file/udlb1j431j01pp8/blink1%282%29.rar) ด้วย avr studio 4.17 + ISP mkII ตั้งโปรแกรม fuse bit low byte เป็น 0x62, Internal RC Oscillator 8MHz, CKDIV8 ได้ clock เป็น 1MHz แล้วโปรแกรม blink1.hex เข้าบอร์ด ปรากฎว่าไฟกระพริบสามารถทำงานได้ครับ
คราวนี้ต่อบัดกรี crytal 16MHz กลับคืนสู่บอร์ด easy32u4 ตั้งโปรแกรม fuse bit low byte เป็น 0xFF,  clock เป็น Low Power Crystal Oscillator ได้ clock เป็น 16MHz แล้วโปรแกรม blink1.hex เข้าบอร์ด ปรากฎว่าไฟกระพริบก็สามารถทำงานได้เป็นปกติแล้วครับ

เสียตังไปซื้อ oscillator 2MHz มา ของเพิ่งจะถึงเลยไม่ได้ใช้งานเลย
สิ้นสุดปัญหาการตั้ง fuse bit ไปเสียที คราวนี้ก็ตั้ง fuse bit ได้แล้ว จะได้ทำอย่างอื่นกันต่อไป  :)

Title: Re: Arduino MEGA328P
Post by: tha on November 15, 2017, 02:16:48 PM
http://www.mediafire.com/file/n93n7gzc3dsyn6j/bootloader.rar
bootloader ของบอร์ด  ET-BASE AVR EASY32U4 โปรแกรม hex file bootloader ด้วย avr studio 4.17 + mkII บอร์ดกลับมาทำงานในโหมด arduino leonardo ได้ตามปกติครับ
Title: Re: Arduino MEGA328P
Post by: tha on November 15, 2017, 02:43:44 PM
atmega32u4 ดูใน data sheet แล้วไม่มีโหมด Full Swing Crystal Oscillator มีแต่ใน atmega328p ซึ่งใน data sheet บอกว่า สามารถเอา XTAL2 เป็น clock output ไปขับ clock input อื่นหรือใช้ในบริเวณที่มี noise สูง แต่ก็จะกินพลังงานมากกว่า Low Power Crystal Oscillator ด้วยเช่นกัน
Title: Re: Arduino MEGA328P
Post by: tha on November 16, 2017, 02:20:47 PM
วันนี้ทำอีกตัวหนึ่ง เจ้าสวิทช์ดำ เลยมี 2 ตัว เจ้าสวิทช์แดงกับเจ้าสวิทช์ดำ

(https://i.imgur.com/ujKte4z.jpg)

(https://i.imgur.com/qR7EwnW.jpg)

ว่าจะทำเจ้าสวิทช์ดำเป็น arduino Duemilanove เลยลง bootloader ตามนี้
http://www.mediafire.com/file/s9yj32o9ck40tho/Bootloader%282%29.rar (http://www.mediafire.com/file/s9yj32o9ck40tho/Bootloader%282%29.rar)
ใช้ bootloader ตัวนี้ BOOT_EASY328_MANUAL_16MHZ.hex วิธีทำก็ทำตามคู่มือ แต่ใช้ ISP mkII แทน
ใช้ usb to usart cp2102 upload โปรแกรมจาก arduino IDE ไม่ได้ครับ ค้างไปเลย
ใช้ ชุด usb to usart ของ ett ก็ไม่ได้เช่นกัน ค้างไปเลย ท่านใดเคยเจอปัญหานี้บ้าง

(https://i.imgur.com/QWur9kl.jpg)

ตั้งค่า port ไม่ตรงหรืต้องใช้ตัวอย่างนี้ครับ
https://www.mcucity.com/category/86/%E0%B9%82%E0%B8%A1%E0%B8%94%E0%B8%B9%E0%B8%A5-%E0%B9%80%E0%B8%8B%E0%B8%99%E0%B9%80%E0%B8%8B%E0%B8%AD%E0%B8%A3%E0%B9%8C-sensor-rtc-mp3-etc/rs232-rs485-can-serial-module (https://www.mcucity.com/category/86/%E0%B9%82%E0%B8%A1%E0%B8%94%E0%B8%B9%E0%B8%A5-%E0%B9%80%E0%B8%8B%E0%B8%99%E0%B9%80%E0%B8%8B%E0%B8%AD%E0%B8%A3%E0%B9%8C-sensor-rtc-mp3-etc/rs232-rs485-can-serial-module)

Title: Re: Arduino MEGA328P
Post by: tha on November 17, 2017, 02:43:28 AM
ตั้งเป็น Full Swing Crystal Oscillator ก็ทำงานได้ สำหรับบอร์ด atmega328p ถ้าเป็นบอร์ด easy32u4 ค่า F7 นี้จะเป็น reserved ไม่รู้ส่งผลเป็นไงหรือไม่มีตัวเลือกให้ตั้ง ก็ดูกันเอาเอง ค่า F7 เรียงบิทกันอย่างไรนั้น ดูใน atmega328p data sheet หน้า 349-350 ครับ
(https://i.imgur.com/bBBS1gN.png)
Title: Re: Arduino MEGA328P
Post by: tha on June 24, 2019, 08:32:11 AM
กลับมาแล้วครับ ไปเปลี่ยนเลนส์ตาต้อกระจกมาข้างหนึ่งแล้ว พอจะมองเห็นแล้ว ก็ชอบอยู่การประดิษฐ์คิดค้น คงต้องใช้เวลาทบทวนสักหน่อย ว่าไปวัตถุเทคโนโลยี่ก็เป็นดาบสองคม ทำคนสะดวกสะบายก็จริง แต่จิตใจคนไม่ดีเลยใช่ใหม ไม่เป็นมิตรกับสิ่งแวดล้อมด้วย แต่โลกเขามาทางนี้ เราก็ต้องตามโลกเขาไป ยังไงเราก็ด้อยกว่าประเทศโซนหนาวเขาอยู่ดีใช่ใหม ร้อนมันอ่านหนังสือไม่ได้นิ ใช่ใหม ไหนจะภาษาอังกฤษอีก ผมก็อ่านคู่มือไมโครฯมาหลายปีแล้ว ชักจะชำนาญแล้ว แต่ก็จะไม่แปลแล้วนะ จะอธิบายตัวอย่างอย่างเดียว ตาไม่ดีแล้ว
Title: Re: Arduino MEGA328P
Post by: avr_lover on June 24, 2019, 09:35:14 AM
นอกเรื่องหน่อย ไม่ทราบว่าอายุเท่าไหร่แล้วครับ ผมอายุ 36 แล้ว เคยผ่าเลนส์ตาต้อกระจกตอนอายุ 26 ปีเหมือนกันครับ เคยนึกว่าจะเป็นกันตอนอายุเยอะๆ ปรากฎว่าอายุน้อยก็มีโอกาศเป็นกัน
Title: Re: Arduino MEGA328P
Post by: tha on June 24, 2019, 02:07:38 PM
อายุ 53 แล้วครับ สายตาสั้นมาแต่ 25-26 ก่อนจะเป้นต้อก็สายตาไม่คงที่(เป็นเบาหวานด้วย) สุดท้ายแล้วก้เป็นต้อทั้งสองข้างเลย

ตกลงเดี๋ยวจะแปลต่อนะ ถึงไหนแล้ว คงต้องทบทวนสักหน่อย ลืมหมดแล้ว จะแปลใส่สมุดก่อน แล้วค่อยพิมพ์คอมอีกที จะได้ถนอมสายตา มีอะไรทำแล้วก็คงจะไม่เบื่อ
Title: Re: Arduino MEGA328P
Post by: tha on June 25, 2019, 05:19:45 AM
พอมาเช็คดาต้าชีท ATmega328p ในเน็ต ดาต้าชีทไม่เหมือนเก่าเสียแล้ว เอาไงดี แปลตามดาต้าชีทเก่าเลยนะ เพราะแปลมาก็เยอะแล้ว เอาดาต้าชีทเก่ามาให้ดาวน์โหลดด้วย เผื่อใครจะหาไม่เจอในเน็ต
http://www.mediafire.com/file/603hbrc2d4f68xv/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf/file (http://www.mediafire.com/file/603hbrc2d4f68xv/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf/file)

ของใหม่เป็นของ Microchip แล้วมั๊ง
https://www.microchip.com/wwwproducts/en/ATMEGA328P (https://www.microchip.com/wwwproducts/en/ATMEGA328P)
Title: Re: Arduino MEGA328P
Post by: tha on June 25, 2019, 05:27:55 AM
ว่าไงนะ แปลตามดาต้าชีสใหม่ไปเลยเหรอ โอเคร ตกลง แปลตามดาต้าชีสใหม่ไปเลย
Title: Re: Arduino MEGA328P
Post by: tha on June 25, 2019, 05:35:07 AM
ขอเวลาทำความเข้าใจที่แปลไปแล้วสักหน่อย ไม่ได้ทำมานาน ชักจะลืมแล้ว
Title: Re: Arduino MEGA328P
Post by: tha on June 27, 2019, 12:30:01 PM
Figure 12-2. Data Memory Map with 2048 byte internal data SRAM

(https://i.imgur.com/1jvQvN9.png)       

ทบทวนก่อน ก็รู้เพิ่มมาเรื่อยๆแล้ว แต่ก่อนไม่รู้งงไปเลย เขาให้ตัวเลขมาผิด ที่ถูกถ้าใช้คำสั่ง IN/OUT ต้องอยู่ย่านระหว่าง 0X0000-0X003F ไม่ใช่ 0X0000-0x001F

(https://i.imgur.com/jHc80YE.png)

อย่าง EEPROM Address Register High ถ้าใช้คำสั่ง LD(load) and ST(store) ก็จะระบุตำแหน่ง address เป็น 0X0042 เลย คือตำแหน่งฐานของ data memory map เท่ากับ 0x0000 ใช่ใหม แล้ว address ของ EEARH อ๊อฟเซตไป 0x42 ก็คือ address ของ EEARH เท่ากับ 0x0042 นั่นเอง

ถ้าใช้คำสั่ง IN/OUT ก็ลดอ๊อฟเซตลงมา 0X20 ก็จะได้ address เท่ากับ 0x0022 ใช่ใหม ดูภาพประกอบ

Title: Re: Arduino MEGA328P
Post by: tha on June 27, 2019, 07:17:04 PM
วันเสาร์วันอาทิตย์ไม่ต้องโพสต์ใช่ใหม พักผ่อนกันสิ เราทำอะไรทำกันเป็นทีมนะ เคร ตกงานมาจนไม่มีเสาร์อาทิตย์แล้ว
Title: Re: Arduino MEGA328P
Post by: tha on July 02, 2019, 07:31:03 PM
ขออภัยด้วยนะ คงไม่ได้แปลแล้ว ตาไม่ดี ทำมาข้างเดียว มองคอมนานคงไม่ดี ใครนะจะให้กลับมาแปลอีก จะไปเอาเรื่องจิตใจแล้ว
Title: Re: Arduino MEGA328P
Post by: tha on July 07, 2019, 10:02:27 AM
ตกลงให้แปลใช่ใหม แปลก็แปล ไม่มีอะไรทำเหมือนกัน เรื่องจิตใจก็พอได้แล้ว เราทำอะไรทำกันเป็นทีม เดี๋ยวทบทวนที่แปลเก่าอีกสักหน่อยครับ
Title: Re: Arduino MEGA328P
Post by: tha on July 09, 2019, 09:36:26 AM
กำลังทบทวนอยู่ครับ ATmega328p ตัวนี้ ลองดูกราฟคุณสมบัติที่ผมโพสต์เอาไว้ อยู่ที่แถวที่ 13 ใช้ไฟได้ตั้งแต่ 1.8-5.5v เลยนี่ แต่สัญญานนาฬิกาก็ต้องลดลงตามส่วน(ดูกราฟคุณสมบัติ) คราวนี้ผมจะใช้ถ่านสองก้อน(3v)จ่ายไฟให้กับมัน คราวนี้คริสตัลที่ใช้บนบอร์ดมัน 16Mhz สิ สูงเกินไป มันต้องประมาณ 8Mhz ถึงจะพอดี ผมจะลองไม่เปลี่ยนคริสตัลเป็น 8Mhz แต่จะใช้ prescaler หารความถี่เอา คือหารด้วย 2 (ดูแถวที่ 11 หัวข้อ 13.11. System Clock Prescaler) คราวนี้ก็จะได้สัญญาน clock 8Mhz แล้ว
  แต่การใช้ไฟ 3v เราก็ต้องปรับ BOD ิbrown out detection ลงมาเป็น 2.7v ด้วย คือให้ต่ำกว่า 3v ปรับที่ fuse bit เลย ของผมตั้ง BOD เอาไว้ 4.3v ผมก็แก้เอาไว้ตั้งแต่บอร์ดยังใช้ไฟ 5v เลย

(https://i.imgur.com/ml0PNQh.png)

คราวนี้มาลองโปรแกรมดู(โปรแกรมไฟกระพริบ) ก็สามารถทำงานได้

(https://i.imgur.com/xe4WbKR.jpg)

ในโปรแกรม ก็กำหนด F_CPU = 8000000 Mhz เลย เพราะจะมีผลต่อฟังชั่น delay ในไฟล์ delay.h ที่เราใช้ในโฟลเดอร์ C:\WinAVR-20100110\avr\include\util\delay.h ลองไล่เช็คดู เช็คไฟล์พวกนี้ดูบ่อยๆแล้วก็จะชำนาญครับ

http://www.mediafire.com/file/fej1jp7db561wvs/blink_8M.rar/file (http://www.mediafire.com/file/fej1jp7db561wvs/blink_8M.rar/file)
Title: Re: Arduino MEGA328P
Post by: tha on July 09, 2019, 09:40:54 AM
รู้สึกมีพรายกระซิบบอกเรื่องให้กำหนด F_CPU เป็น 8000000Mhz เพราะมันมีผลกับฟังชั่น  _delay_ms(500); ที่เราใช้ด้วย ต้องขอขอบคุณท่านผู้รู้มา ณ ที่นี้ด้วยครับ
Title: Re: Arduino MEGA328P
Post by: tha on July 09, 2019, 10:03:37 AM
มีพรายกระซิบบอกอีกละ ให้ใส่ NOP (no operation) หลังจากที่เราหาร prescaler แล้ว เพื่อให้สัญญานนาฬิกามัน stable ก่อนที่จะทำงานตามโปรแกรมต่อไป ผมก็เลยใส่ไป 4 NOP

Quote
int main(void)
{
   CLKPR = 0x80;          // set CLKPCE to 1 while set CLKPS to 0
   CLKPR = 0x01;          // set CLKPCE to 0 while set CLKPS to 1
                          // to prescaler with 2 to divide clock 16Mhz to 8Mhz
   asm volatile ("nop" :: );
   asm volatile ("nop" :: );
   asm volatile ("nop" :: );
   asm volatile ("nop" :: );

   DDRD |= (1<<DDD7);     // port D7 are output
   PORTD &= ~(1<<PD7);     // port D7 low
Title: Re: Arduino MEGA328P
Post by: tha on July 11, 2019, 09:29:28 AM
ลองเซท fuse ให้เป็น  Full Swing Crystal Oscillator ดู อันนี้ใช้สำหรับในที่ๆมีสัญญานรบกวนสูง หรือเอาขา XTAL2 เป็นเอาพุทไปขับอินพุทอื่นได้ใช่ใหม ดาต้าชีทเขาว่าอย่างนั้น

(https://i.imgur.com/QD8eRbF.png)

ทีนี้เราก็มาดูว่า Full Swing Crystal Oscillator (ดูโพสต์นี้แถวที่ 10 ประกอบนะ) ว่า บิท CKSEL[3:1] มีค่าเท่าไหร่ CKSEL[0] มีค่าเท่าไหร่ SUT[1:0] จะเอาค่าเท่าไหร่ดี ก็ดูในตาราง
          CKSEL[3:1] = 011
          CKSEL[0]    = 1           เลือกค่านี้เพราะเราใช้คริสตัลเป็นสัญญานนาฬิกา
          SUT[1:0]    = 11         เลือกค่านี้ถ้า power supply ของเรา เวลาเปิดเครื่องแล้วโวลท์ขึ้นมาช้า เราก็ตั้งเวลาเริ่มทำงานเผื่อเอาไว้ หรือจะเลือกเปิด brown out detection ตรวจจับว่าโวลท์ขึ้นมาสูงถึงระดับที่ตั้งไว้แล้วหรือยัง เราก็เซท  SUT[1:0]    = 01  ก็ได้

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

บิท 6 CKOUT เราก็ไม่โปรแกรม(ให้เป็น 1 บิทนี้จะกลับบิทเวลาไม่โปรแกรมก็ให้เป็น 1) เวลาโปรแกรม(ให้เป็น 0) ก็จะมีสัญญานนาฬิกาออกที่ขา CLKO (PB0) ดูเรื่อง 13.10. Clock Output Buffer แถวที่ 11 
                 
บิท 7 CKDIV8 เราก็ไม่โปรแกรม(ให้เป็น 1 บิทนี้จะกลับบิทเวลาไม่โปรแกรมก็ให้เป็น 1) เราก็ไม่หารสัญญานนาฬิกาด้วย 8

ส่วน high byte หรือ extended byte ก็ลองตรวจเช็คดูได้ แต่ตอนกด program ต้องระวังไม่ให้เอาบิท SPIEN ออก เพราะอันนี้จะเป็นตัวที่ติดต่อกับตัวโปรแกรม ET-AVR ISP mk-II ถ้าเอาออกก็จะติดต่อกับตัวโปรแกรมไม่ได้เลย
Title: Re: Arduino MEGA328P
Post by: tha on July 13, 2019, 10:01:25 AM
คราวนี้เรามาลองเซท fuse bits ให้ใช้สัญญานนาฬิกาเป็น Calibrated Internal RC Oscillator ดูบ้างซึ่งทำให้ไม่ต้องใช้สัญญานนาฬิกาจากภายนอก(คริสตัลเป็นต้น) โดยปกติเจ้า AVR ATmega328p ตัวนี้เมื่อตอนที่ส่งออกมาจากโรงงานจะถูกตั้งค่า(default)เป็นยังไงดูที่ 13.2.1. Default Clock Source(แหล่งสัญญาณนาฬิกาเริ่มต้น) แถวที่ 10 ในโพสต์นี้

ทีนี้เราก็มาดูว่า Calibrated Internal RC Oscillator (ดูโพสต์นี้แถวที่ 11 ประกอบนะ) ว่า บิท CKSEL[3:0] มีค่าเท่าไหร่ SUT[1:0] จะเอาค่าเท่าไหร่ดี ก็ดูในตาราง
          CKSEL[3:0] = 0010
          SUT[1:0]    = 00        จะเลือกเปิด brown out detection enable ตรวจจับว่าโวลท์ขึ้นมาสูงถึงระดับที่ตั้งไว้แล้วหรือยัง จะตั้งไว้ 2.7v ตั้งได้ที่ fuse bits(ด้านบน) ก็จะได้ค่า extended fuse bits = 0xFD (ดูโพสต์นี้แถวที่ 13 ประกอบ)

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

(https://i.imgur.com/UVzJwKf.png)

คราวนี้เราก็กดโปรแกรมไป เสร็จแล้วก็มาบัดกรีถอดเอาคริสตัลออก ก็สามารถทำงานได้ด้วยถ่าน 2 ก้อน 3 โวลท์ โดยไม่ต้องใช้สัญญานนาฬิกาจากภายนอกเลย

(https://i.imgur.com/xEN7cYB.jpg)

ปล.กลับมาทำไมโครได้ ก็ชอบประดิษฐ์คิดค้นอยู่ ก็พอมีอะไรทำเพลินๆดี
Title: Re: Arduino MEGA328P
Post by: tha on July 13, 2019, 10:05:26 AM
ตัวโปรแกรมก็ไม่มีอะไร ดัดแปลงแก้ใขของเก่านิดหน่อย
Quote
#define F_CPU 8000000UL    // set to 8000000Mhz because it effect to delay.h
#include <avr/io.h>        // The file is in C:\WinAVR-20100110\avr\include\avr
#include <util/delay.h>    // The file is in C:\WinAVR-20100110\avr\include\util\delay.h

int main(void)
{
   /*CLKPR = 0x80;          // set CLKPCE to 1 while set CLKPS to 0
   CLKPR = 0x01;          // set CLKPCE to 0 while set CLKPS to 1
                          // to prescaler with 2 to divide clock 16Mhz to 8Mhz
   asm volatile ("nop" :: );
   asm volatile ("nop" :: );
   asm volatile ("nop" :: );
   asm volatile ("nop" :: );   */

   DDRD |= (1<<DDD7);     // port D7 are output
   PORTD &= ~(1<<PD7);     // port D7 low
   
   while(1)
   {
      PORTD ^= (1<<PD7);   // toggle PD7
     _delay_ms(500);
     //  PORTD |= (1<<PD7);     //  output high PD7
     //_delay_ms(250);
       //PORTD &= ~(1<<PD7);     //  output low PD7
     //_delay_ms(250);
   

     }
}

Title: Re: Arduino MEGA328P
Post by: tha on July 16, 2019, 09:17:19 AM
ย้อนมาเรื่อง การหารความถี่สัญญานนาฬิกา(prescaler)สักหน่อย มันใช้เวลาในการเปลี่ยนจากความถี่เก่าไปเป็นความถี่ใหม่ T1+T2 ถึง T1+2*T2 ใช่ใหม (ดูเรื่อง 13.11. System Clock Prescaler แถวที่ 11)
                      T1 คือคาบเวลา 1 cycle สัญญานนาฬิกาความถี่เก่า = 1/f1 =1/16M
                      T2 คือคาบเวลา 1 cycle สัญญานนาฬิกาความถี่ใหม่ = 1/f2 =1/8M
T1 น้อยกว่า T2 อยู่แล้วใช่ใหม ก็ตีเป็นว่าการเปลี่ยนความถี่สัญญานนาฬิกาจะกินเวลา 3*T2 คือ 3 คาบเวลาใหม่ใช่ใหม
ดังนั้นเราก็จะไม่ให้ CPU มันไม่ทำอะไรก่อนสัก 3 คาบเวลา เผื่อไว้หนึ่งคาบเวลาเป็น 4 คาบเวลานะ ก็คือให้ CPU มันกระทำคำสั่ง nop (ไม่ทำงานอะไรเลย)สัก 4 คำสั่ง (คำสั่ง nop แต่ละคำสั่งใช้เวลา 1 cycle(1 คาบเวลา)) ก็เป็น 4 คาบเวลา ให้สัญญานนาฬิกาความถี่ใหม่มันมีความเสถียรก่อนที่จะปฏิบัติคำสั่งอื่นต่อไป ก็ใส่ไป 4 nop ก้ถูกแล้ว หรือจะให้แน่ก็ใส่เพิ่มก็ได้ จะเสียเวลาไปสักกี่ไมโครเสคกันหล่ะ

Quote
int main(void)
{
   CLKPR = 0x80;          // set CLKPCE to 1 while set CLKPS to 0
   CLKPR = 0x01;          // set CLKPCE to 0 while set CLKPS to 1
                          // to prescaler with 2 to divide clock 16Mhz to 8Mhz
   asm volatile ("nop" :: );
   asm volatile ("nop" :: );
   asm volatile ("nop" :: );
   asm volatile ("nop" :: );

   DDRD |= (1<<DDD7);     // port D7 are output
   PORTD &= ~(1<<PD7);     // port D7 low
Title: Re: Arduino MEGA328P
Post by: tha on July 16, 2019, 11:03:04 AM
ส่วนคำสั่ง asm volatile ("nop" :: ); ถ้า GCC แล้วมาใช้คำสั่งภาษา Assembly ก็จะใช้รูปแบบนี้ ลองเสิร์จกูเกิ้ลดู หรือ หาตัวอย่างใน library C:\WinAVR-20100110\avr\include\avr ดูก็ได้ จะพบความเกี่ยวพันกันของ GCC โปรแกรมด้วยครับ

ส่วนตัว AVR ATmega328p มีภาษา Assembly มีอะไรบ้าง(จากภาษา C ก็ต้องคอมไพล์ไปเป็น assembly ก่อนใช่ใหม ลืมไปแล้วเหมือนกันนะ) ก็ดูที่บท 37. Instruction Set Summary ในดาต้าชีทใหม่ดู เอามาลงให้ดูก็ได้

(https://i.imgur.com/C9gqU6c.png)
(https://i.imgur.com/Lact2N2.png)
(https://i.imgur.com/Ny76NKD.png)
Title: Re: Arduino MEGA328P
Post by: tha on July 16, 2019, 11:31:33 AM
อย่างความเกี่ยวพันของไลบรารี่ในโปรแกรม ที่เรา

#include <avr/io.h>        // The file is in C:\WinAVR-20100110\avr\include\avr

ซึ่งตอนแรกที่เราสร้างโปเจ็คใหม่(new project) เรากำหนด เบอร์ไมโครเป็น ATmega328p ใช่ใหม ทำให้จาก library io.h ลิ้งค์มาที่ไฟล์ iom328p.h 

ที่ไฟล์ io.h ก็จะมีระบุว่า
Quote
#elif defined (__AVR_ATmega328P__) || defined (__AVR_ATmega328__)
#  include <avr/iom328p.h>

คราวนี้ที่ไฟล์ iom328p.h ก็จะระบุค่าตัวแปรต่างๆที่เราใช้ในโปรแกรมว่าเป็นรีจีสเตอร์ที่เท่าไหร่ แต่ละตัวแปรบิทมีค่าเป็นเท่าไหร่ ก็มีการกำหนดไว้ในไฟล์นี้ครับ
Quote
#define DDRD _SFR_IO8(0x0A)
#define DDD0 0
#define DDD1 1
#define DDD2 2
#define DDD3 3
#define DDD4 4
#define DDD5 5
#define DDD6 6
#define DDD7 7

ลองไล่เช็คดูความเกี่ยวพันของมันนะ ในนี้แหละ สักพักคงจะคล่อง ถ้ารู้แล้ว GCC นี้ก็จะง่ายขึ้นนะ ผมก็จะลืมๆบ้างแล้วสิ ไม่ได้ทำมานาน คงต้องทบทวนอีกสักหน่อยเหมือนกันครับ
Title: Re: Arduino MEGA328P
Post by: tha on July 17, 2019, 09:25:40 AM
ตอนนี้บอร์ด(เจ้าสวิทช์แดง)ของเรา สัญญานนาฬิกาตั้งเป็น Calibrated Internal RC Oscillator อยู่ใช่ใหม คราวนี้เรามาลองตั้งสัญญานนาฬิกาเป็น 128kHz Internal Oscillator ดูบ้าง(ดูโพสต์นี้แถวที่11 13.7. 128kHz Internal Oscillator ประกอบนะ) เราก็เปลี่ยนโปรแกรมของเราให้สัญญานนาฬิกามันตรงกับ 128kHz ก่อน เพราะโปรแกรมเรามีใช้คำสั่ง _delay_ms(500); อยู่ เราก็ built ไป แล้วโปรแกรม hex ไฟล์เข้าไป หรือโปรแกรมหลังการโปรแกรม fuse bits ก็ได้
Quote
#define F_CPU 128000UL    // set to 128000Mhz because it effect to delay.h

ทีนี้เราก็มาดูว่า 128kHz Internal Oscillator (ดูโพสต์นี้แถวที่ 11 ประกอบนะ) ว่า บิท CKSEL[3:0] มีค่าเท่าไหร่ SUT[1:0] จะเอาค่าเท่าไหร่ดี ก็ดูในตาราง
          CKSEL[3:0] = 0011
          SUT[1:0]    = 00        จะเลือกเปิด brown out detection enable ตรวจจับว่าโวลท์ขึ้นมาสูงถึงระดับที่ตั้งไว้แล้วหรือยัง จะตั้งไว้ 2.7v ตั้งได้ที่ fuse bits(ด้านบน) ก็จะได้ค่า extended fuse bits = 0xFD (ดูโพสต์นี้แถวที่ 13 ประกอบ)

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

(https://i.imgur.com/HTOsdI5.png)

คราวนี้เราก็กดโปรแกรมไป yes ไปเลย คราวนี้มันจะติดต่อกับ ET-AVR ISP mk-II ไม่ได้ ขึ้น
Entering programming mode.. FAILED!
สาเหตุเป็นเพราะเราตั้ง programming mode and target setting ปกติอยู่ที่ 125kHz ใช่ใหม พอเรามาเปลี่ยนสัญญานาฬิกาเหลือแค่ 128kHz มันเลยติดต่อกันไม่ได้ คราวนี้เราก็มาเปลี่ยนค่า setting ให้เหลือสัก 6.478kHz แล้วกด write ไป เท่านี้ก็ติดต่อกันได้แล้วครับ

(https://i.imgur.com/iVZeztT.png)
Title: Re: Arduino MEGA328P
Post by: tha on July 17, 2019, 07:36:32 PM
ถามอะไรหน่อย โน๊ตบุ็คใหม่ๆสมัยนี้ที่มี win10 มาให้ด้วยนี่ ลง AVR studio 4.17 ได้หรือเปล่าครับ
Title: Re: Arduino MEGA328P
Post by: tha on July 18, 2019, 03:09:19 AM
ตอนนี้บอร์ด(เจ้าสวิทช์แดง)ของเรา สัญญานนาฬิกาตั้งเป็น 128kHz Internal Oscillator อยู่ใช่ใหม คราวนี้เรามาลองตั้งสัญญานนาฬิกาเป็น External Clock ดูบ้าง(ดูโพสต์นี้แถวที่11 13.8. External Clock ประกอบ)

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

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

(https://i.imgur.com/7TosGea.png)

แล้วกด program ไป แล้วลอง read ดู จะขึ้น
Entering programming mode.. FAILED!
คราวนี้มันจะติดต่อกับ ET-AVR ISP mk-II ไม่ได้ เพราะสัญญานนาฬิกาเปลี่ยนเป็น External Clock แล้ว แต่เรายังไม่ได้ใส่สัญญานนาฬิกา External Clock เข้าที่ขา EXTCLK(XTAL1) ให้มัน

คราวนี้ก็ถอดไฟออก แล้วบัดกรีเอาสายต่อจากขา EXTCLK(XTAL1) ออกมา

เปลี่ยน programming mode and target setting จาก 6.478kHz เป็น 125kHz เหมือนเดิมด้วย
Title: Re: Arduino MEGA328P
Post by: tha on July 18, 2019, 03:32:48 AM
คราวนี้เราจะเอาบอร์ดเจ้าสวิทช์ดำ(บอร์ด ATmega328p อีกบอร์ด)มาทำเป็นสัญญานนาฬิกาภายนอกให้กับบอร์ดเจ้าสวิทช์แดง
คราวนี้เราก็มาตั้งให้เป็น Full Swing Crystal Oscillator เลย รูปคลื่นสัญญานนาฬิกาจะได้ดีๆ
คราวนี้มากดถูกที่ CKDIV8 เพื่อให้หารสัญญานนาฬิกาลงมา 8 คือจาก 16MHz ลงเป็น 2MHz
คราวนี้มากดถูกที่ CKOUT  เพื่อให้มีสัญญานนาฬิกาออกมาที่ขา CLKO(PB0)
ส่วนบิท CKDIV8, CKOUT, CKSEL[3:0], SUT[1:0] อยู่ตำแหน่งไหนใน fuse bits (fuse low byte) ก็ดูที่ตาราง fuse bits (ดูโพสต์นี้แถวที่ 13 ประกอบนะ) เราก็จะได้ค่า
           fuse low byte = 0x37 = 0b0000 0111 ใช่ใหม

(https://i.imgur.com/LjiCRmB.png)

คราวนี้ก็กดโปรแกรมไป
Title: Re: Arduino MEGA328P
Post by: tha on July 18, 2019, 03:57:37 AM
คราวนี้ลองเอา seleae logic analyzer มาวัดที่ขา CLKO(PB0) ดู ไม่ได้ใช้มานานออกจะลืมๆ ลองตั้ง sample rate 500Ks/s ดู วัดคลื่นได้ 203.7Hz เอง ไม่น่าจะถูกนะ

(https://i.imgur.com/l5oYMxG.png)

ลองตั้ง sample rate 16Ms/s ดู ขึ้นเป็นแบบนี้

(https://i.imgur.com/8KcEmaL.png)

งงไปตั้งนาน นึกว่าใช้ไม่ได้แล้ว พอลองเอาเม้าส์ไปจี้จอ แล้วหมุนเม้าส์ ปรากฎว่าได้รูปคลื่น 2MHz พอดี ตกลงว่าถูกนะ

(https://i.imgur.com/tte7tGQ.png)
Title: Re: Arduino MEGA328P
Post by: tha on July 18, 2019, 04:23:01 AM
คราวนี้ก็เอาสายมาใส่ให้ขา CLKO(PB0) ของบอร์ดเจ้าสวิทช์ดำ มาใส่เข้าที่ขา EXTCLK(XTAL1) ของบอร์ดเจ้าสวิทช์แดง คราวนี้บอร์ดเจ้าสวิทช์แดงก็มี external clock 2MHz แล้ว คราวนี้เรามาแก้โปรแกรม

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

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

(https://i.imgur.com/XIdjlp9.jpg)
Title: Re: Arduino MEGA328P
Post by: tha on July 18, 2019, 04:38:47 AM
กราวน์ก็ต่อถึงกันด้วยนะ พอดีใช้ power supply ร่วมกันอยู่แล้ว เลยต่อกราวน์ถึงกัน ท่านใดบอกมานะ มีจุดไหนไม่ถูกต้องโปรดชี้แนะด้วยครับ
Title: Re: Arduino MEGA328P
Post by: tha on July 18, 2019, 04:59:42 AM
13.9. 13.9. Timer/Counter Oscillator นี่คงจะใช้ให้เป็นประโยชน์ เมื่อเราใช้ฟังชั่น Timer/Counter คงให้ถึงบท Timer/Counter ก่อนถึงจะทำตัวอย่างได้ ตอนนี้คงจะจนปํญญา ขอผ่านไปก่อนเด้อ
Title: Re: Arduino MEGA328P
Post by: tha on July 18, 2019, 03:47:00 PM
ตอนนี้บอร์ด(เจ้าสวิทช์แดง)ของเรา สัญญานนาฬิกาตั้งเป็น 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  ใช่ใหม

(https://i.imgur.com/D7It9Xu.png)

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

Quote
#define F_CPU 16000000UL    // set to 16000000Mhz because it effect to delay.h
Title: Re: Arduino MEGA328P
Post by: tha on July 19, 2019, 09:21:54 AM
เอาบทไหนต่อกันดีหล่ะพวกเรา I/O PORT ใช่ใหมยังค้างอยู่ คงไม่ก่อนวันจันทร์ เดี๋ยวจะดูทบทวนก่อนสักหน่อย มันยุ่งตอนที่มันเกี่ยวพันกับบทอื่น ทำให้ยกตัวอย่างยาก เพราะเรายังไม่ได้ศึกษาในบทนั้น แปลๆไปก่อนใช่ใหม ยังไม่ต้องยกตัวอย่าง พอเราแปลบทนั้นแล้วค่อยยก อย่างนี้ดีใหม หนังสือ AVR ก็ขายไปซะแล้ว เลยศึกษาบทอื่นก่อนไม่ได้เลย
Title: Re: Arduino MEGA328P
Post by: tha on July 25, 2019, 09:19:46 AM
ลองเอาถ่าน๓ก้อนมาใส่ก็ได้ ผมลองดูแล้ว ตั้ง Brown out detection 4.3V บอร์ดมันไม่ทำงาน ทั้งๆที่วัดไฟถ่านได้ 4.6V เลยลองมาตั้งดู Brown out detection 2.7V จึงจะทำงานได้

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

(https://i.imgur.com/CiHyy43.png)

(https://i.imgur.com/diRJ5dE.jpg)

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

(https://i.imgur.com/NCvMUsE.jpg)
Title: Re: Arduino MEGA328P
Post by: tha on July 25, 2019, 09:35:48 AM
ลองใช้ถ่าน๓ก้อนใส่บอร์ด แล้วลองวัดไฟดูได้ประมาณ 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 หลอดเดียวเอง ทำใมไฟถึงตกเยอะจัง ถ่านก็ยังใหม่อยู่นะ งง
Title: Re: Arduino MEGA328P
Post by: tha on July 26, 2019, 09:04:00 AM
มาลอง Arduino กับบอร์ด http://www.ett.co.th/prod2012/AVR-EASY32U4/ET-BASE-AVR-EASY32U4.html (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 (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 (http://www.mediafire.com/file/amiqphsuwhl1582/blink1.ino/file)

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

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

Title: Re: Arduino MEGA328P
Post by: tha on July 27, 2019, 10:26:53 AM
ที่มีปัญหา ใช้ถ่าน ๓ ก้อน แล้วไฟตกเหลือ 4.2V เวลาตั้ง BOD 4.3V แล้วบอร์ดไม่ทำงาน ตอนแรกว่ารังถ่านมันเก่า เลยไปซื้อรังถ่านใหม่มาใส่ แต่ก็เป็นเหมือนเดิม เลยซื้อถ่านมาใหม่ ปรากฎว่าถ่าน ๓ ก้อนวัดไฟได้ 4.8V วัดไฟแต่ละก้อนได้ประมาณ 1.65V คือถ่านชุดเก่าที่ซื้อมามันเก่าเก็บ วัดไฟได้ประมาณ 1.52V ไอ้เราก็ไม่รู้ นึกว่ามันเท่านี้ พอใส่เข้าบอร์ดไป ไฟมันก็ตกสิ มันไม่มีไฟแล้ว เราก็ไม่รู้เพราะมันใหม่มาจากร้านนี่ ทำงานไปก็มีปัญหาอะไรแปลกๆนะ แต่ก็เพลินดีมีงานทำ