Arduino - 07 ATtiny 85 - jak na něj
Přidal limlejn dne 10.04.2012 17:16
ATtiny 85 má 8 pinů a disponuje 5 vstupně-výstupními periferiemi, z nich 3 mohou fungovat jako analogové vstupy, 2 umí výstup PWR (pulsně šířkovou modulaci) a všech pět se dá použít jako digitální vstupy, či výstupy. Pro program disponuje 8kB paměti, což umožňuje použít relativně složitý prográmek.

Pro vyzkoušení jsem udělal jednoduchý časovač, který má dva digitální vstupy ( vypínač a tlačítko) , jeden analogový vstup s potenciometrem, kterým se nastavuje čas a dvěma výstupy, které signalizují stav časového spínače, zelená zapnutý stav zařízení a červená signalizující běh časáku.

Na obrázku je propojeno Arduino UNO bez 5V napájení, protože je připojen externí zdroj 12V. Pro napájení Atiny85 je použit stablík 7805. K Attině jsou připojeny ovládací prvky: Vypínač, tlačítko a potenciometr 10k a dvě LEDky. Spínače jsou spolu s 10k odpory, LEDky jsou přes 1k odpory. V pozadí je nepřipojené relé 12V které po odzkoušení bude přes spínací tranzistor zajišťovat spínání externího zařízení.
Funkce:
Potenciometr (může být i přepínač) v pěti polohách nastavuje čas spínače, první poloha je v rozmezí jedné pětiny dráhy nastavena na zkoušení (malý čas cca10 vteřin), další čtyři polohy slouží k nastavení jiných časů prakticky libovolných v rozmezí minut, hodin, desítek hodin. Pro odladění jsou časy krátké, později lze programově přestavit, či vymyslet složitější ovládání. Nastavení času se změní pouze není li časák sepnut. Zelená LED signalizuje stav zapnutý vypínače a červená LED signalizuje, že byl časák spuštěn tlačítkem a běží.

Zde je prográmek:


//Program pro spínání pomocí časového spínače pro ATtiny 85

const int VypinacPin = 2; // pin Vypínač
const int ledREDPin = 0; // pin výstupní LED Tlačítka (červená)
const int ledGREENPin = 1; // pin výstupní LED Vypínače (zelená)
const int PotakPin = 2; // pin Potenciometr analogInput !!!
const int TlacitkoPin = 3; // pin Tlačítko
int n ; // nastavení periody
int lastMillis;
int senzorV; // hodnota potenciometru

boolean onoff = false; // pomocná proměnná

void setup() {
pinMode(ledREDPin, OUTPUT);
pinMode(ledGREENPin, OUTPUT);
pinMode (VypinacPin, INPUT);
pinMode (TlacitkoPin, INPUT);
pinMode (PotakPin, INPUT);
}

void loop() {
if (onoff==false){
senzorV = analogRead(PotakPin);

if (senzorV <= 200){
n=3;
}
if (senzorV >= 200 && senzorV <= 400){
n=6;
}
if (senzorV >= 400 && senzorV <= 600){
n=10;
}
if (senzorV >= 600 && senzorV <= 800){
n=15;
}
if (senzorV >= 800 && senzorV <= 1023){
n=20;
}
}

if (digitalRead(TlacitkoPin)== HIGH){ // při stlačení tlačítka
onoff = true; //
lastMillis = millis()/1000; // vynuluje čítač
}

if (digitalRead(VypinacPin)== HIGH){ // jestliže je povolen časový spínač
digitalWrite(ledGREENPin, HIGH); // svítí kontrolní LED přepínače zelená

if (millis()/1000 - lastMillis < n){ // interval sepnutí časáku
if (onoff == true){
digitalWrite(ledREDPin, HIGH); // svítí kontrolní LED časáku červená
}
}
else{
lastMillis = millis()/1000; // vynuluje čítač
onoff = false; // nastaví proměnnou onoff na false
digitalWrite(ledREDPin, LOW); // nesvítí kontrolní LED časáku červená
}
}
else {
digitalWrite(ledREDPin, LOW); // nesvítí kontrolní LED přepínače
digitalWrite(ledGREENPin, LOW); // nesvítí kontrolní LED časáku
lastMillis = millis()/1000; // vynuluje čítač
onoff = false; // nastaví proměnnou onoff na false

}

}