SlideShare a Scribd company logo
1 of 28
Микроконтроллер гэж юу вэ?
Орчин үеийн техникийн хөгжлийн нэг гайхамшиг бол микроэлэектроник юм. Түүн
дотроо микрокомпьютер, микропроцессорын техник хөгжсөнөөр төрөл бүрийн
автоматууд, роботууд зохион бүтээгдэж, үйлдвэрлэлийн робот манипуляторууд
үйлдвэрлэлд өргөнөөх нэвтэрч үйлдвэрлэлд хүний оролцоо багасаар байна. Өнөөдөр
гэр оронд хэрэглэдэг энгийн нэг будаа агшаагчаас эхлээд бүхий л цахилгаан
хэрэгсэлүүд автоматчилагдаж байгаа билээ. Тэрхүү автомат цахим хэсэг нь
микропроцессорын техник дээр тулгуурладаг. Сүүлийн жилүүдэд манай улсад хүүхэд
залуусын дунд "Робокон" Сумо роботын тэмцээн, Цагаан зураас дагадаг роботын
тэмцээн өргөнөөр зохион байгуулагддаг боллоо.
ATMAGA328P МИКРОКОНТРОЛЛЁРИЙН ОНЦЛОГ
• Өндөр гүйцэтгэлтэй, бага энерги зарцуулалттай 8 битийн AVR микроконтроллер.
• Сайжруулсан AVR RISC (Reduced instruction set computing) архитектур.
- 131 хүчтрхэг командууд-ихэнх нь нэг тактад гүйцэтгэгддэг.
- 32 х 8 ерөнхий зориулалтын регистерүүд.
- Бүрэн статик боловсруулалттай.
- 16MHz синхрончлох давтамжтай үед хамгийн ихдээ 16 MIPS байх
боломжтой.
- Хоёр тактад гүйцэтгэгдэх on-chip үржүүлэгчтэй.
• Программын болон өгөгдлийн тогтмол санах ойтой.
- 32 Kbyte системдээ өөрийгөө программчилах боломжтой flash ROM той.
Нийт 10000 удаа ахин программчилагдах боломжтой.
- Lock битүүдээс үл хамаарах сонгогдох боломжтой Boot code хэсэгтэй. On-
chip boot программаар системдээ программчилагддаг Бодит Read-Write-
Program үйлдэлтэй - 1024 byte EEPROM-той. - 2Kbyte дотоод SRAM-тай.
- Программ хангамжийн нууцлалд зориулагдсан программчилагддаг lock-той.
• JTAG (IEEE std 1149.1 Compliant) инттерфейс.
- JTAG стандарттай зохицсон хязгаар тогтоох боломжууд.
- On-chip дэлгэрэнгүй debug хийх боломжтой.
- JTAG интерфейсээрээ Flash, EEPROM, Fuse, Lock битүүдийг программчилах
боломжтой.
• Нэмэлт үзүүлэлтүүд
- Урьдчилан хуваагчтай, харьцуулах горимтой 8 битийн хоёр
таймер/тоолууртай.
- Урьдчилан хуваагчтай, харьцуулах болон хадгалах горимтой 16 битийн нэг
таймер/тоолууртай.
- Урьдчилан хуваагчтай, бодит хугацааны тоолууртай.
- Дөрвөн PWM сувагтай. - 8 сувгийн 10 битийн ADC 8 нэг төгсгөлт сувагтай.
7 диффренциал сувагтай (зөвхөн TQFP package-д) 1х, 10х, 200х
программчилагдах өсгөлттэй хоёр диффренциал сувагтай - Байтаар хандах
Two-Wire сериаль интерфейстэй. - Программчилагдах сериаль USART rx,tx .
- Төв болон туслах сериал нэмэлт холболттой. (SPI)
- Програмчлагдах Watchdog timer
-Дотоод темпратурын мэдрэгч
• I/O Оролт гаралт
̶ 23 ширхэг програмчдагдах оролт гаралтын хөлтэй
̶ 28-pin PDIP, 32-lead TQFP, 28-pad QFN/MLF and 32-pad QFN/MLF
 Ажиллах хүчдэл:
̶ 1.8 - 5.5V
 Ажиллах темпратур:
̶ -40C to 85C
 Кварцын давтамжаас хамаарсан тэжээх хүчдэлийн түвшин :
̶ 0 - 4MHz@1.8 - 5.5V, 0 - 10MHz@2.7 - 5.5.V, 0 - 20MHz @ 4.5 - 5.5V
 Чадлын зарцуулалт 1MHz, 1.8V, 25C үед
̶ Идэвхитэй ажиллаж байх үед 0.2mA
̶ Power-down буюу энерги хэмнэлтийн горимийн үед : 0.1 µA
̶ Power-save энерги хэмнэлтийн горимд 32kHz RTC хэрэглэгдэх үед : 0.75µA
• Тусгай үзүүлэлтүүд
̶ Power-on Reset and Programmable Brown-out Detection
̶ Internal Calibrated Oscillator
̶ External and Internal Interrupt Sources
̶ Six Sleep Modes: Idle, ADC Noise Reduction, Power-save, Power-down, Standby, and
Extended Standby
Микроконтроллёрийг програмчлахын тулд дараах хэлхээнүүдийг угсарч ажиллуулалсан байх
шаардлагатай.
1. Power circuit-Тэжээлийн хэлхээ /Микроконтроллёрийн ажиллах хүчдэлд тохируулан
тэжээлийн хэсгийн схемийг угсарч холбох 3.3V 5V/
2. Crystal circuit- Кварцийн давтамжаар хангах хэлхээ- хугацааны барилт болон өгөгдөл
дамжуулах үйлдэлүүд нь тодорхой давтамжтай импулсийн бүтэн үеэс боломжит хугацааг
тооцоолдог тул энэхүү хэлхээг угсрах шаардлагатай байдаг.
3. Programming circuit- Програмчлах хэлхээ- Хэрэглэгчийн Си хэл буюу өндөр түвшины хэл дээр
бичсэн кодыг микроконтрочёрийн програмын санах ойд хуулахдаа энэхүү төхөөрөмжийг
ашигладаг.
4. Reset circuit- Дахин эхлүүлэх хэлхээ
Микроконтроллёрийн хүчдэлээр тэжээх хэлхээ
Микроконроллёрийн програмчлах хэлхээ(Microcontroller programming circuit)
Програмчлах төхөөрөмжийг компьютерт таниулахдаа дараах тохируулгыг хийнэ.
http://ladyada.net/learn/avr/avrdude.html
Программын код бичих алдааг шалгах програм хангамтай ажиллах заавар
https://www.mikrocontroller.net/articles/WinAVR
Микроконтроллёрийг импульсаар тэжээх хэлхээ(Crystal oscillator circuit)
Микроконтроллерийн оролт гаралт
76543210
PORTB=0B11110001; // 0-р хөл pull-up 4-7-р хөл pull-up
DDRB=0B11110000; // 0-3р хөл оролт 4-7 -р хөл гаралт
MCUCR регистерийн ашиглан оролт болгон зааж өгч байгаа хөлний төлөвийг
Pull-up болгож зааж өгч болдог.
PORTB=0B11110001;
DDRB=0B11110000;
MCUCR=0B00010000;
MCUCR – MCU удирдлагын регистер
7 6 5 4 3 2 1
0
- BODS BODSE PUD - - IVSEL IVCE
Bit 4 – PUD: Pull-up түвшинийг идэвхитэй ба идэвхигүй төлөвт оруулах регистер
DDxn PORTxn PUD
(MCUCR)
I/O Pull-up Тайлбар
0 0 x Оролт No
0 1 0 Оролт Yes Pull-up идэвхитэй.
0 1 1 Оролт No Pull-up идэвхигүй.
1 0 x Гаралт No
1 1 x Гаралт No
PORTB = (1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0); // Анхны төлөв оноож байна.
DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB //Оролт гаралтыг зааж байна.
/* Read port pins */
i = PINB;
PORT B-ийн өгөгдлийн регистер
7 6 5 4 3 2 1
0
PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0
DDRB – Port B-ийн өгөгдлийн чиглэл тодорхойлох регистер
7 6 5 4 3 2 1
0
DDRB7 DDRB 6 DDRB 5 DDRB4 DDRB 3 DDRB 2 DDRB1 DDRB0
PINB – Port B-ийн хөлний хаяглалт
7 6 5 4 3 2 1
0
PINB7 PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0
Дээрхи оролт гарал болон оролтын өндөр түвшинтэй төлөвийг ардюно Proteus
7.7 симуляцийн програм дээр туршвал:
void setup() void setup()
{ {
pinMode(7,OUTPUT); pinMode(7,OUTPUT);
pinMode(6,OUTPUT); pinMode(6,OUTPUT);
pinMode(5,OUTPUT); pinMode(5,OUTPUT);
pinMode(4,OUTPUT); pinMode(4,OUTPUT);
pinMode(3,INPUT); pinMode(3,INPUT);
pinMode(2,INPUT); pinMode(2,INPUT);
pinMode(1,INPUT); pinMode(1,INPUT);
pinMode(0,INPUT_PULLUP);
digitalWrite(7,HIGH); digitalWrite(7,HIGH);
digitalWrite(6,HIGH); digitalWrite(6,HIGH);
digitalWrite(5,HIGH); digitalWrite(5,HIGH);
digitalWrite(4,HIGH);
}
void loop(){} void loop(){}
pinMode()
Description Configures the specified pin to behave either as an input or an output.
See the description of digital pins for details on the functionality of the pins. As of
Arduino 1.0.1, it is possible to enable the internal pullup resistors with the mode
INPUT_PULLUP. Additionally, the INPUT mode explicitly disables the internal
pullups.
Syntax pinMode(pin, mode)
Parameters pin: the number of the pin whose mode you wish to set
mode: INPUT, OUTPUT, or INPUT_PULLUP. (see the digital pins page for a more
complete description of the functionality.)
Returns None
Example
int ledPin = 13;
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop()
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
digitalWrite()
Description Write a HIGH or a LOW value to a digital pin.
If the pin has been configured as an OUTPUT with pinMode(), its voltage will be set
to the corresponding value: 5V (or 3.3V on 3.3V boards) for HIGH, 0V (ground) for
LOW. If the pin is configured as an INPUT, digitalWrite() will enable (HIGH) or
disable (LOW) the internal pullup on the input pin. It is recommended to set
the pinMode() to INPUT_PULLUP to enable the internal pull-up resistor. See
the digital pins tutorial for more information. NOTE: If you do not set the pinMode()
to OUTPUT, and connect an LED to a pin, when calling digitalWrite(HIGH), the
LED may appear dim. Without explicitly setting pinMode(), digitalWrite() will have
enabled the internal pull-up resistor, which acts like a large current-limiting resistor.
Syntax digitalWrite(pin, value)
Parameters pin: the pin number
value: HIGH or LOW
Returns none
Example
int ledPin = 13
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop()
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
Sets pin 13 to HIGH, makes a one-second-long delay, and sets the pin
back to LOW.
Note
The analog input pins can be used as digital pins, referred to as A0, A1,
etc.
ADC-Аналог Тоон Хувиргуур
Онцлогууд:
• 10 битийн нарийвчлалтай.
• 0.5 LSB интеграл шугаман бус хазайлттай.
• Хувиргах хугацаа 13-260 µs.
• 6 сонгуурын оролтын сувагтай.
• ADC-ийн хувиргалт дуусахад тасалдал үүсдэг.
• Темпратурын мэдрэгчийн оролтын сувагтай.
• Free Running хувиргалтын горимтой.
//********ADC conversion first program G.EA324**********//
int ledPin = 9;
int analogPin = 0;
int val = 0;
void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
val = analogRead(analogPin);
analogWrite(ledPin, val / 4);
Serial.println(val,DEC);
}
ADC-ийн блок диаграм дараах зурагт үзүүлсэн байна.
ADC-д AVCC ба AGND гэсэн 2 тэжээлийн хөлтэй. AGND- нь ерөнхий GND-д
холбогдоно.
AVCC нь VCC хөлнөөс шуугианаас хамгаалах LC шүүлтүүрээр дамжин
хобогдоно.
ADC жиших хүчдэл (Reference Voltage)
ADC ийн жиших хүчдэл нь ADC ийн хөрвүүлэлтийн хүрээг харуулдаг. V REF ээс
илүү гардаг ганц төгсгөлтэй сувгууд нь 0x3FF тэй ойр кодуудыг үүсгэдэг. VREF
нь AVCC шиг л мөн сонгогдсон. Дотоод жиших хүчдэл 1.1V, гадаад AREF,
AVCC нь RC хэлхээгээр ADC д холбогдсон. Дотоод 1.1V жишилт нь дотоод
өсгөгчөөр дотоод хориотой бүсээс үүссэн. Аль аль тохиолдолд, гадаад AREF
хөл нь шууд ADC д холбогдсон ба жиших хүчдэл нь дуу чимээнд илүү
тэвчээртэй байхаас гадна AREF хөл болон газрын хооронд конденсаторыг
холбох замаар хийгдсэн. VREF нь мөн AREF зүүнд хэмжигдсэн бөгөөд өндөр
эсэргүүцлийн хүчдэл хэмжигчтэй. VREF нь өндөр эсэргүүцлийн эх үүсвэр буюу
зөвхөн багтаамжийн ачаалал нь системд холбогдсон. Хэрвээ хэрэглэгч AREF
хөлөнд холбогдсон тогтмол хүчдэлийн эх үүсвэртэй бол, хэрэглэгч магадгүй
өөр жиших хүчдэлтэй сонголтыг ашиглахгүй. Хэрвээ AREF хөлөнд хобогдсон
гадаад хүчдэлгүй бол, хэрэглэгч AVCC ба 1.1V дотоод жиших сонголтыг
тохируулан ажиллуулах боломжтой. Анхны ADC хөрвүүлэлтийн үр дүн жиших
хүчдэлийн эх үүсвэрийг сольсны дараагаар нарийвчлалтай бус байна.
Аналог утгын хэлбэлзлийн зогсоох техник
Төхөөрөмжийн дотор ба гадна талын дижитал гүйдэл нь аналогийн хэмжилтийн
нарийвчлалд нөлөөлж байдаг ба EMI г бий болгодог. Хэрвээ хөрвүүлэлтийн
нарийвчлал нь тодорхой бус, хэлбэлзлийн түвшин нь дараах техникийг
ашиглахад буурсан.
А. Аналог дохионы замуудыг аль болох богино байхаар хадгал. Аналог мөрүүд
аналог талбайн хавтгайд ажилдаг ба тэдгээрийг өндөр хурдны унтраалганы
дижитал мөрнөөс зайтай байлгах хэрэгтэй.
B. Төхөөрөмж дээр байрлах AV CC зүү нь Зураг 24-9д үзүүлсэн сүлжээ шиг LC
гээр дижитал VCC нийлүүлэлтийн хүчдэлд холбогдсон байх ёстой.
C. CPU нээс хэлбэлзлийг бууруулахын тулд ADC хэлбэлзлийн зогсоолтын
функцийг(ADC noise canceler function) ашиглах.
D. Хэрэв ямар нэгэн ADC [3:0] порт холболт нь дижитал гаралтанд ашиглагдсан
бол, эдгээр нь хөрвүүлэлт хийгдэж байгаа үед чухал юм. Хэдийгээр, 2 утасны
холбоосыг ашиглах нь (ADC4 and ADC5) зөвхөн ADC4 болон ADC5 дээрх
хөрвүүлэлтэнд нөлөөлөөд зогсохгүй, бусад ADC сувгуудад нөлөөлнө.
Гадаад жиших хүчдэл AREF хөлөнд 2V-AVCC хооронд
хүчдэл холбогдоно.
Ажиллах зарчим:
ADC нь аналог хүчдлийг 10 битийн тоон утга руу хувиргадаг.
Аналог оролтын хүчдэл нь:AGND-тай тэнцүү байвал: 0x000 (0000000000)
AREF-тэй тэнцүү байвал: 0x3FF (1111111111)
Аналог оролтын суваг нь сонгуураар сонгогддог.
ADC нь 2 төлвөөр ажилладаг.
• Single conversion –нэг л удаа хувиргалт хийдэг ба хэрэглэгч дахин
гараас эхлүүлдэг.
• Free running- байнга тогмол хувиргалт хийж ADC-ийн регистрийн утгыг
шинэчилдэг.
Энэ төлвүүдийг ADCSR регистрийн ADFR битээр идэвхжүүлж сонгож өгдөг.
ADC-г ажиллуулахын тулд эхлээд ADCSR регистрийн ADEN битийг 1 болгож
зөвшөөрч өгдөг.
ADC нь аналог утгын хувиргалтыг эхлүүлэхийн тулд ADCS битийг нэглэнэ. Энэ
бит нь хувиргалт дууссаны дараа буцаад тэглэнэ.
ADC-нь хувиргасан 10 битийн утгаа ADCH ба ADCL регистр луу өгөгдлөө
бичдэг. Энэ регистрүүдээс өгөгдлөө уншиж авахын тулд эхлээд ADCL
регистрээс дараа нь ADCH регистрээс авдаг. Зөвхөн ADCL регистрээс унших
юм бол ADC-ийн өгөгдлийн регистр блоклчоно. Өөрөөр хэлбэл ADCL
регистрийн утгаас өгөгдлөө уншаад дараа нь ADCH регистрээс өгөгдлөө
уншихаас өмнө ADC-н хувиргалт дуусвал ADCH регистрийн утгаа алдана.
ADC нь хувиргалт дууссаны дараа тасалдал үүсдэг.
ADC-ийн clock сигналыг 50кHz-200кHz хүртэл тохируулдаг. ADC –ийн clock
сигналыг 7 битийн хуваагуураар 7 төрлийн clock сигналыг гаргаж авч болно
(хүснэгт 22).
ADC-н хуваагууртай clock сигнал нь ADEN бит нэглэхэд тоолж эхэлдэг ба
ахиад тэглэхэд clock сигнал нь ресетлэнэ.ADC нь аналог сигналыг тоон
сигнал руу хувиргахдаа:
ADC-н сувгуудыг сонгохдоо ADMUX регистрийн тусламжтайгаар сонгоно.
7 6 5 4 3 2 1
0
REFS1 REFS0 ADLAR - MUX3 MUX2 MUX1 MUX0
ADC-н сувгыг сонгох
MUX3..0 Сонгогдсон
гаралт
0000 ADC0
0001 ADC1
0010 ADC2
0011 ADC3
0100 ADC4
0101 ADC5
0110 ADC6
0111 ADC7
1000 ADC8
Bit 7:6 – REFS[1:0]: Жиших хүчдэл сонгох бит
REFS1 REFS0 Жиших хүчдэлийг сонгох
0 0 AREF дотоод Vref идэвхигүй
0 1 AVCC тэй хамт AREF
1 0 -
1 1 Дотоод жиших хүчдэл гадны конденсаторт AREF хөл
• Bit 5 – ADLAR: ADC-гийн үр дүнг зүүн болон баруунаас тохируулах регистер үр дүн нь ADCH
ба
ADCL регистерт хадгалагддаг.
ADCL and ADCH – The ADC Data Register
ADLAR=0;
15 14 13 12 11 10 9
8
- - - - - - ADC9 ADC8
ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0
7 6 5 4 3 2 1 0
Unsigned int ten_bit_value=ADCH<<8 || ADCL;
ADLAR=1;
ADCH
ADCL
15 14 13 12 11 10 9
8
ADC9 ADC8 ADC7 ADC6 ADC5 ADC4 ADC3 ADC2
ADC1 ADC0 - - - - - -
7 6 5 4 3 2 1 0
Unsigned int ten_bit_value=ADCH<<2 || ADCL>>6
ten_bit_value=256*4=1024// 00 01 10 11
- - - - - - 9 8 7 6 5 4 3 2 1 0
ADC9:0: ADC-гийн хувиргалтын үр дүнг хадгалах регистер
ADC-гийн тасалдлын дэд програм
#include <avr/io.h>
#include <avr/interrupt.h>
ISR(ADC_vect)
{
ADCSRA |= 1<<ADSC;
}
DIDR1 – Дижитал оролтыг идэвхигүй төлөвт шилжүүлэх регистер
7 6 5 4 3 2 1
0
- - - - - - AIN1D AIN0D
ADC-г тохируулахдаа ADCSRA удирдлагын регистрийн тусламжтайгаар
тохируулна.
ADCSRA- ADC control and Status register A
7 6 5 4 3 2 1
0
ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0
• Bit 7 – ADEN: ADC Enable
Энэ битийг нэглэвэл ADC-г зөвшөөрч ажиллулна. Тэглэвэл ADC-г
ажиллулахгүй.
• Bit 6 – ADSC: ADC Start Conversion
Энэ битийг нэглэвэл ADC-н хувиргалт хийж эхлүүлнэ.
Single conversion төлвийн үед энэ битийг хувиргалт хийх болгонд нэглэнэ.
Хувиргалт хийж дууссаны дараа өрөө автоматаар тэглэнэ.
Free running төлвийн үед энэ битийг эхнийн хувиргалт хийхээс өмнө
нэглэнэ.
ADFR: ADC Free Running Select
Энэ битийг нэглэвэл Free running горимд шилжинэ. Өөөр өөр хэлбэл байнга
тогтмол хувиргалт хийнэ гэсэн үг.
• Bit 5 – ADATE: ADC Auto Trigger Enable When this bit is written to one, Auto
Triggering of the ADC is enabled. The ADC will start a conversion on a positive
edge of the selected trigger signal. The trigger source is selected by setting the
ADC Trigger Select bits, ADTS in ADCSRB
• Bit 4 – ADIF: ADC Interrupt Flag
ADC хувиргалт хийж дууссаны дараа энэ тасалдлын флаг нэглэнэ.
ADC-н тасалдалыг ADIE бит ба SREG регистрийн тусламжтайгаар гүйцэтгэнэ.
• Bit 3 – ADIE: ADC Interrupt Enable
ADC-н тасалдлыг зөвшөөрөх бит. Энэ битийг нэглэвэл ADC хувиргалт
хийсэний дараа тасалдал үүснэ.
• Bits 2..0 – ADPS2..ADPS0: ADC Prescaler Select Bits
ADC-н clock сигналын хуваагуурыг сонгоно. ADC-н clock сигналын
хуваагуурын сонголтоос ADC-ийн утгыг хэдий хэмжээний хугацаанд шинэчилж
байхыг зааж өгдөг.
ADPS2 ADPS1 ADPS0 Хуваалт
0 0 0
0 0 1 2
0 1 0 4
0 1 1 8
1 0 0 16
1 0 1 32
1 1 0 64
1 1 1 128
ADC9 ~ ADC0 битүүд дээр хувиргасан өгөгдлийн үр дүн.
0x0000 : аналог оролтын хүчдэл AGND
0x03FF : аналог оролтын хүчдэл AREF
AREF
0x03FC
AGND
0x03FF
0x03FD
0x0000
0x0002
0x0001
0x0003
0x0005
0x0004
AREF - AGND
2
10
- 1
[V]
Аналог оролтын хүчдэл ADC_input = 2.7 [V], AREF = 5 [V]= (int)(552.92) = 552
= 0x0228
Тоон систем ба C хэл
1- Хэсэг
1-1 Бит, байт, үг
2 тооллын
систем
хүчдэл Логик утга Түвшин
(level)
Унтраалга(switch)
0 0[V] False
(худал)
LOW (Нам) OFF
1 5[V] True (үнэн) HIGH(өндөр) ON
10-н
тооллын
систем
2-н тооллын
систем
16-н
тооллын
систем
10-н
тооллын
систем
2-н тооллын
систем
16-н
тооллын
систем
0 0000 0 8 1000 8
1 0001 1 9 1001 9
2 0010 2 10 1010 A
3 0011 3 11 1011 B
4 0100 4 12 1100 C
5 0101 5 13 1101 D
6 0110 6 14 1110 E
7 0111 7 15 1111 F
1-2 Ерөнхий логик элемент
① NOT(элемент)
Input Output
0(Low) 1(High)
1(High) 0(Low)
② AND(элемент)
Input Output
A B X
0(Low) 0(Low) 0(Low)
0(Low) 1(High) 0(Low)
1(High) 0(Low) 0(Low)
1(High) 1(High) 1(High)
③ OR(элемент)
Input Output
A B X
0(Low) 0(Low) 0(Low)
0(Low) 1(High) 1(High)
1(High) 0(Low) 1(High)
1(High) 1(High) 1(High)
④ NAND(элемент)
Input Output
A B X
0(Low) 0(Low) 1(High)
0(Low) 1(High) 1(High)
1(High) 0(Low) 1(High)
1(High) 1(High) 0(Low)
⑤ NOR(элемент)
Input Output
A B X
0(Low) 0(Low) 1(High)
0(Low) 1(High) 0(Low)
1(High) 0(Low) 0(Low)
1(High) 1(High) 0(Low)
⑥ XOR(элемент)
Input Output
A B X
0(Low) 0(Low) 0(Low)
0(Low) 1(High) 1(High)
1(High) 0(Low) 1(High)
1(High) 1(High) 0(Low)
⑦ XNOR(элемент)
Input Output
A B X
0(Low) 0(Low) 1(High)
0(Low) 1(High) 0(Low)
1(High) 0(Low) 0(Low)
1(High) 1(High) 1(High)
1-3 Тоон интеграл схем IC
TTL C-MOS
Тэжээл DC 5 [V] ± 5% DC 3 ~ 16 [V]
Хэрэглэх
гүйдэл
8 ~ 100 [mA] [nA]
Ажиллах
давтамж
30 ~ 40 [MHz] 2 ~ 5 [MHz]
Толгой файл #include <io.h>
#define _ST1 1
Дэд програм void delay(int msec);
LED-г тэмдэггүй тэмдэгт болгож
байна.
unsigned char LED;
void main( )
{
unsigned char a, b;
a = 2;
b = 10 * a;
delay(100);
}
void delay(int msec)
{
unsigned char t1, t2, t3;
for(t1 = 0 ; t1 < msec ; t1++)
for(t2 = 0 ; t2 < 255 ; t2++)
for(t3 = 0 ; t3 < 255 ; t3++);
return;
}
Хувьсагчийн төрөл
(signed) char
тэмдэгтэй 8 бит (-128 ~ +127)
unsigned char
тэмдэггүй 8 бит (0 ~ +255)
(signed) int
Тэмдэгтэй 16 бит (-32768 ~ +32767)
unsigned (int)
Тэмдэггүй 16 бит (0 ~ +65535)
(signed) long (int)
Тэмдэгтэй 32 бит (-231
~ +231
-1)
unsigned long (int)
Тэмдэггүй 32 бит (0 ~ +232
-1)
Table 1-4 Хувьсагчийн төрөл ба түүний хэмжээ
Хувьсагчийн
төрөл
Байт (бит)
char 1 (8) -128 ~ 127 (-27
~ 27
- 1)
unsigned
char
1 (8) 0 ~ 255 (0 ~ 28
- 1)
int 2 (16) -32768 ~ 327677 (-215
~ 215
- 1)
unsigned int 2 (16) 0 ~ 65535 (0 ~ 216
- 1)
long 4 (32) -2145483648 ~ 2145483647 (-231
~ 231
- 1)
unsigned
long
4 (32) 0 ~ 4290967296 (0 ~ 232
- 1)
ОПЕРАТОР
операторууд ба функцууд
Төрөл
Тэмдэг
Симбол
Хэрэглэх
жишээ
утга
Арифметик
үйлдэл
Оператор
+
a = b + c
;
b ба c –г нэмж утгыг a-д хадгалах
-
a = b - c
;
b ба c –г хасаж утгыг a-д хадгалах
*
a = b * c
;
b ба c –г үржүүлж утгыг a-д хадгалах
/
a = b / c
;
b-г c –д хувааж бүхэл утгыг a-д хадгалах
%
a = b %
c ;
b-г c –д хувааж бутархай утгыг a-д
хадгалах
Оператор
++
a++ ;
Эхлээд а-г гаралт болгож зарлаж
нэгээр нэмэгдүүлэх
++a ;
Эхлээд а-г нэгээр нэмэгдүүлж дараа нь
а-д утгаа хадгалах
--
a-- ;
Эхлээд а-г гаралт болгож зарлаж нэгээр
хорогдуулна
--a ;
Эхлээд а-г нэгээр хорогдуулж дараа нь
а-д утгаа хадгалах
- a =- a ; a-ийн утгыг хасах тэмдэгтэй болгох
+= a += b ;
а ба b-г нэмж гарсан утгыг ахиад а-д
хадгалах
-= a -= b ;
a-аас b-г хасаж гарсан утгыг ахиад а-д
хадгалах
*= a *= b ;
а ба b-г үржүүлж гарсан утгыг ахиад а-д
хадгалах
/= a /= b ;
a-г ба b-д хувааж гарсан бүхэл утгыг
ахиад а-д хадгалах
%= a %= b ;
a-г ба b-д хувааж гарсан бутархай утгыг
ахиад а-д хадгалах
Битийн
түвшний
үйлдэл
логик
оператор
&
a = b & c
;
b ба c-ийн 2-н тооллын утгыг AND хийж
a-д хадагалах
|
a = b | c
;
b ба c-ийн 2-н тооллын утгыг OR хийж a-
д хадагалах
^
a = b ^ c
;
b ба c-ийн 2-н тооллын утгыг XOR хийж
a-д хадагалах
~ a = ~ b ;
b-ийн 2-н тооллын утгыг NOT хийж a-д
хадагалах
Шилжүүлэх
оператор
<<
a = b <<
c ;
b-ийн утгыг с удаа зүүн тиишээ
шилжүүлж a-д хадагалах
>>
a = b >>
c ;
b-ийн утгыг с удаа баруун тиишээ
шилжүүлж a-д хадагалах
Харьцуулах ба
хамаатуулах оператор
> a > b
a нь b-ээс их байвал зөв(1), тэнцүү
эсвэл бага байвал буруу(0)
< a < b
a нь b-ээс бага байвал зөв(1), тэнцүү
эсвэл их байвал буруу(0)
>= a >= b
a нь b-ээс их буюу тэнцүү байвал зөв(1),
эсвэл бага байвал буруу(0)
<= a <= b
a нь b-ээс бага буюу тэнцүү байвал
зөв(1), эсвэл их байвал буруу(0)
== a == b
а ба b нь хоорондоо тэнцүү байвал(1)
тэнцүү биш байвал буруу(0)
!= a != b
а ба b нь хоорондоо тэнцүү биш
байвал(1) тэнцүү байвал буруу(0)
логик
оператор
&& a && b а ба b-г логик түвшинд AND хийх
|| a || b а ба b-г логик түвшинд OR хийх
! ! a а-г логик түвшинд NOT хийх
analogReference()
Description Configures the reference voltage used for analog input (i.e. the value
used as the top of the input range). The options are:
• DEFAULT: the default analog reference of 5 volts (on 5V Arduino boards) or 3.3
volts (on 3.3V Arduino boards)
• INTERNAL: an built-in reference, equal to 1.1 volts on
the ATmega168 or ATmega328 and 2.56 volts on the ATmega8 (not available
on the Arduino Mega)
• INTERNAL1V1: a built-in 1.1V reference (Arduino Mega only)
• INTERNAL2V56: a built-in 2.56V reference (Arduino Mega only)
• EXTERNAL: the voltage applied to the AREF pin (0 to 5V only) is used as the
reference.
Syntax analogReference(type)
Parameters type: which type of reference to use (DEFAULT,
INTERNAL, INTERNAL1V1, INTERNAL2V56, or EXTERNAL).
Returns None.
Note After changing the analog reference, the first few readings from analogRead()
may not be accurate.
analogRead()
Description Reads the value from the specified analog pin. The Arduino
board contains a 6 channel (8 channels on the Mini and Nano, 16 on the
Mega), 10-bit analog to digital converter. This means that it will map input
voltages between 0 and 5 volts into integer values between 0 and 1023.
This yields a resolution between readings of: 5 volts / 1024 units or, .0049
volts (4.9 mV) per unit. The input range and resolution can be changed
using analogReference(). It takes about 100 microseconds (0.0001 s) to
read an analog input, so the maximum reading rate is about 10,000 times
a second.
Syntax analogRead(pin)
Parameters pin: the number of the analog input pin to read from (0 to 5
on most boards, 0 to 7 on the Mini and Nano, 0 to 15 on the Mega)
Returns int (0 to 1023)
Note If the analog input pin is not connected to anything, the value
returned by analogRead() will fluctuate based on a number of factors (e.g.
the values of the other analog inputs, how close your hand is to the board,
etc.).
Example
int analogPin = 3;
int val = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
val = analogRead(analogPin);
Serial.println(val);
}
map(value, fromLow, fromHigh, toLow, toHigh)
Description Re-maps a number from one range to another. That is,
a value of fromLow would get mapped to toLow, a value offromHigh to toHigh, values in-
between to values in-between, etc. Does not constrain values to within the range, because
out-of-range values are sometimes intended and useful. The constrain() function may be
used either before or after this function, if limits to the ranges are desired.
Note that the "lower bounds" of either range may be larger or smaller than the
"upper bounds" so the map() function may be used to reverse a range of numbers,
for example
y = map(x, 1, 50, 50, 1);
The function also handles negative numbers well, so that this example
y = map(x, 1, 50, 50, -100);
is also valid and works well.
The map() function uses integer math so will not generate fractions, when the math
might indicate that it should do so. Fractional remainders are truncated, and are
not rounded or averaged.
Parameters value: the number to map
fromLow: the lower bound of the value's current range
fromHigh: the upper bound of the value's current range
toLow: the lower bound of the value's target range
toHigh: the upper bound of the value's target range
Returns
The mapped value.
Example
/* Map an analog value to 8 bits (0 to 255) */
void setup() {}
void loop()
{
int val = analogRead(0);
val = map(val, 0, 1023, 0, 255);
analogWrite(9, val);
}
int ledPin = 9;
int analogPin = 1;
int val = 0;
int val1 = 0;
void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
val = analogRead(analogPin);
val1=map(val,0,1023,-255,255);
Serial.println(val1,DEC);
}
//*****************ADC arduino register tohiruulga hiisen program*************//
int theLowADC;
int adc_ten_bit_result;
ISR(ADC_vect)
{
theLowADC = ADCL;
adc_ten_bit_result = ADCH<<8 | theLowADC;
}
void setup()
{
PORTC=0b00000000;
DDRC=0b00000000;
//analog pin-eer 1-r holiig songoj bn reference internal voltage 1.1v
ADMUX=0b01000001;
// adc int enable,start conversion, prescaller clk/8
ADCSRA=0b11001011;
sei();
Serial.begin(9600);
}
void loop()
{
Serial.println(adc_ten_bit_result,DEC);
}

More Related Content

Similar to Lecture 1 (20)

Be lab workbook
Be lab workbookBe lab workbook
Be lab workbook
 
Lab 3
Lab 3Lab 3
Lab 3
 
Лекц 11
Лекц 11Лекц 11
Лекц 11
 
Ажилентийн 7890В Хийн Хроматограф*
Ажилентийн 7890В Хийн Хроматограф*Ажилентийн 7890В Хийн Хроматограф*
Ажилентийн 7890В Хийн Хроматограф*
 
Lab 4
Lab 4Lab 4
Lab 4
 
сүлжээ шинэчлэх
сүлжээ шинэчлэхсүлжээ шинэчлэх
сүлжээ шинэчлэх
 
Lec03filter1
Lec03filter1Lec03filter1
Lec03filter1
 
Lec 05 transmission of digital signal
Lec 05 transmission of digital signalLec 05 transmission of digital signal
Lec 05 transmission of digital signal
 
Лекц 12
Лекц 12Лекц 12
Лекц 12
 
It101 1
It101 1It101 1
It101 1
 
21 30
21 3021 30
21 30
 
41 50
41 5041 50
41 50
 
Presentation studio
Presentation studioPresentation studio
Presentation studio
 
Smart Home System G4
Smart Home System G4Smart Home System G4
Smart Home System G4
 
бие даалт 1,2 бат өлзий
бие даалт 1,2  бат өлзийбие даалт 1,2  бат өлзий
бие даалт 1,2 бат өлзий
 
Lab7
Lab7Lab7
Lab7
 
5 l mk gadaad oi
5 l mk gadaad oi5 l mk gadaad oi
5 l mk gadaad oi
 
лабораторийн ажил 7
лабораторийн ажил 7лабораторийн ажил 7
лабораторийн ажил 7
 
Lab7
Lab7Lab7
Lab7
 
тоон логик 3 l,4lсуурь логик
тоон логик 3 l,4lсуурь логиктоон логик 3 l,4lсуурь логик
тоон логик 3 l,4lсуурь логик
 

More from Dondogjamts Batbaatar

More from Dondogjamts Batbaatar (9)

ардиуно удирдлагын хавтанд суурилсан эмбеддэд системийн анхан шатны сургалт
ардиуно удирдлагын хавтанд суурилсан эмбеддэд системийн анхан шатны сургалтардиуно удирдлагын хавтанд суурилсан эмбеддэд системийн анхан шатны сургалт
ардиуно удирдлагын хавтанд суурилсан эмбеддэд системийн анхан шатны сургалт
 
Arduino lesson 1
Arduino lesson 1Arduino lesson 1
Arduino lesson 1
 
лаб U.cs101 3
лаб U.cs101 3лаб U.cs101 3
лаб U.cs101 3
 
лекц4
лекц4лекц4
лекц4
 
One phase transformer
One phase transformerOne phase transformer
One phase transformer
 
Page maker book
Page maker bookPage maker book
Page maker book
 
Web design book
Web design bookWeb design book
Web design book
 
Corel draw book
Corel draw bookCorel draw book
Corel draw book
 
Photoshop book
Photoshop bookPhotoshop book
Photoshop book
 

Lecture 1

  • 1. Микроконтроллер гэж юу вэ? Орчин үеийн техникийн хөгжлийн нэг гайхамшиг бол микроэлэектроник юм. Түүн дотроо микрокомпьютер, микропроцессорын техник хөгжсөнөөр төрөл бүрийн автоматууд, роботууд зохион бүтээгдэж, үйлдвэрлэлийн робот манипуляторууд үйлдвэрлэлд өргөнөөх нэвтэрч үйлдвэрлэлд хүний оролцоо багасаар байна. Өнөөдөр гэр оронд хэрэглэдэг энгийн нэг будаа агшаагчаас эхлээд бүхий л цахилгаан хэрэгсэлүүд автоматчилагдаж байгаа билээ. Тэрхүү автомат цахим хэсэг нь микропроцессорын техник дээр тулгуурладаг. Сүүлийн жилүүдэд манай улсад хүүхэд залуусын дунд "Робокон" Сумо роботын тэмцээн, Цагаан зураас дагадаг роботын тэмцээн өргөнөөр зохион байгуулагддаг боллоо. ATMAGA328P МИКРОКОНТРОЛЛЁРИЙН ОНЦЛОГ • Өндөр гүйцэтгэлтэй, бага энерги зарцуулалттай 8 битийн AVR микроконтроллер. • Сайжруулсан AVR RISC (Reduced instruction set computing) архитектур. - 131 хүчтрхэг командууд-ихэнх нь нэг тактад гүйцэтгэгддэг. - 32 х 8 ерөнхий зориулалтын регистерүүд. - Бүрэн статик боловсруулалттай. - 16MHz синхрончлох давтамжтай үед хамгийн ихдээ 16 MIPS байх боломжтой. - Хоёр тактад гүйцэтгэгдэх on-chip үржүүлэгчтэй. • Программын болон өгөгдлийн тогтмол санах ойтой. - 32 Kbyte системдээ өөрийгөө программчилах боломжтой flash ROM той. Нийт 10000 удаа ахин программчилагдах боломжтой. - Lock битүүдээс үл хамаарах сонгогдох боломжтой Boot code хэсэгтэй. On- chip boot программаар системдээ программчилагддаг Бодит Read-Write- Program үйлдэлтэй - 1024 byte EEPROM-той. - 2Kbyte дотоод SRAM-тай. - Программ хангамжийн нууцлалд зориулагдсан программчилагддаг lock-той. • JTAG (IEEE std 1149.1 Compliant) инттерфейс. - JTAG стандарттай зохицсон хязгаар тогтоох боломжууд. - On-chip дэлгэрэнгүй debug хийх боломжтой. - JTAG интерфейсээрээ Flash, EEPROM, Fuse, Lock битүүдийг программчилах боломжтой. • Нэмэлт үзүүлэлтүүд - Урьдчилан хуваагчтай, харьцуулах горимтой 8 битийн хоёр таймер/тоолууртай. - Урьдчилан хуваагчтай, харьцуулах болон хадгалах горимтой 16 битийн нэг таймер/тоолууртай. - Урьдчилан хуваагчтай, бодит хугацааны тоолууртай. - Дөрвөн PWM сувагтай. - 8 сувгийн 10 битийн ADC 8 нэг төгсгөлт сувагтай. 7 диффренциал сувагтай (зөвхөн TQFP package-д) 1х, 10х, 200х программчилагдах өсгөлттэй хоёр диффренциал сувагтай - Байтаар хандах Two-Wire сериаль интерфейстэй. - Программчилагдах сериаль USART rx,tx . - Төв болон туслах сериал нэмэлт холболттой. (SPI) - Програмчлагдах Watchdog timer -Дотоод темпратурын мэдрэгч • I/O Оролт гаралт
  • 2. ̶ 23 ширхэг програмчдагдах оролт гаралтын хөлтэй ̶ 28-pin PDIP, 32-lead TQFP, 28-pad QFN/MLF and 32-pad QFN/MLF  Ажиллах хүчдэл: ̶ 1.8 - 5.5V  Ажиллах темпратур: ̶ -40C to 85C  Кварцын давтамжаас хамаарсан тэжээх хүчдэлийн түвшин : ̶ 0 - 4MHz@1.8 - 5.5V, 0 - 10MHz@2.7 - 5.5.V, 0 - 20MHz @ 4.5 - 5.5V  Чадлын зарцуулалт 1MHz, 1.8V, 25C үед ̶ Идэвхитэй ажиллаж байх үед 0.2mA ̶ Power-down буюу энерги хэмнэлтийн горимийн үед : 0.1 µA ̶ Power-save энерги хэмнэлтийн горимд 32kHz RTC хэрэглэгдэх үед : 0.75µA • Тусгай үзүүлэлтүүд ̶ Power-on Reset and Programmable Brown-out Detection ̶ Internal Calibrated Oscillator ̶ External and Internal Interrupt Sources ̶ Six Sleep Modes: Idle, ADC Noise Reduction, Power-save, Power-down, Standby, and Extended Standby Микроконтроллёрийг програмчлахын тулд дараах хэлхээнүүдийг угсарч ажиллуулалсан байх шаардлагатай. 1. Power circuit-Тэжээлийн хэлхээ /Микроконтроллёрийн ажиллах хүчдэлд тохируулан тэжээлийн хэсгийн схемийг угсарч холбох 3.3V 5V/ 2. Crystal circuit- Кварцийн давтамжаар хангах хэлхээ- хугацааны барилт болон өгөгдөл дамжуулах үйлдэлүүд нь тодорхой давтамжтай импулсийн бүтэн үеэс боломжит хугацааг тооцоолдог тул энэхүү хэлхээг угсрах шаардлагатай байдаг. 3. Programming circuit- Програмчлах хэлхээ- Хэрэглэгчийн Си хэл буюу өндөр түвшины хэл дээр бичсэн кодыг микроконтрочёрийн програмын санах ойд хуулахдаа энэхүү төхөөрөмжийг ашигладаг. 4. Reset circuit- Дахин эхлүүлэх хэлхээ Микроконтроллёрийн хүчдэлээр тэжээх хэлхээ Микроконроллёрийн програмчлах хэлхээ(Microcontroller programming circuit)
  • 3. Програмчлах төхөөрөмжийг компьютерт таниулахдаа дараах тохируулгыг хийнэ. http://ladyada.net/learn/avr/avrdude.html Программын код бичих алдааг шалгах програм хангамтай ажиллах заавар https://www.mikrocontroller.net/articles/WinAVR Микроконтроллёрийг импульсаар тэжээх хэлхээ(Crystal oscillator circuit)
  • 4. Микроконтроллерийн оролт гаралт 76543210 PORTB=0B11110001; // 0-р хөл pull-up 4-7-р хөл pull-up DDRB=0B11110000; // 0-3р хөл оролт 4-7 -р хөл гаралт MCUCR регистерийн ашиглан оролт болгон зааж өгч байгаа хөлний төлөвийг Pull-up болгож зааж өгч болдог. PORTB=0B11110001; DDRB=0B11110000; MCUCR=0B00010000; MCUCR – MCU удирдлагын регистер 7 6 5 4 3 2 1 0 - BODS BODSE PUD - - IVSEL IVCE Bit 4 – PUD: Pull-up түвшинийг идэвхитэй ба идэвхигүй төлөвт оруулах регистер DDxn PORTxn PUD (MCUCR) I/O Pull-up Тайлбар 0 0 x Оролт No 0 1 0 Оролт Yes Pull-up идэвхитэй. 0 1 1 Оролт No Pull-up идэвхигүй. 1 0 x Гаралт No 1 1 x Гаралт No PORTB = (1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0); // Анхны төлөв оноож байна. DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB //Оролт гаралтыг зааж байна. /* Read port pins */ i = PINB; PORT B-ийн өгөгдлийн регистер
  • 5. 7 6 5 4 3 2 1 0 PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0 DDRB – Port B-ийн өгөгдлийн чиглэл тодорхойлох регистер 7 6 5 4 3 2 1 0 DDRB7 DDRB 6 DDRB 5 DDRB4 DDRB 3 DDRB 2 DDRB1 DDRB0 PINB – Port B-ийн хөлний хаяглалт 7 6 5 4 3 2 1 0 PINB7 PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0 Дээрхи оролт гарал болон оролтын өндөр түвшинтэй төлөвийг ардюно Proteus 7.7 симуляцийн програм дээр туршвал: void setup() void setup() { { pinMode(7,OUTPUT); pinMode(7,OUTPUT); pinMode(6,OUTPUT); pinMode(6,OUTPUT); pinMode(5,OUTPUT); pinMode(5,OUTPUT); pinMode(4,OUTPUT); pinMode(4,OUTPUT); pinMode(3,INPUT); pinMode(3,INPUT); pinMode(2,INPUT); pinMode(2,INPUT); pinMode(1,INPUT); pinMode(1,INPUT); pinMode(0,INPUT_PULLUP); digitalWrite(7,HIGH); digitalWrite(7,HIGH); digitalWrite(6,HIGH); digitalWrite(6,HIGH); digitalWrite(5,HIGH); digitalWrite(5,HIGH); digitalWrite(4,HIGH); } void loop(){} void loop(){}
  • 6. pinMode() Description Configures the specified pin to behave either as an input or an output. See the description of digital pins for details on the functionality of the pins. As of Arduino 1.0.1, it is possible to enable the internal pullup resistors with the mode INPUT_PULLUP. Additionally, the INPUT mode explicitly disables the internal pullups. Syntax pinMode(pin, mode) Parameters pin: the number of the pin whose mode you wish to set mode: INPUT, OUTPUT, or INPUT_PULLUP. (see the digital pins page for a more complete description of the functionality.) Returns None Example int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); } digitalWrite() Description Write a HIGH or a LOW value to a digital pin. If the pin has been configured as an OUTPUT with pinMode(), its voltage will be set to the corresponding value: 5V (or 3.3V on 3.3V boards) for HIGH, 0V (ground) for LOW. If the pin is configured as an INPUT, digitalWrite() will enable (HIGH) or disable (LOW) the internal pullup on the input pin. It is recommended to set the pinMode() to INPUT_PULLUP to enable the internal pull-up resistor. See the digital pins tutorial for more information. NOTE: If you do not set the pinMode() to OUTPUT, and connect an LED to a pin, when calling digitalWrite(HIGH), the
  • 7. LED may appear dim. Without explicitly setting pinMode(), digitalWrite() will have enabled the internal pull-up resistor, which acts like a large current-limiting resistor. Syntax digitalWrite(pin, value) Parameters pin: the pin number value: HIGH or LOW Returns none Example int ledPin = 13 void setup() { pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); } Sets pin 13 to HIGH, makes a one-second-long delay, and sets the pin back to LOW. Note The analog input pins can be used as digital pins, referred to as A0, A1, etc.
  • 8. ADC-Аналог Тоон Хувиргуур Онцлогууд: • 10 битийн нарийвчлалтай. • 0.5 LSB интеграл шугаман бус хазайлттай. • Хувиргах хугацаа 13-260 µs. • 6 сонгуурын оролтын сувагтай. • ADC-ийн хувиргалт дуусахад тасалдал үүсдэг. • Темпратурын мэдрэгчийн оролтын сувагтай. • Free Running хувиргалтын горимтой. //********ADC conversion first program G.EA324**********// int ledPin = 9; int analogPin = 0; int val = 0; void setup()
  • 9. { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { val = analogRead(analogPin); analogWrite(ledPin, val / 4); Serial.println(val,DEC); } ADC-ийн блок диаграм дараах зурагт үзүүлсэн байна. ADC-д AVCC ба AGND гэсэн 2 тэжээлийн хөлтэй. AGND- нь ерөнхий GND-д холбогдоно. AVCC нь VCC хөлнөөс шуугианаас хамгаалах LC шүүлтүүрээр дамжин хобогдоно. ADC жиших хүчдэл (Reference Voltage) ADC ийн жиших хүчдэл нь ADC ийн хөрвүүлэлтийн хүрээг харуулдаг. V REF ээс илүү гардаг ганц төгсгөлтэй сувгууд нь 0x3FF тэй ойр кодуудыг үүсгэдэг. VREF нь AVCC шиг л мөн сонгогдсон. Дотоод жиших хүчдэл 1.1V, гадаад AREF, AVCC нь RC хэлхээгээр ADC д холбогдсон. Дотоод 1.1V жишилт нь дотоод өсгөгчөөр дотоод хориотой бүсээс үүссэн. Аль аль тохиолдолд, гадаад AREF
  • 10. хөл нь шууд ADC д холбогдсон ба жиших хүчдэл нь дуу чимээнд илүү тэвчээртэй байхаас гадна AREF хөл болон газрын хооронд конденсаторыг холбох замаар хийгдсэн. VREF нь мөн AREF зүүнд хэмжигдсэн бөгөөд өндөр эсэргүүцлийн хүчдэл хэмжигчтэй. VREF нь өндөр эсэргүүцлийн эх үүсвэр буюу зөвхөн багтаамжийн ачаалал нь системд холбогдсон. Хэрвээ хэрэглэгч AREF хөлөнд холбогдсон тогтмол хүчдэлийн эх үүсвэртэй бол, хэрэглэгч магадгүй өөр жиших хүчдэлтэй сонголтыг ашиглахгүй. Хэрвээ AREF хөлөнд хобогдсон гадаад хүчдэлгүй бол, хэрэглэгч AVCC ба 1.1V дотоод жиших сонголтыг тохируулан ажиллуулах боломжтой. Анхны ADC хөрвүүлэлтийн үр дүн жиших хүчдэлийн эх үүсвэрийг сольсны дараагаар нарийвчлалтай бус байна. Аналог утгын хэлбэлзлийн зогсоох техник Төхөөрөмжийн дотор ба гадна талын дижитал гүйдэл нь аналогийн хэмжилтийн нарийвчлалд нөлөөлж байдаг ба EMI г бий болгодог. Хэрвээ хөрвүүлэлтийн нарийвчлал нь тодорхой бус, хэлбэлзлийн түвшин нь дараах техникийг ашиглахад буурсан. А. Аналог дохионы замуудыг аль болох богино байхаар хадгал. Аналог мөрүүд аналог талбайн хавтгайд ажилдаг ба тэдгээрийг өндөр хурдны унтраалганы дижитал мөрнөөс зайтай байлгах хэрэгтэй. B. Төхөөрөмж дээр байрлах AV CC зүү нь Зураг 24-9д үзүүлсэн сүлжээ шиг LC гээр дижитал VCC нийлүүлэлтийн хүчдэлд холбогдсон байх ёстой. C. CPU нээс хэлбэлзлийг бууруулахын тулд ADC хэлбэлзлийн зогсоолтын функцийг(ADC noise canceler function) ашиглах. D. Хэрэв ямар нэгэн ADC [3:0] порт холболт нь дижитал гаралтанд ашиглагдсан бол, эдгээр нь хөрвүүлэлт хийгдэж байгаа үед чухал юм. Хэдийгээр, 2 утасны холбоосыг ашиглах нь (ADC4 and ADC5) зөвхөн ADC4 болон ADC5 дээрх хөрвүүлэлтэнд нөлөөлөөд зогсохгүй, бусад ADC сувгуудад нөлөөлнө.
  • 11. Гадаад жиших хүчдэл AREF хөлөнд 2V-AVCC хооронд хүчдэл холбогдоно. Ажиллах зарчим: ADC нь аналог хүчдлийг 10 битийн тоон утга руу хувиргадаг. Аналог оролтын хүчдэл нь:AGND-тай тэнцүү байвал: 0x000 (0000000000) AREF-тэй тэнцүү байвал: 0x3FF (1111111111) Аналог оролтын суваг нь сонгуураар сонгогддог. ADC нь 2 төлвөөр ажилладаг. • Single conversion –нэг л удаа хувиргалт хийдэг ба хэрэглэгч дахин гараас эхлүүлдэг. • Free running- байнга тогмол хувиргалт хийж ADC-ийн регистрийн утгыг шинэчилдэг. Энэ төлвүүдийг ADCSR регистрийн ADFR битээр идэвхжүүлж сонгож өгдөг. ADC-г ажиллуулахын тулд эхлээд ADCSR регистрийн ADEN битийг 1 болгож зөвшөөрч өгдөг. ADC нь аналог утгын хувиргалтыг эхлүүлэхийн тулд ADCS битийг нэглэнэ. Энэ бит нь хувиргалт дууссаны дараа буцаад тэглэнэ.
  • 12. ADC-нь хувиргасан 10 битийн утгаа ADCH ба ADCL регистр луу өгөгдлөө бичдэг. Энэ регистрүүдээс өгөгдлөө уншиж авахын тулд эхлээд ADCL регистрээс дараа нь ADCH регистрээс авдаг. Зөвхөн ADCL регистрээс унших юм бол ADC-ийн өгөгдлийн регистр блоклчоно. Өөрөөр хэлбэл ADCL регистрийн утгаас өгөгдлөө уншаад дараа нь ADCH регистрээс өгөгдлөө уншихаас өмнө ADC-н хувиргалт дуусвал ADCH регистрийн утгаа алдана. ADC нь хувиргалт дууссаны дараа тасалдал үүсдэг. ADC-ийн clock сигналыг 50кHz-200кHz хүртэл тохируулдаг. ADC –ийн clock сигналыг 7 битийн хуваагуураар 7 төрлийн clock сигналыг гаргаж авч болно (хүснэгт 22). ADC-н хуваагууртай clock сигнал нь ADEN бит нэглэхэд тоолж эхэлдэг ба ахиад тэглэхэд clock сигнал нь ресетлэнэ.ADC нь аналог сигналыг тоон сигнал руу хувиргахдаа: ADC-н сувгуудыг сонгохдоо ADMUX регистрийн тусламжтайгаар сонгоно. 7 6 5 4 3 2 1 0 REFS1 REFS0 ADLAR - MUX3 MUX2 MUX1 MUX0
  • 13. ADC-н сувгыг сонгох MUX3..0 Сонгогдсон гаралт 0000 ADC0 0001 ADC1 0010 ADC2 0011 ADC3 0100 ADC4 0101 ADC5 0110 ADC6 0111 ADC7 1000 ADC8 Bit 7:6 – REFS[1:0]: Жиших хүчдэл сонгох бит REFS1 REFS0 Жиших хүчдэлийг сонгох 0 0 AREF дотоод Vref идэвхигүй 0 1 AVCC тэй хамт AREF 1 0 - 1 1 Дотоод жиших хүчдэл гадны конденсаторт AREF хөл • Bit 5 – ADLAR: ADC-гийн үр дүнг зүүн болон баруунаас тохируулах регистер үр дүн нь ADCH ба ADCL регистерт хадгалагддаг. ADCL and ADCH – The ADC Data Register ADLAR=0; 15 14 13 12 11 10 9 8 - - - - - - ADC9 ADC8 ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0 7 6 5 4 3 2 1 0 Unsigned int ten_bit_value=ADCH<<8 || ADCL; ADLAR=1; ADCH ADCL 15 14 13 12 11 10 9 8 ADC9 ADC8 ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0 - - - - - - 7 6 5 4 3 2 1 0 Unsigned int ten_bit_value=ADCH<<2 || ADCL>>6 ten_bit_value=256*4=1024// 00 01 10 11 - - - - - - 9 8 7 6 5 4 3 2 1 0 ADC9:0: ADC-гийн хувиргалтын үр дүнг хадгалах регистер ADC-гийн тасалдлын дэд програм
  • 14. #include <avr/io.h> #include <avr/interrupt.h> ISR(ADC_vect) { ADCSRA |= 1<<ADSC; } DIDR1 – Дижитал оролтыг идэвхигүй төлөвт шилжүүлэх регистер 7 6 5 4 3 2 1 0 - - - - - - AIN1D AIN0D ADC-г тохируулахдаа ADCSRA удирдлагын регистрийн тусламжтайгаар тохируулна. ADCSRA- ADC control and Status register A 7 6 5 4 3 2 1 0 ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0 • Bit 7 – ADEN: ADC Enable Энэ битийг нэглэвэл ADC-г зөвшөөрч ажиллулна. Тэглэвэл ADC-г ажиллулахгүй. • Bit 6 – ADSC: ADC Start Conversion Энэ битийг нэглэвэл ADC-н хувиргалт хийж эхлүүлнэ. Single conversion төлвийн үед энэ битийг хувиргалт хийх болгонд нэглэнэ. Хувиргалт хийж дууссаны дараа өрөө автоматаар тэглэнэ. Free running төлвийн үед энэ битийг эхнийн хувиргалт хийхээс өмнө нэглэнэ. ADFR: ADC Free Running Select Энэ битийг нэглэвэл Free running горимд шилжинэ. Өөөр өөр хэлбэл байнга тогтмол хувиргалт хийнэ гэсэн үг. • Bit 5 – ADATE: ADC Auto Trigger Enable When this bit is written to one, Auto Triggering of the ADC is enabled. The ADC will start a conversion on a positive edge of the selected trigger signal. The trigger source is selected by setting the ADC Trigger Select bits, ADTS in ADCSRB • Bit 4 – ADIF: ADC Interrupt Flag ADC хувиргалт хийж дууссаны дараа энэ тасалдлын флаг нэглэнэ. ADC-н тасалдалыг ADIE бит ба SREG регистрийн тусламжтайгаар гүйцэтгэнэ. • Bit 3 – ADIE: ADC Interrupt Enable ADC-н тасалдлыг зөвшөөрөх бит. Энэ битийг нэглэвэл ADC хувиргалт хийсэний дараа тасалдал үүснэ. • Bits 2..0 – ADPS2..ADPS0: ADC Prescaler Select Bits ADC-н clock сигналын хуваагуурыг сонгоно. ADC-н clock сигналын хуваагуурын сонголтоос ADC-ийн утгыг хэдий хэмжээний хугацаанд шинэчилж байхыг зааж өгдөг.
  • 15. ADPS2 ADPS1 ADPS0 Хуваалт 0 0 0 0 0 1 2 0 1 0 4 0 1 1 8 1 0 0 16 1 0 1 32 1 1 0 64 1 1 1 128 ADC9 ~ ADC0 битүүд дээр хувиргасан өгөгдлийн үр дүн. 0x0000 : аналог оролтын хүчдэл AGND 0x03FF : аналог оролтын хүчдэл AREF AREF 0x03FC AGND 0x03FF 0x03FD 0x0000 0x0002 0x0001 0x0003 0x0005 0x0004 AREF - AGND 2 10 - 1 [V] Аналог оролтын хүчдэл ADC_input = 2.7 [V], AREF = 5 [V]= (int)(552.92) = 552 = 0x0228
  • 16. Тоон систем ба C хэл 1- Хэсэг 1-1 Бит, байт, үг 2 тооллын систем хүчдэл Логик утга Түвшин (level) Унтраалга(switch) 0 0[V] False (худал) LOW (Нам) OFF 1 5[V] True (үнэн) HIGH(өндөр) ON 10-н тооллын систем 2-н тооллын систем 16-н тооллын систем 10-н тооллын систем 2-н тооллын систем 16-н тооллын систем 0 0000 0 8 1000 8 1 0001 1 9 1001 9 2 0010 2 10 1010 A 3 0011 3 11 1011 B 4 0100 4 12 1100 C 5 0101 5 13 1101 D 6 0110 6 14 1110 E
  • 17. 7 0111 7 15 1111 F 1-2 Ерөнхий логик элемент ① NOT(элемент) Input Output 0(Low) 1(High) 1(High) 0(Low) ② AND(элемент) Input Output A B X 0(Low) 0(Low) 0(Low) 0(Low) 1(High) 0(Low) 1(High) 0(Low) 0(Low) 1(High) 1(High) 1(High) ③ OR(элемент) Input Output A B X 0(Low) 0(Low) 0(Low) 0(Low) 1(High) 1(High) 1(High) 0(Low) 1(High) 1(High) 1(High) 1(High)
  • 18. ④ NAND(элемент) Input Output A B X 0(Low) 0(Low) 1(High) 0(Low) 1(High) 1(High) 1(High) 0(Low) 1(High) 1(High) 1(High) 0(Low) ⑤ NOR(элемент) Input Output A B X 0(Low) 0(Low) 1(High) 0(Low) 1(High) 0(Low) 1(High) 0(Low) 0(Low) 1(High) 1(High) 0(Low) ⑥ XOR(элемент) Input Output A B X 0(Low) 0(Low) 0(Low) 0(Low) 1(High) 1(High) 1(High) 0(Low) 1(High) 1(High) 1(High) 0(Low)
  • 19. ⑦ XNOR(элемент) Input Output A B X 0(Low) 0(Low) 1(High) 0(Low) 1(High) 0(Low) 1(High) 0(Low) 0(Low) 1(High) 1(High) 1(High) 1-3 Тоон интеграл схем IC TTL C-MOS Тэжээл DC 5 [V] ± 5% DC 3 ~ 16 [V] Хэрэглэх гүйдэл 8 ~ 100 [mA] [nA] Ажиллах давтамж 30 ~ 40 [MHz] 2 ~ 5 [MHz] Толгой файл #include <io.h> #define _ST1 1 Дэд програм void delay(int msec);
  • 20. LED-г тэмдэггүй тэмдэгт болгож байна. unsigned char LED; void main( ) { unsigned char a, b; a = 2; b = 10 * a; delay(100); } void delay(int msec) { unsigned char t1, t2, t3; for(t1 = 0 ; t1 < msec ; t1++) for(t2 = 0 ; t2 < 255 ; t2++) for(t3 = 0 ; t3 < 255 ; t3++); return; } Хувьсагчийн төрөл (signed) char тэмдэгтэй 8 бит (-128 ~ +127)
  • 21. unsigned char тэмдэггүй 8 бит (0 ~ +255) (signed) int Тэмдэгтэй 16 бит (-32768 ~ +32767) unsigned (int) Тэмдэггүй 16 бит (0 ~ +65535) (signed) long (int) Тэмдэгтэй 32 бит (-231 ~ +231 -1) unsigned long (int) Тэмдэггүй 32 бит (0 ~ +232 -1) Table 1-4 Хувьсагчийн төрөл ба түүний хэмжээ Хувьсагчийн төрөл Байт (бит) char 1 (8) -128 ~ 127 (-27 ~ 27 - 1) unsigned char 1 (8) 0 ~ 255 (0 ~ 28 - 1) int 2 (16) -32768 ~ 327677 (-215 ~ 215 - 1) unsigned int 2 (16) 0 ~ 65535 (0 ~ 216 - 1) long 4 (32) -2145483648 ~ 2145483647 (-231 ~ 231 - 1) unsigned long 4 (32) 0 ~ 4290967296 (0 ~ 232 - 1) ОПЕРАТОР операторууд ба функцууд
  • 22. Төрөл Тэмдэг Симбол Хэрэглэх жишээ утга Арифметик үйлдэл Оператор + a = b + c ; b ба c –г нэмж утгыг a-д хадгалах - a = b - c ; b ба c –г хасаж утгыг a-д хадгалах * a = b * c ; b ба c –г үржүүлж утгыг a-д хадгалах / a = b / c ; b-г c –д хувааж бүхэл утгыг a-д хадгалах % a = b % c ; b-г c –д хувааж бутархай утгыг a-д хадгалах Оператор ++ a++ ; Эхлээд а-г гаралт болгож зарлаж нэгээр нэмэгдүүлэх ++a ; Эхлээд а-г нэгээр нэмэгдүүлж дараа нь а-д утгаа хадгалах -- a-- ; Эхлээд а-г гаралт болгож зарлаж нэгээр хорогдуулна --a ; Эхлээд а-г нэгээр хорогдуулж дараа нь а-д утгаа хадгалах - a =- a ; a-ийн утгыг хасах тэмдэгтэй болгох += a += b ; а ба b-г нэмж гарсан утгыг ахиад а-д хадгалах -= a -= b ; a-аас b-г хасаж гарсан утгыг ахиад а-д хадгалах *= a *= b ; а ба b-г үржүүлж гарсан утгыг ахиад а-д хадгалах /= a /= b ; a-г ба b-д хувааж гарсан бүхэл утгыг ахиад а-д хадгалах
  • 23. %= a %= b ; a-г ба b-д хувааж гарсан бутархай утгыг ахиад а-д хадгалах Битийн түвшний үйлдэл логик оператор & a = b & c ; b ба c-ийн 2-н тооллын утгыг AND хийж a-д хадагалах | a = b | c ; b ба c-ийн 2-н тооллын утгыг OR хийж a- д хадагалах ^ a = b ^ c ; b ба c-ийн 2-н тооллын утгыг XOR хийж a-д хадагалах ~ a = ~ b ; b-ийн 2-н тооллын утгыг NOT хийж a-д хадагалах Шилжүүлэх оператор << a = b << c ; b-ийн утгыг с удаа зүүн тиишээ шилжүүлж a-д хадагалах >> a = b >> c ; b-ийн утгыг с удаа баруун тиишээ шилжүүлж a-д хадагалах Харьцуулах ба хамаатуулах оператор > a > b a нь b-ээс их байвал зөв(1), тэнцүү эсвэл бага байвал буруу(0) < a < b a нь b-ээс бага байвал зөв(1), тэнцүү эсвэл их байвал буруу(0) >= a >= b a нь b-ээс их буюу тэнцүү байвал зөв(1), эсвэл бага байвал буруу(0) <= a <= b a нь b-ээс бага буюу тэнцүү байвал зөв(1), эсвэл их байвал буруу(0) == a == b а ба b нь хоорондоо тэнцүү байвал(1) тэнцүү биш байвал буруу(0) != a != b а ба b нь хоорондоо тэнцүү биш байвал(1) тэнцүү байвал буруу(0) логик оператор && a && b а ба b-г логик түвшинд AND хийх || a || b а ба b-г логик түвшинд OR хийх
  • 24. ! ! a а-г логик түвшинд NOT хийх analogReference() Description Configures the reference voltage used for analog input (i.e. the value used as the top of the input range). The options are: • DEFAULT: the default analog reference of 5 volts (on 5V Arduino boards) or 3.3 volts (on 3.3V Arduino boards) • INTERNAL: an built-in reference, equal to 1.1 volts on the ATmega168 or ATmega328 and 2.56 volts on the ATmega8 (not available on the Arduino Mega) • INTERNAL1V1: a built-in 1.1V reference (Arduino Mega only) • INTERNAL2V56: a built-in 2.56V reference (Arduino Mega only) • EXTERNAL: the voltage applied to the AREF pin (0 to 5V only) is used as the reference. Syntax analogReference(type) Parameters type: which type of reference to use (DEFAULT, INTERNAL, INTERNAL1V1, INTERNAL2V56, or EXTERNAL). Returns None. Note After changing the analog reference, the first few readings from analogRead() may not be accurate.
  • 25. analogRead() Description Reads the value from the specified analog pin. The Arduino board contains a 6 channel (8 channels on the Mini and Nano, 16 on the Mega), 10-bit analog to digital converter. This means that it will map input voltages between 0 and 5 volts into integer values between 0 and 1023. This yields a resolution between readings of: 5 volts / 1024 units or, .0049 volts (4.9 mV) per unit. The input range and resolution can be changed using analogReference(). It takes about 100 microseconds (0.0001 s) to read an analog input, so the maximum reading rate is about 10,000 times a second. Syntax analogRead(pin) Parameters pin: the number of the analog input pin to read from (0 to 5 on most boards, 0 to 7 on the Mini and Nano, 0 to 15 on the Mega) Returns int (0 to 1023) Note If the analog input pin is not connected to anything, the value returned by analogRead() will fluctuate based on a number of factors (e.g. the values of the other analog inputs, how close your hand is to the board, etc.). Example int analogPin = 3; int val = 0; void setup() { Serial.begin(9600); } void loop() { val = analogRead(analogPin); Serial.println(val); }
  • 26. map(value, fromLow, fromHigh, toLow, toHigh) Description Re-maps a number from one range to another. That is, a value of fromLow would get mapped to toLow, a value offromHigh to toHigh, values in- between to values in-between, etc. Does not constrain values to within the range, because out-of-range values are sometimes intended and useful. The constrain() function may be used either before or after this function, if limits to the ranges are desired. Note that the "lower bounds" of either range may be larger or smaller than the "upper bounds" so the map() function may be used to reverse a range of numbers, for example y = map(x, 1, 50, 50, 1); The function also handles negative numbers well, so that this example y = map(x, 1, 50, 50, -100); is also valid and works well. The map() function uses integer math so will not generate fractions, when the math might indicate that it should do so. Fractional remainders are truncated, and are not rounded or averaged. Parameters value: the number to map fromLow: the lower bound of the value's current range fromHigh: the upper bound of the value's current range toLow: the lower bound of the value's target range toHigh: the upper bound of the value's target range Returns The mapped value. Example /* Map an analog value to 8 bits (0 to 255) */ void setup() {} void loop() { int val = analogRead(0); val = map(val, 0, 1023, 0, 255); analogWrite(9, val); }
  • 27. int ledPin = 9; int analogPin = 1; int val = 0; int val1 = 0; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { val = analogRead(analogPin); val1=map(val,0,1023,-255,255); Serial.println(val1,DEC); }
  • 28. //*****************ADC arduino register tohiruulga hiisen program*************// int theLowADC; int adc_ten_bit_result; ISR(ADC_vect) { theLowADC = ADCL; adc_ten_bit_result = ADCH<<8 | theLowADC; } void setup() { PORTC=0b00000000; DDRC=0b00000000; //analog pin-eer 1-r holiig songoj bn reference internal voltage 1.1v ADMUX=0b01000001; // adc int enable,start conversion, prescaller clk/8 ADCSRA=0b11001011; sei(); Serial.begin(9600); } void loop() { Serial.println(adc_ten_bit_result,DEC); }