ATtiny85 - A/D prevodník

Zápisník experimentátora

Hierarchy: ATtiny85

V tomto článku sa budeme venovať A/D prevodníku v mikrokontroléri ATtiny85. Vychádzať budeme z predchádzajúcich článkov, v ktorých sme popisovali A/D prevodník v Arduine Uno. V tomto článku si ukážeme základné použitie prevodníka a vymenujeme si odlišnosti. Odlišnostiam sa budeme podrobne venovať v niektorom z ďalších článkov.

ATtiny85 má podobný prevodník ako Arduino Uno (s mikrokontrolérom ATmega328P). Má niekoľko zaujímavých odlišností.

  • Používa iné registre na nastavenie A/D prevodu.
  • Má operačný zosilňovač a diferenciálny vstup.
  • Má iba niekoľko analógových vstupov.

Pri bežnom používaní sa ale nijako nelíši od Arduina.

  • Na prečítanie analógovej hodnoty sa použije funkcia analogRead.
  • Na nastavenie referenčného napätia sa použije funkcia analogReference.

Ak použijeme jadro ATTinyCore, potom môžeme ako referenčné napätie použiť:

  • DEFAULT: Vcc
  • EXTERNAL: Napätie na pine AREF (pin 5)
  • INTERNAL1V1: Interné napätie 1,1 V
  • INTERNAL: Synonym pre INTERNAL1V1
  • INTERNAL2V56: Interné napätie 2,56 V s externým kondenzátorom na AREF
  • INTERNAL2V56_NO_CAP: Interné napätie 2,56 V bez externého kondenzátora
  • INTERNAL2V56NOBP: Synonym pre INTERNAL2V56_NO_CAP

Príklady

Na zobrazenie nameraných výsledkov použijeme jednoduchý displej TM1637, ktorý sa na to hodí. Na jeho ovládanie potrebujeme dva piny a na analógové meranie potrebujeme ešte jeden pin. Je to pin 7, na ktorom sa nachádza tento analógový vstup. Podľa schémy vidíte, že na základné meranie nám bude stačiť jeden potenciometer. Displej TM1637 som popisoval v článku ATtiny85 a displej TM1637. Napísal som dva príklady.

  • Meranie bez prevodu na volty.
  • Meranie s prevodom na volty.

Príklad 1 - bez prevodu na volty

Príklad nepotrebuje komentár. Nameraná analógová hodnota sa zobrazí pomocou funkcie showNumberDec. Nameraná hodnota sa nachádza v intervale 0-1023.

#include <TM1637Display.h>

// Module connection pins (Digital Pins)
#define CLK 4
#define DIO 3

int adc1 = 0;

TM1637Display display(CLK, DIO);

void setup() {
  display.setBrightness(0x02);
}

void loop() {
  adc1 = analogRead(1);
  display.showNumberDec(adc1, false);
  delay(200);
}

Príklad 2 - s prevodom na volty

Pri prevode nameranej hodnoty na volty musíme pracovať v celočíselnej aritmetike, pretože displej v skutočnosti zobrazí číslo v intervale 0-9999. A desatinna bodka je len presne určená pomocou funkcie showNumberDecEx v druhom parametri. Aby sme dosiahli celočíselnú aritmetiku, vynásobíme výsledok hodnotou 100.

#include <TM1637Display.h>

// Module connection pins (Digital Pins)
#define CLK 4
#define DIO 3

long adc1 = 0;

TM1637Display display(CLK, DIO);

void setup() {
  display.setBrightness(0x02);
}

void loop() {
  // ADC = ADC1 * 5 V / 1023 (0-5 V)
  // ADC = ADC * 100 {2 decimal places)
  adc1 = analogRead(1) * 500L / 1023;

  // value, decimal dot, no leading zeros
  display.showNumberDecEx(adc1, 0b01000000, false);
  delay(200);
}

Zdrojový kód

Zdrojový kód sa nachádza na serveri GitHub.

Video

Video sa nachádza na serveri YouTube.



Video


22.12.2018


Menu