สารบัญ:

เริ่มต้นใช้งาน Bascom AVR: 5 ขั้นตอน
เริ่มต้นใช้งาน Bascom AVR: 5 ขั้นตอน

วีดีโอ: เริ่มต้นใช้งาน Bascom AVR: 5 ขั้นตอน

วีดีโอ: เริ่มต้นใช้งาน Bascom AVR: 5 ขั้นตอน
วีดีโอ: AVR Programmer tool 2024, กรกฎาคม
Anonim
เริ่มต้นใช้งาน Bascom AVR
เริ่มต้นใช้งาน Bascom AVR

นี่คือจุดเริ่มต้นของซีรีส์ที่จะสอนคุณตั้งโปรแกรมไมโครคอนโทรลเลอร์ AVR ด้วย Bascom AVR

ทำไมฉันถึงทำเช่นนี้

ตัวอย่างโปรแกรมส่วนใหญ่ในซีรีส์นี้ คุณสามารถสร้างด้วย Arduino

บางอย่างง่ายกว่าและยากกว่า แต่ในตอนท้ายทั้งคู่จะทำงานบนคอนโทรลเลอร์เดียวกัน

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

ดังนั้นส่วนหนึ่งขึ้นอยู่กับโครงการที่ใช้สำหรับสภาพแวดล้อมการพัฒนาและอีกส่วนหนึ่งขึ้นอยู่กับความรู้ความชำนาญของผู้เขียนโปรแกรม

แต่ทำไมฉันถึงทำซีรีส์นี้ ด้านหนึ่งช่วยประหยัดเงินได้มาก ฉันไม่ต้องซื้อบอร์ด Arduino สำหรับทุกโครงการ ตัวอย่างเช่น: Arduino uno ที่ไม่มีชื่อมีราคาประมาณ 12 ยูโร ตัวควบคุมที่อยู่บนนั้นมีราคาเพียง 2.5 ยูโร โดยมีวงจรขั้นต่ำที่จำเป็นสำหรับฟังก์ชันที่เสถียร โดยมีราคาประมาณ 4 ยูโร ในทางกลับกัน คุณสามารถเลือกชิป avr ทั้งหมดที่รองรับได้ atmegas 8 ถึง 256 และ attiny 8 ถึง 2313 และ xmega หลายประเภทที่ฉันไม่มีประสบการณ์ หากคุณต้องการใช้เซอร์โวและเซ็นเซอร์อัลตราโซนิกที่สามารถจดจำมือได้ เช่น จากนั้นเปิดฝาถังขยะ คุณสามารถใช้ชิปที่เล็กที่สุด มีเหตุผลมากมายในการเรียนรู้ภาษาที่สอง

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

เสบียง

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

เขียงหั่นขนมสำหรับการทดสอบ

Atmega 8-16PU (ดีกว่าถ้าคุณซื้อ 2 หรือ 3 ถ้าคุณฆ่าพวกเขาโดยไม่ได้ตั้งใจ)

7805 5V ตัวควบคุมแรงดันไฟฟ้า

ตัวต้านทาน 10Kohm

ตัวเก็บประจุแบบฟิล์ม 100nF

ตัวเก็บประจุด้วยไฟฟ้า 10µF

ตัวเก็บประจุด้วยไฟฟ้า 100µF

สายไฟสำหรับเขียงหั่นขนม

Windows PC 7/8/8.1/10

ISP Programmer (ฉันจะใช้ USBasp ที่นี่คุณสามารถซื้อได้ที่ amazon ด้วยเงินเพียงเล็กน้อย)

Bascom AVR (คุณสามารถดาวน์โหลด DEMO ได้ที่นี่ ทุกฟังก์ชั่นปลดล็อกแล้ว แต่คุณสามารถเขียนโค้ดได้จนถึงขนาด 4Kb เท่านั้นซึ่งเพียงพอสำหรับโค้ดจำนวนมาก)

ส่วนเสริม:

ไฟ LED พร้อมตัวต้านทาน

สวิตช์กด

ชิ้นส่วนเฉพาะโครงการ

ขั้นตอนที่ 1: การติดตั้ง Bascom และ Setup

การติดตั้ง Bascom และ Setup
การติดตั้ง Bascom และ Setup
การติดตั้ง Bascom และ Setup
การติดตั้ง Bascom และ Setup
การติดตั้ง Bascom และ Setup
การติดตั้ง Bascom และ Setup

ดาวน์โหลดไฟล์และติดตั้ง Bascom AVR ติดตั้งทุกส่วนรวมถึงช่องทำเครื่องหมายสุดท้ายหลังจากติดตั้ง

หลังจากนั้นรีบูตพีซีของคุณ มิฉะนั้น bascom จะไม่เริ่มทำงาน

หลังจากรีบูตเริ่มต้น bascom

ไปที่ตัวเลือก -> โปรแกรมเมอร์ และเลือก USBasp จากรายการ บันทึกการตั้งค่าและปิด Bascom

ใช้โปรแกรมนี้เพื่อติดตั้ง usbasp หลังจากนั้นให้รีบูทพีซีของคุณอีกครั้ง ตอนนี้เชื่อมต่อ USBasp กับพีซีของคุณแล้วเริ่มตัวจัดการอุปกรณ์ USBasp ควรปรากฏที่อุปกรณ์ libusb

Stat Bascom อีกครั้งและสร้างไฟล์ใหม่ บันทึกลงในพีซีของคุณและกดปุ่ม F7 บนแป้นพิมพ์ของคุณ

คอมไพเลอร์เริ่มต้นและคอมไพล์โปรแกรมเปล่า ตอนนี้คุณสามารถทดสอบการทำงานของโปรแกรมเมอร์ได้

กดปุ่ม F4 บนแป้นพิมพ์เพื่อเริ่มหน้าต่างโปรแกรมเมอร์ ไปที่ชิป -> ระบุเพื่อเริ่มการโต้ตอบ ไฟ LED จาก USBasp ควรกะพริบสั้น ๆ คุณควรได้รับข้อความเช่นรหัสชิป FFFFFF ไม่สามารถอ่านอุปกรณ์ได้ นั่นเป็นสัญญาณที่ดีว่าโปรแกรมเมอร์กำลังทำงาน แต่ไม่พบชิป

ตอนนี้เราสามารถเริ่มสร้างวงจรแรกได้แล้ว

ขั้นตอนที่ 2: มาดูชิปกันดีกว่า

มาดูชิปกันดีกว่า
มาดูชิปกันดีกว่า

หากคุณดูที่พินเอาต์ของชิป ดูเหมือนว่าชิปจะไม่มีความคล้ายคลึงกับบอร์ด Arduino แน่นอนว่าเราใช้ Atmega8 และ Arduino uno คือ Atmega328 แต่ Pinout นั้นเกือบจะเหมือนกัน แต่เขาชิปของบอร์ด Arduino Uno มีฟังก์ชั่นมากกว่า นี่คือชื่อของหมุด VCC และ GND เป็นพินสำหรับแหล่งจ่ายไฟ

AREF และ AVCC เป็นพินสำหรับแรงดันอ้างอิงและแหล่งจ่ายไฟสำหรับตัวแปลงอนาล็อกเป็นดิจิตอล

PB 0-7 PC 0-6 PD 0-7 เป็นพินเอาต์พุตอินพุตเอนกประสงค์ที่มีหลายตำแหน่ง

รีเซ็ตพินเป็นสิ่งที่ชื่อพูด เพื่อรีสตาร์ทชิป บรรทัดเหนือชื่อรีเซ็ตหมายถึงการปฏิเสธ นั่นหมายความว่า ในการรีเซ็ตชิป คุณต้องดึงมันลงมาที่ 0V

สำหรับหมุดต่อไปนี้จะมีคำแนะนำแยกต่างหากในเร็ว ๆ นี้

RXD TXD เป็นพินฮาร์ดแวร์สำหรับการสื่อสารแบบอนุกรม UART

INT0 INT1 คือหมุดขัดจังหวะฮาร์ดแวร์

XCK /T0 UART แหล่งสัญญาณนาฬิกา / Timer/Counter0 แหล่งสัญญาณนาฬิกา

พิน XTAL /TOSC ใช้สำหรับคริสตัลภายนอกสูงสุด 16MHz (รุ่นต่าง ๆ สูงถึง 20MHz) / พินคริสตัลสำหรับ RTC ภายใน

T1 คล้ายกับ T0

พิน AIN ใช้สำหรับเครื่องเปรียบเทียบอนาล็อก

ICP1 คล้ายกับ T0/T1

OC1A เป็นพินเอาต์พุตฮาร์ดแวร์สำหรับ pwm timer1 channel A

ชิป SS /OC2 เลือกพินสำหรับ SPI / ชอบ OC1B แต่ช่อง B

MOSI MISO SCK/ OC2 เป็นพิน SPI ของฮาร์ดแวร์และพินสำหรับการเขียนโปรแกรม /PWM output timer2

ADC0 ถึง ADC5 เป็นอินพุตแบบอะนาล็อก

SDA SCL คือพินสำหรับฮาร์ดแวร์ I2C

ชิปปกติสามารถทำงานได้ตั้งแต่ 4, 5V ถึง 5, 5V Atmega 8L สามารถทำงานได้ด้วยแรงดันไฟฟ้าที่ต่ำกว่ามาก

คุณจะเห็นว่าชิปตัวนี้สามารถทำอะไรได้มากกว่าที่ Arduino Uno ดูเหมือนจะทำไม่ได้ แต่ Arduino สามารถทำได้เช่นกัน คุณต้องตั้งโปรแกรมเท่านั้น

ขั้นตอนที่ 3: วงจรแรก

วงจรแรก
วงจรแรก
วงจรแรก
วงจรแรก

ถึงเวลาสร้างวงจรแรกของคุณแล้ว

โดยทั่วไปแล้ววงจรแรกคืออะไร? ถูกต้อง! มากะพริบ LED กันเถอะ

LED เชื่อมต่อกับ PB0 ตัวต้านทานถัดจากชิปมี 10k โอห์ม

ตัวต้านทานถัดจาก LED มี 470 โอห์ม

ตอนนี้คุณสามารถเชื่อมต่อ USBasp กับ Atmega ตามที่แสดงในภาพ

แต่ก่อนที่คุณจะเปิดเครื่องให้เราเขียนโปรแกรมก่อน

ขั้นตอนที่ 4: เขียนโปรแกรมแรก

เขียนโปรแกรมแรก
เขียนโปรแกรมแรก

สร้างไฟล์ใหม่ใน Bascom แล้วพิมพ์ข้อความต่อไปนี้

$regfile "m8def.dat"

$crystal = 1000000 config portb.0 = เอาต์พุต do portb.0 = 1 รอ 1 portb.0 = 0 รอ 1 ลูป

หลังจากนั้นคอมไพล์โดยกด F7 บนคีย์บอร์ดของคุณ

ตอนนี้เราสามารถตั้งโปรแกรมชิปได้โดยกด F4 หน้าต่างโปรแกรมเมอร์จะปรากฏขึ้น ตอนนี้ได้เวลาเปิดเครื่องจากเขียงหั่นขนม คุณควรใช้บางอย่างระหว่าง 6 ถึง 12 โวลต์

ตอนนี้ไปที่ชิป -> โปรแกรมอัตโนมัติ หากหน้าต่างโปรแกรมเมอร์ปิดโดยอัตโนมัติ แสดงว่าการเขียนโปรแกรมสำเร็จ

ไฟ LED ควรกะพริบในความถี่หนึ่งวินาที

คราวนี้มาดูโปรแกรมให้ละเอียดยิ่งขึ้นเพื่อทำความเข้าใจไวยากรณ์

$regfile "m8def.dat"

$crystal = 1000000

ด้วย $regfile เราจะบอกคอมไพเลอร์ถึงประเภทของชิปที่ใช้แล้ว ชื่อของชิป Arduino จะเป็น "m328pdef.dat"

ด้วย $crystal เราบอกความเร็ว cpu ของเขาประมาณ 1MHz

config portb.0 = เอาต์พุต

นั่นหมายความว่า PB0 ควรทำหน้าที่เป็นเอาต์พุต

อย่างไรก็ตาม ตัวย่อ PB0 หมายถึงพอร์ต B บิต 0 ชิปแบ่งออกเป็นหลายพอร์ต แต่ละพอร์ตจะได้รับจดหมายเพื่อระบุตัวตนที่ชัดเจน และแต่ละพอร์ตพินเล็กน้อยตั้งแต่ 0 ถึง 7 ตัวอย่างเช่น ฉันสามารถเขียนไบต์ที่สมบูรณ์ลงในรีจิสเตอร์เอาต์พุตพอร์ต ซึ่งจะส่งออกผ่านพินพอร์ตแต่ละตัว

ทำ

ห่วง

นี่คือสิ่งที่ใน Arduino คำสั่ง void loop หมายถึง ระหว่างสองคำสั่งนั้นจะทำซ้ำตลอดไป (มีข้อยกเว้นแต่เพิ่มเติมเกี่ยวกับเรื่องนั้นในภายหลัง)

Portb.0 = 1

รอ 1 portb.0 = 0 รอ 1

ที่นี่เราสร้างการกะพริบของไฟ LED

Portb.0 = 1 บอกให้ชิปเปลี่ยนเอาต์พุต PB0 เป็น 5V

คำสั่ง wait 1 ให้ชิปรอหนึ่งวินาที หากคุณต้องการเปลี่ยนไฟ LED ให้เร็วขึ้น คุณต้องแทนที่คำสั่ง wait ด้วย waitms ตอนนี้ คุณสามารถป้อนเวลาในขณะนี้ในหน่วยมิลลิวินาที เช่น waitms 500. (waitus หมายถึงรอเป็นนาโนวินาที)

Portb.0 = 0 บอกให้ชิปเปลี่ยนเอาต์พุต PB0 เป็น 0V

ขั้นตอนที่ 5: เพิ่มปุ่มเพื่อใช้อินพุต

เพิ่มปุ่มเพื่อใช้อินพุต
เพิ่มปุ่มเพื่อใช้อินพุต

ตอนนี้เราเพิ่มปุ่มเพื่อให้ไฟ LED สว่างขึ้นหากกดปุ่ม

ใส่ปุ่มตามที่แสดงในภาพ

ตอนนี้พิมพ์ในโปรแกรมติดตาม

$regfile "m8def.dat"

$crystal = 1000000 config portb.0 = output config portd.7 = อินพุต Portd.7 = 1 ทำถ้า pind.7 = 0 แล้ว portb.0 = 1 อื่น ๆ portb.0 = 0 ลูป

หากคุณอัปโหลดโปรแกรมนั้นไปยังชิป ไฟ LED จะสว่างขึ้นเมื่อกดปุ่มเท่านั้น แต่ทำไม?

โปรแกรมเริ่มต้นเหมือนกับครั้งสุดท้ายจนถึง

config portd.7 = อินพุต นั่นหมายความว่าพิน PD7 ที่เชื่อมต่อกับปุ่มทำหน้าที่เป็นอินพุต

Portd.7 = 1 ไม่เปลี่ยนพินให้สูง แต่เปิดใช้งานตัวต้านทานการดึงภายในของ Atmega

คำสั่ง if ดูแปลก ๆ เล็กน้อยหากคุณคุ้นเคยกับ Arduino

ถ้าคุณใช้คำสั่ง if คุณต้องใช้คำสั่ง "then" ในตัวอย่างนี้ คำสั่ง if ใช้สำหรับการดำเนินการคำสั่งเดียว หากคุณต้องการใช้คำสั่งเพิ่มเติม คุณต้องเขียนแบบนี้

ถ้า pind.7=0 แล้ว

portb.0=1 บางรหัส บางรหัส บางรหัสอื่น portb.0 = 0 end if

สำหรับการใช้คำสั่ง if คุณต้องใช้คำสั่ง "end if" ในตอนท้าย

ที่ยังมีความสำคัญอยู่ บางทีคุณอาจเคยเห็นแล้ว อินพุตไม่ได้ถูกสอบถามด้วย portx.x แต่ด้วย pinx.x. คุณสามารถจำได้ง่าย เอาต์พุตมี "o" (พอร์ต) ในคำและอินพุตมี "i" (พิน)

ตอนนี้ถึงตาคุณแล้วที่จะเล่นสนุก

คำสั่งถัดไปของฉันจะมาเร็ว ๆ นี้ (คำสั่งมาตรฐานเช่น while, select case, for และ variables)

หากคุณชอบคำแนะนำของฉันและต้องการเพิ่มเติมบอกฉันในความคิดเห็น

แนะนำ: