Numitronové hodiny s Atmega32

Petr Šenfluk, Filip Kostka , UREL, FEEC, VUT Brno
xsenfl00stud.feec.vutbr.cz
xkostk04stud.feec.vutbr.cz

Ruský numitron IV-6

Obsah:

  1. Úvod
  2. Realizace HW
  3. Realizace SW
  4. Závěr
  5. Literatura

Úvod

Projekt se zabývá konstrukcí univerzálního zobrazovacího panelu s 6ti 8mi segmentovými zobrazovacími elektronkami (numitrony) IV-6 ruské výroby. Panel je dále doplněn o řídící jednotku s procesorem Atmega32, kde je implementován software pro realizaci hodin. Obsluha zařízení je stejná jako u klasických digitálních hodin (hodinek) pomocí tlačítek MENU a SET. Kromě hodin jsou naprogramovány další ukázkové "aplikace" jako běžící text, vlnky nebo binární ukazatel sekund pro demonstraci možností zobrazovacího panel. Do budoucna se počtá s rozšířením programu a řídící jednotky s mikrokontrolérem tak, aby bylo možné číslicově ovládat FM tuner s PLL laděním případně další HW periferie. Panel potom může zobrazovat aktuální frekvenci tuneru, nastavený čas buzení rádiem jako klasický radiobudík a podobně.

Realizace HW

Zobrazovací panel je realizován na DPS, která obsahuje 6 kusů samotných numitronů, tranzistory pro multiplexní řízení a 2 spínané zdroje pro napájení zobrazovačů. Spínaný zdroj typu step-up zajišťuje napájení anod zobrazovačů s volbou výstupního napětí 25V / 50V podle toho, zda je použito statické nebo multiplexní řízení a je doplněn o možnost externí PWM regulace (výsledná intenzita svícení numitronů). Další spínaný zdroj typu step-down obstarává napětí o hodnotě 1,22V pro napájení žhavících vláken numitronů. Oba spínané zdroje jsou realizovány integrovanými obvody firmy Maxim, ty byly objednány jako zkušební vzorky. Výsledný panel obsahuje napájecí konektor (vstupní napětí je v rozmezí 5V - 15V), 8mi pinový konektor pro ovládání jednotlivých segmentů a 8mi pinový konektor pro zapínání jednotlivých numitronů, externí PWM regulaci a řízení step-down zdroje pro žhavení.
panel s numitrony IV-6
Obr. 1 - Hotový zobrazovací panel
panel s numitrony IV-6 ze předu
Obr. 2 - Pohled na panel ze předu

Řídící jednotka je realizována na kontaktním poli, jde vlastně pouze o procesor s krystalem a tlačítky MENU a SET. Odkazy na schéma zapojení zobrazovacího panelu, řídící jednotky a kompletní technické dokumentace včetně zdrojového kódu jsou uvedeny v závěru.

Realizace SW

Celý program je pro jednoduchost napsán v jednom souboru. Celý projekt z AVR studia je ke stažení v závěru. Níže popsaný program je doplněn o další položky menu ("aplikace"). Jde pouze o ukázku možného využití zobrazovacího panelu a jejich zdrojový kód nebude dále popisován.
ČASOMÍRA
Procesor běží na krystalu o frekvenci 14,7456 MHz. Jako časomíra je využit čítač OC2 (má nejvyšší prioritu přerušení). Předdělička je nastavena na 256.

14745600 / (256 * 256) = 225

To znamená, že přerušení OC2 je generováno 225 krát za sekundu. Tyto přerušení počítá proměnná time_cnt, jakmile napočítá 225 (přesně každou sekundu), nastaví se proměnná time_update na log1 a time_cnt začne čítat od nuly. Proměnná time_update je nastavena tak dlouho, dokud nedojde k inicializaci času procedurou time_init(), zde se pak nastaví na log0. Procedura time_init() se spouští z hlavní smyčky programu while(1) právě, když je proměnná time_update nastavena na log1, což je přibližně každou sekundu. Čas je procedurou time_init() uložen do proměnných hr,min a sec.
MULTIPLEX
Pro multiplexování je použit čítač OC0. Předdělička je nastavena na 64.

14745600 / (256 * 64) = 900

Přerušení OC0 je generováno 900 krát za sekundu. Každým přerušením se změní proměnná mpx_state. Ta definuje, který z 6ti zobrazovačů má být v daný moment aktivní. Pro zobrazení 6ti znaků musí proběhnout 6 taktů přerušení, výsledná obnovovací frekvence zobrazovačů je tedy 150Hz. Proměnná mpx_state je zpracována přepínačem switch(mpx_state) v hlavní smyččce programu while(1) tak, že se na základě jejího stavu vypne předešlý numitron, zapne aktuální numitron a odešle se na něj požadovaný symbol.
PRINCIP ZOBRAZOVÁNÍ
Hodnoty (znaky), které se mají zobrazit na jednotlivých numitronech jsou uloženy v proměnných digit_1digit_6. Tyto proměnné se musí před každým zobrazením sestavit pomocí přepínače switch(menu_state) v hlavní smyčce programu while(1). Dle stávající hodnoty v proměnné menu_state se spustí příslušná procedura menu_x(), která proměnným digit_1 až digit_6 přiřadí jednu z definovaných konstant (definice znakové sady). Pokud je potřeba zobrazit jakoukoli složku času, využívá se funkce num_to_digit(). Vstupní parametr je číslo představující jednotky sekund, desítky sekund, jednotky minut atd. Výstupem funkce je jedna z definovaných konstant.
OBSLUHA TLAČÍTEK
Stisknutí tlačítka MENU vyvolá přerušení, ve kterém se změní hodnota aktuálního zobrazovaného menu, proměnná menu_state. Stisknutí tlačítka SET vyvolá přerušení, ve kterém se nastaví proměnná set_update na log1. Proměnná set_update je nastavena tak dlouho, dokud nedojde k inicializaci nastavení procedurou set_init() v hlavní smyčce programu while(1). Tato procedura na základě toho, jaké menu je aktivní, inkrementuje příslušné proměnné (menu NASTAVENÍ HODIN - inkrementace proměnné hr, menu NASTAVENÍ JASU - inkrementace proměnné brigh_state atd.).
NASTAVENÍ JASU
Pro řízení jasu je použit HW PWM modul čítače OC1A. Jde o 16ti bitový čítač, ale je nastaven na režim 8bit PWM, tudíž pracuje "8mi bitově" a z registrového páru OCR1A využívá jen nižších 8 bitů tedy OCR1AL. Jas je řízen proměnnou brigh_state. Proměnná brigh_state je zpracována v hlavní smyčce programu while(1) přepínačem switch(brigh_state), který podle této proměnné přiřadí do porovnávacího registru OCR1AL příslušnou hodnodtu.

Závěr

  • Výsledná velikost celého programu je 3230B (9,9% z procesoru Atmega32) s vypntými optimalizacemi. S optimalizací je to 2058B.
  • Prvotní myšlenka byla řídit multiplex pomocí proměnné time_cnt za využití čítace OC2 už nastaveného pro řízení časomíry. Při frekvenci přerušení tohoto čítače 225Hz a pro 6 numitronů je výsledná obmovovací frekvence zobrazovačů 37,5Hz. Tato hodnota byla příliš nízká, blikání již bylo příliš znatelné a působilo rušivě, proto je pro muliplex využit další čítač (OC2).
  • Zobrazování je plynulé i při zobrazování 15ti "snímků" za sekundu (menu pro vykreslování vlnek). Reakce na obsluhu tlačítek je okamžitá a přesná, parametry procesoru v dané konfiguraci jsou pro tuto aplikaci tedy dimenzovány dostatečně a je možné program dále rozšiřovat.
  • Odběr řídící jednotky je 45mA pro napájecí napětí 5V. Odběr zobrazovacího panelu při maximálním jasu (pro anodové napětí 50V) je 750mA pro napájecí napětí 5V a 280mA pro napájecí napětí 12V. Pro střední jas (pro anodové napětí 25V) je to 275mA pro napájecí napětí 5V a 100mA pro napájecí napětí 12V. Maximální celkový výkon zařízení nepřesáhne 4W, celé zařízení je tedy možné napájet z USB portu počítače (počítá se s výstupní proudem portu USB 1A).
  • Kompletní technická dokumentace: zapojení panelu, zapojení řídící jednotky, DPS panelu (300dpi), osazovací plán panelu, zdrojový kód, projekt eagle, projekt avr

    Literatura

    [1] Atmel. [online]. Datasheet Atmega32 - 8-bit AVR Microcontroller. Atmel Corp., 2011 - [cit 31. 5. 2013]. Dostupné na www: http://www.atmel.com
    [2] Maxim. [online]. Datasheet MAX758 - Adjustable, Step-Down, Current-Mode PWM Regulator. Maxim Corp., [cit 31. 5. 2013]. Dostupné na www: http://www.maximintegrated.com
    [3] Maxim. [online]. Datasheet MAX1771 - Adjustable, High-Efficiency, Low Iq, Step-Up Controller. Maxim Corp., [cit 31.5. 2013]. Dostupné na www: http://www.maximintegrated.com