Სარჩევი:

ADC შესავალი AVR მიკროკონტროლერში - დამწყებთათვის: 14 ნაბიჯი
ADC შესავალი AVR მიკროკონტროლერში - დამწყებთათვის: 14 ნაბიჯი

ვიდეო: ADC შესავალი AVR მიკროკონტროლერში - დამწყებთათვის: 14 ნაბიჯი

ვიდეო: ADC შესავალი AVR მიკროკონტროლერში - დამწყებთათვის: 14 ნაბიჯი
ვიდეო: Understanding electrocardiogram (ECG) basics and lead derivation 2024, ნოემბერი
Anonim
ADC შესავალი AVR მიკროკონტროლერში | დამწყებთათვის
ADC შესავალი AVR მიკროკონტროლერში | დამწყებთათვის

ამ გაკვეთილში თქვენ იცით ყველაფერი ADC avr მიკროკონტროლერში

ნაბიჯი 1: რა არის ADC?

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

ნაბიჯი 2: როგორ მუშაობს ADC AVR- მიკროკონტროლერში

AVR ADC საშუალებას აძლევს AVR მიკროკონტროლერს გადააკეთოს ანალოგური ძაბვები ციფრულ მნიშვნელობებზე, გარედან რამდენიმე ნაწილის გარეშე. ATmega8– ს აქვს 10 – ბიტიანი თანმიმდევრული მიახლოება ADC. ATmega8– ს აქვს 7 არხიანი ADC PortC– ში. ADC– ს აქვს ცალკეული ანალოგური მიწოდების ძაბვის პინი, AVCC. AVCC არ უნდა განსხვავდებოდეს CC 0.3V ზე მეტი VCC– სგან. AVCC გამოიყენება როგორც ძაბვის მითითება. ADC ასევე შეიძლება დაყენებული იყოს უწყვეტად მუშაობისთვის (თავისუფალი მუშაობის რეჟიმი) ან მხოლოდ ერთი კონვერტაციის გასაკეთებლად.

ნაბიჯი 3: ADC კონვერტაციის ფორმულა

ADC კონვერტაციის ფორმულა
ADC კონვერტაციის ფორმულა

სადაც Vin არის ძაბვა არჩეულ შეყვანის პინზე და Vref არჩეული ძაბვის მითითება

ნაბიჯი 4: როგორ დავაკონფიგურიროთ ADC ATmega8– ში?

როგორ დავაკონფიგურიროთ ADC ATmega8– ში?
როგორ დავაკონფიგურიროთ ADC ATmega8– ში?

შემდეგი რეგისტრები გამოიყენება ATmega8– ში ADC– ის განსახორციელებლად

ADC მულტიპლექსერის შერჩევა

ნაბიჯი 5: ADLAR შერჩევა

ADLAR შერჩევა
ADLAR შერჩევა
ADLAR შერჩევა
ADLAR შერჩევა

ADC მარცხენა კორექტირების შედეგი ADLAR ბიტი გავლენას ახდენს ADC კონვერტაციის შედეგის პრეზენტაციაზე ADC მონაცემთა რეესტრში. ჩაწერეთ ერთი ADLAR– ზე, მარცხნივ შეცვალეთ შედეგი. წინააღმდეგ შემთხვევაში, შედეგი სწორად არის მორგებული

როდესაც ADC კონვერტაცია დასრულებულია, შედეგი ნაპოვნია ADCH და ADCL როდესაც ADCL იკითხება, ADC მონაცემთა რეესტრი არ განახლდება სანამ ADCH არ იკითხება. შესაბამისად, თუ შედეგი დარჩა მორგებული და საჭიროა არაუმეტეს 8 ბიტიანი სიზუსტის, საკმარისია ADCH– ის წაკითხვა. წინააღმდეგ შემთხვევაში, ჯერ უნდა წაიკითხოთ ADCL, შემდეგ ADCH. ანალოგური არხის შერჩევის ბიტები ამ ბიტების მნიშვნელობა ირჩევს რომელი ანალოგური შეყვანაა დაკავშირებული ADC– სთან.

ნაბიჯი 6: ADCSRA შერჩევა

ADCSRA შერჩევა
ADCSRA შერჩევა
ADCSRA შერჩევა
ADCSRA შერჩევა

• ბიტი 7 - ADEN: ADC ჩართეთ ჩაწერეთ ეს ბიტი ერთზე, ჩართეთ ADC. ნულზე ჩაწერისას ADC გამორთულია

• ბიტი 6 - ADSC: ADC კონვერტაციის დაწყება ერთჯერადი კონვერტაციის რეჟიმში, ჩაწერეთ ეს ბიტი ერთზე თითოეული კონვერტაციის დასაწყებად. უფასო გაშვების რეჟიმში ჩაწერეთ ეს ბიტი ერთზე პირველი კონვერტაციის დასაწყებად.

• ბიტი 5 - ADFR: ADC უფასო გაშვება აირჩიეთ როდესაც ეს ბიტი დაყენებულია (ერთი) ADC მუშაობს უფასო გაშვების რეჟიმში. ამ რეჟიმში, ADC სინჯავს და განაახლებს მონაცემთა რეგისტრატორებს განუწყვეტლივ. ამ ბიტის (ნულის) გასუფთავება შეწყვეტს უფასო გაშვების რეჟიმს.

• ბიტი 4 - ADIF: ADC შეწყვეტის დროშა ეს ბიტი დაყენებულია, როდესაც ADC კონვერტაცია სრულდება და მონაცემთა რეგისტრები განახლდება. ADC კონვერტაციის სრული შეწყვეტა შესრულებულია, თუ დაყენებულია ADIE ბიტი და I-bit SREG– ში. ADIF გაწმენდილია ტექნიკით შესაბამისი შეფერხების მართვის ვექტორის შესრულებისას. ალტერნატიულად, ADIF გაწმენდილია დროშის ლოგიკური ჩაწერით.

• ბიტი 3-ADIE: ADC შეწყვეტის ჩართვა როდესაც ეს ბიტი იწერება ერთზე და SREG- ში I ბიტი დაყენებულია, ADC კონვერტაციის სრული შეწყვეტა გააქტიურებულია.

• ბიტი 2: 0 - ADPS2: 0: ADC Prescaler Select Bits მონაცემთა ცხრილის მიხედვით, ეს prescalar უნდა იყოს დაყენებული ისე, რომ ADC შეყვანის სიხშირე იყოს 50 KHz– დან 200 KHz– მდე. ADC საათი გამომდინარეობს სისტემის საათიდან ADPS2– ის დახმარებით: 0 ეს ბიტები განსაზღვრავენ გაყოფის ფაქტორს XTAL სიხშირესა და ADC– ს შესასვლელ საათს შორის.

ნაბიჯი 7: თუ გსურთ მიიღოთ ADC მნიშვნელობა, თქვენ გჭირდებათ სამუშაო, რომელიც შესრულებულია ქვემოთ

  • დააყენეთ ADC მნიშვნელობა
  • დააკონფიგურიროთ გამომავალი LED პინი
  • ADC აპარატურის კონფიგურაცია
  • ADC- ის ჩართვა
  • დაიწყეთ ციფრული კონვერტაციის ანალოგი
  • სანამ სამუდამოდ

თუ ADC მნიშვნელობა უფრო მაღალია, შემდეგ დააყენეთ მნიშვნელობა, ჩართეთ LED ELSE გამორთეთ LED

ნაბიჯი 8: დააყენეთ ADC მნიშვნელობა

კოდი: uint8_t ADCValue = 128;

ნაბიჯი 9: გამომავალი LED პინის კონფიგურაცია

კოდი: DDRB | = (1 << PB1);

ნაბიჯი 10: ADC აპარატურის კონფიგურაცია

ADC აპარატურის კონფიგურაცია

ეს ხდება ADC– ის საკონტროლო რეგისტრებში ბიტების დაყენების გზით. პირველი, მოდით დააყენოთ prescalar ADC– სთვის. მონაცემთა ფურცლის თანახმად, ეს prescalar უნდა იყოს დაყენებული ისე, რომ ADC შეყვანის სიხშირე იყოს 50 KHz– დან 200 KHz– მდე. ADC საათი მომდინარეობს სისტემის საათიდან. სისტემური სიხშირით 1 MHz, წინასწარი გამრიცხველიანება 8 იქნება ADC სიხშირით 125 Khz. პრესკალირება დადგენილია ADPS ბიტებით ADCSRA რეგისტრში. მონაცემთა ცხრილის თანახმად, სამივე ADPS2: 0 ბიტი უნდა იყოს დაყენებული 011 -ზე, რომ მიიღოთ 8 წინასწარი შემფასებელი.

კოდი: ADCSRA | = (0 << ADPS2) | (1 << ADPS1] | (1 << ADPS0];

შემდეგი, მოდით დავაყენოთ ADC საცნობარო ძაბვა. ეს კონტროლდება REFS ბიტებით ADMUX რეგისტრში. ქვემოთ მითითებულია საცნობარო ძაბვა AVCC- ზე.

კოდი: ADMUX | = (1 << REFS0];

მულტიპლექსერზე ADC– ზე გადასული არხის დასაყენებლად ADMUX რეგისტრში MUX ბიტები შესაბამისად უნდა იყოს დადგენილი. ვინაიდან ჩვენ აქ ვიყენებთ ADC5- ს

კოდი: ADMUX & = 0xF0; ADMUX | = 5;

იმისათვის, რომ ADC ჩართოთ თავისუფალ რეჟიმში, დააყენეთ შესაბამისი სახელი ADFR ბიტი ADCSRA რეგისტრში:

კოდი: ADCSRA | = (1 << ADFR);

ერთი ბოლო პარამეტრი შეიცვლება, რათა ADC მნიშვნელობის კითხვა გაადვილდეს. მიუხედავად იმისა, რომ ADC– ს აქვს 10 ბიტიანი გარჩევადობა, ამდენი ინფორმაცია ხშირად არ არის საჭირო. ეს 10 ბიტიანი ღირებულება იყოფა ორ 8 ბიტიან რეგისტრზე, ADCH და ADCL. სტანდარტულად, ADC მნიშვნელობის ყველაზე დაბალი 8 ბიტი გვხვდება ADCL– ში, ზედა ორი არის ADCH– ის ყველაზე დაბალი ორი ბიტი. ADLAR ბიტის დაყენებით ADMUX რეესტრში, ჩვენ შეგვიძლია მარცხნივ გავათანაბროთ ADC მნიშვნელობა. ეს ათავსებს გაზომვის ყველაზე მაღალ 8 ბიტს ADCH რეგისტრში, დანარჩენს ADCL რეესტრში. თუ ჩვენ ვკითხულობთ ADCH რეგისტრს, ჩვენ ვიღებთ 8 ბიტიან მნიშვნელობას, რომელიც წარმოადგენს ჩვენს 0 -დან 5 ვოლტ გაზომვას, როგორც რიცხვს 0 -დან 255 -მდე. ჩვენ, ძირითადად, 10 ბიტიან ADC გაზომვას ვაქცევთ 8 ბიტიანად. აქ არის კოდი ADLAR ბიტის დასაყენებლად:

კოდი:

ADMUX | = (1 << ADLAR]; ეს ასრულებს ამ მაგალითისთვის ADC აპარატურის დაყენებას. კიდევ ორი ბიტი უნდა იყოს დაყენებული სანამ ADC დაიწყებს გაზომვების მიღებას.

ნაბიჯი 11: ჩართეთ ADC

ADC- ის გასააქტიურებლად, დააყენეთ ADEN ბიტი ADCSRA- ში:

კოდი: ADCSRA | = (1 << ADEN];

ნაბიჯი 12: დაიწყეთ ციფრული კონვერტაციის ანალოგი

ADC გაზომვების დასაწყებად, ADCSRA– ში ADSC ბიტი უნდა იყოს მითითებული:

კოდი: ADCSRA | = (1 << ADSC];

ამ დროს, ADC დაიწყებს ADC5- ზე წარმოდგენილი ძაბვის უწყვეტი შერჩევას. ამ წერტილის კოდი ასე გამოიყურება:

ნაბიჯი 13: სანამ სამუდამოდ

ერთადერთი რაც რჩება არის ADC მნიშვნელობის შემოწმება და LED- ების დაყენება მაღალი / დაბალი მაჩვენებლის ჩვენებისათვის. ვინაიდან ADCH– ის კითხვა ADCH– ში აქვს მაქსიმალური მნიშვნელობა 255, ტესტის მნიშვნელობა შეირჩა იმის დასადგენად, იყო ძაბვა მაღალი თუ დაბალი. FOR მარყუჟებში მარტივი IF/ELSE განცხადება საშუალებას მოგვცემს ჩართოთ სწორი LED:

კოდი

თუ (ADCH> ADCValue)

{

პორტი | = (1 << PB0]; // ჩართეთ LED

}

სხვა

{

PORTB & = ~ (1 << PB0); // გამორთეთ LED

}

ნაბიჯი 14: ბოლოს სრული კოდი არის

კოდი:

#ჩართეთ

მთავარი (ბათილია)

{

uint8_t ADCValue = 128;

DDRB | = (1 << PB0]; // გამოუშვით LED1

ADCSRA | = (0 << ADPS2) | (1 << ADPS1] | (1 << ADPS0]; // დააყენეთ ADC prescalar 8 - // 125KHz ნიმუშის სიხშირე 1MHz

ADMUX | = (1 << REFS0]; // დააყენეთ ADC მითითება AVCC– ზე

ADMUX | = (1 << ADLAR]; // მარცხნივ დაარეგულირეთ ADC შედეგი, რისი საშუალებითაც ადვილია 8 ბიტიანი კითხვა

ADMUX & = 0xF0;

ADMUX | = 5; // MUX მნიშვნელობები უნდა შეიცვალოს ADC0– ის გამოსაყენებლად

ADCSRA | = (1 << ADFR); // დააყენეთ ADC თავისუფალი გაშვების რეჟიმში

ADCSRA | = (1 << ADEN]; // ADC- ის ჩართვა

ADCSRA | = (1 << ADSC]; // დაიწყეთ A2D კონვერსიები სანამ (1) // მარყუჟი სამუდამოდ

{

თუ (ADCH> ADCValue)

{

პორტი | = (1 << PB0]; // ჩართეთ LED1

}

სხვა

{

პორტი & = ~ (1 << PB1); // გამორთეთ LED1

}

}

დაბრუნება 0;

}

პირველად გამოაქვეყნეთ ეს სამეურვეო დააწკაპუნეთ აქ

გირჩევთ: