Агуулгын хүснэгт:

AVR микроконтроллерийн гал хамгаалагчийн битийн тохиргоо. LED анивчих програмыг микроконтроллерийн флэш санах ойд үүсгэх, байршуулах: 5 алхам
AVR микроконтроллерийн гал хамгаалагчийн битийн тохиргоо. LED анивчих програмыг микроконтроллерийн флэш санах ойд үүсгэх, байршуулах: 5 алхам

Видео: AVR микроконтроллерийн гал хамгаалагчийн битийн тохиргоо. LED анивчих програмыг микроконтроллерийн флэш санах ойд үүсгэх, байршуулах: 5 алхам

Видео: AVR микроконтроллерийн гал хамгаалагчийн битийн тохиргоо. LED анивчих програмыг микроконтроллерийн флэш санах ойд үүсгэх, байршуулах: 5 алхам
Видео: Как записать загрузчик Outseal PLC Nano на Arduino Nano 2024, Оны зургадугаар сарын
Anonim
Image
Image

Энэ тохиолдолд бид C кодоор энгийн програм үүсгэж, микроконтроллерийн санах ойд шатаах болно. Бид өөрсдийн програмаа бичиж, хөгжүүлэлтийн нэгдсэн платформ болгон Atmel Studio -ийг ашиглан hex файлыг эмхэтгэх болно. Бид гал хамгаалагчийн битүүдийг тохируулж, өөрийн програмист, програм хангамж AVRDUDE ашиглан AVR ATMega328P микроконтроллерийн санах ойд зургаан өнцөгт файл байршуулах болно.

AVRDUDE бол Atmel -ийн AVR микроконтроллеруудын санах ойг татаж авах, байршуулах програм юм. Энэ нь Flash болон EEPROM програмчлах боломжтой бөгөөд цуваа програмчлалын протоколоор дэмжигдсэн тохиолдолд гал хамгаалагч болон түгжээний битүүдийг програмчилж чаддаг.

Алхам 1: Atmel студийг ашиглан програм бичих, Hex файлыг эмхэтгэх

Atmel студийг ашиглан програм бичих, Hex файлыг эмхэтгэх
Atmel студийг ашиглан програм бичих, Hex файлыг эмхэтгэх
Atmel студийг ашиглан програм бичих, Hex файлыг эмхэтгэх
Atmel студийг ашиглан програм бичих, Hex файлыг эмхэтгэх

Хэрэв танд Atmel студи байхгүй бол та үүнийг татаж аваад суулгах хэрэгтэй:

Энэ төсөл нь С-г ашиглах тул загвар жагсаалтаас GCC C Executable Project сонголтыг сонгож, нүцгэн байдлаар гүйцэтгэх боломжтой төслийг үүсгэнэ.

Дараа нь уг төслийг аль төхөөрөмжид зориулахаа зааж өгөх шаардлагатай. Энэхүү төслийг AVR ATMega328P микроконтроллерт зориулж боловсруулна.

Atmel Studio -ийн Main Source Editor хэсэгт програмын кодыг бичнэ үү. Үндсэн эх засварлагч - Энэ цонх нь одоогийн төслийн эх файлуудын үндсэн засварлагч юм. Редактор нь зөв бичгийн алдаа шалгах, автоматаар гүйцээх функцтэй.

1. Бид чипийг ямар хурдаар ажиллуулж байгаа нь хоцролтыг зөв тооцоолох боломжтой гэдгийг хөрвүүлэгчид хэлэх ёстой.

#ifndef F_CPU

#тодорхойлох F_CPU 16000000UL // хянагчийн болор давтамжийг хэлэх (16 MHz AVR ATMega328P) #endif

2. Бид дэлхийн хувьсагч ба функцийг тодорхойлдог бусад файлуудын мэдээллийг оруулахдаа оршил хэсгийг оруулдаг.

Зүү дээр өгөгдлийн урсгалын хяналтыг идэвхжүүлэхийн тулд #толгойг оруулна уу. Зүү, порт гэх мэтийг тодорхойлдог.

#include // header програмд саатуулах функцийг идэвхжүүлэх

3. Оршилын дараа main () функц гарч ирнэ.

int main (хүчингүй) {

Main () функц нь өвөрмөц бөгөөд бусад бүх функцээс ялгаатай. C програм бүр яг нэг үндсэн () функцтэй байх ёстой. Main () бол AVR нь таны хүчийг анх асаахад ажиллуулж эхэлдэг тул энэ нь програмын нэвтрэх цэг юм.

4. PORTB -ийн 0 зүүг гаралт болгон тохируулна уу.

DDRB = 0b00000001; // PORTB1 -ийг гаралт болгон тохируулна уу

Бид үүнийг өгөгдлийн чиглэлийн регистр Б -д хоёртын дугаар бичих замаар хийдэг. Өгөгдлийн чиглэлийн бүртгэл В нь В регистрийн битүүдийг оролт, гаралт болгох боломжийг олгодог. 1 гэж бичих нь тэднийг гаралт болгодог бол 0 нь оролт болгоно. Бид LED -ийг гаралтын үүргийг гүйцэтгэдэг тул хоёртын дугаар бичдэг бөгөөд PORT B -ийн 0 зүүг гаралт болгоно.

5. Гогцоо.

байхад (1) {

Энэ мэдэгдэл нь давталт бөгөөд ихэвчлэн гол давталт эсвэл үйл явдлын гогцоо гэж нэрлэдэг. Энэ код үргэлж үнэн байдаг; тиймээс энэ нь хязгааргүй давталтаар дахин дахин хэрэгждэг. Энэ нь хэзээ ч зогсдоггүй. Тиймээс микроконтроллероос тэжээл унтрахгүй эсвэл програмын санах ойгоос кодыг устгахгүй л бол LED хязгааргүй хэмжээнд анивчих болно.

6. PB0 портод холбогдсон LED -ийг асаана уу

PORTB = 0b00000001; // PB0 портод холбогдсон LED -ийг асаана

Энэ мөр нь PortB -ийн PB0 -д 1 өгдөг. PORTB бол AVR чип дээрх зүүнээс баруун тийш чиглэсэн PB7-PB0 гэсэн 8 зүү бүхий тоног төхөөрөмжийн бүртгэл юм. Төгсгөлд нь 1 -ийг тавих нь PB0 -д 1 -ийг өгнө; Энэ нь PB0 -ийг өндөр болгодог бөгөөд үүнийг асаадаг. Тиймээс PB0 зүү дээр залгагдсан LED асаж асах болно.

7. Саатал

_хойшлох_ms (1000); // 1 секундын саатал үүсгэдэг

Энэ мэдэгдэл нь 1 секундын саатал үүсгэж, ингэснээр LED асч, яг 1 секундын турш асаалттай байх болно.

8. PB0 гэх мэт бүх B тээглүүрийг унтраа

PORTB = 0b00000000; // PB0 гэх мэт бүх B тээглүүрийг унтраадаг

Энэ шугам нь бүх 8 порт В зүүг унтраадаг тул PB0 ч гэсэн унтраасан тул LED унтардаг.

9. Өөр нэг саатал

_хойшлох_ms (1000); // өөр 1 секундын саатал үүсгэнэ

Энэ нь яг 1 секундын турш унтрах бөгөөд давталтыг дахин эхлүүлж, мөрийг дахин асаахад процессыг дахин давтана. Энэ нь хязгааргүй тохиолддог бөгөөд ингэснээр LED байнга асч, унтардаг.

10. Буцаах мэдэгдэл

}

буцах (0); // энэ мөрөнд хэзээ ч хүрдэггүй}

Манай кодын сүүлчийн мөр бол return (0) мэдэгдэл юм. Хэдийгээр энэ кодыг хэзээ ч ажиллуулдаггүй боловч төгсгөлгүй хязгааргүй давталт байдаг тул ширээний компьютер дээр ажилладаг манай програмуудын хувьд үйлдлийн систем зөв ажиллаж байгаа эсэхийг мэдэх нь чухал юм. Ийм учраас манай хөрвүүлэгч GCC нь main () бүрийг буцах кодоор төгсгөхийг хүсдэг. Буцах кодууд нь дэмждэг аливаа үйлдлийн систем дээр ажилладаг AVR код шаардлагагүй болно; Гэсэн хэдий ч хэрэв та main -ийг return () -ээр дуусгаагүй бол хөрвүүлэгч анхааруулга өгөх болно.

Эцсийн алхам бол төслийг бий болгох явдал юм. Гүйцэтгэх файл (.hex) файлыг үүсгэхийн тулд бүх обьект файлуудыг эмхэтгэж, эцэст нь холбож өгнө гэсэн үг юм. Энэхүү hex файлыг Project хавтас доторх Debug хавтас дотор үүсгэсэн болно. Энэхүү зургаан өнцөгт файлыг микроконтроллерийн чип рүү ачаалахад бэлэн боллоо.

Алхам 2: Микро хянагчийн гал хамгаалагчийн битийн үндсэн тохиргоог өөрчлөх

Микро хянагчийн гал хамгаалагчийн битийн үндсэн тохиргоог өөрчлөх
Микро хянагчийн гал хамгаалагчийн битийн үндсэн тохиргоог өөрчлөх
Микро хянагчийн гал хамгаалагчийн битийн үндсэн тохиргоог өөрчлөх
Микро хянагчийн гал хамгаалагчийн битийн үндсэн тохиргоог өөрчлөх
Микро хянагчийн гал хамгаалагчийн битийн үндсэн тохиргоог өөрчлөх
Микро хянагчийн гал хамгаалагчийн битийн үндсэн тохиргоог өөрчлөх

Гал хамгаалагчийн зарим хэсгийг чипний зарим хэсгийг түгжихэд ашиглаж болох бөгөөд үүнийг тоосго хийх боломжтой (ашиглах боломжгүй болгох) гэдгийг санах нь чухал юм

ATmega328P -д ашигладаг нийт 19 гал хамгаалагч битүүд байдаг бөгөөд тэдгээрийг гурван өөр гал хамгаалагч байт болгон хуваадаг. Гал хамгаалагчийн 3 бит нь "Өргөтгөсөн гал хамгаалагч байт" -д, 8 нь "Гал хамгаалагчийн өндөр байт" -д, 8 нь "Гал хамгаалагчийн бага байт" хэсэгт байна. Түгжих битүүдийг програмчлахад ашигладаг дөрөв дэх байт бас байдаг.

Байт бүр 8 бит бөгөөд бит бүр нь тусдаа тохиргоо эсвэл туг юм. Бид тохируулах, тохируулахгүй, програмчлаагүй, програмчлаагүй гал хамгаалагчийн талаар ярихдаа бид хоёртын файлыг ашигладаг. 1 гэдэг нь тохируулагдаагүй, програмчлагдаагүй, тэг нь тогтоосон, програмчлагдсан гэсэн үг юм. Гал хамгаалагчийг програмчлахдаа хоёртын тэмдэглэгээг эсвэл арван зургаатын тэмдэглэгээг ашиглаж болно.

ATmega 328P чипс нь 8 МГц давтамжтай RC осциллятортой. Шинэ чипүүдийг энэ эх сурвалжаар цагны эх үүсвэр болгон, CKDIV8 гал хамгаалагчийг идэвхтэй нийлүүлж, 1 МГц -ийн системийн цагийг гаргадаг. Эхлэх хугацааг хамгийн дээд хэмжээнд тохируулж, завсарлах хугацааг идэвхжүүлсэн.

Шинэ ATMega 328P чипүүд ерөнхийдөө дараах гал хамгаалагчийн тохиргоотой байдаг

Бага гал хамгаалагч = 0x62 (0b01100010)

Өндөр гал хамгаалагч = 0xD9 (0b11011001)

Өргөтгөсөн гал хамгаалагч = 0xFF (0b11111111)

Бид 16MHz гадаад болортой ATmega 328 чипийг ашиглах болно. Тиймээс бид "Fuse Low Byte" -ийн битүүдийг үүний дагуу програмчлах хэрэгтэй.

1. 3-0 битүүд нь осцилляторын сонголтыг хянадаг бөгөөд 0010-ийн анхдагч тохиргоо нь бидний хүсээгүй тохируулагдсан дотоод RC осцилляторыг ашиглах явдал юм. Бид бага чадалтай болор осцилляторын ажиллагааг 8.0-аас 16.0 МГц-ийн хооронд хийхийг хүсч байгаа тул 3-1 битийг (CKSEL [3: 1]) 111 болгож тохируулах ёстой.

2. 5 ба 4-р битүүд нь эхлэх хугацааг хянадаг бөгөөд 10-ийн анхдагч тохиргоо нь асаах, цэнэглэхээс зургаан цагийн мөчлөгийг эхлүүлэх, 14 цагийн мөчлөгийг эхлүүлэх, 65 миллисекундийг дахин тохируулснаас хойшлуулах боломжийг олгодог.

Бага чадалтай болор осцилляторын аюулгүй тал дээр байхын тулд бид цахилгаан унтраах, хэмнэх хүртэл 16,000 цагийн мөчлөгийн хамгийн их хоцролтыг хүсч байгаа тул SUT [1] -ийг 1 болгож тохируулах хэрэгтэй. 14 цагийн мөчлөг, 65 миллисекундийг дахин тохируулснаас хойш SUT [0] -ийг 1 болгож тохируулах ёстой. Үүнээс гадна CKSEL [0] -ийг 1 болгож тохируулах ёстой.

3. Bit 6 нь бидэнд хамаагүй PORTB0 -ийн цагны гаралтыг хянадаг. Тиймээс бит 6 -ийг 1 болгож үлдээж болно.

4. Бит 7 нь 8-аар хуваах ажиллагааг хянадаг бөгөөд 0 гэсэн анхдагч тохиргоог идэвхжүүлсэн байдаг. Тиймээс бит 7 -ийг 0 -ээс 1 болгон өөрчлөх шаардлагатай байна.

Тиймээс шинэ гал хамгаалагч бага байт нь 11111111 байх ёстой бөгөөд энэ нь арван зургаатын тоогоор 0xFF байна

"Fuse Low Byte" -ийн битүүдийг програмчлахын тулд бид програмист (https://www.instructables.com/id/ISP-Programmer-fo…) болон AVRDUDE програм хангамжийг ашиглаж болно. AVRDUDE бол Atmel микроконтроллероос татаж авах, байршуулахад ашигладаг командын шугамын хэрэгсэл юм.

AVRDUDE татаж авах:

Нэгдүгээрт, бид програмистынхаа тайлбарыг AVRDUDE -ийн тохиргооны файлд нэмэх ёстой. Windows дээр тохиргооны файл нь AVRDUDE -ийн ажиллуулах файлтай ижил байршилд байдаг.

Avrdude.conf тохиргооны файл дахь текстийг оруулна уу:

# ISPProgv1

програмист id = "ISPProgv1"; desc = "цуваа порт banging, reset = dtr sck = rts mosi = txd miso = cts"; төрөл = "серб"; connection_type = цуваа; дахин тохируулах = 4; sck = 7; mosi = 3; буруу = 8;;

AVRDUDE -ийг эхлүүлэхийн өмнө бид схемийн дагуу микроконтроллерийг програмисттай холбох ёстой

DOS хүлээх цонхыг нээнэ үү.

1. avrdude дэмждэг програмистын жагсаалтыг харахын тулд avrdude -c c командыг бичнэ үү. Хэрэв бүх зүйл сайн байгаа бол жагсаалтад "ISPProgv1" програмист id байх ёстой.

2. Avrdude дэмждэг Atmel төхөөрөмжүүдийн жагсаалтыг үзэхийн тулд avrdude -c ISPProgv1 командыг бичнэ үү. Жагсаалт нь Atmel ATMega 328P -ийн m328p төхөөрөмжтэй байх ёстой.

Дараа нь avrdude -c ISPProgv1 -p m328p гэж бичээд avrdude -д ямар програмист ашиглаж байгаа болон Atmel микроконтроллерийг хавсаргасан гэж хэлнэ. Энэ нь ATmega328P гарын үсгийг 0x1e950f форматаар арван зургаатын тоогоор харуулдаг. Энэ нь одоогоор ATmega328P -д байгаа гал хамгаалагчийн бит програмчлалыг арван зургаатын тоогоор харуулав. Энэ тохиолдолд гал хамгаалагчийн байтыг үйлдвэрийн анхдагчаар програмчилсан болно.

Дараа нь avrdude -c ISPProgv1 –p m328p –U lfuse: w: 0xFF: m гэж бичээд avrdude -д ямар програмист ашиглаж байгааг, Atmel микроконтроллерийг ямар төхөөрөмж хавсаргасан болохыг хэлж, Fuse Low Bayte -ийг 0xFF болгож өөрчлөх тушаал юм.

Одоо цагийн дохио нь бага чадалтай болор осциллятороос ирэх ёстой.

Алхам 3: Хөтөлбөрийг ATMega328P микроконтроллерийн санах ойд шатаах

Хөтөлбөрийг ATMega328P микроконтроллерийн санах ойд шатаах
Хөтөлбөрийг ATMega328P микроконтроллерийн санах ойд шатаах
Хөтөлбөрийг ATMega328P микроконтроллерийн санах ойд шатаах
Хөтөлбөрийг ATMega328P микроконтроллерийн санах ойд шатаах

Нэгдүгээрт, зааврын эхэнд бидний хийсэн програмын hex файлыг AVRDUDE лавлах руу хуулж ав.

Дараа нь DOS хүлээх цонхонд avrdude –c ISPProgv1 –p m328p –u –U flash: w: [таны hex файлын нэр] гэсэн командыг оруулна уу.

Тушаал нь hex файлыг микроконтроллерийн санах ойд бичдэг. Одоо микроконтроллер нь манай програмын зааврын дагуу ажиллаж байна. Үүнийг шалгаж үзье!

Алхам 4: Манай програмын зааврын дагуу микроконтроллер ажиллаж байгааг шалгана уу

Манай програмын зааврын дагуу микроконтроллер ажиллаж байгааг шалгана уу
Манай програмын зааврын дагуу микроконтроллер ажиллаж байгааг шалгана уу
Манай програмын зааврын дагуу микроконтроллер ажиллаж байгааг шалгана уу
Манай програмын зааврын дагуу микроконтроллер ажиллаж байгааг шалгана уу
Манай програмын зааврын дагуу микроконтроллер ажиллаж байгааг шалгана уу
Манай програмын зааврын дагуу микроконтроллер ажиллаж байгааг шалгана уу

Бүрэлдэхүүн хэсгүүдийг AVR анивчдаг LED хэлхээний схемийн дагуу холбоно

Нэгдүгээрт, бүх AVR хэлхээний нэгэн адил бидэнд хүч хэрэгтэй. AVR чипийг ажиллуулахад ойролцоогоор 5 вольтын хүч хангалттай. Та үүнийг батерей эсвэл тогтмол гүйдлийн тэжээлээс авах боломжтой. Бид +5V хүчийг 7 -р зүү рүү холбож, 8 -р зүүг талхны самбар дээр холбоно. Хоёр тээглүүрийн хооронд бид цахилгаан тэжээлийн хүчийг жигд болгохын тулд 0.1μF керамик конденсаторыг байрлуулдаг бөгөөд ингэснээр AVR чип нь цахилгаан шугамыг гөлгөр болгодог.

10KΩ эсэргүүцэл нь төхөөрөмжийг асаах тохиргоог (POR) хангахад ашигладаг. Цахилгаан асаахад конденсатор дээрх хүчдэл тэг байх тул төхөөрөмжийг дахин тохируулна (дахин тохируулах нь бага байдаг тул), дараа нь конденсаторыг VCC руу цэнэглэж, дахин тохируулах ажиллагааг идэвхгүй болгоно.

Бид LED -ийн анодыг AVR зүү PB0 -тэй холбодог. Энэ бол ATMega328P -ийн 14 -р зүү юм. Энэ нь LED учраас бид LED рүү урсах гүйдлийг хязгаарлахыг хүсч байна, ингэснээр шатахгүй. Тиймээс бид LED -тэй 330Ω эсэргүүцэлийг цувралаар байрлуулсан. LED -ийн катод нь газардуулгатай холбогддог.

16 МГц болорыг Atmega328 микроконтроллерийн цагийг хангахад ашигладаг бөгөөд болорыг тогтворжуулахын тулд 22pF конденсаторыг ашигладаг.

Эдгээр нь LED -ийг асаахад шаардлагатай бүх холболтууд юм. Цахилгаан хангамж.

Болж байна уу. LED нь нэг секундын хоцрогдолтойгоор анивчдаг. Микроконтроллерийн ажил нь бидний даалгавартай нийцдэг

Алхам 5: Дүгнэлт

Мэдээжийн хэрэг, энэ бол зүгээр л LED гэрэл асаах урт процесс байсан боловч үнэн бол та гол бэрхшээлийг амжилттай даван туулсан явдал юм: AVR микроконтроллерыг програмчлах тоног төхөөрөмжийн платформыг бий болгох, Atmel Studio -ийг нэгдсэн хөгжлийн платформ болгон ашиглах, AVRDUDE -ийг програм хангамж болгон ашиглах. AVR микроконтроллерийг тохируулах, програмчлах

Хэрэв та миний микроконтроллеруудын үндсэн төслүүдийн талаар мэдээлэл авахыг хүсвэл миний YouTube -ийг захиалаарай! Миний видеог үзэж, хуваалцах нь миний хийж буй зүйлийг дэмжих арга юм

YouTube FOG сувагт бүртгүүлэх

Зөвлөмж болгож буй: