Forum: Mikrocontroller und Digitale Elektronik AVR-Programmierung über LPT nicht möglich


von Hans-jürgen G. (gebi)


Angehängte Dateien:

Lesenswert?

Hallo,

µC-Board:
ATiny2313 und einem 4053 zum exakten Umschalten zwischen ISP oder Port
B.
Ein 8MHz-Quarz ist angeschlossen, aber im Auslieferungszustand ist der
interne Oszillator gesetzt.
Abblock-Kondensatoren sind auch an allen ICs.
(Schaltung >Anlage)

Programmieradapter:       Eigenbau-STK200
                          (Schaltung >Anlage)
                          LPT-Kabel: 1,5m lang   /  ISP-Kabel 15cm
lang
Programmiersoftware:      avrdude (V5) und Ponyprog 2000 (V2.04 und
V2.05a)
Betriebssystem:           WIN2000 als Admin
                     (sonst kann avrdude den givio-Treiber nicht
laden)
LPT:                                EPP
Einstellung:               avrdude:  STK200 , LPT1
                          Ponyprog:   Kalibriert nach dem Start,
                                       LPT1 , AVR-ISP I/O
                        (Der Test ist hier auch ohne µC erfolgreich?!)


Fehler:   Ponyprog   "Device not found (-24)"

Gestartet mit avrdude-gui:
           avrdude      "avrdude: device not responding
                        "avrdude: initialization failed, rc=-1"

Fehlersuche:
Mit Drähten manuell angelegten Signalen am Programmer sind keine Fehler
zu finden.
Mit dem Oszi kann man wegen der kurzen Zeit keine Signale genau
erkennen.
Aber mit LEDs und Treibern zeigt \Reset = 0  , SCK und MISO blinken
schnell.

Ausweichversuch:
Nach  www.speedy-bl.com   habe ich den "Pinwackler" Sercon aufgebaut
(Sercon1.pdf). Es ist ein Pegelwandler.
Mit der dazugehörigen Software at-prog.exe kann ich den µC brennen.


Fazit:    Das µC-Bord funktioniert!

Ziel:
Da ich mit WINAVR bzw. perspektivisch mit Eclipse arbeiten möchte, soll
sich die erzeugt hex-Datei direkt zum µC übertragen lassen und nicht
über den Umweg eines anderen Programms.

Frage:
Wo liegt der Fehler?
Wie ist GND zu verbinden? Mein STK200 ist mit GND an die
Stromversorgung angeschlossen, aber das ISP-Kabel  verbindet GND
nochmals. Also wo?
Wie lang dürfen LPT-Kabel und ISP-Kabel sein?  Den 4053 vom µC-Board
wollte ich wenig belasten. Darum ist das ISP-Kabel kurz und das
LPT-Kabel lang. Es ist ja zum Drucker auch 1,5m lang.
Die Timing-Parameter lassen sich in avrdude.conf für jeden µC
einstellen.
Ist der kommerzielle Programmierdapter AVR-ISP mk2 (USB) gut?

Viele Grüße
       Hans-Jürgen

von Michael U. (Gast)


Lesenswert?

Hallo,

ich habe mir nicht alles angesehen, trotzdem etwas persöhnliche
Meinung:

ich benutze das STK200-Dongle am Parallelport unter Win2000 mit
PonyProg v2.06f (ja, auch als Admin...).

Meine Erfahrung: Kabel zwischen Parallelport und Programmer: nein!
ISP-Kabel zwischen Programmer und Board: 1m Flachbandkabel (das ist die
Original-Version von meinem STK200).

Verlängern auf der Parallelportseite NUR mit Versuch und Irrtum. Will
damit sagen: wenn der Programmer an einem Rechner absolut stabil geht,
kann man ein Verlängerungskabel dazwischen stecken und schauen, ob noch
irgendwas geht. Hängt sehr stark vom Kabeltyp und dem Mainboard ab.
ISP-Kabel genauso, da setzen der AVR, der Boardaufbau und die Störungen
in der Umgebung das Limit.

An meinen Boards baue ich eigentlich nie was in die ISP-Leitungen, es
hängt letztlich ja nur davon ab. was man sonst mit den Pins macht. Sind
sie Ausgänge ist es die Frage, was die angeschlossenen Bauteile mit den
Programmierimpulsen machen. Wenn die sowieso wegen CS = 1 nicht
angesprochen werden (LCD-Display, MMC-Card, ???) ist es egal.
Relais-Treiber lege ich nicht an diese Pins und Taster, die gegen GND
mit internen PullUp schalten, stören auch nicht, wenn man nicht gerade
beim Programmieren draufdrückt.

Reset liegt bei mir (gewohnheitsmäßig) über 100n an GND und am ISP.
Den 244 stört der 100n nicht, 3 Gatter parallel eines Bustreibers
können das.

Das STK-Dongle stört auch den Rest der Schaltung nicht, solange
PonyProg aktiv ist und den Port initialisiert hat (ich schicke nach dem
Start immer einen Reset mit PonyProg, dann ist steht der Port richtig.

Der Adapter stört hier auch im Moment in keiner Weise, selbst ein
ENC28J60 mit 3,3V am ISP mit 8MHz Takt wird durch den angeschlossenen
Dongle nicht gestört.

Ich finde, nur soviel Aufwand wie nötig und einfach überdenken, was mit
der Peripherie passieren kann, wenn programmiert wird.

Probleme gibt es nur, wenn Windows startet und am Port "rumspielt".
Das gibt dann ein paar Resets auf dem AVR-Board.

Gruß aus Berlin
Michael

von Thomas O. (Gast)


Lesenswert?

ich finde es gibt nichts besseres als den ATMEL AVRISP habe nur den
seriellen aber damit gibt es keinerlei Probleme selbst mit nem längeren
serielen Kabel nicht. Außerdem treten damit auch nicht so Sachen auf das
man sich vom µC aussperrt was bei Ponyprog, Chipblaster AVR... gerne mal
passiert ohne das man an den Fuses oder Lockbits was verstellt hat.

Dein Schaltplan ist etwas unübersichtlich, hast du da nen
Resetbeschaltung drin. Aber bitte nicht am Tutorial hier orientieren,
da sind einige Fehler in den Werten statt pF soll es nF sein und statt
10k sollte man eher 4,7k nehmen.

Auch braucht man keine Umschaltung für die Programmierung wird durch
den Reset ja alles erledigt.

von Johannes A. (Gast)


Lesenswert?

Hans-Jürgen,

also erstmal braucht der Pin 13 von IC3B unbedingt noch einen Pullup.
Ohne den wirst Du mit dem STK200-Adapter nicht glücklich, weil der im
inaktiven Zustand seine Ausgänge hochohmig schaltet - kommt zumindest
bei PonyProg auch während des Prog-Zyklus vor, avrdude kenne ich nicht
näher - und der dann floatende HC-Eingang "krauses Zeug" an den AVR
weitergibt oder wenigstens nicht akkurat dem externen Resetsignal
folgt. Mit Sercon-Interface ist dieser Pullup zwar vorhanden (R1), aber
nur solange es angesteckt ist. Im schlimmsten Fall kann ein floatender
CMOS-Eingang übrigens seinen Chip killen...

Und dann muss man für den STK200-Adapter unbedingt alle Masseadern des
10pol Kabels am Target anschließen, weil der 244 als Bustreiber sehr
"knackige" Signale auf das Kabel gibt, die sonst übersprechen oder
(mangels Wellenwiderstandsanpassung am Ende) heftig "klingeln"
können.
Das Problem tritt mit der "Sellerie" (seriellen Schnitte) normal
nicht auf, weil dort die Signale sowieso immer Slew-Rate-begrenzt
sind...

Im übrigen verstehe ich zweierlei nicht:
a) warum Du Dir mit dem 5er statt dem 6pol (Atmel) oder 10pol (Kanda)
ISP-Anschluss am Target die Speisung des STK200-Adapters aus der
Target-Versorgung grundsätzlich verbaut hast, und
b) warum Du als Ausweichversuch noch eine dritte Lösung mit noch einer
anderen Software zu Rate gezogen hast, statt das noch viel einfachere
PonyProg-SI nachzubauen, das bei lancos.com frei "herumliegt".

Zum Schluss noch eine Anmerkung aus der Praxis: Wenn schon ein externer
Reset vorgesehen ist, sollte immer auch ein externer Pullup zumindest
für SCK vorhanden sein, um den Controller unter allen Umständen daran
zu hindern, während des Reset versehentlich auf Programmiermodus zu
erkennen.

Gruß Johannes

von Michael U. (Gast)


Lesenswert?

Hallo,

@Johannes A.:
du hast Dir seine Sachen merklich genauer angeschaut als ich...

Probleme mit dem STK200-Dongle hatte in der von Dir beschriebenen Art
allerdings noch nie (PullUp). Das Original hat keinen und meine 2
Nachbauten auch nicht. Was das Kabel angeht, kann ich Dir aber nur
zustimmen. Ich nehme da sowieso schon aus Bequemlichkeit immer 10pol.
Flachband und 2x Schneidklemm und beschalte auch die Stiftleisten voll.
So ist mir das vermutlich einfach noch nie passiert.

Zu externem Reset: ich baue nie sowas ran, habe ich bei AVR noch nie
als nötig angesehen. Wenn er am ISP hängt, gibt es Reset aus dem
Ponyprog-Menü, sonst Spannung kurz wegschalten.
Das hat für mich auch den Vorteil, daß alles neu initialisiert wird.
Ist mir mehr als einmal passiert, daß ich noch schnell was geändert
habe, kurz Reset, alles ok. Am nächsten Tag alles wieder an zum
weitermachen und... nichts geht mehr...
Naja, ich hatte mit meiner Änderung die Display-Initialisierung
versaut, das störte nicht weiter, solange es initialisiert war und ich
nur den Atmel zurückgesetzt habe.

Gruß aus Berlin
Michael


Gruß aus Berlin
Michael

von Johannes A. (Gast)


Lesenswert?

@Michael
Zum 10pol Anschluss hast Du vollkommen Recht. Ob aus Bequemlichkeit
oder sonst einem Grund - "nach Vorschrift" verdrahtet und mit 10k
Pullups ist das Teil einfach gnadenlos zuverlässig. Sowohl mit dem
STK200- als auch mit dem PonyProg-SI-Adapter.

Ansonsten, was den externen Reset angeht, hast Du wohl nie das EEPROM
eines AVR ohne Brown-Out-Reset benutzt :-)

Gruß Johannes

von Thomas O. (Gast)


Lesenswert?

10kOhm ist aber bezüglich von Störungen nicht das Gelbe vom Ei selbst
Atmel schreibt in einigen AN's 4,7kOhm und 47nF und eine Diode gegen
VCC als Resetbeschaltung(wenn keine High Voltage Programmierung zum
Einsatz kommt). Im Tutorial wird hier allerdings von 10k und 47p
geschrieben, dieser Filter hat aber eine sehr hohe Grenzfrequenz.

5 V / 4700 Ohm = 1mA und das sollte durch den Programmieradapter doch
sauber runtergezogen werden können.

von Michael U. (Gast)


Lesenswert?

Hallo,

die Geschichte mit der Diode ist eigentlich schon eine komplette
PowerOn-Spar-Resetbeschaltung. Die Diode soll nur das C bei
Spannungsausfall schnell entladen, damit es wieder einen sauberen Reset
gibt. Allerdings waren da früher eher 1-4,7µ üblich als 47n.

Die 47p im Tutorial sind ein Tippfehler, den niemand korrgiert.
Oder ein Test, ob die Leute ins Datenblatt schauen. ;)

Ich beschalte aktuelle AVR (also mit internem PowerOn-Reset) nur mit
100n gegen Masse und überlasse den Rest dem internen PullUp. In
verseuchten Umgebungen sind sicher 4,7k ein guter Wert.
Mit den 100n hatte ein STK200-Dongle auch noch nie Probleme, sind 3
Treibergatter parallel, die können das schon...

Gruß aus Berlin
Michael

von Johannes A. (Gast)


Lesenswert?

Also ich habe nie irgendeinen C am Reset-Pin gehabt und bei
inzwischen >5000 "verbratenen" AVRs nie irgendwelche Nachteile
davon erfahren. Selbst mit dem "Ur-AVR" AT90S1200 nicht. Aber
woher auch, wo die Reset-Schwelle bei den AVRs eh kein fester
Wert ist wie bei etlichen Nicht-AVRs, sondern von jeher immer
als Bruchteil der Vcc definiert ist.

Ansonsten vertraue ich heute wo irgend möglich meine Anwendungen
dem Brown-Out-Reset der moderneren AVRs an, mit der typischerweise
empfohlenen minimalen Reset-Startup-Time, und gebe der Vcc einen
größeren Elko, der reicht, um einen eventuell laufenden EEPROM-
Schreibzugriff noch sicher abzuschließen, bevor die Spannung zu niedrig
dafür wird. Ebenfalls ohne jede Panne bisher - selbst in
den brutal "verstörten" Netzen von Straßenbahnen, für die ich
allerdings ein sehr spezielles Eingangsfilter entwickelt habe.

Alles zusammengenommen ist für mich die Frage, ob der Pullup am
Reset nun besser 4k7 oder 10k beträgt, grundsätzlich falsch gestellt.
Zumal 4k7 und 10k eh dieselbe Größenordnung sind, d.h. wenn es mit
4k7 klappt und mit 10k nicht, wird irgendein anderes Problem,
typischerweise beim Layout, nur übertüncht, aber nicht gelöst.
Und, dem Gesetz der Serie entsprechend, kommt es dann früher oder
später doch wieder auf. Z.B. in der Form, dass in der x-ten Auflage
plötzlich 20-30% der Fertigung nicht laufen, bis man dahinter
kommt, dass es diesmal 2k2 sein müssen...

Gruß Johannes

von Hans-jürgen G. (gebi)


Angehängte Dateien:

Lesenswert?

Hallo,
Den Programmer im Anhang finde ich sehr korrekt, nicht so extrem geizig
mit Teilen für ein paar Cent.
Nur ein Wunder, daß ein Drucker am LPT funktioniert!
Bei Reichelt gibt es jetzt wieder den AVR-ISP mk2 mit USB-Anschluß.
Diesen werde ich bestellen.
An IC3 / Pin 13 werde ich noch den von Johannes empfohlen
Pullupwiderstand einfügen.

    Viele Grüße und Erfolg beim Bauen
     Allen hier im Thread danke ich für die Hilfe.
       Hans-Jürgen

von Johannes A. (Gast)


Angehängte Dateien:

Lesenswert?

Ja, das "betterSTK200" kommt dem, wie ein echter Drucker am Eingang
beschaltet ist, schon erheblich näher. Fehlen nur noch die Pullups und
Dämpfungs-Cs, die Klemm-Dioden gegen VCC und GND sowie die in den
modernen Drucker-ASICs enthaltenen logischen "Schmutzfänger",
derentwegen der LPT-Port heute nicht mehr wirklich schnell ist, aber
dank des byteweisen Strobe/Acknowledge-Protokolls auch bei EPP/ECP
immer noch soweit zuverlässige Übertragung erlaubt...

Ein "Wunder" ist es also nicht ganz, dass Drucker am LPT immer noch
funktionieren, nur ziemlich harte Arbeit für die Druckerhersteller :)

Vielmehr ist es für mich ein Wunder, dass Kanda das STK200-Dongle
offenbar immer noch unverändert verwendet. Heute raten sie nur absolut
von jedem Stück Kabel zwischen LPT und Dongle ab - was die Benutzung am
Desktop- bzw. "Under Desk"-Tower-PC nicht so ganz locker macht. Ich
habe das Teil jüngst mit dem Stand-Alone "Hand Help Programmer"
wieder in die Hand bekommen, und musste erst unter den Schreibtisch
kriechen, um es anzustöpseln...

Für das USB-Teil von Atmel dagegen konnte ich mich bisher nicht
erwärmen. Es mag im Entwicklungsbetrieb zwar ok sein, aber als
Production-Programmer, mit dem auch "Doofies" klarkommen sollen, ist
die zugehörige Software (AVRstudio) doch reichlich kompliziert.

Da ist PonyProg immer noch deutlich einfacher, weil mit dem Aufruf des
e2p-Files sofort sämtliche Einstellungen inkl. Fuses stimmen. Und mit
meinem minimierten SI-nach-STK200-Adapter (siehe Anhang), als feines
kleines SubD9-Dongle aufgebaut, sind die Kabellängen völlig unkritisch
- auf der RS232-Seite sind bis 5m erprobt, und als 10pol Flachband von
30cm bis zu Kandas originalen 1,5m.

Ich hoffe, meine Plaudereien "aus dem Nähkästchen" mögen irgendwem
noch nützen.

Beste Grüße
Johannes

von Hans-jürgen G. (gebi)


Lesenswert?

Hallo
Den von von Johannes vorgeschlagenen Pullup habe ich am externen
Reseteingang des CPU-Boards noch eingefügt.
Nun erhielt ich von www.reichelt.de den Programmer AVR ISP mk2.
Damit funktionierte die Verbindung sofort.

Viele Grüße
   HAns-Jürgen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.