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í.
Při běžném používání se ale nijak neliší od Arduina.
Pokud použijeme jádro ATTinyCore, pak můžeme jako referenční napětí použít:
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.
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ř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 se nachází na serveru GitHub.
Video se nachází na serveru YouTube.
26.12.2018