:

 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.