Dokumentace k desce =================== (schéma, layout plošného spoje): http://www.fi.muni.cz/~kas/tinyboard/ Osazení desky: ============== U1: ATtiny25-20SSU U2: MCP1703T-500 regulátor napětí 5V, 250 mA Q20, Q50: N-MOSFET IRLML6344TRPBF, 30V, 5A C1, C3: 10uF keramické, typ nevím :-) C2, R10, R30, R40: _kondenzátory_ 220nF keramické X7R R12, R20, R32, R42, R50: odpory 15KOhm R34, R44: odpory 300KOhm (podle nich dimenzovat termistory) D50, R15, R21, R23, R51, R53: propjky 0 Ohm (nebo dráty) Nepoužito: R2, R3, R4, R11, R13, R14, R22, R24, R25, R31, R33, R41, R43, R45, R52, R54, R55 C11, C51, D10, L10, L50, Q10, Q1, Q2, Q30, Q40, U3 Možno ještě osadit kontrolku napájení (D1, R1) Přiřazení pinů ATtiny: ====================== PB0: plovák nebo jiný spínač, zapojit mezi piny 1 a 2 konektoru PB0 PB1: ovládání motoru, zapojit mezi piny 2 a 3 konektoru PB1 PB2: termistor, zapojit mezi piny 1 a 2+3 konektoru PB2 PB3: termistor, zapojit mezi piny 1 a 2+3 konektoru PB3 PB4: ovládání motoru, zapojit mezi piny 2 a 3 konektoru PB4 Programování: ============= Před programováním odpojit piny PB0-PB2 od zbytku desky vyndáním jumperů J1-J3. make program # přeloží firmware a nakopíruje do CPU (flash+eeprom) make program_flash # totéž, uploaduje jen programovou paměť (flash) make program_eeprom # totéž, uploaduje jen eeprom make dump_eeprom # výpis eeprom, například logovacích dat Programová flash umožňuje 10_000 přepsání (OK), EEPROM umožňuje "jen" 100_000 přepsání (pozor na to při logování do EEPROM, ať se příliš často nepřepisuje ta stejná adresa, například při zacyklení programu). Řízení motorů čerpadel: ======================= Motory lze řídit buďto posíláním logické 1 nebo 0 na výstupy PB1, PB4, anebo by mělo být možné i plynulé řízení přes PWM (viz dokumentace Timer/Counter 1, pin PB1 je pak OC1A, pin PB4 je OC1B. Doporučuju T/C1 časovat z PLL clock na 32 MHz, čímž se získá PWM o frekvenci 256 kHz, což by mělo na plynulé řízení motoru stačit. Je případně možné použít i 64 MHz, což má o něco větší odběr v klidu (asi o 2 mA). Nebo PLL clock zapínat jen na dobu, kdy má jet čerpadlo. Pozor na dostatečně velkou střídu PWM, aby se motor vůbec roztočil. Analogové vstupy: ================= Analogové vstupy PB2, PB3 (ADC1, ADC3) jsou vybaveny low-pass filtrem z 220nF kondenzátoru a 15k odporu, což by mělo ořezávat frekvence vyšší než cca 50 Hz. Tentýž kanál ADC tedy nemá smysl vyhodnocovat častěji. Mezi +5V a horní pin analogového vstupu je umístěn 300K odpor, dolní pin je zapojený na zem. Podle toho je třeba vybírat součástku, jejíž odpor budeme měřit: Nejlépe je použít měření A/D převodníkem proti interní 1.1V napěťové referenci. ADC má rozlišení 10 bitů, takže chceme na napěťové děličce dělící +5V pomocí 300K odporu a odporu čidla mít rozsah napětí od 0.001 do 1.1 voltu, což dává rozsah odporů cca 60 Ohmů až 84 kOhmů. Podle toho je potřeba volit druh čildla. U termistorů tomu odpovídají například tyto NTC termistory s odporem 10kOhm při 25 stupních - tímto pokryjí teploty -15 až 150 stupňů: http://www.gme.cz/ntc640-10k-p118-042 http://www.ges.cz/cz/ntc-0-2-10k-GES05303342.html U fotoodporů pro detekci pouze denního světla je to víceméně jedno - i velké odpory mají na denním světle pod 1 kOhm: http://www.ges.cz/cz/ldr-05-75-GES05100338.html http://www.gme.cz/vt83n2-p520-059 Digitální vstup pro plovák: =========================== Vstup na pinu PB0 je také vybaven low-pass filtrem jako analogové vstupy, mělo by sloužit k odfiltrování přechodových jevů při spínání a rozepínání kontaktu. Možná ale bude i tak třeba udělat SW test na to, aby změněný stav sepnutí vydržel aspoň nějakou dobu (50 ms). Pro vstup je třeba mít zapnutý interní pull-up rezistor (příslušný bit v registru PORTB nastavit na jedničku). Náměty: ======= - Použít interní teploměr (ADC4) jako odhad teploty vzduchu (podle toho, kde bude zařízení umístěno). - Časování dělat přes watchdog, například s rozlišením 16 s: watchdog probudí CPU (viz firmware "step-up" na stránce tinyboard), je potřeba potvrdit. Druhý příchod watchdogu bez potvrzení může resetovat CPU (pro případ zacyklení) - Proudové nároky: běží-li čerpadlo, nemá cenu řešit. Jinak PLL clock má asi 6mA v 64MHz režimu, 2mA v 32MHz režimu, ADC má asi 2mA, CPU taky 2mA, nějaké mA sežerou napěťové děličky u analogových vstupů. - Osadit LEDku pro signalizaci napájení? Cca 2-10 mA podle typu. - Regulace termistor + fotoodpor: fotoodporem poznat den/noc, termistorem na vstupu od kolektoru do nádrže řídit vypnutí (až začne příchozí teplota klesat, vypnout čerpadlo). - Regulace 2x termistor: zapnout čerpadlo, pokud za pár vteřin nezačne růst teplota příchozí vody do nádrže nad teplotu odchozí vody, vypnout čerpadlo a počkat hodinu, dvě. - Dívat se na stav registru MCUSR (viz logging.c) a rozlišovat, jestli jsme se probudili resetem, power-on, watchdog resetem, brown-outem,atd. - Mít uložené regulační proměnné v eeprom a při ladění upravovat jen EEPROM, ne program samotný. - a už mě to nebaví, stejně to nikdo nebude číst :-)