Санах ойн чип гэж юу вэ, микро схемийг хэрхэн програмчлах вэ. Eeprom санах ойг ашиглан хэрхэн яаж цэвэрлэх вэ?

Хамгийн сүүлд би Mega-аас програм хангамжийг хэрхэн нөөцлөх талаар "асуултанд дэлгэрэнгүй хариулт" бичихэд тэд намайг EEPROM-н нөөцлөлтийг дурдаагүй гэж зэмлэсэн. Тэр үед би үүнийг ухамсартайгаар хийгээгүй, учир нь ... Анхны "харвах суманд ойртох" үе шатанд бүх зүйлийг төвөгтэй болгох шаардлагагүй гэж би зөв дүгнэсэн. Үнэн хэрэгтээ програм хангамжийг эмхэтгэх, байршуулах үед EEPROM анивчдаггүй нь хэнд ч ойлгомжтой биш юм. Arduino IDE. Өөрөөр хэлбэл, програм хангамжийг IDE-ээс татаж авах үед EEPROM-д юу ч байршуулдаггүй гэсэн үг юм. Мөн EEPROM-тай хийсэн залруулга (хэрэв түүний хэрэглээ нь програм хангамжид идэвхжсэн бол) огт өөр түвшинд хийгддэг. Тиймээс нүцгэн програм хангамжийг нөөцлөхгүйгээр нарийн тохируулга, үүнийг (зөвхөн магадгүй) EEPROM-д хадгалах боломжтой тул зөвхөн нүцгэн програм хангамжийг хадгалахад хангалттай байсан. Гэхдээ асуулт гарч ирсэн болохоор "зажилж" яагаад болохгүй гэж. Үүнийг дарааллаар нь авч үзье. EEPROM гэж юу вэ, яагаад энэ тухай ярих вэ?
EEPROM - (Цахилгаанаар устгагдах боломжтой программчлагдсан зөвхөн унших санах ой) микроконтроллерын тогтворгүй санах ойн мэдээлэл бичиж унших боломжтой хэсэг. Энэ нь ихэвчлэн ажиллах явцад өөрчлөгдөж болох програмын тохиргоог хадгалахад ашиглагддаг бөгөөд цахилгаан унтарсан үед хадгалагдах ёстой.

3D принтер EEPROM-г хэрхэн ашигладаг вэ?
Жишээ болгон Marlin-г харцгаая.Marlin Firmware-д EEPROM-г ашиглаагүй.Тохируулагчийн параметрүүдийг (Configuration.h) ашиглах боломжуудыг багтаасан нь анхдагчаар тайлбарлагдана.

#EEPROM_SETTINGS-г тодорхойлох
#EEPROM_CHITCHAT-ыг тодорхойлох

Хэрэв EEPROM-ийн хэрэглээ идэвхжсэн бол хэвлэгч нь дараах тохиргоог (хөрөнгөтөнөөс тодорхойлсон) хадгалж, ашиглаж болно.

  • Миллиметр тутамд хийх алхамуудын тоо
  • Хамгийн их/хамгийн бага тэжээлийн хурд [мм/с]
  • Хамгийн их хурдатгал [мм/с^2]
  • Хурдатгал
  • Татаж авах үеийн хурдатгал
  • PID тохиргоо
  • Гэрийн байрлалын офсет
  • Хөдөлгөөний үеийн хамгийн бага тэжээлийн хурд [мм/с]
  • Хэсгийн хамгийн бага хугацаа [мс]
  • Хамгийн дээд хурдны үсрэлт X-Y тэнхлэгүүд[мм/с]
  • Z тэнхлэг дэх хамгийн дээд хурдны үсрэлт [мм/с]
Та принтерийн дэлгэц болон удирдлагыг ашиглан эдгээр тохиргоог засах боломжтой. EEPROM-г идэвхжүүлсэн үед цэс дараах зүйлсийг харуулах ёстой.
  • Санах ойг хадгалах
  • Санах ойг ачаалах
  • Failsafe-г сэргээх
Та мөн GCode ашиглан шууд ажиллах боломжтой (Pronterface-ээр).
  • M500 Дараагийн эхлүүлэх эсвэл M501 команд хүртэл одоогийн тохиргоог EEPROM-д хадгална.
  • M501 EEPROM-аас тохиргоог уншина.
  • M502 Configurations.h-д заасан өгөгдмөл утгууд руу тохиргоог дахин тохируулна. Хэрэв та түүний дараа M500-г ажиллуулбал EEPROM-д анхдагч утгуудыг оруулах болно.
  • M503 Одоогийн тохиргоог харуулна - ""EEPROM-д бичигдсэн.""
Та Repitier програм хангамжаас EEPROM-ийн талаар уншиж болно.

EEPROM руу өгөгдлийг хэрхэн уншиж, бичих вэ?
Түлхүүрийг ашиглан програм хангамжийн нөөцлөх аргад тайлбарласан аргатай төстэй . Зөвхөн энэ тохиолдолд түүний дараа EEPROM-ийг унших шаардлагатай байгааг харуулсан заагч гарч ирнэ.

avrdude.exe -p atmega2560 -c утас -PCOM5 -b115200 -Ueeprom:r:"printer_eeprom".eep:i

Энэ тушаал нь EEPROM-ийн өгөгдлийг "printer_eeprom.eep" файл руу уншина. Хэрэв амжилттай бол дэлгэцэн дээр дараахтай адил зүйл харагдах болно.

Бичлэг хийх нь тийм ч төвөгтэй биш бөгөөд ижил төстэй тушаалаар хийгддэг бөгөөд энэ нь зөвхөн товчлуур дээр л ялгаатай байдаг. Энэ нь "r" биш, харин "w" юм.

avrdude.exe -p atmega2560 -c утас -PCOM5 -b115200 -Ueeprom:w:"printer_eeprom".eep:i

Хэрэв амжилттай бол та дэлгэцэн дээр дараах мессежтэй төстэй зүйлийг харах болно.

EEPROM-г хэрхэн, яагаад устгах вэ?
Эхлэхийн тулд "Яагаад ингэдэг вэ?" Хэрэв та өмнөх программ хангамж ашиглаж байсан бол EEPROM-г устгах хэрэгтэй бөгөөд санах ойд хог хаягдал үлдэх магадлалтай. Хаа нэгтээ би нэг програм хангамжаас нөгөөд (Marlin-аас Repitier EMNIP руу) шилжсэний дараа принтер нь "бүтээлч байдлаар" ажиллаж эхэлсэнтэй тулгарсан. Энэ нь өөр өөр програм хангамжууд өөрсдийн өгөгдлийг дор хадгалдагтай холбоотой юм өөр өөр хаягууд. Мөн та буруу хаягаас өгөгдлийг уншихыг оролдоход пандемони эхэлдэг.
Та EEPROM-ийг зөвхөн программ хангамжаас устгаж болно, гэхдээ үүнийг хийхийн тулд та хянагч руу тусгай ноорог түр байршуулах шаардлагатай болно. Та энэ тухай албан ёсны Arduino баримтаас уншиж болно.
Хэрэв EEPROM-г устгасан бол оруулахгүй Arduino самбар, мөн зарим хийсвэр хянагч дээр самбар дээрх тодорхой хянагч дахь EEPROM-ийн хэмжээг харгалзан ноорог кодыг өөрчлөх шаардлагатай болно. Үүнийг хийхийн тулд та "For" давталт дахь төгсгөлийн нөхцөлийг өөрчлөх хэрэгтэй болно. Жишээлбэл, 1кб EEPROM санах ойтой ATmega328-ийн хувьд мөчлөг дараах байдалтай байна.
Дүгнэлт.
Би нэлээдгүй хугацаанд тэнүүчилж байсан, гэхдээ энэ бүхэн юунд зориулагдсан бэ? Програм хангамжийг нөөцлөхдөө EEPROM-г хадгалах боломжтой гэсэн дүгнэлтэд хүрэхийн тулд зөвхөн түүнд хадгалагдсан тохиргоог хийх шаардлагатай. Хэрэв та тэднийг золиослоход бэлэн байгаа бол энэ тухай март. Мөн хэрэв та нэг программыг нөгөө рүү сольсон эсвэл хувилбараас нөгөөд шилжсэн бол байршуулахаасаа өмнө EEPROM-г цэвэрлэхээс залхуурах хэрэггүй. шинэ програм хангамж. Үүний зэрэгцээ бид маш олон шинэ зүйлийг сурсан.

Манай зуухны хянагч бараг бэлэн болсон, гэхдээ одоохондоо энэ нь анхны унтрахаас таван минутын өмнө бүх тохиргоог санаж байдаг "алтан загас" хянагч хэвээр байна. Бидний тохиргоо, тогтоосон температур, тохируулгын цэгүүдийн утгыг цахилгааныг унтраасны дараа санахын тулд та тогтворгүй санах ой - EEPROM ашиглах хэрэгтэй.
Манай найзууд EEPROM-той ажиллах талаар маш сайн бичсэн.

Бидний мэдэх ёстой гол зүйл бол энэ юм EEPROM санах ойҮүнийг "зөвхөн санах ой" биш, харин чип дэх тусдаа дотоод төхөөрөмж гэж үзэх нь дээр.
EEPROM тусдаа хаягийн зай, энэ нь процессорын хаягийн зайтай ямар ч холбоогүй (FLASH болон SRAM); тогтворгүй санах ойн тодорхой хаягаар өгөгдөлд хандахын тулд та гүйцэтгэх хэрэгтэй тодорхой дараалалхэд хэдэн регистр ашигласан үйлдлүүд (хаяг EEARH ба EEARL бүртгэл, өгөгдлийн бүртгэл EEDR болон хяналтын регистр EECR).
Мэдээллийн хуудасны дагуу EEPROM дахь тодорхой хаяг руу байт бичихийн тулд та дараахь зүйлийг хийх хэрэгтэй.

  1. EEPROM-г өгөгдөл бичихэд бэлэн болтол хүлээнэ үү (EECR бүртгэлийн EEPE бит дахин тохируулагдсан);
  2. FLASH санах ойд бичиж дуусахыг хүлээх (SPMCSR регистрийн SELFPRGEN битийг дахин тохируулах) - хэрэв програмд ​​ачаалагч байгаа бол үүнийг хийх ёстой;
  3. бичих шинэ хаяг EEAR бүртгэлд (шаардлагатай бол);
  4. EEDR бүртгэлд өгөгдлийн байт бичих (шаардлагатай бол);
  5. EECR регистрийн EEMPE битийг нэг болгож тохируулах;
  6. EEMPE тугийг тохируулсны дараа дөрвөн цагийн мөчлөгийн дотор бид EECR регистрийн EEPE битэд логик нэгийг бичнэ.

Дараа нь дараагийн зааврыг гүйцэтгэхийн өмнө процессор 2 цагийн циклийг алгасах болно.
Хөтөлбөрт ачаалагч байгаа бол хоёр дахь цэгийг хийх ёстой - баримт бол EEPROM руу бичих нь FLASH санах ой руу бичихтэй зэрэг хийх боломжгүй тул EEPROM руу бичихээсээ өмнө FLASH санах ойн програмчлал дууссан эсэхийг шалгах хэрэгтэй; хэрэв микроконтроллер нь ачаалагчгүй бол FLASH санах ойн агуулгыг хэзээ ч өөрчлөхгүй (avr нь Харвардын архитектуртай гэдгийг санаарай: програмын санах ой (FLASH) ба өгөгдлийн санах ой (SRAM) тусгаарлагдсан).
Бичлэгийн мөчлөгийн үргэлжлэх хугацаа нь чипийн дотоод RC осцилляторын давтамж, тэжээлийн хүчдэл, температураас хамаарна; ATmega48x/88x/168x загваруудын хувьд энэ нь ихэвчлэн 3.4 мс (!), зарим хуучин загваруудын хувьд 8.5 мс (!!!) байдаг.
Нэмж дурдахад, EEPROM руу бичихдээ дээрх үйлдлүүдийн дарааллыг гүйцэтгэх явцад дуудлагын тасалдалтай холбоотой асуудал үүсч болзошгүй тул EEPROM руу бичихдээ тасалдлыг идэвхгүй болгох нь дээр.
Тогтворгүй санах ойг унших нь арай хялбар юм:

  1. EEPROM-г өгөгдөл уншихад бэлэн болтол хүлээнэ үү (EECR бүртгэлийн EEWE бит дахин тохируулагдсан);
  2. хаягийг EEAR бүртгэлд бичих;
  3. EECR регистрийн EERE битийг нэг болгож тохируулах;
  4. бид EEDR регистрээс өгөгдлийг уншдаг (үнэндээ хүссэн өгөгдлийг өгөгдлийн бүртгэл рүү шилжүүлэх үед энэ нь тохиолддог. хатуу дахин тохируулахбит EERE; гэхдээ энэ битийн төлөвийг хянах шаардлагагүй, учир нь EEPROM-аас унших үйлдлийг үргэлж нэг цагийн циклээр гүйцэтгэдэг).

EERE-г нэг болгон тохируулсны дараа процессор дараагийн зааврыг гүйцэтгэхийн өмнө 4 цагийн циклийг алгасдаг.
Бидний харж байгаагаар хамтран ажиллаж байна тогтворгүй санах ой- үйл явц нь цаг хугацаа их шаарддаг; Хэрэв бид ихэвчлэн EEPROM-аас өгөгдөл бичиж, уншвал програм удааширч эхэлнэ.

Гэсэн хэдий ч бид IAR орчинд програм бичиж байгаа бөгөөд бид азтай байна: EEPROM-аас унших, бичих бүх ажлыг хөгжүүлэлтийн орчин хийх болно - iar нь тогтворгүй санах ойд хувьсагч үүсгэдэг "__eeprom" өөрчлөгчтэй. - тэгээд бид зүгээр л "тогтмол" хувьсагчаас "одоогийн" хүртэл унших (хянагчийг эхлүүлэх үед) эсвэл "одоогийн" хувьсагчаас "тогтмол" руу бичих хэрэгтэй болно - өөрөөр хэлбэл одоогийн утга өөрчлөгдөх үед тогтворгүй санах ойн хувьсагчийг мөн өөрчлөх шаардлагатай.
Шинэ хувьсагчид дараах байдлаар харагдах болно.

Eeprom uint16_t EEP_MinTemperature;

Хэд хэдэн ерөнхий үг: мөн бид eeprom хувьсагчийн заагчийг тооцохгүй ч гэсэн eeprom нь тусдаа хаягийн орон зай гэдгийг санах хэрэгтэй бөгөөд eeprom руу заагч үүсгэхийн тулд (мөн хөрвүүлэгч үүнийг хийх боломжийг бидэнд олгодог) Энэ нь eeprom дахь хаяг руу заагч болохыг заана:

Uint16_t __eeprom *EEP_MinTemperatureAdr;

Зуухны хянагч болон EEPROM руу буцъя. Манай тохиолдолд EEPROM байхгүй виртуал машин, мэдээжийн хэрэг, хүлээгдэж буй зүйл биш; Түүнээс гадна тогтворгүй санах ойтой ажиллахад тусдаа номын сан шаардлагатай эсэхийг анхаарч үзэх нь зүйтэй бөгөөд тэдгээр нь бичлэгийн программ дээр хэт "тарсан" байдаг. чухал тохиргоо; Хэрэв та тусдаа номын сан хийх гэж оролдвол та хөндлөн лавлагаа хийх шаардлагатай болно: EEPROM-д зориулсан номын санд ADC, халаалтын элемент, глобал тохиргооны сангуудыг холбоно уу; мөн эдгээр захын сангуудад EEPROM номын санг холбох нь тийм ч сайн арга биш юм.
Өөр нэг сонголт бол тохиргоог хадгалах шаардлагатай номын сан бүрт eeprom хувьсагч нэмж, тохирох тохиргоог шууд хадгалах явдал юм. виртуал машинууд. Бид энэ хувилбарыг хэрэгжүүлэх болно.
Эхлээд EEPROM-д ямар хувьсагчийг хадгалах хэрэгтэйг жагсаая:

  1. шалгалт тохируулгын цэгүүд
  2. хамгийн их-хамгийн бага тогтоосон температур ба температурыг тохируулах алхамын утгууд
  3. температурын утгыг тохируулах
  4. PID хянагчийн коэффициентүүд

Бид гал тогооны таймерын үнэ цэнийг хэмнэдэггүй - хэрэглэгч цахилгааныг унтраасны дараа зуухны таймерыг тохируулах ёстой гэж бид үзэх болно.
Эдгээр бүх тохиргоог хэрэглэгч кодлогчийг эргүүлж, дараа нь хэрэглэгчийн товчийг товч дарснаар тохируулна. Үүний зэрэгцээ, EEPROM-ын унших-бичих мөчлөгийн тоо хязгаарлагдмал хэвээр байгаа тул ижил мэдээллийг дахин бичиж болохгүй (жишээлбэл, хэрэглэгч зарим тохиргооны ижил утгыг сонгосон бол). Тиймээс, __eeprom хувьсагчийг өөрчлөхийн өмнө бид үүнийг дахин бичих шаардлагатай эсэхийг шалгана.

//хэрэв утга өөрчлөгдсөн бол (ADCTemperature.atMinTemperatureValue != (uint16_t)VMEncoderCounter.ecntValue) (ADCTemperature.atMinTemperatureValue = (uint16_t)VMEncoderCounter.ecntVemperature = (uint16_t)VMEncoderCounter.ecntVemperature; ADCTemperature.ecntValue) бол тогтворгүй санах ойд дарж бичнэ үү. ; )

EEPROM-аас тохиргоог унших нь бас хялбар байдаг - "одоогийн" тохиргоог эхлүүлэхдээ бид тогтворгүй санах ойноос утгыг уншдаг.

ADCTemperature.atMinTemperatureValue = EEP_MinTemperature;

Манай төхөөрөмж анхнаасаа EEPROM-д зарим тохиргоотой байхын тулд эхний ачаалах төслийг эдгээр хувьсагчдыг эхлүүлж эмхэтгэж болно:

Eeprom uint16_t EEP_MinTemperature = 20; ... //шалгалт тохируулгын цэгүүдийг тогтворгүй санах ойд хадгалах массив __eeprom TCalibrationData EEP_CalibrationData = ((20, 1300), (300, 4092));

Энэ тохиолдолд хөрвүүлэгч үндсэн функцтэй ажиллахын өмнө __eeprom хувьсагчдыг эхлүүлдэг. Тогтворгүй санах ойтой (.eep) файл авахын тулд та дараах тохиргоонд орох шаардлагатай.
Project->Options..->Linker->Extra Options
Хэрэв "Тушаалын мөрийн сонголтыг ашиглах" нүдийг тэмдэглээгүй бол тэмдэглээд мөрийг нэмнэ үү
-Ointel-стандарт,(XDATA)=.eep
Эхлээд бид төслийг эхлүүлсэн хувьсагчтай эмхэтгэж, eep файлыг тусад нь хадгална; дараа нь бид хувьсагчийг үүсгэх үед эхлүүлэхийг устгана.

Энэ бүгд - манай зуух бэлэн боллоо!

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

EEPROM санах ойн тодорхойлолт

Arduino нь хэрэглэгчиддээ гурван төрлийн суулгасан төхөөрөмжийн санах ойг өгдөг: суурин RAM (санамсаргүй санах ой эсвэл SRAM - статик санамсаргүй хандалтын санах ой) - ашиглалтын явцад өгөгдлийг бүртгэх, хадгалахад шаардлагатай; флаш картууд - аль хэдийн бичигдсэн хэв маягийг хадгалахад зориулагдсан; – өгөгдлийг хадгалах, дараа нь ашиглахад зориулагдсан.

Төхөөрөмжийг дахин ачаалах эсвэл цахилгааныг унтраасны дараа RAM дээрх бүх өгөгдөл устах болно. Хоёр дахь хоёр нь дарж бичихээс өмнө бүх мэдээллийг хадгалж, шаардлагатай бол буцааж авах боломжийг танд олгоно. Өнөө үед флаш дискүүд нэлээд түгээмэл болсон. EEPROM санах ойг илүү нарийвчлан авч үзэх нь зүйтэй.

Энэ товчлол нь цахилгаанаар устгагдах боломжтой программчлагдах боломжтой санах ой гэсэн үг бөгөөд орос хэл рүү орчуулбал цахилгаанаар арилгадаг программчлагдах зөвхөн уншигдах санах ой гэсэн үг юм. Үйлдвэрлэгч нь сүүлийн цахилгаан тасалдсанаас хойш хэдэн арван жилийн турш мэдээллийн аюулгүй байдлыг баталгаажуулдаг (төхөөрөмжийн цэнэгийн бууралтаас хамааран ихэвчлэн 20 жилийн хугацаа өгдөг).

Гэсэн хэдий ч та төхөөрөмжид дахин бичих чадвар хязгаарлагдмал бөгөөд 100,000 дахин ихгүй гэдгийг мэдэх хэрэгтэй. Тиймээс оруулсан мэдээлэлдээ анхааралтай, анхааралтай хандаж, дахин бичихгүй байхыг зөвлөж байна.

Орчин үеийн медиатай харьцуулахад санах ойн хэмжээ маш бага бөгөөд өөр өөр микроконтроллеруудад өөр өөр байдаг. Жишээ нь:

  • ATmega328 - 1кБ
  • ATmega168 ба ATmega8 - 512 байт,
  • ба ATmega1280 - 4 кБ.

Микроконтроллер бүр нь тодорхой хэмжээний даалгаварт зориулагдсан, холболт хийх өөр тооны тээглүүртэй, үүний дагуу өөр өөр хэмжээний санах ой шаардагддаг тул ийм байдлаар бүтээгдсэн. Түүгээр ч барахгүй энэ хэмжээ нь нийтлэг бий болсон төслүүдэд хангалттай юм.

EEPROM руу бичихэд маш их цаг хугацаа шаардагдана - ойролцоогоор. 3 мс. Бичлэг хийж байх үед цахилгаан унтарвал өгөгдөл огт хадгалагдахгүй эсвэл буруу бичигдсэн байж болзошгүй. Ашиглалтын явцад алдаа гарахаас зайлсхийхийн тулд оруулсан мэдээллийг байнга шалгаж байх шаардлагатай. Өгөгдлийг унших нь илүү хурдан бөгөөд санах ойн нөөц багасдаггүй.

Номын сан

EEPROM санах ойтой ажиллах нь Arduino-д тусгайлан бүтээсэн номын санг ашиглан хийгддэг. Гол нь өгөгдөл бичих, унших чадвар юм. тушаалаар идэвхжүүлсэн # EEPROM.h оруулах.

  • Учир нь бичлэгүүд– EEPROM.write(хаяг, өгөгдөл);
  • Учир нь унших– EEPROM.унших(хаяг).

Эдгээр тоймд: хаяг – хоёр дахь аргументын өгөгдлийн өгөгдлийг оруулсан нүдний өгөгдөлтэй аргумент; Уншихдаа мэдээллийг хаанаас унших ёстойг заадаг хаяг гэсэн нэг аргументыг ашигладаг.

Чиг үүрэг Зорилго
унших (хаяг) EEPROM-аас 1 байт уншдаг; хаяг – өгөгдөл унших хаяг (0-ээс эхлэн нүд);
бичих (хаяг, үнэ цэнэ) хаягаар санах ойд утга (1 байт, 0-ээс 255 хүртэлх тоо) бичдэг;
шинэчлэх (хаяг, үнэ цэнэ) хуучин агуулга нь шинэ агуулгаас өөр байвал хаяг дээрх утгыг орлуулах;
авах (хаяг, өгөгдөл) хаяг дээрх санах ойноос заасан төрлийн өгөгдлийг унших;
тавих (хаяг, өгөгдөл) заасан төрлийн өгөгдлийг хаягийн санах ойд бичдэг;
EEPROM "EEPROM" танигчийг санах ойд өгөгдөл бичих, унших массив болгон ашиглах боломжийг танд олгоно.

Бүхэл тоо бичих

Тогтворгүй EEPROM санах ойд бүхэл тоо бичих нь маш энгийн. Функцийг эхлүүлэх үед тоо оруулах болно EEPROM.write(). Шаардлагатай өгөгдлийг хаалтанд оруулсан болно. Энэ тохиолдолд 0-ээс 255 хүртэлх тоо, 255-аас дээш тоонуудыг өөр өөрөөр бичнэ. Эхнийх нь энгийн байдлаар бичигдсэн байдаг - эзлэхүүн нь 1 байт, өөрөөр хэлбэл нэг нүд болно. Сүүлд нь бичихийн тулд та хамгийн өндөр байтад highByte(), хамгийн бага байтад lowByte() операторуудыг ашиглах ёстой.

Тоо нь байтад хуваагдаж, нүдэнд тусад нь бичигдэнэ. Жишээлбэл, 789 тоог хоёр нүдэнд бичнэ: эхнийх нь 3-р хүчин зүйл, хоёр дахь нь дутуу утгыг агуулна. Үр дүн нь шаардлагатай утга юм:

3 * 256 + 21 = 789

Учир нь « reunion" том бүхэл тоо хэрэглэнэ үгийн функц(): int val = үг (сайн уу, бага). Бичлэг хийх хамгийн их бүхэл тоо нь 65536 (өөрөөр хэлбэл 2-оос 16-ийн зэрэг) гэдгийг унших хэрэгтэй. Өөр бичилт хийгдээгүй байгаа нүднүүдэд монитор тус бүрд 255 гэсэн тоог харуулах болно.

Хөвөгч цэгийн тоо, мөр бичих

Хөвөгч цэг болон мөрт тоонууд нь мантис болон илтгэгчээр дүрслэгдсэн бодит тоог бичих хэлбэр юм. Ийм тоонуудыг функцийг идэвхжүүлснээр тогтворгүй EEPROM санах ойд бичдэг EEPROM.put(), тус тус унших, - EEPROM.get().

Програмчлалын үед хөвөгч цэгийн тоон утгыг хөвөгч гэж тэмдэглэдэг бөгөөд энэ нь тушаал биш, харин тоо гэдгийг тэмдэглэх нь зүйтэй. Char type (тэмдэгтийн төрөл) – тэмдэгт мөрийг төлөөлөхөд ашигладаг. Монитор дээр тоо бичих процессыг setup(), унших - loop() ашиглан эхлүүлнэ.

Процессын явцад дэлгэц дээр "хэт дүүрсэн" гэсэн утгатай ovf болон "дугасан" гэсэн утгатай nan утгууд гарч ирж болно. тоон утга" Энэ нь нүдэнд бичигдсэн мэдээллийг хөвөгч цэгийн тоогоор хуулбарлах боломжгүй гэсэн үг юм. Аль үүрэнд ямар төрлийн мэдээлэл бүртгэгдсэнийг найдвартай мэдэж байвал ийм нөхцөл байдал үүсэхгүй.

Төсөл, тойм зургийн жишээ

Жишээ №1

Ноорог нь цуваа портоос 16 хүртэлх тэмдэгт бичиж, EEPROM-аас 16 тэмдэгтийг гогцоонд гаргана. Үүний ачаар өгөгдлийг EEPROM-д бичиж, тогтворгүй санах ойн агуулгыг хянадаг.

// EEPROM #include-ийн ажиллагааг шалгана уу int i, d; void setup() ( Serial.begin(9600); // портыг эхлүүлэх, хурд 9600 ) void loop() ( // EEPROM уншаад 16 өгөгдлийг Serial.println(); Serial.print("EEPROM) руу гаргана. = " ); i= 0; while(i< 16) { Serial.print((char)EEPROM.read(i)); i++; } // проверка есть ли данные для записи if (Serial.available() != 0) { delay(50); // ожидание окончания приема данных // запись в EEPROM i= 0; while(i < 20) { d= Serial.read(); if (d == -1) d= " "; // если символы закончились, заполнение пробелами EEPROM.write(i, (byte)d); // запись EEPROM i++; } } delay(500); }

Жишээ №2

Илүү сайн ойлгохын тулд бид тогтворгүй санах ойтой хэрхэн ажиллах талаар ойлгоход туслах жижиг ноорог үүсгэж болно. Бид энэ санах ойн бүх эсийг тоолдог. Хэрэв нүд хоосон биш бол цуваа порт руу гарна. Дараа нь нүднүүдийг хоосон зайгаар дүүргэ. Дараа нь бид текстийг цуваа портын монитороор оруулна. Бид үүнийг EEPROM руу бичээд дараагийн удаа асаахад уншина.

#оруулна int хаяг = 0; // eeprom хаяг int read_value = 0; // eeprom-аас уншсан өгөгдөл char serial_in_data; // цуваа портын өгөгдөл int led = 6; // LED int i-д зориулсан 6-р мөр; void setup() ( pinMode(led, OUTPUT); // 6-р мөрийг Serial.begin(9600) гаралт болгон тохируулсан; // цуваа порт 9600 Serial.println(); Serial.println("EEPROM ДАХЬ ӨМНӨХ TEXT" : -"); for(хаяг = 0; хаяг< 1024; address ++) // считываем всю память EEPROM { read_value = EEPROM.read(address); Serial.write(read_value); } Serial.println(); Serial.println("WRITE THE NEW TEXT: "); for(address = 0; address < 1024; address ++) // заполняем всю память EEPROM пробелами EEPROM.write(address, " "); for(address = 0; address < 1024;) // записываем пришедшие с последовательного порта данные в память EEPROM { if(Serial.available()) { serial_in_data = Serial.read(); Serial.write(serial_in_data); EEPROM.write(address, serial_in_data); address ++; digitalWrite(led, HIGH); delay(100); digitalWrite(led, LOW); } } } void loop() { //---- мигаем светодиодом каждую секунду -----// digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); }

Жишээ №3

Санах ой руу хоёр бүхэл тоо бичиж, EEPROM-аас уншиж, цуваа порт руу гаргана. 0-ээс 255 хүртэлх тоонууд нь функцийг ашиглан 1 байт санах ой эзэлдэг EEPROM.write()хүссэн нүдэнд бичигдэнэ. 255-аас дээш тооны хувьд тэдгээрийг байт болгон хуваах ёстой highByte()Тэгээд бага байт()ба байт бүрийг өөрийн нүдэнд бичнэ. Энэ тохиолдолд хамгийн их тоо нь 65536 (эсвэл 2 16) байна.

#оруулна // EEPROM номын санг холбох void setup() ( int smallNum = 123; // 0-ээс 255 хүртэлх бүхэл тоо EEPROM.write(0, smallNum); // 0 нүдэнд тоо бичих int bigNum = 789; // тоог хуваах > 255 х 2 байт (хамгийн их. 65536) байт hi = highByte(bigNum); // өндөр байт байт бага = багаБайт(биг тоо); // бага байт EEPROM.write(1, сайн); // EEPROM-ын өндөр байт бичих 1-р нүдэнд .write(2, бага); // 2-р нүдэнд бага байт бичнэ Serial.begin(9600); // цуваа портыг эхлүүлнэ ) void loop() ( for (int addr=0; addr)<1024; addr++) { // для всех ячеек памяти (для Arduino UNO 1024) byte val = EEPROM.read(addr); // считываем 1 байт по адресу ячейки Serial.print(addr); // выводим адрес в послед. порт Serial.print("\t"); // табуляция Serial.println(val); // выводим значение в послед. порт } delay(60000); // задержка 1 мин }

Жишээ № 4

Хөвөгч цэгийн тоо, мөр бичих - арга EEPROM.put(). Унших - EEPROM.get().

#оруулна // номын сангийн void setup() ( int addr = 0; // хаяг хөвөх f = 3.1415926f; // хөвөх цэгийн дугаар (хөвөгч төрөл) EEPROM.put(addr, f); // хаяг руу f тоог бичнэ үү. addr addr += sizeof(float); // санах ойн дараагийн чөлөөт нүдний тэмдэгтийн нэрийг тооцоолох = "Сайн уу, SolTau.ru!"; // EEPROM.put(addr, нэр) тэмдэгтүүдийн массив үүсгэх; // массив бичих EEPROM-д Serial.begin (9600); // цуваа портыг эхлүүлэх ) void loop() (for (int addr=0; addr)<1024; addr++) { // для всех ячеек памяти (1024Б=1кБ) Serial.print(addr); // выводим адрес в послед. порт Serial.print("\t"); // табуляция float f; // переменная для хранения значений типа float EEPROM.get(addr, f); // получаем значение типа float по адресу addr Serial.print(f, 5); // выводим с точностью 5 знаков после запятой Serial.print("\t"); // табуляция char c; // переменная для хранения массива из 20 символов EEPROM.get(addr, c); // считываем массив символов по адресу addr Serial.println(c); // выводим массив в порт } delay(60000); // ждём 1 минуту }

Жишээ №5

EEPROM-ийг массив болгон ашиглах.

#оруулна void setup() ( EEPROM = 11; // 1-р нүдийг бичнэ EEPROM = 121; // 2-р нүдийг бич EEPROM = 141; // 3-р нүдийг EEPROM = 236 бичнэ; // 4-р нүдийг бичнэ Serial .begin(9600) ); ) хүчингүй давталт() ( for (int addr=0; addr<1024; addr++) { Serial.print(addr); Serial.print("\t"); int n = EEPROM; // считываем ячейку по адресу addr Serial.println(n); // выводим в порт } delay(60000); }

EEPROM-тэй ажиллах

Өмнө дурьдсанчлан, EEPROM санах ой хязгаарлагдмал. Тогтворгүй санах ойн ашиглалтын хугацааг уртасгахын тулд бичих () функцийн оронд шинэчлэх функцийг ашиглах нь дээр. Энэ тохиолдолд дахин бичих нь зөвхөн шинээр бичигдсэнээс ялгаатай байгаа нүднүүдэд л хийгддэг.

Микроконтроллерийн санах ойн өөр нэг ашигтай функц бол байт хадгалах эсүүдийг салшгүй EEPROM массивын хэсэг болгон ашиглах чадвар юм. Ашиглалтын ямар ч форматын хувьд бүртгэгдсэн мэдээллийн бүрэн бүтэн байдлыг байнга хянаж байх шаардлагатай.

Arduino дээрх ийм санах ой нь хянагч болон төхөөрөмжийн үйл ажиллагаанд хамгийн чухал зүйлсийг хадгалдаг. Жишээлбэл, температур хянагчийг ийм үндсэн дээр үүсгэсэн бөгөөд анхны өгөгдөл нь алдаатай байвал төхөөрөмж нь одоо байгаа нөхцөлд "хангалтгүй" ажиллах болно - энэ нь температурыг хэт дутуу үнэлэх эсвэл хэт үнэлэх болно.

EEPROM нь буруу өгөгдөл агуулсан хэд хэдэн нөхцөл байдал байдаг:

  1. Анх идэвхжүүлэхэд хараахан оруулаагүй байна.
  2. Хяналтгүй цахилгаан тасалдсан үед зарим эсвэл бүх өгөгдлийг бүртгэхгүй эсвэл буруу бүртгэх болно.
  3. Боломжит өгөгдлийг дахин бичих мөчлөг дууссаны дараа.

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

Мэдээллийн бүрэн бүтэн байдлыг хянахын тулд системийн хяналтын кодыг ашигладаг. Энэ нь анхны өгөгдлийн бичлэг дээр үндэслэн бүтээгдсэн бөгөөд баталгаажуулсны дараа өгөгдлийг дахин тооцоолдог. Хэрэв үр дүн өөр бол энэ нь алдаа юм. Ийм шалгалтын хамгийн түгээмэл хувилбар бол шалгах нийлбэр юм - бүх нүдний утгыг нэмэхийн тулд энгийн математик үйлдлийг гүйцэтгэдэг.

Туршлагатай програмистууд энэ кодонд E5h гэх мэт нэмэлт "онцгой OR" нэмдэг. Хэрэв бүх утгууд тэгтэй тэнцүү бөгөөд систем нь анхны өгөгдлийг андуурч дахин тохируулсан бол энэ заль мэх нь алдааг илчлэх болно.

Эдгээр нь Arduino микроконтроллеруудад зориулсан тогтворгүй EEPROM санах ойтой ажиллах үндсэн зарчим юм. Зарим төслүүдийн хувьд зөвхөн энэ төрлийн санах ойг ашиглах нь зүйтэй. Энэ нь давуу болон сул талуудтай. Бичих, унших аргыг эзэмшихийн тулд энгийн ажлуудаас эхлэх нь дээр.

Мега гэр бүлийн бүх микроконтроллерууд нь тогтворгүй санах ойг агуулдаг. EEPROMсанах ой). Энэ санах ойн хэмжээ ATmega8x загварт 512 байтаас хуучин загварт 4 КБ хүртэл хэлбэлздэг. EEPROMсанах ой нь өөрийн хаягийн орон зайд байрладаг бөгөөд RAM шиг шугаман зохион байгуулалттай байдаг. Хамт ажиллах EEPROMСанах ой нь хаягийн бүртгэл, өгөгдлийн бүртгэл, хяналтын бүртгэл гэсэн гурван оролт гаралтын бүртгэлийг ашигладаг.

Хаягийн бүртгэл

Хаягийн бүртгэл EEPROMсанах ой EEAR (EEPROM хаягийн бүртгэл)физикийн хувьд хоёр хэсэгт байрладаг RVV EEARH:EEARL, дагуу байрладаг
$1F ($3F) болон $1E ($3E) хаягууд. Энэ регистр нь хандах нүдний хаягаар ачаалагдсан байна. Хаягийн бүртгэл нь бичих, унших боломжтой. Үүний зэрэгцээ, бүртгэлд EEARHзөвхөн хамгийн бага ач холбогдолтой битүүдийг ашигладаг (оролцох битийн тоо нь эзэлхүүнээс хамаарна EEPROMсанах ой). Ашиглагдаагүй бүртгэлийн битүүд EEARHЗөвхөн унших боломжтой бөгөөд "0"-г агуулна.

Мэдээллийн бүртгэл

Мэдээллийн бүртгэл EEPROMсанах ой EEDR (EEPROM мэдээллийн бүртгэл)$1D ($3D) үнээр байрладаг. Энэ бүртгэлд бичихдээ оруулах ёстой өгөгдлийг ачаална EEPROM, уншиж байх үед уншсан өгөгдөл EEPROM.

Хяналтын бүртгэл

Хяналтын бүртгэл EEPROMсанах ой EECR (EEPROM хяналтын бүртгэл)$1C ($3C) үнээр байрладаг. Энэ бүртгэлийг ашиглаж байна
хандалтын хяналт EEPROMсанах ой. Түүний тайлбарыг доорх хүснэгтэд үзүүлэв.

Цутгах Нэр Тодорхойлолт
7..4 - ашиглаагүй, "0" гэж уншина уу
3 САЙХАН EEPROM-аас тасалдлыг идэвхжүүлнэ. Энэ бит нь EEPROM бичих цикл дуусах үед үүсэх тасалдлыг удирддаг. Хэрэв энэ битийг "1" гэж тохируулсан бол тасалдлыг идэвхжүүлнэ (хэрэв регистрийн I туг
SREG-г мөн "1" болгож тохируулсан). EEWE бит цэвэрлэгдэх үед (цаашид үзнэ үү
хүснэгт) тасалдлыг байнга үүсгэдэг
2 EEMWE EEPROM дээр бичих зөвшөөрлийг хянаж байна. Энэ битийн төлөв нь EEWE бичих идэвхжүүлэх тугийн ажиллагааг тодорхойлдог. Хэрэв энэ битийг "1" гэж тохируулсан бол EEWE бит "1"-д бичихдээ өгөгдөл EEPROM-д бичигдэнэ. Үгүй бол EEWE-г "1" болгож тохируулах нь ямар ч нөлөө үзүүлэхгүй. Програм хангамжийг суулгасны дараа EEMWE битийг техник хангамжаар дамжуулан дахин тохируулна
4 машины цикл
1 EEWE EEPROM руу бичихийг зөвшөөрөх. Энэ битийг "1" гэж тохируулсан үед өгөгдөл EEPROM-д бичигдэнэ (хэрэв EEMWE "1"-тэй тэнцүү бол)
0 EERE EEPROM-аас унших зөвшөөрөл. Энэ битийг "1" болгосны дараа өгөгдлийг EEPROM-аас уншина. Уншиж дууссаны дараа энэ битийг техник хангамжаар дахин тохируулна

EEPROM-д нэг байт бичихийн тулд танд хэрэгтэй:

1. EEPROM өгөгдөл бичихэд бэлэн болтол хүлээнэ үү (EECR регистрийн EEWE тугийг дахин тохируулах хүртэл хүлээнэ үү).

2. FLASH програмын санах ой руу бичиж дуусахыг хүлээнэ үү (SPMCR регистрийн SPMEN тугийг дахин тохируулах хүртэл хүлээнэ үү).

3. Өгөгдлийн байтыг EEDR бүртгэлд, шаардлагатай хаягийг EEAR бүртгэлд (шаардлагатай бол) ачаална.

4. EECR регистрийн EEMWE тугийг “1” болго.

5. EECR регистрийн EEWE бит дээр лог бичнэ. Машины 4 мөчлөгт "1". Энэ битийг суулгасны дараа процессор
дараагийн зааврыг гүйцэтгэхийн өмнө машины 2 циклийг алгасах.

EEPROM-аас нэг байт уншихын тулд танд хэрэгтэй:

1. EEWE тугийн төлөвийг шалгана уу. Баримт нь EEPROM санах ойд бичих үйлдлийг гүйцэтгэх үед (EEWE туг байрлуулсан) EEPROM санах ойг унших эсвэл хаягийн бүртгэлийг өөрчлөх боломжгүй юм.

2. EEAR бүртгэлд шаардлагатай хаягийг ачаална уу.

3. EECR регистрийн EERE битийг “1” болгож тохируулна.

Хүссэн өгөгдлийг EEDR өгөгдлийн бүртгэлд оруулах үед энэ битийн техник хангамжийг дахин тохируулах болно. Гэхдээ унших үйлдэл хэзээ дуусахыг тодорхойлохын тулд EERE битийн төлөвийг хянах шаардлагагүй, учир нь EEPROM-аас унших үйлдэл нь үргэлж нэг машины циклд дуусдаг. Түүнчлэн, EERE битийг "1" болгож тохируулсны дараа процессор дараагийн зааврыг эхлүүлэхийн өмнө 4 машины циклийг алгасдаг.

AVR Studio GCC орчин нь EEPROM-той ажиллах стандарт номын сантай бөгөөд энэ нь файлыг холбох замаар идэвхждэг . Үндсэн функцууд нь eeprom_read_byte(), eeprom_write_byte(), eeprom_read_word(), eeprom_write_word().Жишээ нь: 0-ээс 9 хүртэлх мини тоолуурын програм бичье, нэг товчлуурыг дарахад утга нэмэгдэх ба өөр товчлуур энэ утгыг санах ойд хадгалах болно. Atmega8 микроконтроллер нь 8 МГц давтамжтай дотоод цагийн генератороос ажилладаг. Нийтлэг анод бүхий нэг оронтой долоон сегментийн индикатор нь гүйдэл хязгаарлах R1-R7 резистороор дамжуулан В порт руу холбогдсон, нийтлэг анод нь нэмэлт тэжээлд холбогдсон байна. Диаграммыг доор харуулав.

Нэгдүгээрт, бид ажиллахад шаардлагатай номын сангууд, түүний дотор EEPROM-ийг холбодог. Хувьсагчдыг тодорхойлох. "s" хувьсагч нь индикаторын гаралтын утгыг хадгалдаг бөгөөд та SB1 товчлуурыг дарахад энэ утга нэгээр нэмэгдэх боловч 10-аас ихгүй байна. eeprom_var хувьсагч нь EEPROM-той харьцах болно. Цахилгаан асаалттай үед EEPROM-г уншиж, уншсан өгөгдлийг "s" хувьсагчдад хуваарилдаг бөгөөд үүний үндсэн дээр индикатор дээр тодорхой тоо гарч ирнэ. SB2 дээр дарахад “s” хувьсагчийн өгөгдөл EEPROM-д бичигдэх ба индикатор нэг удаа анивчих болно.

#оруулна #оруулна #оруулна #define d0 ~(0x3F) // 0 #define d1 ~(0x06) // 1 #define d2 ~(0x5B) // 2 #define d3 ~(0x4F) // 3 #define d4 ~(0x66) // 4 #define d5 ~(0x6D) // 5 #define d6 ~(0x7D) // 6 #define d7 ~(0x07) // 7 #define d8 ~(0x7F) // 8 #define d9 ~(0x6F) // 9 тэмдэггүй тэмдэгт; unsigned char eeprom_var EEMEM; // EEPROM-д хувьсагчийг тодорхойлох int main (хүчингүй) ( DDRB = 0xFF; // PORTB = 0xFF гаргахын тулд B порт; DDRD = 0x00; // PORTD = 0xFF оруулах D порт; // Татах резисторыг асаана уу. = eeprom_read_byte(&eeprom_var ); // EEPROM-с нэг байт уншиж, "s"-д оруулах while(1) ( if((PIND&(1)<< PD0)) == 0) // если кнопка SB1 нажата { while((PIND&(1 << PD0)) == 0){} // ждем отпускания кнопки s++; // увеличиваем "s" на единицу _delay_ms(200); } if(s == 10) // Когда дойдет до 10 обнуляем "s" { s = 0; } if((PIND&(1 << PD1)) == 0) // если кнопка SB2 нажата { while((PIND&(1 << PD1)) == 0){} // ждем отпускания кнопки DDRB = 0xFF; // мигаем индикатором _delay_ms(200); DDRB = 0x00; _delay_ms(200); DDRB = 0xFF; eeprom_write_byte(&eeprom_var, s); // записываем "s" в EEPROM _delay_ms(200); } if(s==0) // Выводим цифры на индикатор PORTB = d0; if(s==1) PORTB = d1; if(s==2) PORTB = d2; if(s==3) PORTB = d3; if(s==4) PORTB = d4; if(s==5) PORTB = d5; if(s==6) PORTB = d6; if(s==7) PORTB = d7; if(s==8) PORTB = d8; if(s==9) PORTB = d9; } }

Сэтгэгдэл

0 AntonChip 05/02/2013 22:15

Би Максыг иш татав:

Магадгүй би ямар нэг зүйлийг андуураад байх юм, гэхдээ хэрэв танд OA-тай индикатор байгаа бол 5V шугам дээр нэг резистор байхад хангалттай. Яагаад өндөр гүйдлээс хамгаалах ёстой элементийн дараа гүйдэл хязгаарлах резистор суулгах хэрэгтэй вэ?


Хэрэв индикаторын нэг сегмент энэ болон өөр резисторын холболтын схемээр хаагдах юм бол юу болохыг төсөөлөөд үз дээ.

0 AntonChip 05/15/2013 11:16

Би гидокоос иш татав:

Хоёр хэмжээст массивыг eeprom руу хэрхэн бичих вэ?


Код:
#оруулна // Номын санг оруулах

EEMEM тэмдэггүй тэмдэгтийн өнгө=((1, 2, 3), // EEPROM дээр массив зарлах
{4, 5, 6}};

eeprom_write_byte(&colors, 1); // EEPROM-д массивын элементүүдийг бичих
eeprom_write_byte(&colors, 2);
eeprom_write_byte(&colors, 3);
eeprom_write_byte(&colors, 4);
eeprom_write_byte(&colors, 5);
eeprom_write_byte(&colors, 6);

тэмдэггүй тэмдэгтийн температур;
temp = eeprom_read_byte(&colors); // EEPROM, 2-р мөр(), 1-р багана(), i.e.-ээс массив элементийг задлах. дугаар 4

EEPROM санах ойг дахин тохируулж байна

Жишээ нь санах ойн бүх нүднүүдийг давтаж, тэдгээрт тэг бичдэг.

// EEPROM-той ажиллах номын санг холбож байна. #include "EEPROM.h" void setup() ( // Бүх нүднүүдийг (байт) дамжуулж, тэдгээрт тэг бичнэ. for (int i = 0; i)< EEPROM.length(); i++) EEPROM.update(i, 0); } void loop() { // Пустой цикл... }


Үйлдвэрийн тохиргоо

Хэрэв та санах ойг үйлдвэрийн тохиргоонд буцаахыг хүсвэл 0-ийг 255-аар солих хэрэгтэй, өөрөөр хэлбэл. тэгийг биш харин 255-ын тоог бичнэ. Иймээс ирээдүйд isNaN() функцийг ашиглан EEPROM санах ой руу бичигдсэн эсэхийг шалгах боломжтой.

// EEPROM-той ажиллах номын санг холбож байна. #include "EEPROM.h" void setup() ( // Бүх нүднүүдийг (байт) дамжуулж, тэдгээрт 255 тоог бичнэ. for (int i = 0; i)< EEPROM.length(); i++) EEPROM.update(i, 255); } void loop() { // Пустой цикл... }

Бидний тухай бидэнд хэлээч

Захиа

Хэрэв та Arduino-тэй ажиллаж байсан туршлагатай бөгөөд үнэхээр бүтээлч байх цагтай бол бид хүн бүрийг манай портал дээр нийтлэгдсэн нийтлэлийн зохиогч болохыг урьж байна. Эдгээр нь таны Arduino дээр хийсэн туршилтуудын тухай сургамж эсвэл түүх байж болно. Төрөл бүрийн мэдрэгч ба модулиудын тодорхойлолт. Эхлэгчдэд зориулсан зөвлөмж, заавар. Нийтлэлээ бичиж нийтлээрэй