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í.
Pri bežnom používaní sa ale nijako nelíši od Arduina.
Ak použijeme jadro ATTinyCore, potom môžeme ako referenčné napätie použiť:
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.
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);
}
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 sa nachádza na serveri GitHub.
Video sa nachádza na serveri YouTube.
22.12.2018