การเขียนโปรแกรมจิ๊กสำหรับบอร์ดของเรา DougsWordClock.com DeskClock: 9 ขั้นตอน

การเขียนโปรแกรมจิ๊กสำหรับบอร์ดของเรา DougsWordClock.com DeskClock: 9 ขั้นตอน

สารบัญ:

Anonim

เฮ้ - มันมีอายุมานานแล้วนับตั้งแต่ฉันส่งบางสิ่งไปยัง Instructables เพื่อคืนให้กับชุมชนดังนั้นฉันคิดว่าฉันจะแบ่งปันวิธีที่ฉันสร้างแท่นขุดเจาะการเขียนโปรแกรมใหม่สำหรับกระดานที่ใช้ใน www.dougswordclock.com DeskClocks

คุณรู้ว่ามันไปได้อย่างไรคุณได้สร้างโครงการที่น่าทึ่งและบอกผู้คนมากมายเกี่ยวกับเรื่องนี้และมีคนมากมายที่อยากได้ด้วยตัวเอง คุณได้รับแผงวงจรและใช้เวลานานกับการวางประสานและส่วนประกอบ reflow บัดกรีและติดตั้งส่วนประกอบที่ไม่ใช่ reflow แล้วคุณเริ่มโหลดไมโครโค้ดลงในตัวควบคุมเพื่อให้โครงการทำสิ่งที่ออกแบบมาเพื่อทำ ….. ว้าว - ขั้นตอนมากมาย!

กำลังโหลดไมโครโค้ด ????? อ๋อ - อย่างที่คุณอาจรู้ว่าคอมพิวเตอร์ที่ไม่มีซอฟต์แวร์นั้นไม่มีประโยชน์เลย นาฬิกาทั้งหมดของเรามีโปรแกรมพิเศษที่โหลดเข้ามาเพื่อให้สามารถบอกเวลาได้อย่างถูกต้อง เมื่อฉันสร้างบอร์ดสำหรับนาฬิกาไม่มีซอฟต์แวร์ที่โหลดลงในชิปไมโครคอนโทรลเลอร์ (ชิปมีขนาดเล็กเกินไปที่จะใส่ลงในโปรแกรมเมอร์ปกติ) - กระบวนการนี้วางซอฟต์แวร์ลงในชิปเพื่อให้นาฬิกาสามารถทำงานได้

ในสมัยก่อน (สองสามสัปดาห์ก่อน:-)) ฉันใช้แล็ปท็อปโปรแกรมเมอร์ USBTiny และซอฟต์แวร์ AVRDUDE ที่ยอดเยี่ยมเพื่อเขียนโปรแกรมกระดาน - ฉันจะนั่งที่โต๊ะทำงานของฉันในห้องประชุมพิมพ์คำสั่งการเขียนโปรแกรมลงในคอมพิวเตอร์ ยึดสายเคเบิลโปรแกรมมิงกับนาฬิกาและกด ENTER คอมพิวเตอร์จะทำหน้าที่เป็นคณะกรรมการให้ฉันและฉันก็จะทำเสร็จ สิ่งเดียวที่จับได้คือฉันต้องนั่งที่นั่นตลอดเวลาดังนั้นฉันจึงตัดสินใจว่าพนักงานคนหนึ่งของฉันสามารถทำมันได้แทน … โชคไม่ดีที่เขาพบว่าบางครั้งเขาก็ขยับสายเคเบิลเล็กน้อย ล้มเหลวและเขาจะต้องเริ่มต้นใหม่อีกครั้ง เพื่อแก้ไขปัญหานี้หากมีข้อผิดพลาดในการบัดกรีพอร์ต USB ของแล็ปท็อปของฉันจะปิดตัวลงและ USBTiny จะต้องถอดปลั๊กและรีเซ็ตเพื่อรีเซ็ตพอร์ต USB ….. ต้องมีวิธีที่ดีกว่า !! Big Boys ทำได้อย่างไร

ปรากฎว่าบิ๊กบอย (tm) มีหุ่นยนต์ที่ดีในการถือสายเคเบิลและอุปกรณ์อิเล็กทรอนิกส์ที่น่าทึ่งที่สามารถทำการทดสอบได้ เนื่องจาก DougsWordClock.com หมดความลำบากฉันจึงไม่น่าจะไปถึงที่นั่นในไม่ช้าดังนั้นฉันจะทำอย่างไรเพื่อทำให้ชีวิตของเราง่ายขึ้น? มิคาลเพื่อนของฉันจะพูดว่า …. "สร้างจิ๊ก!" (หมายเหตุ 1)

ดังนั้นที่นี่เรามีจิ๊กที่ดั๊กทำ! ในขณะที่มันถูกออกแบบมาเป็นพิเศษเพื่อเขียนโปรแกรม DougsWordClock.com โต๊ะ DeskClock แนวคิดที่นี่สามารถขยายไปยังโครงการไมโครโปรเซสเซอร์อื่น ๆ ตามที่คุณกำลังสร้างเป็นกลุ่มดังนั้นมีการอ่านเกี่ยวกับวิธีการที่ฉันแก้ไขปัญหาและดูว่าคุณสามารถทำให้ตัวเอง!

เริ่มกันเลย.

-------------------------------------------------------

หมายเหตุ 1 - ในต้นปี 2000 Mikal เพื่อนที่ดีที่สุดของฉันตกลงไปในเวิร์กช็อปของฉันเนื่องจากฉันกำลังสร้างชั้นวาง - ฉันกำลังจัดเส้นทางข้อต่อซึ่งเป็นงานซ้ำ ๆ ที่น่าเบื่อ - มิคาลกล่าวว่า "สร้างจิ๊ก!" ฉันพูดว่า "ยากเกินไป - ฉันจะเสร็จในไม่ช้า" - เขาพูดว่า "Nahh ให้ทำมันไป" …. เราทำ เรื่องสั้นสั้นความเรียบง่ายของการสร้างจิ๊กประกอบกับความจริงที่ว่าฉันไม่ได้คิดว่ามันจะกระทบ Ego ของฉันอย่างหนัก … ฉันตัดสินใจว่าไร้ประโยชน์ …. (รูป Go).. ในที่สุดฉันก็หมดสติไป มันและตัดสินใจที่จะเขียนบทความเพื่อพิสูจน์ให้โลกเห็นว่าฉันไม่ได้ไร้ประโยชน์ - ดังนั้นฉันจึงออกแบบโครงการลูกเต๋าอิเล็คทรอนิคส์แบบ PIC มันถูกตีพิมพ์โดยนิตยสาร Silicon Chip - (http://archive.siliconchip.com.au/cms/A_102324/printArticle.html) เรื่องจริงและน่าจะเป็นจุดเริ่มต้นที่ฉันเริ่มใช้ไมโครคอนโทรลเลอร์สำหรับโครงการและการเขียนบทความ.:-)

วัสดุ:

ขั้นตอนที่ 1: บอร์ด DeskClock

ก่อนอื่นฉันเริ่มด้วยบอร์ด DeskClock เมื่อฉันออกแบบมันฉันได้จัดเตรียมตัวเชื่อมต่อ 6 พินเพื่อให้สามารถเชื่อมต่อสายการเขียนโปรแกรมได้ - นี่คือรูปภาพของบอร์ดแสดงตัวเชื่อมต่อต่างๆ

แน่นอน - เมื่อเราโหลดส่วนประกอบลงบนบอร์ดเราไม่ได้เติมคอนเน็กเตอร์เหล่านี้ - มันมีไว้สำหรับการเขียนโปรแกรมและการทดสอบ

ด้านในรูปนี้ด้านหลังของบอร์ดตรงข้ามกับด้านหน้าของบอร์ดพร้อม LED ทั้งหมด - มันจะถูกบรรจุก่อน ในระหว่างการผลิต

ฉันใช้กระดานนี้เพื่อวัดตำแหน่งและระยะห่างของการเชื่อมต่อต่างๆที่ฉันต้องการเชื่อมต่ออย่างระมัดระวัง

ตอนนี้ - ฉันเชื่อมต่อกับบอร์ดได้อย่างไร ดีใจที่คุณถาม ฉันใช้หมุด Pogo!

ขั้นตอนที่ 2: Pogo Pins และฮาร์ดแวร์อื่น ๆ

หมุด Pogo เป็นสิ่งที่มืออาชีพใช้ในการเชื่อมต่อชั่วคราวกับบอร์ดเมื่อทำการทดสอบ มีขนาดและรูปร่างจำนวนมากและมีกลไกสปริงโหลดที่แม่นยำเพื่อให้แน่ใจว่ามีการผลักหมุดกับบอร์ดด้วยแรงกดที่สม่ำเสมอ

ฉันนำ Pogo ของฉันมาจากซัพพลายเออร์บน eBay - พวกเขาราคาถูกพอที่ฉันคิดว่าฉันมีเวลาตลอดชีวิตในตอนนี้! ซัพพลายเออร์รายเดียวกันยังจัดหาฮาร์ดแวร์ที่ยุ่งยากอื่น ๆ ให้กับฉันซึ่งฉันต้องใช้เพื่อยึดบอร์ดลง

ต่อไปนี้เป็นภาพถ่ายของหมุดตัวเองที่แคลมป์บอร์ดที่ดีและระยะห่างระหว่างแผ่นยาง

ขั้นตอนที่ 3: การวัดและสร้างภูเขาสำหรับบอร์ด

ดังนั้นฉันมี Pogo Pins และอุปกรณ์ติดตั้งอื่น ๆ ฉันวัดขนาดและระยะห่างของรูอย่างระมัดระวังและสร้างเลย์เอาต์สำหรับเครื่องตัดเลเซอร์ของฉัน ฉันสามารถเจาะรูได้ง่ายๆด้วยการใช้สว่าน แต่ตัวตัดสามารถทำงานซ้ำได้อย่างสวยงาม

ฉันตัดสินใจที่จะเว้นช่องว่างเพื่อให้หมุดไม่ได้อยู่ในใจกลางของรูแผ่น - นี่ทำให้มั่นใจได้ว่าหมุดสัมผัสกับบอร์ดอย่างแน่นหนา

ฉันยังออกแบบพื้นที่สำหรับแคลมป์และแท็บบางตัวสำหรับด้านหลังของบอร์ด

ในกรณีของบอร์ด DeskClock จะมีช่องเสียบไฟแบบแกน 2.1 มม. ติดตั้งอยู่บนบอร์ดซึ่งฉันต้องใช้ช่องว่างสำหรับนูนและสุดท้ายอย่าลืมที่ยึดยางเพื่อรองรับด้านหลังของบอร์ด

ขั้นตอนที่ 4: Raspberry Pi สำหรับสมองและหน้าจอสีขนาด 1.8 นิ้ว

ฉันต้องการบางสิ่งเพื่อแทนที่แล็ปท็อปของฉันดังนั้นฉันจึงตัดสินใจใช้ Raspberry PI

มันติดตั้งได้อย่างง่ายดายที่ฐานของโปรแกรมเมอร์และใช้สายเคเบิล 26 ทางที่เชื่อมต่อกับพิน GPIO เพื่อเชื่อมต่อกับบอร์ด DeskClock และจอแสดงผลและสวิตช์สลับ

การกำหนดค่าพินเฉพาะที่ฉันใช้ไม่สำคัญ - คุณจะใช้ของคุณเองตามความต้องการของคุณ

จอแสดงผลที่ใช้คือจอแสดงผลขนาด 1.8 นิ้วจาก Sainsmart - ฉันได้นำกองกระดาษออกมาเมื่อ 6 เดือนที่แล้วในกรณีที่ฉันพบว่ามีประโยชน์สำหรับพวกเขา - นี่เป็นเพียงการใช้! ฉันติดตาม Marks blog http://marks-space.com/ 2012/11/23 / raspberrypi-tft / เพื่อสร้างเคอร์เนล Linux ใหม่เพื่อรองรับการแสดงผล

ทำเครื่องหมายถูกต้อง - รวบรวมเคอร์เนลบน Pi เป็นกระบวนการที่ช้า - ฉันปล่อยให้มันรันข้ามคืน

การเดินสายจอแสดงผลนั้นเรียบง่ายและค่อนข้างเร็วฉันมีอุปกรณ์ FrameBuffer2 ที่ใช้งานได้

ขั้นตอนที่ 5: กระเป๋าที่จะถือจอแสดงผล 1.8 "

ฉันต้องการวิธีติดตั้งจอ LCD บนจิ๊กเพื่อที่จะได้ไม่สั่นสะเทือน ฉันไปกับ ides ง่าย ๆ - แค่สร้างกระเป๋ามุมสำหรับมัน

มันอยู่ที่ด้านหน้าของตัวเครื่องอย่างเป็นมุมเพื่อให้ผู้ใช้มองเห็นจอแสดงผลได้ง่าย

จอแสดงผลพอดี แต่ในกรณีที่ควรเลื่อนออกและสกรูไนล่อนขนาด 3 มม. ยึดเข้าที่

มันตลกดีที่ฉันลืมไปประมาณ 20 ปีว่าอะคริลิคนั้นใช้งานได้ง่ายแค่ไหน ฉันใช้มันในร้านที่โรงเรียนจากนั้นก็ลืมมันไปทันที ตอนนี้เวิร์คช็อปของฉันมีที่เก็บของ:-)

ขั้นตอนที่ 6: การทำให้ Pi Be เป็นโปรแกรมเมอร์

ส่วนต่อไปของโครงสร้างคือการค้นหาซอฟต์แวร์เพื่อให้ฉันสามารถตั้งโปรแกรมบอร์ดกับ Pi ได้โดยตรง ฉันตัดสินใจที่จะใช้วิธีการที่สตีฟมาร์เปิ้ลอธิบายบนบล็อกของเขา:

ในกรณีของฉันฉันใช้หมุด GPIO ที่แตกต่างกันเนื่องจากหน้าจอ LCD ขนาด 1.8 "ขัดแย้งกับพวกเขา

มีเสียงร้องแหลมคมดังเมื่อฉันค้นพบว่า Pi กำลังเขียนโปรแกรมอย่างถูกต้อง

บางคนใช้ shifters ระดับเพื่อปกป้อง PI - ฉันไม่ได้และโครงการใช้งานได้

ขั้นตอนที่ 7: สวิตช์สลับเพื่อลบพลังงานออกจากบอร์ด DeskClock

ฉันตัดสินใจติดตั้งสวิตช์สลับเพื่อลบพลังงานออกจากบอร์ด DeskClock และบอก PI เมื่อถึงเวลาเริ่มต้น

สวิตช์เป็น DPDT ดังนั้นครึ่งหนึ่งเชื่อมต่อกับ + 5v และอีกครึ่งหนึ่งเชื่อมต่อกับขา GPIO ที่ไม่ได้ใช้

เมื่อปิดสวิตช์หมุด GPIO นั้นต่อสายดินและเมื่อเปิดสวิตช์ขา GPIO จะถูกดึงสูง ฉันใช้ตัวต้านทาน 100 โอห์มเพื่อให้แน่ใจว่าขา GPIO ถูกบัฟเฟอร์ในกรณีที่ตั้งเป็นเอาต์พุต

ขั้นตอนที่ 8: ซอฟต์แวร์ใน Pi เพื่อผูกมันไว้ทั้งหมด Togehter

ต่อไปฉันเขียนโปรแกรม Python แรกของฉัน

ฉันเป็นโปรแกรมเมอร์ C - โชคดีที่มีถังบทเรียนเพื่อช่วยเหลือ

ฉันได้รับรหัสส่วนใหญ่จากกลุ่มตัวอย่างที่มีคนใช้ PI เป็นเครื่องแสดงสภาพอากาศ

นี่คือรหัสสำหรับสคริปต์ Python ที่อ่านปุ่มและควบคุมการแสดงผล

#! / usr / bin / หลาม

นำเข้า pygame

sys นำเข้า

เวลานำเข้า

จากเวลานำเข้า strftime

นำเข้าระบบปฏิบัติการ

นำเข้ากระบวนการย่อย

นำเข้า RPi.GPIO เป็น GPIO

GPIO.setmode (GPIO.BCM)

#set อุปกรณ์ framebuffer เป็น TFT

ถ้าไม่ใช่ os.getenv ('SDL_FBDEV'):

os.putenv ('SDL_FBDEV', '/ dev / fb1')

os.putenv ('SDL_VIDEODRIVER', 'fbcon')

def displayTime ():

# ใช้เพื่อแสดงวันที่และเวลาไปที่ TFT

screen.fill ((0,0,0))

font = pygame.font.Font (ไม่มี, 50)

ตอนนี้ = time.localtime ()

สำหรับการตั้งค่าใน ("% H:% M:% S", 60), ("% d% b", 10):

timeformat สลัว = การตั้งค่า

currentTimeLine = strftime (รูปแบบเวลาตอนนี้)

text = font.render (currentTimeLine, 0, (0,250,150))

Surf = pygame.transform.rotate (ข้อความ -90)

screen.blit (Surf (สลัว 20))

def displayText (ข้อความ, ขนาด, เส้น, สี, หน้าจอใส):

# ใช้เพื่อแสดงข้อความบนหน้าจอ TFT

ถ้า clearScreen:

screen.fill ((0,0,0))

font = pygame.font.Font (ไม่มี, ขนาด)

text = font.render (ข้อความ, 0, สี)

textRotated = pygame.transform.rotate (ข้อความ -90)

textpos = textRotated.get_rect ()

textpos.centery = 80

ถ้าบรรทัด == 1:

textpos.centerx = 90

screen.blit (textRotated, textpos)

elif line == 2:

textpos.centerx = 40

screen.blit (textRotated, textpos)

def main ():

หน้าจอระดับโลก

pygame.init ()

ขนาด = ความกว้างความสูง = 128, 160

black = 0,0,0

RED = 255,0,0

GREEN = 0,255,0

BLUE = 0,0,255

WHITE = 255,255,255

fail_cnt = 0

GPIO.setup (18 GPIO.IN)

pygame.mouse.set_visible (0)

screen = pygame.display.set_mode (ขนาด)

displayText ("DougsWordClock", 20, 1, GREEN, True)

displayText ("150mm Programer", 20, 2, BLUE, False)

pygame.display.flip ()

time.sleep (5)

displayText ("การอัพเดตเฟิร์มแวร์", 20, 1, RED, True)

displayText ("20130520", 40, 2, สีขาว, เท็จ)

pygame.display.flip ()

time.sleep (5)

ในขณะที่ True:

displayText ("กำลังรอ", 30, 1, GREEN, True)

displayText ("แทรกบอร์ด", 20, 2, น้ำเงิน, เท็จ)

pygame.display.flip ()

ถ้า (GPIO.input (18)):

displayText ("Programming", 30, 1, (200,200,1), True)

displayText ("รอ 10 วินาที", 30, 2, RED, False)

pygame.display.flip ()

และนี่คือเชลล์สคริปต์ที่ทำหน้าที่เขียนโปรแกรม:

#! / bin / ดวลจุดโทษ

cd / home / pi

sudo avrdude -c gpio -p m169 -Uefuse: w: 0xf5: m -U hfuse: w: 0xDa: m -U lfuse: w: 0xFF: m -Uflash: w: DeskClock-Prod.hex

แน่นอนจิ๊กของคุณจะมีซอฟต์แวร์ที่แตกต่างกัน:-)

ขั้นตอนที่ 9: ทุกอย่างทำงานได้ดี !!!

ในที่สุดฉันก็เชื่อมต่อกันเยอะและมันก็ช่วยได้!

ฉันได้เรียนรู้มากมายเกี่ยวกับการขับจอ LCD 1.8 นิ้วเล็ก ๆ เหล่านี้จนถึงจุดที่พวกเขากลายเป็นอุปกรณ์สำหรับโปรเจ็กต์เล็ก ๆ น้อย ๆ

Anyway - นี่คือภาพถ่ายบางส่วนของมันในการดำเนินการ

สนุก.

มาจากที่ไหน

นั่นเป็นคำถามที่ยอดเยี่ยม - ในขณะนี้โปรแกรมเมอร์เพียงเขียนโปรแกรมบอร์ดและตรวจสอบว่าไมโครแฟลชนั้นถูกต้องอย่างถูกต้อง เราตรวจสอบการทำงานของไฟ LED ที่มองเห็น (ด้วยเหตุนี้การแสดงผลที่สว่าง) - ขั้นตอนต่อไปคือการเพิ่มฟังก์ชั่นที่สามารถสื่อสารกับบอร์ดวิ่งเพื่อตรวจสอบความถูกต้องของการรวม RTC ชิป / คริสตัลเปรียบเทียบเวลาผ่านอินเทอร์เน็ต มาตรฐาน. ไม่ควรยากเกินไป …..:-)