Univerzální programátor

Uvažuji o univerzálním programátoru, který by kromě běžných mikročipů uměl programovat např. i EPROMky, vysokonapěťové paralelní programování Atmelů, příp. testování funkcí IO. Základem by byl jediný sokl DIP40 s aretací. Na piny by byly přivedené přímo IO porty ATmega169, čímž by se zajistilo snadno konfigurovatelné TTL rozhraní, napájení obvodů také z IO portů.

Tohle by šlo, ale problém - občas je potřeba na některé piny přivést +12V. Zřejmě jediná možnost spínat to 40 tranzistory PNP (asi na to neexistuje IO, všechny co jsem našel spínají k zemi). Jenomže - co s porty ATmegy? Nesnesou +12V na vstupu, přes ochranné diody by tekl velký proud do +5V. Uvažoval jsem oddělit IO porty odpory např. 100ohm a buď to nechat na ochranných diodách ATmegy nebo sepnout port do LOW a tak odvést proud. Jenže tohle by nešlo použít tehdy, kdy mají piny sloužit i jako napájecí - nebylo by možné kvůli odporům obvod napájet dostatečným proudem. Jediná možnost co mě napadá je vytipovat jenom některé piny kde bude potřeba +12V a ty přepínat za podpory analogového multiplexeru (ale i tam jsem zatím nenašel vhodný IO). Nebo ještě mě napadá další obcházka - použít sice omezovací odpory, ale podobně jako +12V spínat dalšími tranzistory i +5V a GND. Což je celkem 120 tranzistorů, spínaných např. ze sériově/paralelního převodníku. To už je ale fakt dost velká šílenost a i plošňák by pěkne nabobtnal.

Neměl by, prosím, někdo nějaký nápad, jak to vyřešit?

dodatečný EDIT: Obcházka se spínaným napětím +5V a GND bude snad schůdná. Tak tam bude 15x TPIC6C595D a 80x BC807, ale třeba někdo poradí nějaký elegantnější způsob.

Upřímně řečeno, než stavět takovej kombain tak raději dám těch 20K za elnec a pod. Mám AL07 ale ten už je totálně yesterday :frowning: a podpora ani dokumentace není :frowning:( Jenže dneska je to hlavně o sériových protokolech takže už se nějakou dobu chystám stvořit s kolegou řešení které si poradí s multilevel logikou + jedno HV napětí a do kterýho by se vzdycky nahrál požadovaný programovací plugin (RAM based) takže by to bylo dost univerzální a šlo to vždy rozšířit. Pokud by se k tomu někdo chtěl přidat , tak to bude koncipovaný jako open source / hardware.

Ve vývoji programátoru pokračuji (první verze byla dost dobře funkční) - základem je ATmega169, který je přímo napojen na piny obvodu (slouží jako univerzální sběrnice, současně i pro napájení - od složitých oddělovačů jsem už upustil), docela jednoduché zapojení. Měnič napětí generuje 12V, dá se s tím snadno dělat i paralelní programování. Teď jsem to předělal tak, že v řídicím procesoru je interpreter makro instrukcí (protože byl problém do paměti nacpat všechny potřebné protokoly), různé protokoly se programují pomocí skriptů. Je to na dost dobré cestě, pořizovací cena kolem 500. Ještě asi doplnit regulaci napětí aby podporoval i 3,3V logiku (což bude bohužel znamenat nutnost použití trochu pomalejšího krystalu), rychlost není moc závratná, ale pro domácí použití by mohl být (vzhledem k ceně a univerzálnosti) dost výborně použitelný.

Interpret taky cesta - v jednom ze svých programátorů jsem kromě předprogramovaných konkrétních CPU/MCU měl i nějaké univerzální povely ale bylo to dost pomalý. Nicméně rychlost je pro mě priorita, hlavně tam kde nelze debagovat a jede se stylem compile-program.
Tak se pak pochlub. Já to budu mít založený na x51, to zprogramuje kazdej (když poskytnu mustr ) :slight_smile: takže teoreticky by mohly příbývat plaginy podle toho kdo s čím dělá… ale zatím sen.

Rychlost toho interpreteru je sice trochu pomalejší než přímý kód, ale není to tak strašné, každá pseudoinstrukce zabere kolem 1 us. Např. kousek skriptu pro odeslání bajtu na SPI:

SPISnd2:loadt 7 ; 1.0us get T flag from AL, bit 7 pinout SPI_MOSI,T ; 1.1us output to MOSI from T flag pinset SPI_SCK ; 0.9us start SCK clock signal wait BL ; 2..255 us delay 1 pintest SPI_MISO ; 1.0us input MISO to T flag pinres SPI_SCK ; 0.9us stop SCK clock signal wait BH ; 1..127 us delay 2 savet 7 ; 1.0us save T flag to AL, bit 7 rol AL ; 1.1us rotate AL left (bit 7 -> bit 0) dec HL ; 1.1us decrement loop counter jnz SPISnd2 ; 1.0/1.3us loop until counter is zero ret ; 1.2usVýhoda skriptu je, že nemusí být univerzální, zkompiluje se pro přesně daný typ MCU (např. čísla bitů portů) a díky tomu může být někdy i rychlejší než univerzální kód. A hlavní důvod, proč jsem to předělal na skript - ten může upravovat každý, aniž mění obsah procesoru, takže si může kdokoliv přidat neznámý obvod.

Lepší by byl ASM kód nahrávaný do RAM, ale to tenhle MCU neumí. ARMy nelze použít kvůli napájení - je potřeba 5V a výstupní proud desítky mA, což splňují asi jen ATmegy.

Rozumím. Já jsme to měl univerzální ve smyslu ovládání jednotlivých pinu a to bylo neůnosné. (totalni nouzovka)
Mě jde především o to při jakékoli změně už nic do mcu nevypalovat…
S x51 to jde udělat přes RAM celkem snadno… ale to ty víš. ARM jsem taky zvažoval ale přišlo mi to skoro trapný mít tam jen několik KB softu jako loader a zbytek třeba i 256KB prázdný (pravda jsou nějaký verze od NXP jen s RAM) Mimochodem stejně tam plánuju konverzní obvody na logickou úroveň takže nezáleží ja napájení a proudové zatížitelnosti mcu .

Ideální by bylo použít univerzální pin driver - ale ten se zdá být pro amatéry nedostupný. Např. programátor Batronix BX48 používá BATRONIX BxPinDriver A97484 (zřejmě zákaznický obvod) + ALTERA Cyclone III (zřejmě na přemapování pinů) batronix.com/shop/programmer/BX48/index.html (čipy jsou vidět dole na fotce).

Jiný zajímavý programátor, G540 z Číny, zjevně používá jako pin driver diskrétní součástky (tranzistory): mcu.cz/news.php?extend.1672 ). Původně jsem v první verzi programátoru tuto koncepci použil, ale asi 10 součástek na pin (z toho 3 tranzistory, 3 patra plošňáku) se zdála být zbytečně vysoká daň za luxus, když to lze udělat jednodušeji (většinou lze vystačit přímo s piny procesoru a jen výjimečně - pro 12V - přepnout jednu z propojek).

Batronix pěknej, to bude zakazník určitě. Jsem tak nějak dospěl k závěru že plnejch, plně ovladatelnech 40 pinů je v ama podminkách moc velkej luxus. Člověk by i něco koupil ale já osobně jen kdyby k tomu byla dokumtace abych mohl dopisovat věci co to neumí i po ukončení podpory.
Doma to nemám ale z práce ti sem můžu hodit odkaz na ty drivery co planujem použít, třeba zjednoduší život.
Plánujem 4piny_in 4piny_out logika 1V-5V a 1pin_Vystup napajeni a 1 pin_high_voltage 5-15V. To by snad mělo pokrýt všechno co budem v budounu potřebovat (tedy nic paralelního)

Dobrý obvod na konverzi logických úrovní.
74LVC1T45

To by vyšlo dost složitě a draho, 40 takových obvodů + posuvné registry pro řízení směru. A nepodporuje 12V.

No jo no :frowning:
Jestli najdeš něco co chodí v plným rozsahu 1.2-12V tak to by mě zajímalo taky.

:arrow_right: administrator: příspěvek byl upraven
Předchozí příspěvky se necitují.

To už jsem vzdal (příliš nákladné nebo příliš složité) a proto to řeším jednodušeji.

Doplňuji info k Univerzálnímu programátoru, který jsem tu otevřel před rokem.

S projektem jsem už z časových důvodů skončil (nestíhám vše co bych chtěl) - bohužel v nedokončené fázi. Pokročil jsem na tom celkem dost, ale k využití v praxi to zatím ještě nestačí. Potěšilo by mě, kdyby někdo ten projekt ještě nějak využil nebo dokonce pokračoval. V programátoru je možné nyní programovat procesory Atmel (sériově i paralelně 12V), na víc už se nedostalo. K dispozici je poměrně dobrý a rychlý interpreter skriptů.

panda38.sweb.cz/hw/PandaProg.html

Při té příležitosti bych rád doporučil ještě jeden projekt - osvětlení vánočního stromku s 320 LED. Dělal jsem ho minulý rok na Vánoce a možná by to mohl někdo využít. Nahraná videa nejsou moc kvalitní (můj foťák to nezvládal), skutečnost vypadala mnohem líp.

panda38.sweb.cz/hw/Xmas.html

ukázkové video na YouTube: youtube.com/watch?v=Vc0DMElMmiI
PandaProg.jpg
Xmas.jpg