Სარჩევი:

შიშველი ლითონის ჟოლო Pi 3: მოციმციმე LED: 8 ნაბიჯი
შიშველი ლითონის ჟოლო Pi 3: მოციმციმე LED: 8 ნაბიჯი

ვიდეო: შიშველი ლითონის ჟოლო Pi 3: მოციმციმე LED: 8 ნაბიჯი

ვიდეო: შიშველი ლითონის ჟოლო Pi 3: მოციმციმე LED: 8 ნაბიჯი
ვიდეო: торт ТРИ АПЕЛЬСИНА ! крем АПЕЛЬСИНОВОЕ МОРОЖЕНОЕ ! подробно АПЕЛЬСИНОВОЕ КОНФИ и АПЕЛЬСИНОВЫЙ КУРД ! 2024, ივლისი
Anonim
შიშველი ლითონის ჟოლო Pi 3: მოციმციმე LED
შიშველი ლითონის ჟოლო Pi 3: მოციმციმე LED

ავტორი ავტორი: moldypizza

ჟოლოს Pi ღილაკი LED- ებით შიშველი მეტალით
ჟოლოს Pi ღილაკი LED- ებით შიშველი მეტალით
ჟოლოს Pi ღილაკი LED- ებით შიშველი მეტალით
ჟოლოს Pi ღილაკი LED- ებით შიშველი მეტალით
ყუთები
ყუთები
ყუთები
ყუთები
როგორ გავაკეთოთ რელიეფური კვეთა ვეტერანთა დღისთვის
როგორ გავაკეთოთ რელიეფური კვეთა ვეტერანთა დღისთვის
როგორ გავაკეთოთ რელიეფური კვეთა ვეტერანთა დღისთვის
როგორ გავაკეთოთ რელიეფური კვეთა ვეტერანთა დღისთვის

შესახებ:.oO0Oo. მეტი moldypizza- ს შესახებ »

კეთილი იყოს თქვენი მობრძანება BARE METAL pi 3 მოციმციმე LED სახელმძღვანელოში!

ამ გაკვეთილში ჩვენ გავდივართ ნაბიჯებს, თავიდან ბოლომდე, რომ მივიღოთ LED მოციმციმე ჟოლოს PI 3, პურის დაფის, რეზისტორის, led და ცარიელი SD ბარათის გამოყენებით.

რა არის BARE METAL? BARE METAL არ არის ბრწყინვალე პროგრამირება. შიშველი მეტალი ნიშნავს, რომ ჩვენ სრულად ვაკონტროლებთ იმას, რასაც კომპიუტერი გააკეთებს. ეს ნიშნავს, რომ კოდი მთლიანად დაიწერება ასამბლეაში, Arm ინსტრუქციის ნაკრების გამოყენებით. დასასრულს ჩვენ შევქმნით პროგრამას, რომელიც აციმციმებს LED- ს Raspberry Pi– ს GPIO ერთ – ერთი ქინძის ფიზიკურ მისამართზე წვდომისა და მისი კონფიგურაციის გამომავალზე და შემდეგ ჩართვასა და გამორთვაზე. ამ პროექტის მცდელობა არის დიდი გზა, რათა დაიწყოთ ჩაშენებული პროგრამირება და ვიმედოვნებთ, რომ უკეთესად გესმით კომპიუტერის მუშაობის შესახებ.

Რა გჭირდება?

ტექნიკა

  • ჟოლო PI 3
  • SD ბარათი წინასწარ ჩატვირთული ჩამტვირთავი გამოსახულებით
  • პურის დაფა
  • მამაკაცი ქალი მხტუნავის მავთულები
  • მამაკაცი მამაკაცი მხტუნავი მავთულები
  • LED
  • 220 ohm რეზისტორი (არ უნდა იყოს ზუსტად 220 ohms, უმეტესობა ნებისმიერი რეზისტორი იმუშავებს)
  • მინი SD ბარათი
  • მინი sd ბარათი წინასწარ დატვირთული ჟოლოს pi ოპერაციული სისტემით (ჩვეულებრივ მოყვება pi)

პროგრამული უზრუნველყოფა

  • GCC შემდგენელი
  • GNU ჩადგმული ინსტრუმენტების ქსელი
  • ტექსტის რედაქტორი
  • sd ბარათის ფორმატი

კარგი, დავიწყოთ!

ნაბიჯი 1: ნივთების/ნივთების დაყენება

საგნების დაყენება/გაფუჭება
საგნების დაყენება/გაფუჭება

კარგი … პირველი ნაბიჯი არის ტექნიკის შეძენა. თქვენ შეგიძლიათ შეიძინოთ ნაწილები ცალკე ან არის ნაკრები, რომელსაც გააჩნია საკმარისზე მეტი ნაწილი. ᲑᲛᲣᲚᲘ

ეს ნაკრები მოყვება ყველაფერს, რაც საჭიროა ჟოლოს პი 3 და მეტი კონფიგურაციისთვის! ერთადერთი რაც არ შედის ამ ნაკრებში არის დამატებითი მინი SD ბარათი. დაელოდე! ნუ იყიდი სხვას ჯერჯერობით. თუ თქვენ არ გეგმავთ ბარათზე წინასწარ დატვირთული linux- ის ინსტალაციის გამოყენებას, უბრალოდ დააკოპირეთ მინი sd ბარათის შინაარსი მოგვიანებით და ხელახლა დააფორმირეთ ბარათი (ამის შესახებ მოგვიანებით). მნიშვნელოვანი შენიშვნა: დარწმუნდით, რომ შეინახავთ ფაილებს მოთავსებულ ბარათზე და დაგჭირდებათ მოგვიანებით!

შემდეგი დროა პროგრამული უზრუნველყოფის დაყენება. ეს გაკვეთილი არ შეიცავს დეტალურ მითითებებს პროგრამული უზრუნველყოფის დაყენების შესახებ. ინტერნეტში ბევრი რესურსი და გაკვეთილია, თუ როგორ უნდა დააინსტალიროთ ისინი:

Windows მომხმარებლები:

ჩამოტვირთეთ და დააინსტალირეთ gcc

შემდეგი, ჩამოტვირთეთ და დააინსტალირეთ GNU ARM ჩანერგილი ინსტრუმენტთა ქსელი

LINUX/MAC

  • Linux დისტრიბუციას გააჩნია gcc წინასწარ დაინსტალირებული
  • ჩამოტვირთეთ და დააინსტალირეთ GNU ARM ჩანერგილი ინსტრუმენტთა ქსელი.

კარგი, თუ ყველაფერი კარგად მიდის, უნდა შეგეძლოს ტერმინალის (linux/mac) ან cmd ხაზის (ფანჯრები) გახსნა და აკრეფა

arm-none-eabi-gcc

გამომავალი უნდა გამოიყურებოდეს პირველი სურათის მსგავსი. ეს არის მხოლოდ იმის დასადასტურებლად, რომ ის სწორად არის დაინსტალირებული.

კარგი, ახლა, როდესაც წინაპირობები გზაზე არ არის, დროა დავიწყოთ სახალისო ნივთებით.

ნაბიჯი 2: წრე

წრე
წრე
წრე
წრე
წრე
წრე

წრედის დრო! ამის სქემა მარტივია. ჩვენ დავაკავშირებთ led- ს GPIO 21 -ზე (პინ 40) pi- ზე (იხ. სურათი 2 და 3). რეზისტორი ასევე უკავშირდება სერიას, რათა თავიდან აიცილოს ტყვიის დაზიანება. რეზისტორი დაუკავშირდება პურის დაფაზე არსებულ უარყოფით სვეტს, რომელიც pi- ზე იქნება დაკავშირებული GND (პინ 39). Led- ის შეერთებისას აუცილებლად დააკავშირეთ მოკლე ბოლო ნეგატიურ მხარეს. ნახეთ ბოლო სურათი

ნაბიჯი 3: BOOTABLE Mini SD

BOOTABLE მინი SD
BOOTABLE მინი SD
BOOTABLE მინი SD
BOOTABLE მინი SD
BOOTABLE მინი SD
BOOTABLE მინი SD

სამი ნაბიჯია იმისათვის, რომ თქვენი pi 3 აღიაროს თქვენი ცარიელი მინი sd ბარათი. ჩვენ უნდა მოვძებნოთ და დავაკოპიროთ bootcode.bin, start.elf და fixup.dat. თქვენ შეგიძლიათ მიიღოთ ეს ფაილები მინი მინი sd ბარათზე, თუ იყიდეთ canakit ან გააკეთეთ ჩამტვირთავი sd ბარათი pi 3 -ისთვის linux დისტრიბუციით. ნებისმიერ შემთხვევაში, ეს ფაილები აუცილებელია იმისთვის, რომ პიმ აღიაროს sd ბარათი, როგორც ჩამტვირთავი მოწყობილობა. შემდეგი, დააფორმატე მინი sd fat32 (უმეტესობა მინი sd ბარათები მოდის ფორმატირებული fat32. მე გამოვიყენე იაფი მინი sd ბარათი sandisk– დან), გადავიტან bootcode.bin, start.elf, fixup.dat sd ბარათზე. და დასრულდა! კარგი, კიდევ ერთხელ და სურათების თანმიმდევრობით არის შემდეგი ნაბიჯები:

  1. იპოვეთ bootcode.bin, start.elf, fixup.dat.
  2. დარწმუნდით, რომ თქვენი sd ბარათი არის ფორმატირებული fat32.
  3. გადაიტანეთ bootcode.bin, start.elf და fixup.dat ფორმატირებული sd ბარათზე.

აი როგორ მივხვდი ამას, ბმული.

ნაბიჯი 4: შეამოწმეთ მინი SD

შეამოწმეთ მინი SD
შეამოწმეთ მინი SD
შეამოწმეთ მინი SD
შეამოწმეთ მინი SD

კარგი, ჩვენ გვაქვს ჩამტვირთავი მინი sd ბარათი და იმედია, თქვენ გაქვთ pi 3 ამ ეტაპზე. ახლა ჩვენ უნდა შევამოწმოთ ის, რომ დავრწმუნდეთ, რომ pi 3 ცნობს მინი SD ბარათს ჩამტვირთავად.

პიზე, მინი USB პორტის მახლობლად არის ორი პატარა led. ერთი წითელია. ეს არის სიმძლავრის მაჩვენებელი. როდესაც pi იღებს ენერგიას, ეს შუქი უნდა იყოს ჩართული. ასე რომ, თუ თქვენს პის ახლავე შეაერთებთ მინი SD ბარათის გარეშე, ის წითლად უნდა ანათებდეს. კარგი, გათიშეთ პი და შეაერთეთ ჩამტვირთავი მინი sd ბარათი, რომელიც შეიქმნა წინა საფეხურზე და შეაერთეთ pi. ხედავთ სხვა შუქს? უნდა იყოს მწვანე შუქი, წითელთან ახლოს, რაც მიუთითებს, რომ ის კითხულობს sd ბარათს. ამ ლიდერს ეწოდება ACT led. ის ანათებს, როდესაც ჩნდება სიცოცხლისუნარიანი sd ბარათი. ის აანთებს, როდესაც ის წვდება თქვენს მინი sd ბარათზე.

კარგი, ორი რამ უნდა მომხდარიყო მას შემდეგ, რაც ჩადეთ ჩამტვირთავი მინი sd ბარათი და შეაერთეთ pi:

  1. წითელი LED უნდა იყოს განათებული, რაც მიუთითებს ძალაუფლების მიღებაზე
  2. მწვანე led უნდა იყოს განათებული, რაც მიუთითებს იმაზე, რომ ჩატვირთულია მინი sd ბარათში

თუ რამე არასწორედ წარიმართა სცადეთ გაიმეოროთ წინა ნაბიჯები ან დააწკაპუნეთ ქვემოთ მოცემულ ბმულზე დამატებითი ინფორმაციისთვის.

ბმული აქ არის კარგი მითითება.

ნაბიჯი 5: კოდი 1

ეს პროექტი დაწერილია ARM ასამბლეის ენაზე. ამ გაკვეთილში მოცემულია ARM ასამბლეის ძირითადი გაგება, მაგრამ აქ არის რამოდენიმე რამ, რაც უნდა იცოდეთ:

.equ: მნიშვნელობას ანიჭებს სიმბოლოს ანუ abc.equ 5 abc ახლა წარმოადგენს ხუთს

  • ldr: იტვირთება მეხსიერებიდან
  • str: წერს მეხსიერებაში
  • cmp: ადარებს ორ მნიშვნელობას გამოკლების შესრულებით. ადგენს დროშებს.
  • ბ: ფილიალი ეტიკეტზე
  • დამატება: ასრულებს არითმეტიკას

თუ არ გაქვთ არანაირი გამოცდილება იარაღის შეკრებისას ნახეთ ეს ვიდეო. ეს მოგცემთ კარგი გაგებას Arm შეკრების ენაზე.

კარგი, ახლა ჩვენ გვაქვს წრე, რომელიც დაკავშირებულია ჩვენს ჟოლოს pi 3 -თან და გვაქვს sd ბარათი, რომელსაც pi აღიარებს, ამიტომ ჩვენი შემდეგი ამოცანაა გავარკვიოთ, თუ როგორ უნდა ვითანამშრომლოთ მიკროსქემთან pi- ს დატვირთვით პროგრამით. ზოგადად, ის, რაც ჩვენ უნდა გავაკეთოთ, არის პი -ს ვუთხრათ, რომ გამოუშვას ძაბვა GPIO 21 -დან (პინი უკავშირდება წითელ მავთულს). შემდეგ ჩვენ გვჭირდება გზა, რომ გადავიტანოთ led, რათა ის მოციმციმე იყოს. ამისათვის ჩვენ გვჭირდება მეტი ინფორმაცია. ამ ეტაპზე ჩვენ წარმოდგენა არ გვაქვს როგორ ვუთხრათ GPIO 21 გამომავალს, რის გამოც ჩვენ უნდა წავიკითხოთ მონაცემთა ცხრილი. მიკროკონტროლერების უმეტესობას აქვს მონაცემთა ფურცლები, რომლებიც ზუსტად განსაზღვრავს როგორ მუშაობს ყველაფერი. სამწუხაროდ, pi 3 – ს არ აქვს ოფიციალური დოკუმენტაცია! თუმცა, არსებობს არაოფიციალური მონაცემები. აქ არის ორი ბმული მასზე:

  1. github.com/raspberrypi/documentation/files…
  2. web.stanford.edu/class/cs140e/docs/BCM2837…

კარგი ამ მომენტში, თქვენ უნდა დაუთმოთ მომდევნო საფეხურზე გადასვლამდე რამდენიმე წუთი, რომ გადახედოთ მონაცემთა ფურცელს და ნახოთ რა ინფორმაციის პოვნა შეგიძლიათ.

ნაბიჯი 6: CODE2: Turn_Led_ON

კოდი 2: Turn_Led_ON
კოდი 2: Turn_Led_ON
კოდი 2: Turn_Led_ON
კოდი 2: Turn_Led_ON
კოდი 2: Turn_Led_ON
კოდი 2: Turn_Led_ON

ჟოლოს pi 3 53 რეგისტრირდება გამომავალი/შესასვლელი ქინძისთავების (პერიფერიული მოწყობილობების) გასაკონტროლებლად. ქინძისთავები დაჯგუფებულია ერთად და თითოეული ჯგუფი ენიჭება რეგისტრს. GPIO– სთვის ჩვენ უნდა შეგვეძლოს წვდომა SELECT რეგისტრზე, SET რეგისტრზე და CLEAR რეგისტრებზე. ამ რეგისტრებზე წვდომისთვის ჩვენ გვჭირდება ამ რეგისტრების ფიზიკური მისამართები. როდესაც კითხულობთ მონაცემთა ფურცელს, თქვენ მხოლოდ უნდა აღინიშნოს მისამართის ოფსეტური (ლოი ბაიტი) და დაამატოთ ის ძირითად მისამართს. თქვენ უნდა გააკეთოთ ეს, რადგან მონაცემთა ცხრილში მოცემულია Linux– ის ვირტუალური მისამართი, რომელიც ძირითადად წარმოადგენს ოპერაციული სისტემების მნიშვნელობებს. ჩვენ არ ვიყენებთ ოპერაციულ სისტემას, ამიტომ ჩვენ გვჭირდება წვდომა ამ რეგისტრებზე უშუალოდ ფიზიკური მისამართის გამოყენებით. ამისათვის თქვენ გჭირდებათ შემდეგი ინფორმაცია:

  • პერიფერიული მოწყობილობების ძირითადი მისამართი: 0x3f200000. Pdf (გვერდი 6) ამბობს, რომ ძირითადი მისამართია 0x3f000000, თუმცა, ეს მისამართი არ იმუშავებს. გამოიყენეთ 0x3f200000
  • FSEL2 (SELECT) ოფსეტი არ არის რეგისტრის სრული მისამართი. Pdf ჩამოთვლის FSEL2 0x7E20008 მაგრამ ეს მისამართი ეხება linux ვირტუალურ მისამართს. ანაზღაურება იგივე იქნება, რაც ჩვენ გვინდა აღვნიშნოთ. 0x08
  • GPSET0 (SET) კომპენსირება: 0x1c
  • GPCLR0 (CLEAR) ოფსეტური: 0x28

თქვენ ალბათ შეამჩნიეთ, რომ მონაცემთა ფურცელი შეიცავს 4 SELECT რეგისტრს, 2 SET რეგისტრს და 2 CLEAR რეგისტრს, რატომ ავირჩიე ის, რაც გავაკეთე? ეს იმიტომ ხდება, რომ ჩვენ გვსურს გამოვიყენოთ GPIO 21 და FSEL2 აკონტროლებს GPIO 20-29, SET0 და CLR0 აკონტროლებს GPIO 0-31. FSEL რეგისტრები ანიჭებს სამ ბიტს თითოეული GPIO პინისთვის. ვინაიდან ჩვენ ვიყენებთ FSEL2- ს, ეს ნიშნავს 0-2 ბიტიანი კონტროლის GPIO 20 და 3-5 ბიტიანი კონტროლის GPIO 21 და ასე შემდეგ. Set და CLR რეგისტრები ანიჭებენ ერთ ბიტს თითოეულ პინს. მაგალითად, ბიტი 0 SET0 და CLR0 აკონტროლებს GPIO 1. GPIO 21 – ის გასაკონტროლებლად თქვენ დააყენებთ ბიტს 21 SET0 და CLR0.

კარგი, ჩვენ ვისაუბრეთ იმაზე, თუ როგორ უნდა შევიდეთ ამ რეგისტრებში, მაგრამ რას ნიშნავს ეს ყველაფერი?

  • FSEL2 რეგისტრი გამოყენებული იქნება GPIO 21 გამოყვანის დასაყენებლად. პინის გამოსასვლელად დასაყენებლად თქვენ უნდა დააყენოთ lo ბიტის სამი ბიტი 1-ზე 1. ასე რომ, თუ ბიტი 3-5 აკონტროლებს GPIO 21-ს ეს ნიშნავს რომ ჩვენ უნდა დავაყენოთ პირველი ბიტი, ბიტი 3-დან 1-მდე. ეს გეტყვით pi რომ ჩვენ გვინდა გამოვიყენოთ GPIO 21 როგორც გამომავალი. ასე რომ, თუ ჩვენ შევხედავთ 3 ბიტს GPIO 21 -ისთვის, ისინი ასე უნდა გამოიყურებოდეს მას შემდეგ, რაც ჩვენ დავაყენებთ მას გამომავალზე, b001.
  • GPSET0 ეუბნება pi- ს, ჩართოს პინი (გამოუშვით ძაბვა). ამისათვის ჩვენ უბრალოდ ვრთავთ ბიტს, რომელიც შეესაბამება ჩვენ გვსურს GPIO პინს. ჩვენს შემთხვევაში, ბიტი 21.
  • GPCLR0 ეუბნება pi გამორთეთ pin (ძაბვის გარეშე). ქინძისთავის გამორთვისთვის დააყენეთ ბიტი შესაბამის GPIO პინზე. ჩვენს შემთხვევაში ბიტი 21

სანამ მოციმციმე led- ს მივაღწევთ, ჯერ მოდით შევქმნათ მარტივი პროგრამა, რომელიც უბრალოდ ჩართავს led- ს.

დასაწყებად, ჩვენ უნდა დავამატოთ ორი დირექტივა ჩვენი კოდის ზედა ნაწილში.

  • . განყოფილება.დაწყება pi- ს ეუბნება სად უნდა დააყენოს კოდი
  • .გლობალური _დაწყება

შემდეგი, ჩვენ უნდა განვათავსოთ ყველა ის მისამართი, რომელსაც ჩვენ ვიყენებთ. გამოიყენეთ.equ მნიშვნელობებისთვის წაკითხული სიმბოლოების მინიჭების მიზნით.

  • .equ GPFSEL2, 0x08
  • .equ GPSET0, 0x1c
  • .equ GPCLR0, 0x28
  • .equ BASE, 0x3f200000

ახლა ჩვენ ვაპირებთ შევქმნათ ნიღბები იმ ბიტების დასაყენებლად, რომელთა დაყენებაც გვჭირდება.

  • .equ SET_BIT3, 0x08 ეს დააწესებს სამ ბიტს 0000_1000
  • . Equ SET_BIT21, 0x200000

შემდეგ ჩვენ უნდა დავამატოთ ჩვენი _ დაწყების ეტიკეტი

_დაწყება:

ჩატვირთეთ ძირითადი მისამართი რეესტრში

ldr r0, = BASE

ახლა ჩვენ უნდა დავაყენოთ GPFSEL2- ის bit3

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] ეს ინსტრუქცია ამბობს, რომ დავწეროთ ბიტი 0x08 GPFSEL2 მისამართზე

დაბოლოს, ჩვენ გვჭირდება GPIO 21 ჩართვა GPSET0 რეესტრში ბიტი 21 -ის დაყენებით

  • ldr r1, = SET_BIT21
  • str r1, [r0, #GPSET0]

საბოლოო პროდუქტი უნდა გამოიყურებოდეს კოდის მსგავსი.

შემდეგი ნაბიჯი არის კოდის შედგენა და.img ფაილის შექმნა, რომლის გაშვებაც pi შეუძლია.

  • ჩამოტვირთეთ თანდართული makefile და kernel.ld და თუ გსურთ turn_led_on.s საწყისი კოდი.
  • განათავსეთ ყველა ფაილი იმავე საქაღალდეში.
  • თუ თქვენ იყენებთ თქვენს საკუთარ კოდს, შეცვალეთ makefile და შეცვალეთ კოდი = turn_led_on.s კოდით =.s
  • შეინახეთ მაკიაჟი
  • გამოიყენეთ ტერმინალი (linux) ან cmd ფანჯარა (windows) ნავიგაციისთვის თქვენს საქაღალდეში, რომელიც შეიცავს ფაილებს და ჩაწერეთ make and hit enter
  • Make ფაილმა უნდა შექმნას ფაილი სახელწოდებით kernel.img
  • დააკოპირეთ kernel.img თქვენს მინი SD ბარათზე. თქვენი ბარათების შინაარსი უნდა იყოს როგორც სურათზე (სურათი 3): bootcode.bin, start.elf, fixup.dat და kernel.img.
  • ამოიღეთ მინი sd ბარათი და ჩადეთ იგი pi- ში
  • ჩართეთ პი დენის წყაროსთან
  • LED უნდა აანთო !!!

უაღრესად მნიშვნელოვანი შენიშვნა: როგორც ჩანს, ინსტრუქტორებს ჰქონდათ პრობლემა მაკიაჟის გაფართოებასთან დაკავშირებით, ამიტომ ხელახლა ავტვირთე.txt გაფართოებით. გთხოვთ, წაშალოთ გაფართოება მისი გადმოტვირთვისთვის, რათა ის გამართულად იმუშაოს.

გირჩევთ: