สารบัญ:

Wort-Uhr: 5 ขั้นตอน
Wort-Uhr: 5 ขั้นตอน

วีดีโอ: Wort-Uhr: 5 ขั้นตอน

วีดีโอ: Wort-Uhr: 5 ขั้นตอน
วีดีโอ: The Deadbeat Escapement Mechanism 2024, พฤศจิกายน
Anonim
Wort-Uhr
Wort-Uhr

สวัสดีด้วยกัน!

นี่จะเป็นการสอนครั้งแรกของฉัน และหากคุณมีความคิดที่จะปรับปรุงหรือทำให้เข้าใจง่ายขึ้น โปรดอย่าลังเลที่จะติดต่อฉัน!

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

คำเดียวสำหรับสมาชิก "ที่ไม่ใช่ชาวเยอรมัน"… ขออภัยสำหรับข้อเท็จจริงที่ว่านี่เป็นเพียง "German Wort Uhr" มันอาจจะแปลงเป็นภาษาอังกฤษหรือภาษาอื่น ๆ ได้อย่างง่ายดาย แต่เมื่อฉันเป็นภาษาเยอรมัน ฉันจึงทำให้มันเป็นภาษาของฉัน หากคุณต้องการความช่วยเหลือเกี่ยวกับภาษาของคุณ โปรดติดต่อฉัน และฉันจะพยายามช่วยเหลือคุณ

มาเริ่มกันเลย…

ขั้นตอนที่ 1: แผนผัง

แผนผัง
แผนผัง

แผนผังนั้นตรงไปตรงมาและหากภาพอ่านไม่ดีก็มีไฟล์ PDF ด้วย

มาเริ่มกันที่มุมล่างซ้ายกัน มีแหล่งจ่ายไฟอย่างง่ายโดยใช้ LM7805 เพื่อสร้างเอาต์พุต 5V ที่เสถียรสำหรับ PIC, shift register (74HC164) และชิปเรียลไทม์ DS3231 ไฟ LED ทั้งหมดยังมาจากส่วนนี้ D22 ที่ด้านขวาสุดมีไว้สำหรับระบุแหล่งจ่ายไฟและสามารถแยกออกจากกันได้หากไม่ต้องการ

คุณสามารถใช้แหล่งจ่ายไฟ DC ใดก็ได้สำหรับนาฬิกาที่มีกำลังไฟน้อยกว่า 40V แต่คุณควรเลือกค่าที่เหมาะสมสำหรับ C7 ควรมีระดับแรงดันไฟฟ้าอย่างน้อยสองเท่าของแรงดันไฟฟ้าขาเข้า และจำไว้ว่าคุณกำลังสร้างความร้อนใน LM7805 ดังนั้น คุณควรพยายามรักษาแรงดันไฟฟ้าขาเข้าให้ต่ำที่สุดเท่าที่จะเป็นไปได้ เพราะอย่างอื่นเป็นเพียงการสิ้นเปลืองพลังงาน ความพอดีที่ดีที่สุดคือบางอย่างระหว่าง 9V ถึง 12V DC

ไม่ต้องกังวลเรื่องขั้วของแหล่งจ่ายไฟของคุณ… p-channel MOSFET (Q1) ทำหน้าที่เป็นตัวป้องกันขั้วที่ผิดพลาด และนาฬิกาจะไม่ทำงานและไม่ได้รับความเสียหายใดๆ คุณสามารถตรวจสอบสิ่งนี้บน "ไฟ" LED D22 หากติดตั้ง

ทางด้านขวาของแผนผังคือรีจิสเตอร์กะแบบขนานในอนุกรมเข้า ฉันตัดสินใจใช้มันเพราะฉันไม่ต้องการใช้ PIC ขนาดใหญ่ที่มี I/O-Port จำนวนมาก ฉันต้องการใช้อันที่เล็กกว่าและยังมี 16F1829 อยู่ที่บ้าน ดังนั้นตัวเลือกจึงชัดเจนอยู่แล้ว ข้อมูล (IN_1, IN_2 และ IN_3) มาจาก PIC (ดูส่วนรหัสด้านล่าง) และ REGISTER_CLK ด้วย เพื่อความง่ายในโค้ดและเลย์เอาต์ PCB ฉันใช้ 74HC164 สองตัวเป็นเวลาหลายชั่วโมงและตัวสุดท้ายสำหรับ "ตรรกะ"

ที่มุมซ้ายบนคือ PIC และชิ้นส่วนที่จำเป็นทั้งหมด ฉันใช้นาฬิกาภายในจึงไม่จำเป็นต้องใช้ออสซิลเลเตอร์ ตัวต้านทานเพียงสามตัวสำหรับ SCL, SDA และ MCLR สำหรับความจริงที่ว่าฉันใช้ 32kHz เป็นตัวบ่งชี้ "วินาทีที่แน่นอน" ไม่จำเป็นต้องใช้ความถี่ที่ค่อนข้างเสถียรและแม่นยำสำหรับ PIC

ตรงกลางมี DS3231 พร้อมชิ้นส่วนภายนอกขั้นต่ำ อันที่จริงฉันใช้เฉพาะอินพุต SDA และ SCL สำหรับการสื่อสารผ่าน I²C และเอาต์พุต 32kHZ เป็นการอ้างอิงนาฬิกาภายนอกสำหรับ Timer1 ของ PIC16F1829 สำหรับผลลัพธ์นี้ เอกสารข้อมูลระบุว่าจำเป็นต้องใช้ตัวต้านทานแบบดึงขึ้นภายนอก เอาต์พุตอื่นๆ ที่ฉันไม่ได้ใช้ในโปรเจ็กต์นี้และปล่อยให้ไม่เชื่อมต่อ

นอกจากนี้ ตรงกลาง LED… ตามที่คุณสามารถอ่านได้ในแผนผัง ฉันใช้ไฟ LED สีน้ำเงิน (ที่มีตัวเรือนที่ชัดเจน) และค่าตัวต้านทาน 1k โอห์ม หากคุณตั้งใจจะทำโครงการนี้ด้วยตัวเอง คุณควรเลือกค่าของตัวต้านทานเหล่านี้ตามสีและประเภทของ LED ที่คุณเลือก โปรดจำไว้ว่าคุณต้องการตั้งนาฬิกาไว้ที่ใด ของฉันยืนอยู่ในห้องนอนของฉันดังนั้นฉันจึงไม่ต้องการให้ไฟ LED สว่างเกินไปและเลือกค่าตัวต้านทานที่มากขึ้น ลองใช้เขียงหั่นขนมพร้อมไฟ LED และค่าตัวต้านทานก่อนทำการติดตั้งบน PCB

ขั้นตอนที่ 2: เค้าโครง

เค้าโครง
เค้าโครง
เค้าโครง
เค้าโครง
เค้าโครง
เค้าโครง

หลังจากทำแผนผังเสร็จแล้วก็ถึงเวลากำหนดเส้นทาง PCB เพื่อที่ฉันใช้ KiCAD (สำหรับแผนผังด้วย) ไม่มีอะไรจะพูดมาก แค่กำหนดเส้นทาง

สำหรับการที่ฉันพิมพ์ตัวเรือนนาฬิกาด้วยตัวเอง มันค่อนข้างสำคัญที่ตำแหน่งของไฟ LED ที่ชั้นบนสุด ฉันใส่ LED และตัวต้านทานไว้ที่ชั้นบนสุดเท่านั้นเพราะฉันสั่งให้ PCB ของฉันติดตั้งบางส่วน (ชิ้นส่วน SMD ทั้งหมด) และเนื่องจาก บริษัท ที่ฉันเลือกให้วางชิ้นส่วนไว้เพียงด้านเดียวไม่ใช่สองด้าน

คุณสามารถดูการวางในรูปภาพสามมิติสองมิติที่ฉันสร้างจาก KiCAD ได้

หากคุณสนใจ… เป็นไปได้ที่จะส่งออก KiCAD PCB ไปยัง Eagle จากนั้นจึงสร้างตัวเรือนได้ง่าย เนื่องจากคุณมีข้อมูลอ้างอิงจาก PCB

ขั้นตอนที่ 3: "ลอจิก" ของ "Wort-Uhr"

ส่วนที่ใหญ่ที่สุดสำหรับโครงการนี้คือรหัสสำหรับ PIC…

ตอนแรกค้นหา "ตรรกะ" ของเวลาที่พูดในภาษาเยอรมันและแปลเป็นรหัส

ขออภัย ไม่สามารถอัปโหลดไฟล์ Excel โดยตรงได้ แต่ฉันหวังว่าการส่งออก PDF จะอ่านได้เพียงพอสำหรับคุณ ถ้าไม่ โปรดติดต่อฉัน และฉันจะส่งไฟล์ Excel ต้นฉบับให้คุณ ใน PDF คุณสามารถดูว่าฉันตั้งค่าลอจิกสำหรับนาฬิกาได้อย่างไร คุณสามารถดูว่าฉันผ่านขั้นตอนต่างๆ อย่างไรและการสะกดคำเป็นอย่างไร การคำนวณภายในโค้ด (ส่วนใหญ่เป็นคำสั่ง if-else) สามารถได้มาจากข้อมูลทางด้านขวาของตาราง ส่วนหนึ่งเป็นนาทีและอีกส่วนหนึ่งเป็นชั่วโมง

อย่างที่คุณเห็นนี่ไม่ใช่เวทมนตร์และสามารถเขียนโค้ดได้ง่ายใน C จุดที่ "ยากที่สุด" ในตรรกะคือวิธีจัดการชั่วโมงอย่างที่คุณเห็นในไฟล์ที่แสดงเฉพาะชั่วโมงจริงในตอนต้นชั่วโมงเท่านั้น. ในภาษาเยอรมัน (อาจเป็นเฉพาะภาษาบาวาเรียเท่านั้น) "ชั่วโมงหน้า" จะใช้ค่อนข้างเร็ว

สำหรับการเข้ารหัส ฉันใช้ MPLABX เป็น IDE ที่ฉันเลือก

ขั้นตอนที่ 4: ข้อมูลโค้ด

ตัวอย่างโค้ด
ตัวอย่างโค้ด
ตัวอย่างโค้ด
ตัวอย่างโค้ด

ฉันจะไม่โพสต์โค้ดของฉันที่นี่ แต่ถ้าคุณตั้งใจจะเขียนโค้ดของคุณเอง ฉันจะบอกใบ้ถึงสิ่งที่ฉัน "สะดุด" ระหว่างการพัฒนา…

ขั้นแรกให้กรอก "ลงทะเบียน":

หากคุณถ่ายโอนข้อมูลใหม่ไปยังรีจิสเตอร์บ่อยเกินไป และในรอบที่สั้นเกินไป ฉันทำการทดลองนั้น ไฟ LED ก็เริ่มกะพริบ ดังนั้นฉันจึงสร้าง "การปิดกั้นการตั้งค่าสถานะ" ซึ่งทุกนาทีจะมี "การคำนวณ" ของเวลาพูดใหม่และทำการลงทะเบียนอัปเดต

รหัสสำหรับกรอกทะเบียนอยู่ในภาพด้านบน อย่างที่คุณเห็นฉันกรอกทั้ง 3 รีจิสเตอร์แบบขนานดังนั้นฉันต้องการ PIC 3 พินสำหรับข้อมูลและ 1 พินสำหรับ CLK 74HC164 เข้ามาแทนที่ข้อมูลใหม่ในการเปลี่ยนแปลงที่บรรทัด CLK จาก 0 เป็น 1

โค้ดที่เหลือส่วนใหญ่ขึ้นอยู่กับ PIC ตรรกะ "เวลาที่พูด" และการจัดการการสื่อสารและปุ่มต่างๆ การสื่อสารส่วนใหญ่มาจาก Microchip MPLABX เพราะฉันใช้โมดูล MSSP

ความคิดที่ดีคือการอ่านแผ่นข้อมูลของ DS3231 เนื่องจากข้อมูลถูกเก็บไว้ภายในเป็น BCD ดังนั้นคุณอาจต้อง "แปลง" สิ่งนี้ในโค้ดของคุณ เท่าที่ฉันกังวล ฉันเป็นคนที่ "เรียนรู้โดยการทำ" และแน่นอนว่าไม่ได้อ่านเอกสารข้อมูล… ทำให้ฉันกังวลและหลายชั่วโมงมาก

อย่างที่คุณอาจสังเกตเห็น มีสองวิธีในการ "รักษาเวลาให้ตรงเวลา" ในการใช้งานนี้

  1. คุณสามารถอ่านเวลาจริงจาก DS3231
  2. คุณสามารถ "นับวินาที" ใน PIC ได้และเพียงแค่ซิงโครไนซ์เวลากับ DS3231 เป็นครั้งคราว

ขึ้นอยู่กับคุณและทั้งสองวิธีสามารถปฏิบัติได้จริงและตรงไปตรงมา ฉันใช้ตัวเลือกแรกและซิงโครไนซ์เฉพาะเวลาเมื่อปรับเวลาผ่านปุ่ม (เวลาเขียนเป็น DS3231) หรือทุก ๆ 24 ชั่วโมง (เวลาอ่านจาก DS3231) เพราะฉันต้องการใช้ตรรกะเพิ่มเติมด้วยตัวเอง ฉันยังหมุนนาฬิกาในตอนกลางคืน (23:00 น. ถึง 05:00 น.) เพื่อให้ง่ายขึ้นเล็กน้อยในความคิดของฉัน

ขั้นตอนที่ 5: ที่อยู่อาศัย

สุดท้ายแต่ไม่ท้ายสุด ได้เวลาดูตัวเรือนสั้น ๆ แล้ว

ดังที่ได้กล่าวไว้ข้างต้น ฉันสร้างเคสด้วยตัวเอง (โดยใช้ Eagle) และพิมพ์ด้วยเครื่องพิมพ์ 3 มิติของฉัน ดังนั้นฉันจึงต้องคอยดูตำแหน่งของไฟ LED ต่างๆ

แนบคุณสามารถค้นหาไฟล์ STL หากคุณต้องการใช้

หวังว่าคำแนะนำนี้จะช่วยคุณในการสร้าง "Wort-Uhr" ของคุณเอง หากยังมี "คำถามที่เปิดอยู่" อย่าลังเลที่จะติดต่อฉัน วิธีที่ดีที่สุดในการแสดงความคิดเห็นด้านล่าง เพราะคุณอาจไม่ใช่คนเดียวที่มีคำถามเฉพาะ

แนะนำ: