หน้าเว็บ

วันอังคารที่ 3 ตุลาคม พ.ศ. 2560

ทางนิพพาน

Sompong industrial electronicshttp://sompong-tungmepol-thail.blogspot.com/

Sompong industrial electronics

ข้ามทะเลทั้งสี่แล้วจะถึงจิตหนึ่ง

3 PWM Sine Wave Arduino unohttps://www.youtube.com/watch?v=zVZCd4xU3is&feature=youtu.be&a

สร้าง Inverter 3 Phase ใช้เอง 005สร้าง Inverter 3 Phase ใช้เอง 006 Manat Wongla ดู 59 ครั้ง 2:47 เครื่องปรับรอบมอเตอร์สามเฟส Sompong Tungmepol ดู 498 ครั้ง 6:43 สร้าง Inverter 3 Phase ใช้เอง 001 Manat Wongla ดู 67 ครั้ง 5:27 สร้าง Inverter 3 Phase ใช้เอง 003 Manat Wongla ดู 36 ครั้ง 9:23 สร้าง Inverter 3 Phase ใช้เอง 004 Manat Wongla ดู 51 ครั้ง 4:01 สร้าง Inverter 3 Phase ใช้เอง 007 Manat Wongla ดู 31 ครั้ง 2:47 ปรับรอบ BLDC บัสเลสมอเตอร์ Manat Wongla ดู 174 ครั้ง 2:20 เศรษฐกิจ แบบนี้ ใช้วิธี ทำเอง มอเตอร์มหัศจรรย์ Sompong Tungmepol ดู 8,890 ครั้ง 18:59 วิธีซ่อมเครื่องเชื่อมตู้เชื่อม INVERTER ตอนที่1 หนทางยังอีกยาวไกล ก้าวไปพร้อมกัน Sompong Tungmepol ดู 72,653 ครั้ง 7:59 การซ่อมตู้เชื่อมอินเวอร์เตอร์ตอนภาคจ่ายไฟหนทางยาวไกล ก้าวไปพร้อมกันอย่ามัวแต่เล่นไลน์เฟสต้องทำงาน Sompong Tungmepol ดู 57,858 ครั้ง 10:48 วงจรอินเวอร์เตอร์สำหรับควบคุมความเร็วรอบมอเตอร์เหนี่ยวนำไฟฟ้าสามเฟส Sompong Tungmepol ดู 4,481 ครั้ง 4:08 สร้าง Inverter 3 Phase ใช้เอง 002 Manat Wongla ดู 45 ครั้ง 6:01 เครื่องเพิ่มแรงเคลื่อนไฟฟ้ากระแสตรง Sompong Tungmepol ดู 22,964 ครั้ง 24:08 Three phase AC induction motor driver อินเวอร์เตอร์สามเฟส Sompong Tungmepol ดู 198 ครั้ง 1:13 Boeing 747-400 Cockpit - Breakoff Landing Amsterdam Schiphol The Pilot Channel ขอแนะนำสำหรับคุณ 13:48 สร้างออกแบบแผงวงจรอิเล็กทรอนิกส์ เมืองไทยพัฒนาแล้ว Sompong Tungmepol ดู 695 ครั้ง 6:59 แนวทาง การสร้างอินเวอร์เตอร์ Sompong Tungmepol ดู 512 ครั้ง 3:54 เข้าตาวิศวกรฝรั่งระดับโลก เรือหางยาวคนไทยกับการโมสุดยอดเครื่องยนต์ Cleverly Channel ดู 434,216 ครั้ง 41:54 จำหน่าย เพาเวอร์ ทรานซิสเตอร์ มอเตอร์ สามเฟส Sompong Tungmepol ดู 529 ครั้ง 2:40 การขนาน IGBT POWER MODULE ให้ใช้ได้กับมอเตอร์สามเฟสสองแรงม้าครับ Sompong Tungmepol ดู 524 ครั้ง แ

สร้าง Inverter 3 Phase ใช้เอง 005

สร้าง Inverter 3 Phase ใช้เอง 007สร้าง Inverter 3 Phase ใช้เอง 007 Manat Wongla Manat Wongla ติดตามแล้ว5 เพิ่มลงใน แชร์ เพิ่มเติม ดู 31 ครั้ง 2 0 เผยแพร่เมื่อ 31 ก.ค. 2017 ทดลองบอร์ด V3.0 กับหลอดใส้ 100 วัตต์ต่อเดลต้ากัน ปรับเดินหน้าถอยหลัง แสดงความถี่ ด้วย 7 Segment 2 หลัก 0 - 60 Hz รายละเอียดเพิ่มเติม : https://3phaseinverter.blogspot.com แสดงเพิ่มเติม ความคิดเห็น • 2 สมพงศ์ อินดัสเตรียล อิเล็กทรอนิคส์ เพิ่มความคิดเห็นสาธารณะ... ความคิดเห็นยอดนิยม Sompong Tungmepol Sompong Tungmepol1 วันที่ผ่านมา เยี่ยมมากครับ ยินดีและ อนุโมทนา สาธุ ครับ ผม https://3phaseinverter.blogspot.com/2017/07/inverter-to-drive-3-phase-motors.html?showComment=1506929774657 ตอบกลับ Sompong Tungmepol Sompong Tungmepol1 วันที่ผ่านมา https://www.youtube.com/watch?v=iV4pxSbwBYY ตอบกลับ เล่นอัตโนมัติ รายการถัดไป สร้าง Inverter 3 Phase ใช้เอง 006 Manat Wongla ดู 59 ครั้ง 2:47 เครื่องควบคุมมอเตอร์สามเฟสทำเองได้ง่ายครับ Sompong Tungmepol ดู 2,656 ครั้ง 2:36 สร้าง Inverter 3 Phase ใช้เอง 003 Manat Wongla ดู 36 ครั้ง 9:23 สร้าง Inverter 3 Phase ใช้เอง 002 Manat Wongla ดู 45 ครั้ง 6:01 สร้าง Inverter 3 Phase ใช้เอง 001 Manat Wongla ดู 67 ครั้ง 5:27 สร้าง Inverter 3 Phase ใช้เอง 005 Manat Wongla ดู 57 ครั้ง 7:22 การซ่อมตู้เชื่อมอินเวอร์เตอร์ตอนภาคจ่ายไฟหนทางยาวไกล ก้าวไปพร้อมกันอย่ามัวแต่เล่นไลน์เฟสต้องทำงาน Sompong Tungmepol ดู 57,858 ครั้ง 10:48 ปรับรอบ BLDC บัสเลสมอเตอร์ Manat Wongla ดู 174 ครั้ง 2:20 7,5KW (10hp) 400V 3-phase SINE PWM INVERTER for AC induction motor Domenico Caliendo ดู 106,070 ครั้ง 1:27 สร้าง Inverter 3 Phase ใช้เอง 004 Manat Wongla ดู 51 ครั้ง 4:01 การควบคุมความเร็วมอเตอร์สามเฟส Sompong Tungmepol ดู 2,857 ครั้ง 2:06 software for small 3-phase inverter Arduino ATmega 3 phase induction motor speed controller สมพงศ์ อินดัสเตรียล อิเล็กทรอนิคส์ ดู 1,331 ครั้ง 5:30 แบตเตอรี่สองลูกใช้กับมอเตอร์สามเฟส220/380หนึ่งแรงม้า Sompong Tungmepol ดู 54,918 ครั้ง 17:42 มอเตอร์สามเฟส Sompong Tungmepol ดู 428 ครั้ง 3:01 การปรับความเร็วมอเตอร์สามเฟสรุ่นใช้วอลลุ่มปรับความถี่ได้ Sompong Tungmepol ดู 486 ครั้ง 7:25 DC DC Buck Converter 3 abuhajara ขอแนะนำสำหรับคุณ 27:42 Very short Takeoff Air India Boeing 747-400 jemi1210 ขอแนะนำสำหรับคุณ 3:34 Billionaire Mathematician - Numberphile Numberphile ขอแนะนำสำหรับคุณ 18:39 TEST A 3 PHASE 400VAC INVERTER WITH 230VAC 1 PHASE SUPPLY, WITHOUT TRANSFORMER! Stefano Bassi ดู 15 ครั้ง วิธีการสร้างเครื่องปรับรอบมอเตอร์สามเฟสหนึ่งแรงม้า Sompong Tungmepol ดู 632 ครั้ง 2:42 แสดงเพิ่

ปรับรอบ BLDC บัสเลสมอเตอร์Arduino Atmega 168 Atmega 328 Atmega 1280 Atmega 2560 For 3 phase induction motor speed controller http://sompong-tungmepol-thailland.blogspot.com/2017/04/3-phase-induction-motor-speed-controller.html

ปรับรอบ BLDC บัสเลสมอเตอร์

Arduino Atmega 168 Atmega 328 Atmega 1280 Atmega 2560 For  3 phase induction motor speed controller

http://sompong-tungmepol-thailland.blogspot.com/2017/04/3-phase-induction-motor-speed-controller.html

ปรับรอบ BLDC บัสเลสมอเตอร์Arduino Atmega 168 Atmega 328 Atmega 1280 Atmega 2560 For 3 phase induction motor speed controller http://sompong-tungmepol-thailland.blogspot.com/2017/04/3-phase-induction-motor-speed-controller.html

สร้าง Inverter 3 Phase ใช้เอง 004

Arduino Atmega 168 Atmega 328 Atmega 1280 Atmega 2560 For  3 phase induction motor speed controller

http://sompong-tungmepol-thailland.blogspot.com/2017/04/3-phase-induction-motor-speed-controller.html

สร้าง Inverter 3 Phase ใช้เอง 004

Arduino Atmega 168 Atmega 328 Atmega 1280 Atmega 2560 For  3 phase induction motor speed controller

http://sompong-tungmepol-thailland.blogspot.com/2017/04/3-phase-induction-motor-speed-controller.html

ธรรมะเป็นเรื่องธรรมดา เราจะเรียนรู้ความเป็นธรรมดาของกายของใจ ไม่ใช่เรียนบังคับ ให้ผิดธรรมดานะ ดูไปธรรมดาของกายเป็นยังไงคอยรู้สึกไป ธรรมดาของใจเป็นยังไงคอยรู้สึกไป รู้สึกอยู่ในชีวิตอย่างนี้แหล่ะนะ แต่ว่าถ้าใครอยากดีกว่านี้ถือศีลไว้ก่อน การมีศีลเนี่ยคือการจัด ระเบียบชีวิตนะให้สงบให้เรียบร้อย มันจะเกื้อกูลให้จิตสงบง่าย คนไม่มีศีลไม่สงบหรอก อย่างคนคิดจะขโมยเค้าไม่สงบหรอก คนคิดจะไปฆ่าเค้าไม่สงบหรอกนะ ฆ่าเสร็จแล้วก็ไม่สงบอีกใช่มั้ย ขโมยแล้วก็ไม่สงบอีกนะ หรือจะเป็นชู้กับเค้าจิตก็ไม่สงบ เพราะฉะนั้นศีลเนี่ยนะมันจะช่วยจัดระเบียบชีวิตของเรา ให้มันเรียบง่ายนะ สบายๆไม่เคร่งเครียด พอเรามีศีลแล้วนะใจเราจะอยู่กับเนื้อกับตัวง่าย ใจตั้งมั่นง่าย ถ้าเราไม่มีศีลนะ วอกแวกๆ คิดกลุ้มใจไปโน่นไปนี่เรื่อยๆ ถ้ามีศีลอยู่ ใจก็อยู่กับเนื้อกับตัวไปนะ พอใจอยู่กับเนื้อกับตัวแล้ว เราก็คอยตามรู้กายรู้ใจไป บางคนก็ดูกาย เห็นร่างกายเคลื่อนไหว ใจเป็นคนดู บางคนก็ดูจิตดูใจไป วิธีดูจิตก็คือ ตา หู จมูก ลิ้น กาย ใจ กระทบอารมณ์ ความรู้สึกใดแปลกปลอมขึ้นมารู้มัน แต่รู้ด้วยความเป็นกลางนะ มีเงื่อนไขสำคัญมาก รู้ด้วยความเป็นกลาง เช่นกิเลสเกิดขึ้นมา รู้ว่ามีกิเลส เช่น ความโกรธเกิดขึ้นรู้ว่าโกรธ พอความโกรธเกิดขึ้น ใจเราไม่ชอบ ให้รู้ทันใจที่ไม่ชอบนี่นะ ความไม่ชอบนี่คือความไม่เป็นกลาง ถ้าเมื่อไหร่ เราสามารถ รู้กายรู้ใจตามความเป็นจริง ด้วยจิตใจที่ตั้งมั่น ด้วยจิตใจที่เป็นกลางได้นะ ปัญญาแท้ๆมันจะเกิด เห็นกายไม่ใช่เรา ใจไม่ใช่เรา มันจะเห็นว่า ทุกสิ่งนี้เป็นของชั่วคราว ความสุข ความทุกข์ กุศล อกุศล ทั้งหลายนี้เป็นของชั่วคราวทั้งหมด เราภาวนาจนเห็นว่าทุกอย่างชั่วคราว สุข ทุกข์ ดี ชั่วทั้งหลาย ชั่วคราวทั้งหมด ตรงนี้แหละ ใจจะเป็นกลางกับทุกสิ่งทุกอย่าง ตัวนี้แหละคือสิ่งเรียกว่า สังขารุเบกขาญาน จิตมีปัญญานะ เป็นกลางกับความปรุงแต่งทั้งหลาย สุข ทุกข์ ดี ชั่วทั้งหลายนี่ จิตเป็นกลางหมดเลย เพราะอะไร เพราะปัญญา ไม่ใช่กลางเพราะการเพ่ง ไม่ใช่เป็นกลางเพราะกำหนดนะ กำหนดแล้วเป็นกลางนี่ยังไม่ใช่ ตัวนี้ต้องเป็นกลางเพราะปัญญา ถ้าเราตามรู้จิตใจของเราทุกวันๆ เราจะเห็นเลย ความสุขอยู่ชั่วคราว แล้วก็หาย ความทุกข์อยู่ชั่วคราวแล้วก็หาย โลภ โกรธ หลง อยู่ชั่วคราว แล้วก็หาย กุศลอยู่ชั่วคราวแล้วก็หายไป ถ้าตามดูอย่างนี้นานๆไปนะ จิตมันยอมรับความจริงว่า สิ่งใดเกิดขึ้นสิ่งนั้นดับไป ความสุขเกิดขึ้นจิตไม่หลงระเริง ความทุกข์เกิดขึ้นจิตไม่กลุ้มใจ จิตมันจะเป็นกลาง ต่อทุกสิ่งทุกอย่างที่มันไปรู้เข้า จิตที่มันเป็นกลางต่อทุกสิ่งทุกอย่าง นี่นะ ตัวนี้เป็นตัวสำคัญ นี่เป็นคือประตูแห่งการบรรลุมรรคผล พอมันเป็นกลางกับทุกสิ่งทุกอย่าง มันจะไม่ปรุงแต่งต่อ อย่างถ้ามันไม่เป็นกลาง มันจะปรุงแต่งต่อ เช่น ความโกรธเกิดขึ้น อยากให้หาย ก็ต้องหาทางทำให้หาย เห็นมั้ยปรุงแต่งต่อล่ะ ความสุขเกิดขึ้นอยากให้อยู่นานๆ ต้องหาทางรักษา นี่ปรุงแต่งต่อ มีการทำงาน แต่ถ้ามันเห็นทุกสิ่งทุกอย่างเกิดแล้วก็ดับๆ ไม่ปรุงแต่งต่อ จิตจะพ้นจากความปรุงแต่ง ตามรู้ตามดูจนมันพอ สติ สมาธิ ปัญญาแก่รอบ จิตใจยอมรับความจริง ยอมรับไตรลักษณ์ ว่าทุกอย่างเกิดแล้วก็ดับ ถึงจุดนี้เนี่ย มันจะเป็นรอยแยก พวกที่หวังพุทธภูมินะ ก็มีโอกาสจะเป็นพระโพธิสัตว์ ที่ได้รับคำพยากรณ์จากพระพุทธเจ้า ไม่ใช่พยากรณ์จากหมอดูนะ ต้องพยากรณ์จากพระพุทธเจ้า พวกที่ไม่ได้หวังจะเป็นพระโพธิสัตว์ แต่หวังความพ้นทุกข์นะ จิตมีโอกาสที่จะเกิดมรรคผลได้ เวลาที่จิตจะเกิดมรรคผลนั้น จิตจะรวมเข้าอัปนาสมาธิ เพราะฉะนั้นเวลาท่านพูดถึงองค์มรรคเนี่ย สัมมาสมาธิ ท่านจะพูดด้วยอัปนาสมาธิ ด้วยฌาน ๔ พวกเราตอนที่เจริญสติอยู่นี่เรียกว่า เจริญบุพพภาคมรรค เบื้องต้นแห่งมรรคยังไม่เป็นฌานนะ เราหัดเจริญสติอยู่ในชีวิตประจำวันอย่างนี้ ถึงวันที่อริยมรรคจะเกิด จิตจะรวมเข้าฌานโดยอัตโนมัตินะ จิตเวลาที่เกิดมรรคเกิดผล จะไม่เกิดในจิตของคนธรรมดา นี่เรียกว่ากามาวจรจิต กามาวจรภูมิ ไม่เป็นอย่างนั้น จะต้องเข้าฌานนะ เมื่อมันรวมเข้าไปแล้วมันจะเห็น สภาวะธรรมนี่เกิดดับสองขณะหรือสามขณะ แต่ละคนไม่เท่ากันนะ ถัดจากนั้นจิตจะวางการรู้อารมณ์ ทวนกระแสเข้ามาหาธาตุรู้ สิ่งที่ห่อหุ้มปกคลุมธาตุรู้อยู่นี่ ถูกอริยมรรคแหวกออกไป แล้วก็มันจะไปเห็นนิพพานนะ นิพพานไม่ใช่ว่างเปล่า นิพพานไม่ใช่โลกๆหนึ่ง พวกเรายังไม่เคยเห็น เราก็วาดภาพสุดโต่งไปสองข้าง ข้างหนึ่งก็นิพพานเป็นโลกๆหนึ่ง พวกนี้พวกสัสตะทิฐิ มีของที่เที่ยงคงที่ อีกพวกหนึ่งคิดว่านิพพานสูญไปเลย ขณะนั้นไม่มีอะไรเหลือเลย กระทั่งสติ พวกนี้หลงไปล่ะ คิดว่านิพพานไม่มีอะไรเลย นี่พวกอุจเฉททิฐินะ นิพพานมีนะ นิพพานมีสภาวะรองรับ สภาวะของนิพพานคือสันติ คือความสงบนั่นเอง สงบจากอะไร สงบจากกิเลส สงบจากอะไร สงบจากความปรุงแต่ง สงบจากอะไร สงบจากการแบกหามขันธ์นะ ดังนั้นเราภาวนานะ เนี่ยจาก ฮ นกฮูก ไปหา ก ไก่ จาก ก ไก่ กลับมา ฮ นกฮูกล่ะ เราจะเรียนได้แค่ไหน ป ปลาได้มั้ย หึๆๆ เอ้าชั่วโมงนึงพอดีๆนะ ให้หลวงพ่อเทศน์เรื่องนี้ยาวมากนะ เนื้อหามันยาวมากเลย เทศน์รอบเดียวไม่จบหรอก

สู้กิเลสได้หรือว่าแพ้กิเลสก็แตกหักกันตรงนี้แหละ ตรงที่มาเจริญปัญญานี่แหละ

ธรรมะเป็นเรื่องธรรมดา 
เราจะเรียนรู้ความเป็นธรรมดาของกายของใจ ไม่ใช่เรียนบังคับ
ให้ผิดธรรมดานะ ดูไปธรรมดาของกายเป็นยังไงคอยรู้สึกไป 
ธรรมดาของใจเป็นยังไงคอยรู้สึกไป รู้สึกอยู่ในชีวิตอย่างนี้แหล่ะนะ 

แต่ว่าถ้าใครอยากดีกว่านี้ถือศีลไว้ก่อน การมีศีลเนี่ยคือการจัด
ระเบียบชีวิตนะให้สงบให้เรียบร้อย มันจะเกื้อกูลให้จิตสงบง่าย 
คนไม่มีศีลไม่สงบหรอก อย่างคนคิดจะขโมยเค้าไม่สงบหรอก 
คนคิดจะไปฆ่าเค้าไม่สงบหรอกนะ ฆ่าเสร็จแล้วก็ไม่สงบอีกใช่มั้ย 
ขโมยแล้วก็ไม่สงบอีกนะ หรือจะเป็นชู้กับเค้าจิตก็ไม่สงบ 
เพราะฉะนั้นศีลเนี่ยนะมันจะช่วยจัดระเบียบชีวิตของเรา 
ให้มันเรียบง่ายนะ สบายๆไม่เคร่งเครียด 
พอเรามีศีลแล้วนะใจเราจะอยู่กับเนื้อกับตัวง่าย ใจตั้งมั่นง่าย 
ถ้าเราไม่มีศีลนะ วอกแวกๆ คิดกลุ้มใจไปโน่นไปนี่เรื่อยๆ 
ถ้ามีศีลอยู่ ใจก็อยู่กับเนื้อกับตัวไปนะ พอใจอยู่กับเนื้อกับตัวแล้ว 
เราก็คอยตามรู้กายรู้ใจไป บางคนก็ดูกาย เห็นร่างกายเคลื่อนไหว
ใจเป็นคนดู บางคนก็ดูจิตดูใจไป 
วิธีดูจิตก็คือ ตา หู จมูก ลิ้น กาย ใจ กระทบอารมณ์ 
ความรู้สึกใดแปลกปลอมขึ้นมารู้มัน แต่รู้ด้วยความเป็นกลางนะ 
มีเงื่อนไขสำคัญมาก รู้ด้วยความเป็นกลาง เช่นกิเลสเกิดขึ้นมา
รู้ว่ามีกิเลส เช่น ความโกรธเกิดขึ้นรู้ว่าโกรธ 
พอความโกรธเกิดขึ้น ใจเราไม่ชอบ ให้รู้ทันใจที่ไม่ชอบนี่นะ 
ความไม่ชอบนี่คือความไม่เป็นกลาง ถ้าเมื่อไหร่ เราสามารถ
รู้กายรู้ใจตามความเป็นจริง ด้วยจิตใจที่ตั้งมั่น 
ด้วยจิตใจที่เป็นกลางได้นะ ปัญญาแท้ๆมันจะเกิด 
เห็นกายไม่ใช่เรา ใจไม่ใช่เรา มันจะเห็นว่า
ทุกสิ่งนี้เป็นของชั่วคราว ความสุข ความทุกข์ กุศล อกุศล
ทั้งหลายนี้เป็นของชั่วคราวทั้งหมด 
เราภาวนาจนเห็นว่าทุกอย่างชั่วคราว สุข ทุกข์ ดี ชั่วทั้งหลาย
ชั่วคราวทั้งหมด ตรงนี้แหละ ใจจะเป็นกลางกับทุกสิ่งทุกอย่าง 
ตัวนี้แหละคือสิ่งเรียกว่า สังขารุเบกขาญาน จิตมีปัญญานะ 
เป็นกลางกับความปรุงแต่งทั้งหลาย สุข ทุกข์ ดี ชั่วทั้งหลายนี่
จิตเป็นกลางหมดเลย เพราะอะไร เพราะปัญญา 
ไม่ใช่กลางเพราะการเพ่ง ไม่ใช่เป็นกลางเพราะกำหนดนะ 
กำหนดแล้วเป็นกลางนี่ยังไม่ใช่ ตัวนี้ต้องเป็นกลางเพราะปัญญา 
ถ้าเราตามรู้จิตใจของเราทุกวันๆ เราจะเห็นเลย 
ความสุขอยู่ชั่วคราว แล้วก็หาย ความทุกข์อยู่ชั่วคราวแล้วก็หาย 
โลภ โกรธ หลง อยู่ชั่วคราว แล้วก็หาย กุศลอยู่ชั่วคราวแล้วก็หายไป 
ถ้าตามดูอย่างนี้นานๆไปนะ จิตมันยอมรับความจริงว่า 
สิ่งใดเกิดขึ้นสิ่งนั้นดับไป ความสุขเกิดขึ้นจิตไม่หลงระเริง 
ความทุกข์เกิดขึ้นจิตไม่กลุ้มใจ จิตมันจะเป็นกลาง
ต่อทุกสิ่งทุกอย่างที่มันไปรู้เข้า จิตที่มันเป็นกลางต่อทุกสิ่งทุกอย่าง
นี่นะ ตัวนี้เป็นตัวสำคัญ นี่เป็นคือประตูแห่งการบรรลุมรรคผล 
พอมันเป็นกลางกับทุกสิ่งทุกอย่าง มันจะไม่ปรุงแต่งต่อ 
อย่างถ้ามันไม่เป็นกลาง มันจะปรุงแต่งต่อ เช่น ความโกรธเกิดขึ้น
อยากให้หาย ก็ต้องหาทางทำให้หาย เห็นมั้ยปรุงแต่งต่อล่ะ 
ความสุขเกิดขึ้นอยากให้อยู่นานๆ ต้องหาทางรักษา นี่ปรุงแต่งต่อ 
มีการทำงาน แต่ถ้ามันเห็นทุกสิ่งทุกอย่างเกิดแล้วก็ดับๆ 
ไม่ปรุงแต่งต่อ จิตจะพ้นจากความปรุงแต่ง ตามรู้ตามดูจนมันพอ 
สติ สมาธิ ปัญญาแก่รอบ จิตใจยอมรับความจริง ยอมรับไตรลักษณ์
ว่าทุกอย่างเกิดแล้วก็ดับ ถึงจุดนี้เนี่ย มันจะเป็นรอยแยก 
พวกที่หวังพุทธภูมินะ ก็มีโอกาสจะเป็นพระโพธิสัตว์ 
ที่ได้รับคำพยากรณ์จากพระพุทธเจ้า ไม่ใช่พยากรณ์จากหมอดูนะ 
ต้องพยากรณ์จากพระพุทธเจ้า พวกที่ไม่ได้หวังจะเป็นพระโพธิสัตว์
แต่หวังความพ้นทุกข์นะ จิตมีโอกาสที่จะเกิดมรรคผลได้ 

เวลาที่จิตจะเกิดมรรคผลนั้น จิตจะรวมเข้าอัปนาสมาธิ 
เพราะฉะนั้นเวลาท่านพูดถึงองค์มรรคเนี่ย สัมมาสมาธิ 
ท่านจะพูดด้วยอัปนาสมาธิ ด้วยฌาน ๔ 
พวกเราตอนที่เจริญสติอยู่นี่เรียกว่า เจริญบุพพภาคมรรค 
เบื้องต้นแห่งมรรคยังไม่เป็นฌานนะ 
เราหัดเจริญสติอยู่ในชีวิตประจำวันอย่างนี้ ถึงวันที่อริยมรรคจะเกิด
จิตจะรวมเข้าฌานโดยอัตโนมัตินะ จิตเวลาที่เกิดมรรคเกิดผล
จะไม่เกิดในจิตของคนธรรมดา นี่เรียกว่ากามาวจรจิต กามาวจรภูมิ 
ไม่เป็นอย่างนั้น จะต้องเข้าฌานนะ เมื่อมันรวมเข้าไปแล้วมันจะเห็น
สภาวะธรรมนี่เกิดดับสองขณะหรือสามขณะ แต่ละคนไม่เท่ากันนะ 
ถัดจากนั้นจิตจะวางการรู้อารมณ์ ทวนกระแสเข้ามาหาธาตุรู้ 
สิ่งที่ห่อหุ้มปกคลุมธาตุรู้อยู่นี่ ถูกอริยมรรคแหวกออกไป
แล้วก็มันจะไปเห็นนิพพานนะ นิพพานไม่ใช่ว่างเปล่า
นิพพานไม่ใช่โลกๆหนึ่ง พวกเรายังไม่เคยเห็น 
เราก็วาดภาพสุดโต่งไปสองข้าง ข้างหนึ่งก็นิพพานเป็นโลกๆหนึ่ง 
พวกนี้พวกสัสตะทิฐิ มีของที่เที่ยงคงที่ 
อีกพวกหนึ่งคิดว่านิพพานสูญไปเลย ขณะนั้นไม่มีอะไรเหลือเลย 
กระทั่งสติ พวกนี้หลงไปล่ะ คิดว่านิพพานไม่มีอะไรเลย 
นี่พวกอุจเฉททิฐินะ นิพพานมีนะ นิพพานมีสภาวะรองรับ 
สภาวะของนิพพานคือสันติ คือความสงบนั่นเอง 
สงบจากอะไร สงบจากกิเลส 
สงบจากอะไร สงบจากความปรุงแต่ง 
สงบจากอะไร สงบจากการแบกหามขันธ์นะ ดังนั้นเราภาวนานะ

เนี่ยจาก ฮ นกฮูก ไปหา ก ไก่ จาก ก ไก่ กลับมา ฮ นกฮูกล่ะ 
เราจะเรียนได้แค่ไหน ป ปลาได้มั้ย หึๆๆ 

เอ้าชั่วโมงนึงพอดีๆนะ 
ให้หลวงพ่อเทศน์เรื่องนี้ยาวมากนะ เนื้อหามันยาวมากเลย 
เทศน์รอบเดียวไม่จบหรอก

การเปลี่ยนแปลง ทางจิตวิญญาณ ข้ามอรรณพด้วยความไม่ ประมาท ล่วงทุกข์ด้วยควา...

ธรรมะเป็นเรื่องธรรมดา 
เราจะเรียนรู้ความเป็นธรรมดาของกายของใจ ไม่ใช่เรียนบังคับ
ให้ผิดธรรมดานะ ดูไปธรรมดาของกายเป็นยังไงคอยรู้สึกไป 
ธรรมดาของใจเป็นยังไงคอยรู้สึกไป รู้สึกอยู่ในชีวิตอย่างนี้แหล่ะนะ 

แต่ว่าถ้าใครอยากดีกว่านี้ถือศีลไว้ก่อน การมีศีลเนี่ยคือการจัด
ระเบียบชีวิตนะให้สงบให้เรียบร้อย มันจะเกื้อกูลให้จิตสงบง่าย 
คนไม่มีศีลไม่สงบหรอก อย่างคนคิดจะขโมยเค้าไม่สงบหรอก 
คนคิดจะไปฆ่าเค้าไม่สงบหรอกนะ ฆ่าเสร็จแล้วก็ไม่สงบอีกใช่มั้ย 
ขโมยแล้วก็ไม่สงบอีกนะ หรือจะเป็นชู้กับเค้าจิตก็ไม่สงบ 
เพราะฉะนั้นศีลเนี่ยนะมันจะช่วยจัดระเบียบชีวิตของเรา 
ให้มันเรียบง่ายนะ สบายๆไม่เคร่งเครียด 
พอเรามีศีลแล้วนะใจเราจะอยู่กับเนื้อกับตัวง่าย ใจตั้งมั่นง่าย 
ถ้าเราไม่มีศีลนะ วอกแวกๆ คิดกลุ้มใจไปโน่นไปนี่เรื่อยๆ 
ถ้ามีศีลอยู่ ใจก็อยู่กับเนื้อกับตัวไปนะ พอใจอยู่กับเนื้อกับตัวแล้ว 
เราก็คอยตามรู้กายรู้ใจไป บางคนก็ดูกาย เห็นร่างกายเคลื่อนไหว
ใจเป็นคนดู บางคนก็ดูจิตดูใจไป 
วิธีดูจิตก็คือ ตา หู จมูก ลิ้น กาย ใจ กระทบอารมณ์ 
ความรู้สึกใดแปลกปลอมขึ้นมารู้มัน แต่รู้ด้วยความเป็นกลางนะ 
มีเงื่อนไขสำคัญมาก รู้ด้วยความเป็นกลาง เช่นกิเลสเกิดขึ้นมา
รู้ว่ามีกิเลส เช่น ความโกรธเกิดขึ้นรู้ว่าโกรธ 
พอความโกรธเกิดขึ้น ใจเราไม่ชอบ ให้รู้ทันใจที่ไม่ชอบนี่นะ 
ความไม่ชอบนี่คือความไม่เป็นกลาง ถ้าเมื่อไหร่ เราสามารถ
รู้กายรู้ใจตามความเป็นจริง ด้วยจิตใจที่ตั้งมั่น 
ด้วยจิตใจที่เป็นกลางได้นะ ปัญญาแท้ๆมันจะเกิด 
เห็นกายไม่ใช่เรา ใจไม่ใช่เรา มันจะเห็นว่า
ทุกสิ่งนี้เป็นของชั่วคราว ความสุข ความทุกข์ กุศล อกุศล
ทั้งหลายนี้เป็นของชั่วคราวทั้งหมด 
เราภาวนาจนเห็นว่าทุกอย่างชั่วคราว สุข ทุกข์ ดี ชั่วทั้งหลาย
ชั่วคราวทั้งหมด ตรงนี้แหละ ใจจะเป็นกลางกับทุกสิ่งทุกอย่าง 
ตัวนี้แหละคือสิ่งเรียกว่า สังขารุเบกขาญาน จิตมีปัญญานะ 
เป็นกลางกับความปรุงแต่งทั้งหลาย สุข ทุกข์ ดี ชั่วทั้งหลายนี่
จิตเป็นกลางหมดเลย เพราะอะไร เพราะปัญญา 
ไม่ใช่กลางเพราะการเพ่ง ไม่ใช่เป็นกลางเพราะกำหนดนะ 
กำหนดแล้วเป็นกลางนี่ยังไม่ใช่ ตัวนี้ต้องเป็นกลางเพราะปัญญา 
ถ้าเราตามรู้จิตใจของเราทุกวันๆ เราจะเห็นเลย 
ความสุขอยู่ชั่วคราว แล้วก็หาย ความทุกข์อยู่ชั่วคราวแล้วก็หาย 
โลภ โกรธ หลง อยู่ชั่วคราว แล้วก็หาย กุศลอยู่ชั่วคราวแล้วก็หายไป 
ถ้าตามดูอย่างนี้นานๆไปนะ จิตมันยอมรับความจริงว่า 
สิ่งใดเกิดขึ้นสิ่งนั้นดับไป ความสุขเกิดขึ้นจิตไม่หลงระเริง 
ความทุกข์เกิดขึ้นจิตไม่กลุ้มใจ จิตมันจะเป็นกลาง
ต่อทุกสิ่งทุกอย่างที่มันไปรู้เข้า จิตที่มันเป็นกลางต่อทุกสิ่งทุกอย่าง
นี่นะ ตัวนี้เป็นตัวสำคัญ นี่เป็นคือประตูแห่งการบรรลุมรรคผล 
พอมันเป็นกลางกับทุกสิ่งทุกอย่าง มันจะไม่ปรุงแต่งต่อ 
อย่างถ้ามันไม่เป็นกลาง มันจะปรุงแต่งต่อ เช่น ความโกรธเกิดขึ้น
อยากให้หาย ก็ต้องหาทางทำให้หาย เห็นมั้ยปรุงแต่งต่อล่ะ 
ความสุขเกิดขึ้นอยากให้อยู่นานๆ ต้องหาทางรักษา นี่ปรุงแต่งต่อ 
มีการทำงาน แต่ถ้ามันเห็นทุกสิ่งทุกอย่างเกิดแล้วก็ดับๆ 
ไม่ปรุงแต่งต่อ จิตจะพ้นจากความปรุงแต่ง ตามรู้ตามดูจนมันพอ 
สติ สมาธิ ปัญญาแก่รอบ จิตใจยอมรับความจริง ยอมรับไตรลักษณ์
ว่าทุกอย่างเกิดแล้วก็ดับ ถึงจุดนี้เนี่ย มันจะเป็นรอยแยก 
พวกที่หวังพุทธภูมินะ ก็มีโอกาสจะเป็นพระโพธิสัตว์ 
ที่ได้รับคำพยากรณ์จากพระพุทธเจ้า ไม่ใช่พยากรณ์จากหมอดูนะ 
ต้องพยากรณ์จากพระพุทธเจ้า พวกที่ไม่ได้หวังจะเป็นพระโพธิสัตว์
แต่หวังความพ้นทุกข์นะ จิตมีโอกาสที่จะเกิดมรรคผลได้ 

เวลาที่จิตจะเกิดมรรคผลนั้น จิตจะรวมเข้าอัปนาสมาธิ 
เพราะฉะนั้นเวลาท่านพูดถึงองค์มรรคเนี่ย สัมมาสมาธิ 
ท่านจะพูดด้วยอัปนาสมาธิ ด้วยฌาน ๔ 
พวกเราตอนที่เจริญสติอยู่นี่เรียกว่า เจริญบุพพภาคมรรค 
เบื้องต้นแห่งมรรคยังไม่เป็นฌานนะ 
เราหัดเจริญสติอยู่ในชีวิตประจำวันอย่างนี้ ถึงวันที่อริยมรรคจะเกิด
จิตจะรวมเข้าฌานโดยอัตโนมัตินะ จิตเวลาที่เกิดมรรคเกิดผล
จะไม่เกิดในจิตของคนธรรมดา นี่เรียกว่ากามาวจรจิต กามาวจรภูมิ 
ไม่เป็นอย่างนั้น จะต้องเข้าฌานนะ เมื่อมันรวมเข้าไปแล้วมันจะเห็น
สภาวะธรรมนี่เกิดดับสองขณะหรือสามขณะ แต่ละคนไม่เท่ากันนะ 
ถัดจากนั้นจิตจะวางการรู้อารมณ์ ทวนกระแสเข้ามาหาธาตุรู้ 
สิ่งที่ห่อหุ้มปกคลุมธาตุรู้อยู่นี่ ถูกอริยมรรคแหวกออกไป
แล้วก็มันจะไปเห็นนิพพานนะ นิพพานไม่ใช่ว่างเปล่า
นิพพานไม่ใช่โลกๆหนึ่ง พวกเรายังไม่เคยเห็น 
เราก็วาดภาพสุดโต่งไปสองข้าง ข้างหนึ่งก็นิพพานเป็นโลกๆหนึ่ง 
พวกนี้พวกสัสตะทิฐิ มีของที่เที่ยงคงที่ 
อีกพวกหนึ่งคิดว่านิพพานสูญไปเลย ขณะนั้นไม่มีอะไรเหลือเลย 
กระทั่งสติ พวกนี้หลงไปล่ะ คิดว่านิพพานไม่มีอะไรเลย 
นี่พวกอุจเฉททิฐินะ นิพพานมีนะ นิพพานมีสภาวะรองรับ 
สภาวะของนิพพานคือสันติ คือความสงบนั่นเอง 
สงบจากอะไร สงบจากกิเลส 
สงบจากอะไร สงบจากความปรุงแต่ง 
สงบจากอะไร สงบจากการแบกหามขันธ์นะ ดังนั้นเราภาวนานะ

เนี่ยจาก ฮ นกฮูก ไปหา ก ไก่ จาก ก ไก่ กลับมา ฮ นกฮูกล่ะ 
เราจะเรียนได้แค่ไหน ป ปลาได้มั้ย หึๆๆ 

เอ้าชั่วโมงนึงพอดีๆนะ 
ให้หลวงพ่อเทศน์เรื่องนี้ยาวมากนะ เนื้อหามันยาวมากเลย 
เทศน์รอบเดียวไม่จบหรอก

มอเตอร์ DC แบบไม่ใช้แปรงหมดเกิดหมดแก่หมดเจ็บหมดตาย1 ชั่วโมงที่ผ่านมา DDS Sine Generator 3 phase ATMEGA ... ผลการค้นหารูปภาพสำหรับ DDS Sine Generator 3 phase ATMEGA 168 328P PWM 4 KHZ + Danijel Gorupec, 2015 ผลการค้นหารูปภาพสำหรับ DDS Sine Generator 3 phase ATMEGA 168 328P PWM 4 KHZ + Danijel Gorupec, 2015 ผลการค้นหารูปภาพสำหรับ DDS Sine Generator 3 phase ATMEGA 168 328P PWM 4 KHZ + Danijel Gorupec, 2015 ผลการค้นหารูปภาพสำหรับ DDS Sine Generator 3 phase ATMEGA 168 328P PWM 4 KHZ + Danijel Gorupec, 2015 ผลการค้นหารูปภาพสำหรับ DDS Sine Generator 3 phase ATMEGA 168 328P PWM 4 KHZ + Danijel Gorupec, 2015 ภาพเพิ่มเติมสำหรับ DDS Sine Generator 3 phase ATMEGA 168 328P PWM 4 KHZ + Danijel Gorupec, 2015 รายงานรูปภาพ MC3PHAC ATMEGA 168 3 PHASE INVERTER FOR INDUCTION ... sompong-tungmepol-thailland.blogspot.com/.../mc3phac-atmega-168-3-... แปลหน้านี้ 11 เม.ย. 2560 - //Arduino Atmega 168 Atmega 328P 3 phase induction motor ..... //Danijel Gorupec, 2015 ... 4khz And Sine wave For IGBT GT15J331 L6569 4 Khz PWM By ..... DDS Sine Generator 3 phase motor x5 mit ATMEGA 2560 PWM ... [PDF]Sine Wave Generator www.csulb.edu/~hill/.../Lab%202d%20-%20Sine_Wave_Generator.pdf แปลหน้านี้ http://www.arduino.cc/playground/Code/PCMAudio - ATmega168 code ... Generate sine wave modulated PWM with AVR microcontroller - ATmega8 ... PWM = 0b0001 Phase Correct. AVR DDS signal generator V1.0 - This is the documentation schematic, pcb, code for for an .... cycle, A in Figure 4) or 3 (100% duty cycle). คำที่ขาดไป: danijel ‎gorupec ‎2015 การประกอบมอเตอร์ไฟฟ้าสามเฟส - YouTube https://www.youtube.com/watch?v=NZvRUISNX9o&lc... แปลหน้านี้ //Arduino Atmega 168 Atmega 328P 3 phase induction motor Variable Speed .... 5 ตัว // DDS Sine Generator 3 phase motor x5 mit ATMEGA 2560 PWM 4KHZ ..... for small 3-phase inverter //Danijel Gorupec, 2015 //Edit prescaller And Sine ... เศรษฐกิจปี 2560 ฟื้นฟูเศรษฐกิจ Arduino uno 3phase - YouTube วิดีโอสำหรับ DDS Sine Generator 3 phase ATMEGA 168 328P PWM 4 KHZ + Danijel Gorupec, 2015▶ 2:37 https://www.youtube.com/watch?v=t_W-v4KlqLg 2 ต.ค. 2559 - อัปโหลดโดย Sompong Tungmepol http://www.avrfreaks.net/forum/3-phase-sine-wave-atmega Arduino ... //Arduino Atmega 168 Atmega 328P 3 ... เศรษฐกิจ ดิจิทัล - YouTube วิดีโอสำหรับ DDS Sine Generator 3 phase ATMEGA 168 328P PWM 4 KHZ + Danijel Gorupec, 2015▶ 5:51 https://www.youtube.com/watch?v=2QwgH6rXzv4 25 ส.ค. 2560 - อัปโหลดโดย หมดเกิดหมดแก่หมดเจ็บหมดตาย //Arduino Atmega 168 Atmega 328P 3 phase induction motor Variable Speed .... //ใช้ขับมอเตอร์สามเฟส ได้พร้อมกัน 5 ตัว // DDS Sine Generator 3 phase ... 3 PWM for 3 phase inventer - Arduino Forum forum.arduino.cc/index.php?topic=236778.0 แปลหน้านี้ 29 เม.ย. 2557 - 15 โพสต์ - ‎3 ผู้เขียน i want to generate 3 PWM 120 degrees out of phase with arduino ... #include "avr/pgmspace.h" ... Refer to PWM to sine.xls on how the values was calculated .... this is the timebase REFCLOCK for the DDS generator ... For a 50Hz motor, the commutation frequency is 50Hz but the PWM will be a few kHz. คำที่ขาดไป: 328p ‎danijel ‎gorupec ‎2015 sine wave generation using DAC - Arduino Forum forum.arduino.cc/index.php?topic=44926.0 แปลหน้านี้ 1 ต.ค. 2553 - 15 โพสต์ - ‎1 ผู้เขียน DDS Sine Generator mit ATMEGS 168 * Timer2 generates the 31250 KHz Clock Interrupt ... #include ... ,29,27,25,23,21,20,18,16,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6 ... set prscaler to 1, PWM mode to phase correct PWM, 16000000/510 = 31372.55 Hz clock คำที่ขาดไป: 328p ‎danijel ‎gorupec ‎2015 การประกอบมอเตอร์ไฟฟ้าสามเฟส วิดีโอสำหรับ DDS Sine Generator 3 phase ATMEGA 168 328P PWM 4 KHZ + Danijel Gorupec, 2015▶ 4:30 https://ruclip.com/video/.../การประกอบมอเตอร์ไฟฟ้าสามเฟส.html มี บอร์ด Arduino 1 บอร์ด ราคา 700 บาท ซื้อ เฉพาะไอซี Atmega 328 P ที่UPLOAD โปรแกรมแล้ว ก็ได้ครับ แล้วนำไป บัดกรีเอง ราคา 300 ... DDS Sine Generator 3 phase motor x5 mit ATMEGA 2560 PWM 4KHZ .... //Arduino Atmega 168 Atmega 328P ... เศรษฐกิจดี 3 phase induction motor speed Controller website appnationconference.com/video/yh3J5gZSGC3k แปลหน้านี้ 1 ARDUINO SKETCH 3 phase induction motor speed control Arduino ATmega 168 328 P 1280 2560 BY Tomasz ... the proportion of voltage to the rated frequency #define T_PWM (0.000255) //period of PWM signal - set by .... DDS Sine Generator 3 phase motor x5 mit ATMEGA 2560 PWM 4KHZ ...... //Danijel Gorupec, 2015 อ่านเพิ่มเติม ตอบกลับ Sompong Tungmepol Sompong Tungmepol1 ชั่วโมงที่ผ่านมา DDS Sine Generator 3 phase ATMEGA 168 328P PWM 4KHZ + Danijel Gorupec, 2015 ตอบกลับ Sompong Tungmepol Sompong Tungmepol1 ชั่วโมงที่ผ่านมา DDS Sine Generator 3 phase ATMEGA 168 328P PWM 4KHZ + Danijel Gorupec, 2015 ตอบกลับ Sompong Tungmepol Sompong Tungmepol23 ชั่วโมงที่ผ่านมา ดูจากที่นี่ก็ได้ครับของท่านนี้ทำนนี้ ทำจะดีกว่าที่ผมทำครับ เยี่ยมมากครับ ยินดีและ อนุโมทนา สาธุ ครับ ผม https://3phaseinverter.blogspot.com/2017/07/inverter-to-drive-3-phase-motors.html?showComment=1506929774657 ตอบกลับ สมพงศ์ อินดัสเตรียล อิเล็กทรอนิคส์ สมพงศ์ อินดัสเตรียล อิเล็กทรอนิคส์1 วันที่ผ่านมา https://www.youtube.com/watch?v=JdgxQxvHL00&t=0s ตอบกลับ Sompong Tungmepol Sompong Tungmepol1 วันที่ผ่านมา http://gorupec.awardspace.com/InverterSmall/Inverter.html ตอบกลับ Sompong Tungmepol Sompong Tungmepol1 วันที่ผ่านมา https://www.youtube.com/watch?v=JdgxQxvHL00 ตอบกลับ Sompong Tungmepol Sompong Tungmepol1 วันที่ผ่านมา https://www.youtube.com/watch?v=aGUwDdYTyqE ตอบกลับ

ATmega 168 ATmega 328 P

// DDS Sine Generator 3 phase ATMEGA 168 328P PWM 4KHZ + Danijel Gorupec, 2015

// Support 7 Segments Show Hz  15/07/2017

// Import SevSeg Library : https://playground.arduino.cc/Main/SevenSegmentLibrary



#include "arduino.h" //Store data in flash (program) memory instead of SRAM

#include "avr/pgmspace.h"

#include "avr/io.h"

#include "SevSeg.h"

SevSeg sevseg; //Instantiate a seven segment controller object



   const byte sine256[] PROGMEM  = {

  127,130,133,136,139,143,146,149,152,155,158,161,164,167,170,173,176,178,181,184,187,190,192,195,198,200,203,205,208,210,212,215,217,219,221,223,225,227,229,231,233,234,236,238,239,240,

  242,243,244,245,247,248,249,249,250,251,252,252,253,253,253,254,254,254,254,254,254,254,253,253,253,252,252,251,250,249,249,248,247,245,244,243,242,240,239,238,236,234,233,231,229,227,225,223,

  221,219,217,215,212,210,208,205,203,200,198,195,192,190,187,184,181,178,176,173,170,167,164,161,158,155,152,149,146,143,139,136,133,130,127,124,121,118,115,111,108,105,102,99,96,93,90,87,84,81,78,

  76,73,70,67,64,62,59,56,54,51,49,46,44,42,39,37,35,33,31,29,27,25,23,21,20,18,16,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,16,18,20,21,23,25,27,29,31,

  33,35,37,39,42,44,46,49,51,54,56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,102,105,108,111,115,118,121,124



};

#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) //define a bit to have the properties of a clear bit operator

#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))//define a bit to have the properties of a set bit operator

#define INPUT_DIR ((PINC&0x04)==0)  // 00000010 = A2 //Control Direction





int PWM1=  9;  //PWM1 output, phase 1

int PWM2 = 10; //PWM2 output, phase 2

int PWM3 = 11; //PWM3 output, phase 3





//int offset_1 = 85; //offset 1 is 120 degrees out of phase with previous phase, Refer to PWM to sine.xls

//int offset_2 = 170; //offset 2 is 120 degrees out of phase with offset 1. Refer to PWM to sine.xls

int offset_1; //offset 1 is 120 degrees out of phase with previous phase, Refer to PWM to sine.xls

int offset_2; //offset 2 is 120 degrees out of phase with offset 1. Refer to PWM to sine.xls

//int program_exec_time = A3; //monitor how quickly the interrupt trigger

int ISR_exec_time = A4; //monitor how long the interrupt takes

int INVERTOR_ENABLE = A1; //INVERTOR ENABLE



double ad_cel; //Manat Add Motor Acceleration, Deceleration

double spd_ref;  //Manat Add

double spd_ref_max = 481;  //60Hz Manat Add

double spd_ref_min = 20;  //2.5Hz Manat Add

double speed;   // Manat Add

unsigned char direction; // Manat Add rotation direction (0 forwared, 1 reverse)

unsigned char run;  //Manat Add

int num = 0; // Manat Add for Hz Show 7-Segments



const double refclk=31376.6;      // measured output frequency

//----------------------------------------------------------------------------

const int ledPin =  A5;         // the number of the LED pin

int ledState = LOW;             // ledState used to set the LED

long previousMillis = 0;        // will store last time LED was updated

long interval = 50000;           // interval at which to blink (milliseconds)

//----------------------------------------------------------------------------



// variables used inside interrupt service declared as voilatile

volatile byte current_count;              // Keep track of where the current count is in sine 256 array

volatile byte ms4_delay;             //variable used to generate a 4ms delay

volatile byte c4ms;              // after every 4ms this variable is incremented, its used to create a delay of 1 second

volatile unsigned long phase_accumulator;   // pahse accumulator

volatile unsigned long tword_m;  // dds tuning word m, refer to DDS_calculator (from Martin Nawrath) for explination.



void setup()

{

  Serial.begin(9600);        // Manat Add

 

  pinMode(PWM1, OUTPUT);      //sets the digital pin as output

  pinMode(PWM2, OUTPUT);      //sets the digital pin as output

  pinMode(PWM3, OUTPUT);  //sets the digital pin as output

 

  pinMode(ledPin, OUTPUT);  //Manat Add

  pinMode(ISR_exec_time, OUTPUT);      //sets the digital pin as output

  pinMode(INVERTOR_ENABLE, OUTPUT);      //sets the digital pin as output

  digitalWrite(INVERTOR_ENABLE, LOW);  //Manat Add



 

 

  //sbi(PORTB,program_exec_time); //Sets the pin

  //digitalWrite(program_exec_time, HIGH);

 

  Setup_timer0();

  Setup_timer1();

  Setup_timer2();

  //Disable Timer 1 interrupt to avoid any timing delays

  //cbi (TIMSK0,TOIE0);              //disable Timer0 !!! delay() is now not available

  sbi (TIMSK2,TOIE2);              //enable Timer2 Interrupt

 

 

  tword_m=pow(2,32)*speed/refclk;  //calulate DDS new tuning word

 

  //-----------SevenSegment-------------

  byte numDigits = 2;

  byte digitPins[] = {13, 12};

  byte segmentPins[] = {8, 7, 6, 5, 4, 3, 2};

  bool resistorsOnSegments = false; // 'false' means resistors are on digit pins

  byte hardwareConfig = COMMON_CATHODE; // See README.md for options

  bool updateWithDelays = false; // Default. Recommended

  bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros

 

  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros);

  sevseg.setBrightness(1);

  //------------------------------------

  digitalWrite(ledPin, HIGH); 

  WaitLoop(30000);

  digitalWrite(ledPin, LOW); 

}



void loop()

{

  while(1)

  {

     ReadAnalogs();

     unsigned long currentMillis = millis();    //  For ledState

   

   //---------Control Power IR2111----------------------------

     if (speed > spd_ref_min){

       offset_1 = 85;

       offset_2 = 170;

       run = 1;

       digitalWrite(INVERTOR_ENABLE, HIGH);

     }

     else {

       offset_1 = 0;

       offset_2 = 0;

       run = 0;

       digitalWrite(INVERTOR_ENABLE, LOW);

     }

   //---------7 Segments Show Hz------------------------------ 

     num = (speed/8);

     if(speed == spd_ref_min) num = 0;

     sevseg.setNumber(num, 2);

     sevseg.refreshDisplay();   

   //sbi(PORTC,program_exec_time); //Sets the pin

   //digitalWrite(program_exec_time, HIGH);

 

   //---------Monitor program---------------------------------

  if((currentMillis - previousMillis) > (interval/(num+1))) {

    // save the last time you blinked the LED

    previousMillis = currentMillis; 



    // if the LED is off turn it on and vice-versa:

    if (ledState == LOW)

      ledState = HIGH;

    else

      ledState = LOW;



    // set the LED with the ledState of the variable:

    digitalWrite(ledPin, ledState);

  }

 

   //---------------------------------------------------------------

   

      if (c4ms > 0) // c4ms = 4ms, thus 4ms *250 = 1 second delay

       {               

        c4ms=0;                          //Reset c4ms

        cbi (TIMSK2,TOIE2);              //Disable Timer2 Interrupt

        tword_m=pow(2,32)*speed/refclk;  //Calulate DDS new tuning word

        sbi (TIMSK2,TOIE2);              //Enable Timer2 Interrupt



      }

     

  }

}



void WaitLoop(unsigned int time)

{

unsigned int i,j;

for (j=0;j<time;j++)

{

for (i=0;i<200;i++) //the ATmega is runs at 16MHz

if (PORTC==0xFF) DDRB|=0x02; //just a dummy instruction

}

}





void ReadAnalogs(void)

{

      spd_ref=map(analogRead(0),0,1023,0,spd_ref_max);             //Read voltage on analog 1 to see desired output frequency, 0V = 0Hz, 5V = 1.023kHz

      ad_cel=map(analogRead(3),0,1023,1,200);    // Manat Add

     

       if(spd_ref > spd_ref_max) spd_ref = spd_ref_max;  // Manat add maximum 60Hz 

       if(spd_ref < spd_ref_min) spd_ref = 0;  // Manat Add minimum 2.5Hz

 



       if (INPUT_DIR)

        {

          if (direction==0) spd_ref=spd_ref_min;

          if (speed==spd_ref_min) direction=1; //only allow direction change at minimum speed

         

        }

 

       else

       {

          if (direction==1) spd_ref=spd_ref_min;

          if (speed==spd_ref_min) direction=0; //only alow direction change at minimum speed

         

        } 



     //if (spd_ref>speed) speed=speed+0.02;   // Hz step

     //if (spd_ref<speed) speed=speed-0.02;

     if (spd_ref>speed) speed=speed+(1/ad_cel);   // Hz step

     if (spd_ref<speed) speed=speed-(1/ad_cel);

     if (speed<spd_ref_min) speed=spd_ref_min;

 

}





void Setup_timer0(void)

{

 

 

  TCCR0B = (TCCR0B & 0b11111000) | 0x02;

  // Timer1 PWM Mode set to Phase Correct PWM

  cbi (TCCR0A, COM0A0);

  sbi (TCCR0A, COM0A1);

  cbi (TCCR0A, COM0B0);

  sbi (TCCR0A, COM0B1);



  // Mode 1 / Phase Correct PWM

  sbi (TCCR0A, WGM00);

  cbi (TCCR0A, WGM01);

 

}



void Setup_timer1(void)

{

 

 TCCR1B = (TCCR1B & 0b11111000) |0x02;

  // Timer1 Clock Prescaler to : 1

 

  cbi (TCCR1A, COM1A0);

  sbi (TCCR1A, COM1A1);

  cbi (TCCR1A, COM1B0);

  sbi (TCCR1A, COM1B1);





  sbi (TCCR1A, WGM10);

  cbi (TCCR1A, WGM11);

  cbi (TCCR1B, WGM12);

  cbi (TCCR1B, WGM13);

}





void Setup_timer2()

{

 

  TCCR2B = (TCCR2B & 0b11111000) | 0x02;// Timer2 Clock Prescaler to : 1



  cbi (TCCR2A, COM2A0);  // clear Compare Match

  sbi (TCCR2A, COM2A1);

  cbi (TCCR2A, COM2B0);

  sbi (TCCR2A, COM2B1);

 

  // Mode 1  / Phase Correct PWM

  sbi (TCCR2A, WGM20); 

  cbi (TCCR2A, WGM21);

  cbi (TCCR2B, WGM22);

}







ISR(TIMER2_OVF_vect)

{

  //cbi(PORTC,program_exec_time); //Clear the pin

  //sbi(PORTC,ISR_exec_time);          // Sets the pin

  //digitalWrite(program_exec_time, LOW);

  digitalWrite(ISR_exec_time, HIGH);

  if (direction==0)

     phase_accumulator=phase_accumulator+tword_m;

  else

     phase_accumulator=phase_accumulator-tword_m;

   

   //phase_accumulator=phase_accumulator+tword_m; //Adds tuning M word to previoud phase accumulator. refer to DDS_calculator (from Martin Nawrath) for explination.

 

  if (run==0)

    current_count=0;

  else

    current_count=phase_accumulator >> 24;     // use upper 8 bits of phase_accumulator as frequency information

  //-------------------------------





  //------------------------------

 

  OCR1A = pgm_read_byte_near(sine256 + current_count); // read value fron ROM sine table and send to PWM

  OCR1B = pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_1)); // read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM1

  OCR2A = pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_2));// read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM2

 

  //increment variable ms4_delay every 4mS/125 =  milliseconds 32uS

  if(ms4_delay++ == 125)

 

  { 

    c4ms++;

    ms4_delay=0; //reset count

   } 



//cbi(PORTC,ISR_exec_time);            //Clear the pin

digitalWrite(ISR_exec_time, LOW);

}

ATmega 168 ATmega 328 P

// DDS Sine Generator 3 phase ATMEGA 168 328P PWM 4KHZ + Danijel Gorupec, 2015

// Support 7 Segments Show Hz  15/07/2017

// Import SevSeg Library : https://playground.arduino.cc/Main/SevenSegmentLibrary



#include "arduino.h" //Store data in flash (program) memory instead of SRAM

#include "avr/pgmspace.h"

#include "avr/io.h"

#include "SevSeg.h"

SevSeg sevseg; //Instantiate a seven segment controller object



   const byte sine256[] PROGMEM  = {

  127,130,133,136,139,143,146,149,152,155,158,161,164,167,170,173,176,178,181,184,187,190,192,195,198,200,203,205,208,210,212,215,217,219,221,223,225,227,229,231,233,234,236,238,239,240,

  242,243,244,245,247,248,249,249,250,251,252,252,253,253,253,254,254,254,254,254,254,254,253,253,253,252,252,251,250,249,249,248,247,245,244,243,242,240,239,238,236,234,233,231,229,227,225,223,

  221,219,217,215,212,210,208,205,203,200,198,195,192,190,187,184,181,178,176,173,170,167,164,161,158,155,152,149,146,143,139,136,133,130,127,124,121,118,115,111,108,105,102,99,96,93,90,87,84,81,78,

  76,73,70,67,64,62,59,56,54,51,49,46,44,42,39,37,35,33,31,29,27,25,23,21,20,18,16,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,16,18,20,21,23,25,27,29,31,

  33,35,37,39,42,44,46,49,51,54,56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,102,105,108,111,115,118,121,124



};

#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) //define a bit to have the properties of a clear bit operator

#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))//define a bit to have the properties of a set bit operator

#define INPUT_DIR ((PINC&0x04)==0)  // 00000010 = A2 //Control Direction





int PWM1=  9;  //PWM1 output, phase 1

int PWM2 = 10; //PWM2 output, phase 2

int PWM3 = 11; //PWM3 output, phase 3





//int offset_1 = 85; //offset 1 is 120 degrees out of phase with previous phase, Refer to PWM to sine.xls

//int offset_2 = 170; //offset 2 is 120 degrees out of phase with offset 1. Refer to PWM to sine.xls

int offset_1; //offset 1 is 120 degrees out of phase with previous phase, Refer to PWM to sine.xls

int offset_2; //offset 2 is 120 degrees out of phase with offset 1. Refer to PWM to sine.xls

//int program_exec_time = A3; //monitor how quickly the interrupt trigger

int ISR_exec_time = A4; //monitor how long the interrupt takes

int INVERTOR_ENABLE = A1; //INVERTOR ENABLE



double ad_cel; //Manat Add Motor Acceleration, Deceleration

double spd_ref;  //Manat Add

double spd_ref_max = 481;  //60Hz Manat Add

double spd_ref_min = 20;  //2.5Hz Manat Add

double speed;   // Manat Add

unsigned char direction; // Manat Add rotation direction (0 forwared, 1 reverse)

unsigned char run;  //Manat Add

int num = 0; // Manat Add for Hz Show 7-Segments



const double refclk=31376.6;      // measured output frequency

//----------------------------------------------------------------------------

const int ledPin =  A5;         // the number of the LED pin

int ledState = LOW;             // ledState used to set the LED

long previousMillis = 0;        // will store last time LED was updated

long interval = 50000;           // interval at which to blink (milliseconds)

//----------------------------------------------------------------------------



// variables used inside interrupt service declared as voilatile

volatile byte current_count;              // Keep track of where the current count is in sine 256 array

volatile byte ms4_delay;             //variable used to generate a 4ms delay

volatile byte c4ms;              // after every 4ms this variable is incremented, its used to create a delay of 1 second

volatile unsigned long phase_accumulator;   // pahse accumulator

volatile unsigned long tword_m;  // dds tuning word m, refer to DDS_calculator (from Martin Nawrath) for explination.



void setup()

{

  Serial.begin(9600);        // Manat Add

 

  pinMode(PWM1, OUTPUT);      //sets the digital pin as output

  pinMode(PWM2, OUTPUT);      //sets the digital pin as output

  pinMode(PWM3, OUTPUT);  //sets the digital pin as output

 

  pinMode(ledPin, OUTPUT);  //Manat Add

  pinMode(ISR_exec_time, OUTPUT);      //sets the digital pin as output

  pinMode(INVERTOR_ENABLE, OUTPUT);      //sets the digital pin as output

  digitalWrite(INVERTOR_ENABLE, LOW);  //Manat Add



 

 

  //sbi(PORTB,program_exec_time); //Sets the pin

  //digitalWrite(program_exec_time, HIGH);

 

  Setup_timer0();

  Setup_timer1();

  Setup_timer2();

  //Disable Timer 1 interrupt to avoid any timing delays

  //cbi (TIMSK0,TOIE0);              //disable Timer0 !!! delay() is now not available

  sbi (TIMSK2,TOIE2);              //enable Timer2 Interrupt

 

 

  tword_m=pow(2,32)*speed/refclk;  //calulate DDS new tuning word

 

  //-----------SevenSegment-------------

  byte numDigits = 2;

  byte digitPins[] = {13, 12};

  byte segmentPins[] = {8, 7, 6, 5, 4, 3, 2};

  bool resistorsOnSegments = false; // 'false' means resistors are on digit pins

  byte hardwareConfig = COMMON_CATHODE; // See README.md for options

  bool updateWithDelays = false; // Default. Recommended

  bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros

 

  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros);

  sevseg.setBrightness(1);

  //------------------------------------

  digitalWrite(ledPin, HIGH); 

  WaitLoop(30000);

  digitalWrite(ledPin, LOW); 

}



void loop()

{

  while(1)

  {

     ReadAnalogs();

     unsigned long currentMillis = millis();    //  For ledState

   

   //---------Control Power IR2111----------------------------

     if (speed > spd_ref_min){

       offset_1 = 85;

       offset_2 = 170;

       run = 1;

       digitalWrite(INVERTOR_ENABLE, HIGH);

     }

     else {

       offset_1 = 0;

       offset_2 = 0;

       run = 0;

       digitalWrite(INVERTOR_ENABLE, LOW);

     }

   //---------7 Segments Show Hz------------------------------ 

     num = (speed/8);

     if(speed == spd_ref_min) num = 0;

     sevseg.setNumber(num, 2);

     sevseg.refreshDisplay();   

   //sbi(PORTC,program_exec_time); //Sets the pin

   //digitalWrite(program_exec_time, HIGH);

 

   //---------Monitor program---------------------------------

  if((currentMillis - previousMillis) > (interval/(num+1))) {

    // save the last time you blinked the LED

    previousMillis = currentMillis; 



    // if the LED is off turn it on and vice-versa:

    if (ledState == LOW)

      ledState = HIGH;

    else

      ledState = LOW;



    // set the LED with the ledState of the variable:

    digitalWrite(ledPin, ledState);

  }

 

   //---------------------------------------------------------------

   

      if (c4ms > 0) // c4ms = 4ms, thus 4ms *250 = 1 second delay

       {               

        c4ms=0;                          //Reset c4ms

        cbi (TIMSK2,TOIE2);              //Disable Timer2 Interrupt

        tword_m=pow(2,32)*speed/refclk;  //Calulate DDS new tuning word

        sbi (TIMSK2,TOIE2);              //Enable Timer2 Interrupt



      }

     

  }

}



void WaitLoop(unsigned int time)

{

unsigned int i,j;

for (j=0;j<time;j++)

{

for (i=0;i<200;i++) //the ATmega is runs at 16MHz

if (PORTC==0xFF) DDRB|=0x02; //just a dummy instruction

}

}





void ReadAnalogs(void)

{

      spd_ref=map(analogRead(0),0,1023,0,spd_ref_max);             //Read voltage on analog 1 to see desired output frequency, 0V = 0Hz, 5V = 1.023kHz

      ad_cel=map(analogRead(3),0,1023,1,200);    // Manat Add

     

       if(spd_ref > spd_ref_max) spd_ref = spd_ref_max;  // Manat add maximum 60Hz 

       if(spd_ref < spd_ref_min) spd_ref = 0;  // Manat Add minimum 2.5Hz

 



       if (INPUT_DIR)

        {

          if (direction==0) spd_ref=spd_ref_min;

          if (speed==spd_ref_min) direction=1; //only allow direction change at minimum speed

         

        }

 

       else

       {

          if (direction==1) spd_ref=spd_ref_min;

          if (speed==spd_ref_min) direction=0; //only alow direction change at minimum speed

         

        } 



     //if (spd_ref>speed) speed=speed+0.02;   // Hz step

     //if (spd_ref<speed) speed=speed-0.02;

     if (spd_ref>speed) speed=speed+(1/ad_cel);   // Hz step

     if (spd_ref<speed) speed=speed-(1/ad_cel);

     if (speed<spd_ref_min) speed=spd_ref_min;

 

}





void Setup_timer0(void)

{

 

 

  TCCR0B = (TCCR0B & 0b11111000) | 0x02;

  // Timer1 PWM Mode set to Phase Correct PWM

  cbi (TCCR0A, COM0A0);

  sbi (TCCR0A, COM0A1);

  cbi (TCCR0A, COM0B0);

  sbi (TCCR0A, COM0B1);



  // Mode 1 / Phase Correct PWM

  sbi (TCCR0A, WGM00);

  cbi (TCCR0A, WGM01);

 

}



void Setup_timer1(void)

{

 

 TCCR1B = (TCCR1B & 0b11111000) |0x02;

  // Timer1 Clock Prescaler to : 1

 

  cbi (TCCR1A, COM1A0);

  sbi (TCCR1A, COM1A1);

  cbi (TCCR1A, COM1B0);

  sbi (TCCR1A, COM1B1);





  sbi (TCCR1A, WGM10);

  cbi (TCCR1A, WGM11);

  cbi (TCCR1B, WGM12);

  cbi (TCCR1B, WGM13);

}





void Setup_timer2()

{

 

  TCCR2B = (TCCR2B & 0b11111000) | 0x02;// Timer2 Clock Prescaler to : 1



  cbi (TCCR2A, COM2A0);  // clear Compare Match

  sbi (TCCR2A, COM2A1);

  cbi (TCCR2A, COM2B0);

  sbi (TCCR2A, COM2B1);

 

  // Mode 1  / Phase Correct PWM

  sbi (TCCR2A, WGM20); 

  cbi (TCCR2A, WGM21);

  cbi (TCCR2B, WGM22);

}







ISR(TIMER2_OVF_vect)

{

  //cbi(PORTC,program_exec_time); //Clear the pin

  //sbi(PORTC,ISR_exec_time);          // Sets the pin

  //digitalWrite(program_exec_time, LOW);

  digitalWrite(ISR_exec_time, HIGH);

  if (direction==0)

     phase_accumulator=phase_accumulator+tword_m;

  else

     phase_accumulator=phase_accumulator-tword_m;

   

   //phase_accumulator=phase_accumulator+tword_m; //Adds tuning M word to previoud phase accumulator. refer to DDS_calculator (from Martin Nawrath) for explination.

 

  if (run==0)

    current_count=0;

  else

    current_count=phase_accumulator >> 24;     // use upper 8 bits of phase_accumulator as frequency information

  //-------------------------------





  //------------------------------

 

  OCR1A = pgm_read_byte_near(sine256 + current_count); // read value fron ROM sine table and send to PWM

  OCR1B = pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_1)); // read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM1

  OCR2A = pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_2));// read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM2

 

  //increment variable ms4_delay every 4mS/125 =  milliseconds 32uS

  if(ms4_delay++ == 125)

 

  { 

    c4ms++;

    ms4_delay=0; //reset count

   } 



//cbi(PORTC,ISR_exec_time);            //Clear the pin

digitalWrite(ISR_exec_time, LOW);

}

DDS Sine Generator 3 phase ATMEGA 168 328P PWM 4KHZ + Danijel Gorupec, 2015

ATmega 168 ATmega 328 P

การต่อมอเตอร์สามเฟสกับอินเวอร์เตอร์

// DDS Sine Generator 3 phase ATMEGA 168 328P PWM 4KHZ + Danijel Gorupec, 2015

// Support 7 Segments Show Hz  15/07/2017
// Import SevSeg Library : https://playground.arduino.cc/Main/SevenSegmentLibrary

#include "arduino.h" //Store data in flash (program) memory instead of SRAM
#include "avr/pgmspace.h"
#include "avr/io.h"
#include "SevSeg.h"
SevSeg sevseg; //Instantiate a seven segment controller object

   const byte sine256[] PROGMEM  = {
  127,130,133,136,139,143,146,149,152,155,158,161,164,167,170,173,176,178,181,184,187,190,192,195,198,200,203,205,208,210,212,215,217,219,221,223,225,227,229,231,233,234,236,238,239,240,
  242,243,244,245,247,248,249,249,250,251,252,252,253,253,253,254,254,254,254,254,254,254,253,253,253,252,252,251,250,249,249,248,247,245,244,243,242,240,239,238,236,234,233,231,229,227,225,223,
  221,219,217,215,212,210,208,205,203,200,198,195,192,190,187,184,181,178,176,173,170,167,164,161,158,155,152,149,146,143,139,136,133,130,127,124,121,118,115,111,108,105,102,99,96,93,90,87,84,81,78,
  76,73,70,67,64,62,59,56,54,51,49,46,44,42,39,37,35,33,31,29,27,25,23,21,20,18,16,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,16,18,20,21,23,25,27,29,31,
  33,35,37,39,42,44,46,49,51,54,56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,102,105,108,111,115,118,121,124

};
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) //define a bit to have the properties of a clear bit operator
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))//define a bit to have the properties of a set bit operator
#define INPUT_DIR ((PINC&0x04)==0)  // 00000010 = A2 //Control Direction


int PWM1=  9;  //PWM1 output, phase 1
int PWM2 = 10; //PWM2 output, phase 2
int PWM3 = 11; //PWM3 output, phase 3


//int offset_1 = 85; //offset 1 is 120 degrees out of phase with previous phase, Refer to PWM to sine.xls
//int offset_2 = 170; //offset 2 is 120 degrees out of phase with offset 1. Refer to PWM to sine.xls
int offset_1; //offset 1 is 120 degrees out of phase with previous phase, Refer to PWM to sine.xls
int offset_2; //offset 2 is 120 degrees out of phase with offset 1. Refer to PWM to sine.xls
//int program_exec_time = A3; //monitor how quickly the interrupt trigger
int ISR_exec_time = A4; //monitor how long the interrupt takes
int INVERTOR_ENABLE = A1; //INVERTOR ENABLE

double ad_cel; //Manat Add Motor Acceleration, Deceleration
double spd_ref;  //Manat Add
double spd_ref_max = 481;  //60Hz Manat Add
double spd_ref_min = 20;  //2.5Hz Manat Add
double speed;   // Manat Add
unsigned char direction; // Manat Add rotation direction (0 forwared, 1 reverse)
unsigned char run;  //Manat Add
int num = 0; // Manat Add for Hz Show 7-Segments

const double refclk=31376.6;      // measured output frequency
//----------------------------------------------------------------------------
const int ledPin =  A5;         // the number of the LED pin
int ledState = LOW;             // ledState used to set the LED
long previousMillis = 0;        // will store last time LED was updated
long interval = 50000;           // interval at which to blink (milliseconds)
//----------------------------------------------------------------------------

// variables used inside interrupt service declared as voilatile
volatile byte current_count;              // Keep track of where the current count is in sine 256 array
volatile byte ms4_delay;             //variable used to generate a 4ms delay
volatile byte c4ms;              // after every 4ms this variable is incremented, its used to create a delay of 1 second
volatile unsigned long phase_accumulator;   // pahse accumulator
volatile unsigned long tword_m;  // dds tuning word m, refer to DDS_calculator (from Martin Nawrath) for explination.

void setup()
{
  Serial.begin(9600);        // Manat Add
   
  pinMode(PWM1, OUTPUT);      //sets the digital pin as output
  pinMode(PWM2, OUTPUT);      //sets the digital pin as output
  pinMode(PWM3, OUTPUT);  //sets the digital pin as output
  
  pinMode(ledPin, OUTPUT);  //Manat Add
  pinMode(ISR_exec_time, OUTPUT);      //sets the digital pin as output
  pinMode(INVERTOR_ENABLE, OUTPUT);      //sets the digital pin as output
  digitalWrite(INVERTOR_ENABLE, LOW);  //Manat Add
 
  
  
  //sbi(PORTB,program_exec_time); //Sets the pin
  //digitalWrite(program_exec_time, HIGH);
  
  Setup_timer0();
  Setup_timer1();
  Setup_timer2();
  //Disable Timer 1 interrupt to avoid any timing delays
  //cbi (TIMSK0,TOIE0);              //disable Timer0 !!! delay() is now not available
  sbi (TIMSK2,TOIE2);              //enable Timer2 Interrupt
  
  
  tword_m=pow(2,32)*speed/refclk;  //calulate DDS new tuning word 
  
  //-----------SevenSegment-------------
  byte numDigits = 2;
  byte digitPins[] = {13, 12};
  byte segmentPins[] = {8, 7, 6, 5, 4, 3, 2};
  bool resistorsOnSegments = false; // 'false' means resistors are on digit pins
  byte hardwareConfig = COMMON_CATHODE; // See README.md for options
  bool updateWithDelays = false; // Default. Recommended
  bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros
  
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros);
  sevseg.setBrightness(1);
  //------------------------------------
  digitalWrite(ledPin, HIGH);  
  WaitLoop(30000);
  digitalWrite(ledPin, LOW);  
}

void loop()
{
  while(1) 
  { 
     ReadAnalogs();
     unsigned long currentMillis = millis();    //  For ledState
     
   //---------Control Power IR2111----------------------------
     if (speed > spd_ref_min){
       offset_1 = 85;
       offset_2 = 170;
       run = 1;
       digitalWrite(INVERTOR_ENABLE, HIGH);
     }
     else {
       offset_1 = 0;
       offset_2 = 0;
       run = 0;
       digitalWrite(INVERTOR_ENABLE, LOW);
     }
   //---------7 Segments Show Hz------------------------------  
     num = (speed/8);
     if(speed == spd_ref_min) num = 0;
     sevseg.setNumber(num, 2);
     sevseg.refreshDisplay();    
   //sbi(PORTC,program_exec_time); //Sets the pin 
   //digitalWrite(program_exec_time, HIGH);
   
   //---------Monitor program---------------------------------
  if((currentMillis - previousMillis) > (interval/(num+1))) {
    // save the last time you blinked the LED 
    previousMillis = currentMillis;   

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }
   
   //---------------------------------------------------------------
     
      if (c4ms > 0) // c4ms = 4ms, thus 4ms *250 = 1 second delay
       {                 
        c4ms=0;                          //Reset c4ms
        cbi (TIMSK2,TOIE2);              //Disable Timer2 Interrupt
        tword_m=pow(2,32)*speed/refclk;  //Calulate DDS new tuning word
        sbi (TIMSK2,TOIE2);              //Enable Timer2 Interrupt 

      }
      
  }
}

void WaitLoop(unsigned int time)
{
unsigned int i,j;
for (j=0;j<time;j++)
{
for (i=0;i<200;i++) //the ATmega is runs at 16MHz
if (PORTC==0xFF) DDRB|=0x02; //just a dummy instruction
}
}


void ReadAnalogs(void)
{
      spd_ref=map(analogRead(0),0,1023,0,spd_ref_max);             //Read voltage on analog 1 to see desired output frequency, 0V = 0Hz, 5V = 1.023kHz
      ad_cel=map(analogRead(3),0,1023,1,200);    // Manat Add
      
       if(spd_ref > spd_ref_max) spd_ref = spd_ref_max;  // Manat add maximum 60Hz  
       if(spd_ref < spd_ref_min) spd_ref = 0;  // Manat Add minimum 2.5Hz
  

       if (INPUT_DIR)
        {
          if (direction==0) spd_ref=spd_ref_min;
          if (speed==spd_ref_min) direction=1; //only allow direction change at minimum speed
          
        }
  
       else
       {
          if (direction==1) spd_ref=spd_ref_min;
          if (speed==spd_ref_min) direction=0; //only alow direction change at minimum speed
          
        }  

     //if (spd_ref>speed) speed=speed+0.02;   // Hz step
     //if (spd_ref<speed) speed=speed-0.02;
     if (spd_ref>speed) speed=speed+(1/ad_cel);   // Hz step
     if (spd_ref<speed) speed=speed-(1/ad_cel);
     if (speed<spd_ref_min) speed=spd_ref_min;
  
}


void Setup_timer0(void)
{
  
  
  TCCR0B = (TCCR0B & 0b11111000) | 0x02;
  // Timer1 PWM Mode set to Phase Correct PWM
  cbi (TCCR0A, COM0A0);
  sbi (TCCR0A, COM0A1);
  cbi (TCCR0A, COM0B0); 
  sbi (TCCR0A, COM0B1);

  // Mode 1 / Phase Correct PWM
  sbi (TCCR0A, WGM00); 
  cbi (TCCR0A, WGM01);
  
}

void Setup_timer1(void)
{
  
 TCCR1B = (TCCR1B & 0b11111000) |0x02;
  // Timer1 Clock Prescaler to : 1
  
  cbi (TCCR1A, COM1A0);
  sbi (TCCR1A, COM1A1);
  cbi (TCCR1A, COM1B0); 
  sbi (TCCR1A, COM1B1);

 
  sbi (TCCR1A, WGM10); 
  cbi (TCCR1A, WGM11);
  cbi (TCCR1B, WGM12);
  cbi (TCCR1B, WGM13);
}


void Setup_timer2() 
{
  
  TCCR2B = (TCCR2B & 0b11111000) | 0x02;// Timer2 Clock Prescaler to : 1
 
  cbi (TCCR2A, COM2A0);  // clear Compare Match
  sbi (TCCR2A, COM2A1);
  cbi (TCCR2A, COM2B0); 
  sbi (TCCR2A, COM2B1);
  
  // Mode 1  / Phase Correct PWM
  sbi (TCCR2A, WGM20);  
  cbi (TCCR2A, WGM21);
  cbi (TCCR2B, WGM22);
}



ISR(TIMER2_OVF_vect)
{
  //cbi(PORTC,program_exec_time); //Clear the pin
  //sbi(PORTC,ISR_exec_time);          // Sets the pin
  //digitalWrite(program_exec_time, LOW);
  digitalWrite(ISR_exec_time, HIGH);
  if (direction==0) 
     phase_accumulator=phase_accumulator+tword_m;
  else
     phase_accumulator=phase_accumulator-tword_m; 
     
   //phase_accumulator=phase_accumulator+tword_m; //Adds tuning M word to previoud phase accumulator. refer to DDS_calculator (from Martin Nawrath) for explination. 
   
  if (run==0)
    current_count=0; 
  else
    current_count=phase_accumulator >> 24;     // use upper 8 bits of phase_accumulator as frequency information 
  //-------------------------------

 
  //------------------------------
  
  OCR1A = pgm_read_byte_near(sine256 + current_count); // read value fron ROM sine table and send to PWM
  OCR1B = pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_1)); // read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM1
  OCR2A = pgm_read_byte_near(sine256 + (uint8_t)(current_count + offset_2));// read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM2
  
  //increment variable ms4_delay every 4mS/125 =  milliseconds 32uS
  if(ms4_delay++ == 125)
  
  {  
    c4ms++;
    ms4_delay=0; //reset count
   }   

//cbi(PORTC,ISR_exec_time);            //Clear the pin
digitalWrite(ISR_exec_time, LOW);
}