ATtiny85 - A/D převodník

Zápisník experimentátora

Hierarchy: ATtiny85

V tomto článku se budeme věnovat A/D převodníku v mikrokontroléru ATtiny85. Vycházet budeme z předchozích článků, ve kterých jsme popisovali A/D převodník v Arduinu Uno. V tomto článku si ukážeme základní použití převodníku a vyjmenujeme si odlišnosti. Odlišnostem se budeme podrobně věnovat v některém z dalších článků.

ATtiny85 má podobný převodník jako Arduino Uno (s mikrokontrolérem ATmega328P). Má několik zajímavých odlišností.

  • Používá jiné registry na nastavení A/D převodu.
  • Má operační zesilovač a diferenciální vstup.
  • Má pouze několik analogových vstupů.

Při běžném používání se ale nijak neliší od Arduina.

  • Na přečtení analogové hodnoty se použije funkce analogRead.
  • Pro nastavení referenčního napětí se použije funkce analogReference.

Pokud použijeme jádro ATTinyCore, pak můžeme jako referenční napětí použít:

  • DEFAULT: Vcc
  • EXTERNAL: Napětí na pinu AREF (pin 5)
  • INTERNAL1V1: Interní napětí 1,1 V
  • INTERNAL: Synonym pro INTERNAL1V1
  • INTERNAL2V56: Interní napětí 2,56 V s externím kondenzátorem na AREF
  • INTERNAL2V56_NO_CAP: Interní napětí 2,56 V bez externího kondenzátoru
  • INTERNAL2V56NOBP: Synonym pro INTERNAL2V56_NO_CAP

Příklady

K zobrazení naměřených výsledků použijeme jednoduchý displej TM1637, který se na to hodí. Na jeho ovládání potřebujeme dva piny a na analogové měření potřebujeme ještě jeden pin. Je to pin 7, na kterém se nachází tento analogový vstup. Podle schématu vidíte, že na základní měření nám bude stačit jeden potenciometr. Displej TM1637 jsem popisoval v článku ATtiny85 a displej TM1637. Napsal jsem dva příklady.

  • Měření bez převodu na volty.
  • Měření s převodem na volty.

Příklad 1 - bez převodu na volty

Příklad nepotřebuje komentář. Naměřená analogová hodnota se zobrazí pomocí funkce showNumberDec. Naměřená hodnota se nachází v intervalu 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);
}

Příklad 2 - s převodem na volty

Při převodu naměřené hodnoty na volty musíme pracovat v celočíselné aritmetice, protože displej ve skutečnosti zobrazí číslo v intervalu 0-9999. A desetinná tečka je jen přesně určena pomocí funkce showNumberDecEx v druhém parametru. Abychom dosáhli celočíselnou aritmetiku, vynásobíme výsledek 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 se nachází na serveru GitHub.

Video

Video se nachází na serveru YouTube.



Video


26.12.2018


Menu