Multiplex 7 segment

Tohle jsem už použil jednou, funguje to už rok, ale pro společnou Anodu, akorát jsem otočil úrovně. A s AVR na mě nechoď a s Céčkem už vůbec NE. :blush:

A toho jsem si všiml, že spousta nových uživatelů procesorů začíná s Atmelem a Céčkem. Na PICky každej s…

To asi bude tím, že na Atmely je překladač Céčka zdarma, kdežto na PIC se musí koupit.
Já osobně používám PIC, ale ASM už jsem “zapomněl”. Takže ti s tím programem moc neporadím.

Ak by sa dalo, hodili by sme mi sem schemu a kod?, alebo staci kod, bo ma to zaujima, teda ak to nevadi…
dakujem

Fero_zezina: potrebovalo to multiplexer pro vyber cislice, upravim to bez nej a dam to do sekce AVR :wink:
forum.mcontrollers.com/viewtopic.php?t=622

Jestli mohu doporučit, použij pro řízení displeje IO MAX7219. Je zhruba za 250,-Kč. Vyhneš se potížím s řízením a nestabilitě ve spínání a nedokonalém jasu. Je to řízené po sériové lince, takže jen na 3 vodiče a odpadne spousta bižuterie, kterou jsem viděl ve Tvém schématu. Přes tranzistory spínáš pouze katody, neboť obvod je určen pro tento způsob řízení. Já jsem s tímhle dělal kdysi 100mm displej a pro osm segmentovek to nemá chybu. Umožňuje dokonce řetězení pro další obvod, ale to jsem nezkoušel. Hodil jsem Ti sem i pdf-ku od Maxima, ať se na to můžeš mrknout. Je lahůdka s tím dělat. Někde přehrabu dokumentaci, až bude chvilka a mohu Ti sem hodit i schéma spínače, ale není to složité. Tuším jsem použil BC639 a nějaké PNP pro buzení spínače.
MAX7219-MAX7221.pdf (735 KB)

posuvny registry se daji taky pripojit na seriovou linku (v synchro rezimu, nevim, jesli ho pic ma, x51 jo). Cenu jednoho (74xx164) odhaduju tak na 5Kc :smiley: ale v tomhle pripade se moc nehodej, disp. na ne ma velky napeti :frowning:

A čím ten MAX krmí ty segmenty, když je napajenej 5V? To se připojuje přímo na něj?

V MAXu je samozřejmě posuvny registr, do kterého se posílají pakety 16 bitů, kde je umístěná adresa pozice a datové slovo. Obvod je však vybaven pro plné řízení displeje, takže je vybaven proudovými zdroji, atd. Proto to stavět na posuvných registrech nevidím jako rozumné řešení. Pro Honzu3. Bohužel jsem si v noci vše nevybavil. Pravdou je, že obvod je stavěn spíše pro malé segmentovky, protože je to v TTL úrovních, takže není problém s napěťovými úrovněni pro dosažení kvalitního jasu. Já to stavěl pro displej, kde by toto absolutně nedostačovalo, proto jsem použil pulsní propustný měnič DC-DC pro pro vytvoření záporného napětí a spínače jsem napájel z něj. MAX napájí přímo segmenty a spínače přepínají katody přes tranzistory, neboť tam by to MAX nezvládl ani proudově, ani napěťově.

Taky mě napadl ten měnič, ale zase, 200,- za MAXe, ten měnič taky něco stoji, a když to mám teď, tak BC5xx stojí 1,- a odpory taky 1,- ! Zatím s tím laboruji, sice né uspěšně, ale nevzdávám to! A z důvodu ušetření portu mám taky posuvný registr 4094.

Řešení je samozřejmě více, to moje je elegantní a odpadají potíže s vyrovnaným jasem jednotlivých segmentů a další potíže. Já jsem se s tím kdysi taky vyvztekal, až tenhle IO mi moc pomohl. Mam stejné zkušenosti, které teď sbíráš. Přeji hodně úspěchů.

Tak jsem dal vsude BD1xx, kromě tech převodních a dělá to pořád. Já to nechápu.

Jak správně funguje multiplexní provoz? Sepnu 1 segmentovku, k tomu kombinaci segmentů, počkám, pak 2 atd atd??? A nebo sepnu 1, pak vše zhasnu, a sepnu 2, zhasnu, 3 atd atd??

A toho MAXe vidím jako poslední možnost. Nějak to musí jít vymyslet. Zajimavé je, že ty s tou společnou anodou jsou taky 57mm a ty to nedělají! Mám z nich hodiny, teploměr, datum a alarm a rok jedou v poho. Asi proto se s katodou moc nepouživají!

Pokud Ti prosvěcují jednotlivé segmenty, musíš vkládat pauzu. Zhasnuto - na sběrnici data - rozsviť katodu - zhasni a vyčkej - další data a další katoda a tak dokolečka. Ty intervaly jsou důležité, protože si podsvit dělá co chce. Až najdu chvilku, proštrachám staré pokusy se zobrazovači, jestli ještě něco najdu a pošlu to. Nic ale neslibuju, protože už to objevit nemusím, protože ty prachy za MAXe se mi bohatě vrátily v ušetřeném času.

Segmenty mi neprosvěcují, tak si myslím, že multiplex jako časování mám dobře. Akorát ten JAS! Odpory jsem v B zkoušel od 220 do 10k, a do 4k7 to bylo stejné, pak jas začal rapidně klesat.
Objednal jsem MAXe! jsem zvědavej, co s toho vymyslím. Stačím na spínání katod NPN nebo to chce FET?

Tak jsem to vyčaroval, už to svítí normálně. Pomocí FETu na + řídím pomocí PWM jas.

Díky všem


Miesto toho draheho maxima skus SAA1064. Je sice iba na 4 segmenty, ale za patinovu cenu. Mozes si riadit aj jas. Na prepojenie riadenia stacia 2piny.

Je jedno, ci riadis LED so spolocnou K, alebo spolocnou A.
cely problem “presaku” nie je v LED, ale v v ovladani spinacich tranzistorov.
Ak si zopol LED A a potom zapinas LED B, musis zabezpecit co najrychlejsie zavretie tranzistora pre LED A, aby nove nastavenie pre LED B na segmentoch nestihlo rozsvietit este aj segmenty na na LED A. Tym vznika presah.
Ta mrtva doba je len a len na to, aby sa tranzistor pre LED A stihol zavriet.
Urcite sa nejakej tej mrtvej dobe nevyhnes, lebo nedokazes zavriet tranzistor v nekonencne kratkom case.
Mozes ju vsak skratit na pripustnu dobu, aby stacilo:

  • vypni tranzistor pre LED A,

  • vypni vsetky segmenty,

  • priprav novu hodnotu stavov segmentov pre LED B

  • (nejake primerane male mnozstvo “nop”, alebo niecoho podobneho podla praktickej potreby, mozno ze sa bude dat aj vynechat)

  • zapni tranzistor pre LED B,

  • nastav novu hodnotu pre segmenty LED B

Pomale zavretie tranzistora sposobuju:

  1. parazitne kapacity na doske medzi BE, v ktorych sa nahromadil naboj, ktory aj po odpojeni napatia z bazy dalej drzi tranzistor otvoreny az do vycerpania napoja

riesenie:

relativne vysoky bazovy prud. To znamena, ze ak ma tranzistor zosilnovaci cinitel beta (h21e) napr. 100 a potrebujem segmenty budet prudom maximalne 5mA, to znamena, ze v najhorosom pripade bude pretekat cez spinaci tranzistor 8x5=40mA navrhnut taky odpor do bazy, aby bazovy prud nebol len 0.4mA (pre (5V - 0.7V)/0.4mA = 10kohm), co by na 40mA stacilo, ale napriklad 5mA ( (5-0.7)/5mA = 820ohm)

odpor medzi B a E. Rychlejsie sa vybiju parazitne kapacity a tranzistor je “bezpecnejsie” uzavrety. Znizi sa tym zosilnovaci cinitel.

  1. saturacia prechodu BE velkym prudom cez B. Vacsi prud do bazy sposobi saturovanie prechodu a tym zpomalenie uzavretia tranzistora pocas odcerpavania tohto naboja.

riesenie:
odpor medzi B a E - uz bolo spomenute
antisaturacna dioda. - anoda priamo na bazu tranzistora (pre NPN) a katoda na kolektor tranzistora. Pri PNP samozrejme naopak.

Pri spinani 7segmentovky bude asi jedno, ci sa spina bipolarnym tranzistorom, alebo FETom. FET bude citlivejsi na parazitne kapacity.
Bipolarny tranzistor pri otovoreni ma ubytok EC cca 0.2-4V v zavislosti od pretekajuceho prudu (BC337 0.7V pri 0.5A, BD245 4V pri 10A).
Pre 0.5A je vykonova strata 0.7*0.5=0.35W
Pre 10A je strata 40W.

Ak by sa pre spinanie pouzil FET s odporom v otvorenom stave 0.05ohm (napr. IRF7341 v spinacom rezime), potom by pri prude 10A bol vykonova strata 5W, co je velky rozdiel oproti 40W na bipolare. Tam ma zmysel pouzit FET. Netreba zabudat, ze male FET tranzistory maju relativne vysoky odpor (3-6ohm)
Pouzitie malych FETov je dobre vsade tam, kde oproti bipolarom vacsi ubytok nevadi a zaroven treba zabranit, aby sa do ovladacej strany zamiesal bazovy prud zo spinacieho tranzistora. Asi by som ich do spinania 7segmentoviek nedaval, lebo tie FETy co by za to stali, by boli v porovnani s rovnako vhodnymi bipolarmi znacne drahsie.

Co sa jasu tyka:

Mozno som nejak zle videl, ale na scheme nie je prud cez segment NICIM obmedzeny. Takze prud sa zacne obmedzovat zdrojom, co okrem toho ze nie je zdrave pre tie segmenty moze viest roznemu jasu pri rozsvieteni rozneho poctu segmentov, alebo malym prudom do bazy trazistorov pre jednotlive segmenty - to potom bude este naviac zavisle aj od teploty.
Do serie so segmentami TREBA dat odpory, uz len preto, ze segmenty nesvietia rovnako , ked na ne das aj “bezpecnu” velkost napatia. Svietivost segmentov treba riadit PRUDOM, nie napatim.

Velkost odporu treba zvolit priblizne nasledovne: najdi hodnotu odporu v statickom rezime, aby segment primerane svietil. Tuto hodnotu podel casovym podielom dlzky rozsvietenia segmentu k celkovemu casu (priblizne, ak je segmentov 8, potom osmimi). Tak dostanes hodnotu odporu. desatinne bodky pri velkych segmentoch su tvorene mensim poctom diod, tam bude musiet byt odpor vacsi ako pri inych segmentoch.

Ak sa ti menenil jas LED pri zmensovani odporu a zaroven sa nemenil jas pri rozsvieteni rozneho poctu segmentov, znamena to len tolko, ze si mal nastaveny maly bazovy prud do segmentoveho tranzistora. Ten ti potom robil “nahradny” odpor. Treba si uvedomit, ze bipolarny tranzistor je prudovy zdroj riadeny prudom. Ak das do bazy maly prud, cez kolektor neposuti prud vacsi ako zodpovedajuci bazovemu prudu a aktualnemu zosilnovaciemu cinitelu v danom pracovnom bode. Preto aj tranzistory v segmentoch bud relativne vyssim prudom a velkost prudu cez segment reguluj odporom. Pri SAA1064 sa o tuto cast starat nemusis, otazne je, ci ta vysledny prud cca 12mA uspokoli.

Ak sa ti menil jas LED pri roznom pocte segmentov plati to co som napisal vyssie, ale pre tranzistor spinajuci cely segment.

Snad ti moje rady trochu pomozu, daj vediet.

Martin

Myslel jsem si že už to mám a NEMÁM. Koukal jsem na to přes den a nebylo vidět to, co v noci. Tak vše znova. Ale ovládání multiplexu přes 3 vodiče není špatnej nápad!
Martine díky, ráno na to vlítnu.

Dal jsem do anod odpory 49 ohmů a problém s jasem zmizel. Už je fuk, jestli na displeji svítí 1 nebo 8.! Mám to tak, jak je schéma o něco víš, co se týka časování multiplexu, musí se obsluha stihnout max do 2,5ms. Já jsem to udělal tak, že přerušení mám po 1,25ms a plnění registru je prvních 1,25ms, v druhých je displej vypnut. Při kratší době klesá jas.

Neveřil bych, že 8 odporů mě připraví o týden života. :smiley: :smiley:

Na spínáná katod Ti stačí NPN např. BC639. Budeš ho muset budit nějakým PNPčkem. Díky Martine za pěkný popis, ušetřil jsi mi práci se psaním. Jinak já použil MAXe, protože jsem ho 1./ měl a za 2./ může řídit až osm pozic, což moje aplikace vyžadovala. Ale SAA také není špatná volba, koukal jsem do katalogu.

Proč bych je měl budit PNP? Teď je budim 4094 a jede to. Nebo myslíš u MAXe?

Není to sice špatnej šváb, ale nejdou řadit za sebe!!

Teď tak přemýšlím o tom MAXovi a je pro mě nereálnej z důvodu nutnosti použít měnič aspoň -8V/200mA, cožmi přijde zbytečné!

To buzení se vztahuje k MAXu, tam posuvný registr nepotřebuješ. Veškerá řídící logika je zaintegrována. U toho SAA je to pravda, ale já ho nepotřeboval, i když v šuplíku taky nějaký bude.

Jen doplnim, ze uprava ma smyls pouze pri pouziti schottkyho diody (mensi napeti nez Si PN prechod) a soucasne musi byt soucet saturacniho napeti a napeti protisaturacni diody mensi, nez je napeti B-E.

Dakujem za upresnenie s tou shotkyho diodou, ale aj obycajna uz robi divy.
Volakedy som to a skole meral, ale uz tie priebehy nemam.

Inak tie shotkiho diody su zvlastne. Podla katalogovych listov to vyzera tak, ze to ich nizke napatie v otvorenom stave sa tyka iba velmi malych a malych prudov. Pri vacsich prudoch (10-100mA) to ma ubytok ako obycajna Si dioda.

SAA1064 sa sice do serie zapojit nedaju, ale to pre zbernicu I2C ani nieje potrebne. Je tam predsa adresny pin, ktorym sa selektuje obvod.
Je vsak pravda, ze sa takto na jednu zbernicu daju zapojit iba dve. Ak sa na adresny pin pouzije napr. 74138, potom az osem, ale pravda je, ze sa to tym trocha neunosne komplikuje.

Som zvedany ako pokracuje projekt :slight_smile: