Když jsem uviděl v AR (Amatérském Rádiu) 3/99 konstrukci „Emulační adaptér i51“ ihned se mi zalíbila. Adaptér je vhodný pro výuku a vývoj na jednočipových počítačích řady 51 v pouzdře DIL40. Lze s ním totiž naprogramovat ISP procesor přímo v zapojení bez nutnosti vyjímat IO. Cenově je zařízení velmi přístupné.
Bohužel jsem však netušil , co mě čeká a na základě nabídky v AR jsem si
objednal plošné spoje u firmy J.M. – stavebnice. Následovalo dlouhé
čekání. Ani po několika urgencích jsem nedostal žádnou odpověď. Tu jsem nedostal dodnes
a velké celostránkové inzeráty firmy JM z Amatérského radia zmizely ( ? )
[platí dodnes - červenec 2000]. Nakonec jsem plošné spoje i ovládací program
získal přímo od autora konstrukce, podepisovaného jako Kosťa.
Vzhledem k jednoduchosti zapojení jsem se domníval, že s ním nebudou žádné problémy. Již po prvních zkouškách se ukázalo, že zapojení nefunguje tak, jak má. Ba dokonce, že je bohužel zcela nepoužitelné. Zjistil jsem, že program se do procesoru nahraje pouze poprvé a dále procesor přestane komunikovat. Konzultoval jsem závadu s autorem a ten mi sdělil, že se s tímto problémem nesetkal a jemu že zařízení funguje. Ani zkoušky několika procesorů na několika různých počítačích a nepřinesly nic nového. Nezbývalo tedy, než problém vyřešit.
Poznámka redakce HW serveru :
Zde je nutné podotknout, že autor tohoto příspěvku používá ISP (In System
Programming) rozhraní emulované pomocí paralelního portu. Rozhraní je tedy
tvořeno pouze přímo použitýmy výstupy z paralelního portu. V takovéto konstrukci
samozřejmě velmi záleží na tom, jaký máte paraelní port. Proto se může
výsledné zapojení s různými porty chovat různě.
HW server proto doporučuje používat ISP z převodníku RS232/ISP, kde
jsou výstupní úrovně genetovány přímo jiným procesorem. - viz. konstrukce
programátoru na AVR.HW.cz
Po důkladném prostudování veškeré možné dokumentace jsem na www
stránkách výrobce Atmel
objevil malý dokument „AT89S/LS8252, AT89S/LS53 Errata Sheet“. Zde se
píše , že pokud komunikace při programování neproběhne správně, dojde k
zablokování procesoru a ISP přestane pracovat. Jediný způsob jak procesor
„opravit“ je smazat jej v programovacím přístroji ale s paralelním přístupem
!!!
S podobným problémem jsem se setkal již u obvodů AT90S1200. Ty ale přestávaly komunikovat až po
několika desítkách naprogramování.
Dalších mnoho pokusů stále nevedlo k vyřešení problému. Domníval jsem se , že je chyba v ovládacím programu. Ten totiž komunikoval s obvodem pouze jednosměrně a neprováděl při zápisu verifikaci. Program jsem tedy několikrát přepracoval a stále nedošlo ke zlepšení. I když se již do obvodu dařilo zapisovat krátké soubory, stále byla komunikace s obvodem velmi nespolehlivá. Úspěšnost zápisu byla tak asi 30% a to jen pro krátké soubory. Při pokusu a zápis delšího souboru vždy došlo k zablokování obvodu.
Zapojení jsem v zoufalství postupně zredukoval jen na připojovací vodiče a procesor a
situace se výrazně zlepšila. V „Errata sheet“ se totiž ještě píše o
jakémsi hazardu, který může vzniknout na pinu SCK při přechodu do ISP módu. Po několika
desítkách dalších pokusů se vše vyjasnilo. Zjistil jsem, že programovaný
procesor je extrémně závislý na strmosti hran signálu SCK. (Později jsem tuto drobnou
poznámku objevil v jednom z popisů programátorů stažených z internetu). Ukázalo se, že
hrana musí mít strmost alespoň 10 ns ! To ale ještě není zárukou
spolehlivé činnosti. V první fázi jsem zařadil tvarovací obvody 74HC14 do signálu
SCK. Pokud nebyl zapojen analogový multiplexer 4053, zapojení fungovalo spolehlivě. S
multiplexerem však zapojení nadále nefungovalo i když jsem jej vyměnil za rychlý typ
HC(T)4053 a na osciloskopu nebylo patrné žádné zkreslení signálu po průchodu
multiplexerem, spolehlivost programování byla opět nízká. Pravděpodobně je tedy
ještě nutné, aby signál SCK byl buzen ze zdroje signálu s velmi nízkou
impedancí.
Nakonec jsem použil pro signál SCK linkový budič 74HC(T)126 s třístavovým výstupem. Ten je připojen přímo na vývod procesoru SCK bez multiplexeru (viz moje poupravené schéma) a funkce je zcela bezproblémová. Obvod jsem umístil na malou universální destičku před desku simulátoru.
Po získaných zkušenostech doporučuji odpojit oproti původně zveřejněnému schématu resetovací kondenzátor C1 a také případně odpojit RESET z emulační patice. To znamemná nepřipojit uvnitř redukce vodič od pinu 9, kterým resetuje laděná aplikace procesor. Musíte pak sice redukci resetovat ručně a neodladíte plně funkce zařízení, ale reset spolehlivě funguje a nezničíte si externím zásahem případně složitý resetovací obvod v aplikaci. Ideálním řešením by samozřejmě bylo přepínat i resetovací vodič, pomocí multiplexeru..
Kapacity připojené k RESETu způsobují zpomalení hrany signálu reset a vzhledem k možným rozdílům v rozhodovacích úrovní procesoru a obvodu 4053 může docházet k hazardním stavům a tím chybné funkci. Odstraní se tím také možnost kolize LPT portu při připojení do desky s jiným zapojením resetu.
Po těchto úpravách již procesor „přežil“ několik set přeprogramování,
přičemž nedošlo ani jednou k zablokování procesoru. Všechny úpravy doporučuji i
pro další zapojení v AR3/99 s názvem „Universální deska pro
vývoj aplikací s procesory MCS-51“.
Software pro ISP přímo na paraelním portu
Doporučuji použití freeware ovládacího programu ISPDOS. Zapojení kabelu je uvedeno
v dokumentaci ( je náhodou shodné s publikovaným v AR ) . Původně jsem si chtěl napsat
nový ovládací program sám . Když jsem objevil a
odzkoušel již hotový ISPDOS ( autor Wagner Lipnharski ), tvořit znovu
ovládací program by byla zbytečná práce. Program mi plně vyhovuje a se
svojí dnes již nevídanou délkou 3,6 k umí vše potřebné pro dobrou
práci s ISP (dokonce obsahuje i schéma připojení ).
Program provádí verifikaci již v průběhu programování, umožňuje i práci s EEPROM pamětí. Pracuje i na rychlejších počítačích ( původní program z AR v Pascalu již bez úpravy nefunguje ) a je možno rychlost komunikace korigovat dle potřeby a podle použitého hodinového kmitočtu procesoru v zapojení.
Zapojení kabelu přímo - bez osazené redukce :
+----------------+-----------------+-------+------+-------+ | PC LPTx DB25 | AT89S8252 PINS | DIP40 | PLCC | xQFP | +----------------+-----------------+-------+------+-------+ | 10 ACK -------<----- P1.6 MISO | 7 | 8 | 2 | | 8 D6 ------->----- P1.7 SCK | 8 | 9 | 3 | | 7 D5 ------->----- P1.5 MOSI | 6 | 7 | 1 | | 6 D4 ------->----- RESET | 9 | 10 | 4 | | 25 GROUND ---------- GROUND | 20 | 22 | 16 | +----------------------------------+-------+------+-------| | Note: At89s8252 SPI needs sharp edges at SCK pin. Some | | PC parallel cards has high capacitance at the output | | pins requiring a 72HCT14 to rebuild those pulses: | | &nb sp;   ; | | &nb sp; .---- 74HCT14 ----. | | &nb sp; | | | | 10 ACK -------10 11-----12 13------P1.6 MISO | | 8 D6 ---------1 2---@---3 4---@---P1.7 SCK | | 7 D5 ---------9 8-------5 6-------P1.5 MOSI | | &nb sp;   ; | | Connect a 1nF cap from (@) to ground. | +---------------------------------------------------------+ |
Poznámka : Program však přistupuje přímo na paraelní port, takže samozřejmě nebude fungovat pod WINDOWS NT a WIN 2000. Problémem může samozřejmě být také použitý paraelní port.
DOWNLOAD
ISPDOS - ispdos.zip (17 kb)