:
25
maart 2009 : Het Eaglepakket met de layout verwijderd: er zat zelfs nog
een derde fout in :-(
Het goede nieuws: ik heb zelf een
layout gemaakt.
Het huidige schema / layout revisie niveau is rev 2 Klik HIER om er direkt heen te gaan
10
februari 2009 : Tips toegevoegd
om de PPPPD werkend te krijgen op een WindowsXP systeem
24
april 2008 : een bewerking van dit artikel zal worden
gepubliceerd in de Elektor-uitgave van juni 2008 (is inmiddels gebeurd)
Tevens heb ik een opmerking
toegevoegd voor hen die het gebruik van een
USB-naar-printerpoort-adapter overwegen: dat werkt namelijk niet :-(
: 11
april 2008 : ECN 2008/5 De filters in de ISP-lijnen
zijn
qua impedantie verlaagd. Dit om geen hinder te ondervinden
van
een schakeling die op het te programmeren board ook van deze ISP-lijnen
gebruik maakt.
: 18
maart 2008 : ECN 2008/1 De waarde van R8 (in de
basis van
de BC547) is teruggebracht van 10k naar 2k2. Reden:
het is gebleken dat de basisstroom te gering was bij een BC547 met een
lage versterking. Met de 2k2 zal dit probleem zich niet meer voordoen.
Met dank aan Niels (Allround)
: 5
februari 2008 : Kanda heeft een nieuwe versie van AVRISP
software
ge-released, en ...... beschikbaar gesteld voor VRIJE download. Dat is
erg goed nieuws voor hen die de PPPPD bouwen of reeds gebouwd hebben.
Als bonus is het ook nog eens als Plug-in in AVR-Studio te gebruiken.
Check it out en
download van http://www.kanda.com/avr-isp-software.html
Update januari 2008: pagine
toegevoegd met plaatjes
van mijn PPPPD < nee, geen typefout of stuiterende toets ;-)
> Dat staat voor Protected Parallel Port
Programming
Dongle. Of voor P p pipo en het p p pareldoosje :-)
De universele STK200/300 programmer, nogmaals
Het
toepassen van de schakeling
zoals hier is gepubliceerd, evenzo het al dan niet opvolgen van de
gegeven adviezen, is geheel voor risico van de lezer. Ik wijs iedere
verantwoordelijkheid op voorhand èn expliciet uit. Ook
vervolgschade behoort hiertoe.
Op
AVRfreaks.net kun je de volledige bespreking vinden (in het engels): http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=36591
Mijn
gebruikersnaam aldaar is Plons.
Om
te vermijden dat nieuwkomers in
de wondere wereld van AVR's de weg kwijt raken in zo'n lang draadje
(thread), heb ik besloten om het artikel te publiceren op mijn website:
waar je je nu bevindt.
In
de Elektor Halfgeleidergids 2007 stond
op bladzijde 80 de universele STK200/300 programmer voor
AVR-microcontrollers. Dit ontwerp kan in meerdere varianten op diverse
sites op het internet worden gevonden. Niet uit te roeien.
Het
is een
low-cost en eenvoudig
te bouwen programmer, die makkelijk is toe te passen bij gebruik van
BascomAVR, PonyProg, CodeVision en AVRdude. En sinds februari
2008 heeft Kanda een nieuwe versie van AVRISP software
ge-released, en ...... beschikbaar gesteld voor vrije download. Dat
is erg goed nieuws voor hen die de PPPPD bouwen of reeds gebouwd
hebben: http://www.kanda.com/avr-isp-software.html
Dit
artikel gaat over hoe deze
programmer veilig
gemaakt kan worden voor de PC, en betrouwbaar
voor
de gebruiker. Want dit ontwerp heeft al veel AVR-starters tot wanhoop
gedreven.
Het
oorspronkelijke ontwerp heeft twee tekortkomingen in het ontwerp, die
kunnen resulteren in:
-
frustrerende boodschappen voor
de gebruiker, zoals "does not recognize chip", of "ID = en dan wat
onzin", terwijl die gebruiker alles volgens de regels der kunst heeft
gedaan
-
een defekte parallelle poort op de PC (of erger).
Op
internet zijn wel goede tips te vinden hoor, zoals:
-
Reduceer de snelheid waarmee geprogrammeerd wordt
-
Zet in de BIOS van de PC de printerpoort op Enhanced Parallel Port of
Enhanced Control Port
-
Gebruik een afgeschermde printer-kabel van niet langer dan 1.80 m.
Waarmee
het allemaal begon ....
Toen
ik de STK200 kocht, werd die
geleverd met de programming dongle (PPPD van nu af) zoals hier
besproken. Werkte naar tevredenheid totdat de printerpoort van de PC
defekt raakte. Gelukkig kon ik terugvallen op een PCI-kaart die een
extra parallelle poort en twee seriële poorten toevoegt aan
het
systeem. Maar ik maakte me wel wat zorgen, en was er niet blij mee.
Maar goed, soms gaan dingen gewoon stuk.
Een
paar weken later had ik een
tweede programmer nodig, dus bouwde ik er één
zoals
gepubliceerd hier in Elektuur. Omdat ik een ander type ISP-connector
wilde gebruiken, nam ik die wijziging gelijk maar even mee. Ik checkte
m'n werk zorgvuldig, en alles was okay. Aangesloten, inmiddels wat
voorzichtiger geworden, geen rook, maar ook niet werken ! Wat zou dat
toch kunnen zijn?, zo vroeg ik me af. Enfin, het projekt moest door,
dus even een adapter-kabeltje gemaakt voor de Kanda-programmer, en
klaar is Kees. Nou, nada, noppes niente. Kan een andere connector de
reden zijn hiervoor? Blijkbaar wel.
Een
zoektocht op forums leverde
wel wat waardevolle tips op (zie hier boven), maar desondanks: niet
werken. Ik gebruik namelijk die afgeschermde kabel, een lagere
programmeersnelheid, en de BIOS staat goed ingesteld.
Dit
moest maar eens voor
ééns en altijd goed uitgezocht worden. Dus mouwen
opgestroopt, en aan de gang. Op het ontwerp is niet veel aan te merken.
Een 74HC244 buffer, die de signalen doorgefft tijdens het programmeren,
en daarna in tri-state gaat. Dat heeft de ontwerper goed gedaan, vind
ik.
V.
Maar wat maakt deze PPPD dan toch zo onbetrouwbaar ?
A.
Lange lijnen, makkers ! De
ribbon-cable tussen dongle en target-board is een transmissielijn. Denk
even aan de heren Fourier en LaPlace. Met dank aan de leraren die me
dit allemaal hebben bijgebracht. De combinatie van een hoge slew-rate
(dat is, in goed nederlands, de flanksteilheid) met de in vergelijking
lange kabel, zorgde voor dit onbetrouwbare gedrag. Want toen ik de
scope aansloot op de SCK-lijn aan de kant van het target-board, en de
"programmeert u maar even"-knop aanklikte, was het al snel duidelijk:
RINGING, oftewel uitdempende oscillatie. Deze trad telkens op wanneer
het SCK-signaal schakelde van hoog naar laag, en vice versa.
V.
Wat gebeurt er in dat geval?
A.
De AVR op het target-board
raakt uit synchronisatie: het uitslingeren van de SCK-lijn leidt tot
het zien van meerdere SCK-flanken terwijl er maar
één is.
Hoe
lossen we dat nu op? De
oorzaak ligt bij de hoge frequenties die horen bij die hoge
flanksteilheid. Als we die nou eens eruit konden halen ..... juist: een
laag doorlaat filter toepassen. Een weerstand van 220 ohm en een
condensator van 470 pF. Dat is al voldoende. Samen zorgen zij met een
Tau van 100 ns er voor dat de flanksteilheid nooit groter kan worden
dan 50V/us. Dit filter toegepast in de originele Kanda-dongle: werkt,
nu met beide kabels. Zelfde filter in de tweede dongle: werkt ook ....
nog even testen op een andere PC, en ja hoor: dik voor mekaar.
Op
naar het tweede probleem.
V.
Was de dongle verantwoordelijk voor het ter ziele gaan van de PP ?
A.
Ik ga voor vrijspraak, ondanks
de ingebrachte bewijslast. Het was namelijk m'n eigen schuld. Want PP
zijn niet hot-pluggable, en daar had ik rekening mee moeten houden.
Maar het was wel degelijk de dongle die de PP de das om heeft gedaan.
Want hij was de enige verdachte ter plaatse. In- en uitpluggen, was dat
de oorzaak dan? Misschien ook. Want, stel je het volgende eens voor: PC
staat uit, je nieuwste creatie met een AVR hangt nog steeds aan de
dongle. Je komt de volgende dag binnen en start je creatie op.
Dàn gaat het fout! De dongle wordt namelijk gevoed door je
nieuwe creatie, en de PC staat nog steeds uit. De enable-lijnen van de
HC244 staan dus ..... laag! Dus de buffer probeert de /Ack-lijn van de
PP op te trekken naar 5V. En zo'n 74HC244 trekt hard: guaranteed
output-current 25 mA vertelt de datasheet. Nou, reken maar op z'n minst
het dubbele. En *die* stroom vernielt de PP.
Een
stukje historie. In het
oorspronkelijke ontwerp van IBM werd de PP gerealiseerd met een 74LS374
voor de data, en een 74LS244 voor de andere lijnen. Om die poort om te
leggen moest je met grof geschut komen. En *als* het dan al fout ging,
verving je gewoon het betreffende IC. Tegenwoordig wordt de PP (als die
überhaupt nog op nieuwe PC's te vinden is) door een ASIC
gerealiseerd. En die is niet zo degelijk als de illustere voorganger.
Om
dit probleem op te lossen,
krijgt de /Ack-lijn een speciale behandeling. Ook al omdat niet alle
ASIC's gelijk zijn. Ik ben pull-up's tegen gekomen van 1k8 tot wel 10k.
Door transistor Q1 op de wellicht wat vreemd aandoende wijze te
schakelen bereiken we twee doelen: er kan nooit stroom de /Ack-lijn
invloeien, en wanneer pin 9 van de 74HC244 laag gaat, wordt de
/Ack-lijn keurig meegenomen. De 10k weerstanden rondom Q1 zorgen voor
deze werkwijze.
De
overige lijnen van de PPPD op
de 25p D-connector zijn òf ingangen van de 74HC244,
òf
doorverbindingen. Voor al deze pinnen is een weerstand voldoende
beveiliging.
Daarmee
is het tweede probleem ook opgelost.
Nog
even wat meer overwegingen ...
V.
Moeten de lijnen MISO en MOSI ook zo'n filter hebben ?
A.
Nee. De ringing op deze lijnen
(en die is er!), is al uitgedempt wanneer SCK de data inklokt. Maar
omdat we toch bezig zijn, voegen we het filter op deze lijnen tevens
toe.
V.
Is dit nu de uiteindelijke oplossing?
A.
Hangt er van af hoe je het
bekijkt. Het toevoegen van een analoog filter aan een digitaal
klok-signaal is iets wat je als ontwerper liever vermijdt. Maar in dit
geval is het een adequate en simpele oplossing, die werkt zonder dat
het veel uitmaakt wat voor kabel je gebruikt (binnen grenzen der
redelijkheid). Het resulteert niet in een lagere programmeersnelheid
omdat alle software die in dit artikel genoemd wordt de
bit-banging-methode gebruikt. En de snelheid daarvan is vele malen
lager dan de 2 Mbit/s die dit filter inbrengt. En wanneer dit filter
glitches zou moeten wegfilteren als gevolg van een beroerd ontwerp, zou
ik zeker niet voor deze oplossing gekozen hebben. Dat soort kunst- en
vliegwerk is een nachtmerrie voor iedere zichzelf respecterende
ontwerper.
V.
Is "ringing" bij andere programmers ook een aandachtspunt?
A.
Ja. Als er hoge slewrates
gebruikt worden bij relatief lange kabels, zal het probleem wat hier
gesignaleerd is, ook optreden. En in vroeger tijd wisten de ingenieurs
dat al. Kijk maar eens naar de RS232-specificatie. Daarin werd al
aangegeven dat, om aan de specificatie te voldoen, de slewrate beperkt
moest worden. Nemen we de seriële programmer van
PonyProg,
de SI-PROG, onder de loep, dan zien we dat daarover geen klachten zijn
over onbetrouwbaarheid.
Tot
slot nog een aantal suggesties en aanbevelingen.
1.
Zelfs met de Protected PPPD is
het niet aan te bevelen om deze onder spanning in- en uit te pluggen.
De PP is nog steeds geen hot-pluggable interface. Maar als je het toch
wil doen, zorg dan dat bij het inpluggen eerst de metalen rand van de
D-connector contact maakt met de behuizing van de PC. Daarmee wordt
eventuele statische lading afgevoerd vóórdat de
pinnen
contact maken.
2.
Teneinde deze dongle
betrouwbaar te laten werken, dient de voedingsspanning van de AVR 5V
bedragen. En als het goed gaat met 3.3V, zie dat dan als bonus. Er is
namelijk niet voorzien in level-aanpassingen.
3.
Wanneer je het STK200-board als
target gebruikt, en de AVR op de STK200 op 3.3V werkt, gaat dat wel
probleemloos, maar dat is aan de STK200 te danken.
4.
Als je de programmeerkabel uit het target-AVR-board neemt, schakel dan
eerst de voedingsspanning uit.
5.
Laat de dongle gewoon aan de PC
aangesloten zitten. Het is nu niet meer nodig om deze te verwijderen
voordat de PC wordt uitgeschakeld.
6.
Als je een verlengkabel gebruikt voor de PP, neem er dan
één met afscherming.
7.
Controleer in de BIOS of de PP als EPP of ECP staat ingesteld. Staat ie
als SPP, dan werkt het gegarandeerd niet.
8.
Wees je er van bewust dat in
het oorspronkelijke ontwerp van de STK200-dongle, de IDC-connector 180
graden gedraaid is. Met als gevolg dat pin 1 aan de ene kant niet meer
pin 1 is aan de andere kant. Dus controleer de verbindingen goed
voordat je de dongle aansluit.
De
kosten:
Voor
het implementeren van al deze
maatregelen, heb je een handje weerstanden, 3 condensatoren en een
transistor nodig. Me dunkt een erg lage prijs, wanneer je dat afzet
tegen de mogelijke kosten van een defekt moederboard, of de frustratie
van urenlang vruchteloos zoeken.
Soms
zijn oplossingen zóóó simpel .... voor
zulke complexe problemen.
Cheers.
Links:
http://www.lancos.com/prog.html
PonyProg website
http://savannah.nongnu.org/projects/avrdude/
voor de laatste versie van AVRdude te downloaden
http://www.atmel.com/dyn/products/tools.asp?family_id=607;
hier kun je AVR-Studio, een fraaie ontwikkel-omgeving voor de
AVR-familie microcontrollers kostenloos downloaden.
http://www.mcselec.com/
voor BascomAVR. De demoversie, die alleen begrensd is tot 4 kb
gecompileerde code, maar verder volledig functioneel is, kun je hier
downloaden.
http://www.expresspcb.com/ voor het
tekenprogramma
http://www.kanda.com/avr-isp-software.html voor
het AVRISP-programma dat in AVR-Studio als plug-in te gebruiken is
Credits:
Ik
heb geprobeerd te achterhalen
wie de oorspronkelijke ontwerper is van deze dongle. Er zijn echter
zoveel sites te vinden waar deze dongle in besproken wordt, dat het
onbegonnen werk is. Ik wil echter wel van de gelegenheid gebruik maken
deze ontwerper te bedanken voor zijn creatie.
De Protected Parallel Port Programming Dongle in volle glorie:
Het schema is getekend met ExpressSch. Je kunt het programma vinden op mijn Tools-pagina
De
.sch-file van de PPPPD rev 2 (die je met ExpressSch kunt bewerken) staat hier
En de .png staat hieronder: rechter muisknop, opslaan als etc.
Ziet ie er ook gelijk beter uit :-)
25 maart 2009 De layout
De Eagle layout heb ik wegens de fouten van de website verwijderd.
Maar niet getreurd: er is een nieuwe layout beschikbaar. Vers van de ontwerptafel, dubbel gecheckt maar nog NOOIT gebouwd.
De layout is gemaakt met SprintLayout5.0. De Viewer van dit programma kun je vinden op mijn Tools-pagina
Instructies aldaar. De layout-file staat hier
Als impressie :
Ik heb de waarde van de componenten aangegeven in de layout en hanteer
daarbij het systeem van <cijfer> <cijfer> <aantal
nullen>
331 staat voor 330 Ohm of 330 pF, 104 staat voor 100 kOhm of 100 nF (100 kilo pico Farad)
560 staat dus voor ..... 56 Ohm en NIET 560 Ohm
De layout is enkelzijdig, met (maar) één bruggetje: de 0R weerstand.
Er zijn dikke sporen en pads toegepast zodat het
ontwerp vergevensgezind is t.a.v. over-belichting, onder-etsen en
boorgemak. Aan alles is gedacht :-)
Er is tevens van de gelegenheid gebruik gemaakt een Power-led (groen)
toe te voegen. De stroom door de leds is teruggebracht, en zelfs nu
komt er nog genoeg licht uit.
Wil je een berichtje sturen ? Doe dat dan aan: de vijf letters waar
zelfs een niet-stotteraar z'n tong over breekt, gevolgd door de
apenkrul die je in ieder emailadres vindt, en dan de domeinnaam die NU
in de adresbalk van de browser staat. Deze enigszins omslachtige
methode is noodzakelijk vanwege de vele spam.
Aha, en voor hen die een paralle poort van een PCI-kaart gebruiken:
de volgende plaatjes kunnen je misschien helpen om de zaken correct in
te stellen.
Het toepassen
van een USB-naar-printerpoort-adapter werkt overigens niet !!
Deze adapters creëren een vrtuele printerpoort op je PC, maar
je
zult 'm niet terugvinden onder "Poorten (COM & LPT) " in
Apparaatbeheer. En het zal daarom niet bruikbaar zijn voor de PPPD.
Tips
om de PPPPD werkend te krijgen op een WindowsXP systeem
Als je de PPPPD-hardware gecheckt hebt, maar het nog steeds
niet
wil lukken, zijn hier nog een aantal dingen die je kunt proberen:
- Zoek naar giveio.sys op je PC; staat waarschijnlijk
in
C:/Windows/System32 ; dit bestand is nodig om toegang te krijgen to de
IO-port.
Dit bestand vind je ook in de WinAVR-package. Om toegang tot de poort te
krijgen, run install_giveio.bat
vanuit winavr\bin (in windows); deze batch-file laadt de driver.
Batchfile en giveio.sys vind je ook in dit gezipt pakketje Met dank aan Fabiar !
-
Nog geen succes ? Doe dan dit: installeer een printer, zoals
de HP
Laserjet 4500. Dat is een parallel port
printer. Nee, je hoeft de printer niet echt te hebben, we willen alleen
de driver geïnstalleerd hebben. WinXP doet dat zonder dat je
er
een CD voor nodig hebt. Voer gewoon de "Voeg een printer toe
..."
-wizard uit; Je krijgt een enorme lijst van merken en types te
zien. Selecteer de HP Laserjet 4500,
Windows doet z'n werk, en natuurlijk selekteer je deze printer NIET als
default printer, en NEE, we willen geen Test-pagina afdrukken. (echt
waar: ik heb daar vragen over gehad :-S )
Nog steeds geen Hoeraaaa-schreeuw ???
- Pak dan de RegistryFix
uit,
lees de readme, en voer de registerwijziging door (dit kan ook weer
ongedaan gemaakt worden, maar maak voor de zekerheid
een "Herstelpunt", .... hou het veilig)
Deze RegFix komt van de Kanda-site, maar is daar niet zo makkelijk te
vinden.
Achtergrond info: vanaf SP2 checkt WinXP regelmatig de
Parallelle
Port , om te zien of er een printer is aangesloten. En die check zit
ons gebruik van de PP erg in de weg. De registerwijziging zorgt ervoor
dat er alleen nog gedurende de power-on cycle naar de PP gekeken wordt.
- Heb je tot nu toe PonyProg gebruikt, en nog steeds geen succes ?
Probeer eens avrdude. Kun je vinden in de WinAVR-package.
Lees
wel de gebruikershandleiding door !
- Bascom gebruiker ? Kijk ook eens in de Help. And run Setupio.exe dat
je kunt vinden in de Bascom-folder.
Krijg je de PPPPD nog steeds niet werkend ? Mats jezelf, en
koop gewoon een AVRISP. http://www.kanda.com/avr-programmer-support.php3
bijvoorbeeld
Of deze: http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=104&category_id=3&option=com_phpshop&Itemid=1
Geen geld om er één te kopen ? Bouw dan de
seriële versie van de PonyProg programmer ( zie www.lancos.com
). Wanneer je geen fouten in de bouw maakt, werkt die bijna altijd. Hij
is wel een stuk langzamer hoor. Maar ja, alles heeft z'n prijs.
Of weet je niet van opgeven, en MOET de PPPPD gaan werken ?
Download dan deze twee: ParPortViewer
readme en ParallelPortViewer
Nu kun je gaan debuggen. Controleer wel als eerste of de PP van je PC
nog in orde is. En DAN pas de PPPPD eraan hangen.