[elektro] CD4017-el ULN2003 meghajtása

potyo potyo.ada at gmail.com
Tue Jul 19 19:32:05 CEST 2011


Szerintem valami nincs ott teljesen átgondolva. Első körben pl. a kijelző
multiplexelést felesleges megszakításból csinálni, ha jelenleg abból
csinálod. A főprogram végtelen ciklusában elég figyelni a T0IF bitet, és
amikor bebillen, akkor elvégezni, amit most ezzel kapcsolatban megszakítási
rutinban csinálsz - ha ott csinálod. A kijelző biztosan nem marad le
semmiről :-))

Következő a DS18B20, aminek a kezelését szintén meg lehet csinálni a
főprogramból, mivel az egyes bitek olvasásához vagy írásához elég rövid az
időkeret, így azokat NOP utasításokkal kell mindenképpen megoldani, két bit
olvasása/írása között viszont ha jól emlékszem, bármennyi idő eltelhet, így
ez sem annyira időzítésérzékeny. Amire érzékeny, az az, ha egy bit
írása/olvasása alatt jön megszakítás, de ezt meg lehet úgy oldani, hogy a
bit művelet előtt tiltani, majd utána engedélyezni a GIE bitet, így a DS
kezelése rendben lesz. Viszont ekkor ugye elcsúszhat a 100Hz időzítése. Ezt
viszont úgy küszöbölheted ki, ha használod a CCP modul capture módját.
Nevezetesen beállítod, hogy pl. feltutó élre reagáljon, és okozzon
megszakítást is. Amikor a megszakításra ráfut, kiolvasod a Timer1 tartalmát,
kivonod belőle azt, amit a CCPR1H-CCPR1L regiszterekben találsz, és a
különbség megadja, hogy mennyivel vagy a megszakítás tényleges bekövetkezése
után, vagyis ezzel tudod kompenzálni a GIE bit kikapcsolása miatti
ismeretlen mértékű plusz késleltetést. Itt ekkor felkonfigurálod mondjuk a
Timer2-t, hogy x idő múlva okozzon megszakítást, amikor pedig az okoz
megszakítást, akkor meg kiadod a tirisztor számára a gyújtást.

Nekem a fenti alapján bőven elégnek tűnik a 4MHz és ez a kontroller a
feladatra, maximum kicsit át kell rendezni a hardvert, hogy a 100Hz az RB3
lábra menjen.

2011/7/19 Szilágyi Péter <sysypet at hdsnet.hu>

> Zsolt!
>
> Meg tudja hajtani, tapasztalatból mondom.
> Egyébként ugye, nem akarsz mást is csináltatni ezzel az MCU-val?
> Nekem egy 16F648 hajt egy 3 digites kijelzőt DS18B20 hőmérővel. A TIMER0
> adja a kijelző frissítéshez a 4ms megszaggatást.
> Már a DS18B20-at is szinkronizálnom kellett a TIMER0-val, mert elég
> szigorúak az időzítések a kommunikációban.
> Most kitaláltam, hogy a mért hőmérséklettel arányosan egy soft PWM jelet is
> generálok, ami egy tirisztoros fázishasításos szabályzót fog üzemeltetni.
> A 100Hz nullátmenet az INT lábon jön be és a TIMER2 fogja a fázishasításhoz
> eltolni a tirisztor gyujtójelét.
> Ha finoman akarok fogalmazni akkor azt mondanám, hogy 4MHz órajel mellett
> összetojta magát az MCU.
> Vagy én csinálok valamit rosszul? Van valami szofisztikáltabb módszere
> ennek,hogy bírja a proci ezt a terhelést?
> Persze anélkül, hogy dsPIC33-ra kellene váltanom 16mips mellett. Vagy túl
> nagyok az elvárásaim egy ekkora MCU-tól?
> Valaki mondta a nagyjaink közül, hogy merjünk nagyokat álmodni.


More information about the Elektro mailing list