Warum das Ganze???

Als ich begann, mich mit AVRs zu beschäftigen, hatte ich noch keinen Internetzugang und konnte daher nicht mal schnell im Net recherchieren. Was mir an Informationsquellen zur Verfügung stand, war eine (recht alte) ATMEL-CD (Datenblätter) und das AVR-Buch von Familie Volpe. Tatsache ist auch, dass mir das Lesen der englischsprachigen Datenblätter sehr schwer fällt, da mein Englisch recht lausig ist. In meiner Schulzeit (vor etwa 40 Jahren) gab es neben Deutsch nur etwas Russisch...

Ein Nachbau des im Buch vorgestellten ISP-Adapters schied aus, da ich dafür einen programmierten Mikrocontroller benötigt hätte, also das typische Henne/Ei-Problem. Daraufhin recherchierte ein Freund im Internet und brachte mir einige gespeicherte Webseiten, auf denen ISP-Adapter und Programme (meist mit Kommandozeilensteuerung) vorgestellt wurden, darunter auch Ponyprog. Leider funktionierte nix davon, was vermutlich daran lag, dass das Parallelkabel zu lang war, denn an meiner LPT hängt erstmal ein Verlängerungskabel mit einem Vierfach-Umschalter, an dem dann Drucker und diverse (wechselnde) Peripherie angeschlossen sind. Ich vermutete den Fehler aber erstmal am LPT-Chip.

Daher baute ich den ISP-Adapter (eine Version mit 74HCT245) so um, dass ich LEDs an die Leitungen RESET, SCK, MOSI und MISO (natürlich mit Treibern entkoppelt) bekam, an denen ich sehen konnte, was an den Leitungen passiert. Dann musste QBASIC dran glauben, denn ich brauchte ein Programm, mit denen ich das alles langsam durchspielen konnte. Fazit: Mit dem Originalprogramm (Name inzwischen vergessen) passierte nix, weder per LEDs noch mit Oszilloskop etwas messbar. Mit dem QBASIC-Programm nahmen die Leitungen wenigstens die gewünschten Pegel an.


Vom Testprogramm zum ISP-Programm...

Also wurde ins Datenblatt des AT90S1200 (mit dem begannen meine Aktivitäten) geschaut und die Programmiersequenzen (Kommandos) in das QBASIC-Programm implementiert. Und siehe da, nach einigen Versuchen mit dem Timing ließ sich der 1200 ansprechen. Hurra, es geht (dachte ich). Als dann ein 2313 gebrannt werden sollte, ging der Spaß von vorne los, der AVR ließ sich einfach nicht ansprechen.

Im Datenblatt fand ich einen Hinweis, dass Reset vor dem Anlegen der Betriebsspannung aktiviert werden soll. Also rüstete ich den ISP-Adapter mit einer Steuerung der Betriebsspannung per PC nach. Und siehe da: Es funktionierte! Aber erst, nachdem ich durch eine Glühlampe (6V/50mA) dafür sorgte, dass die Betriebsspannung schnell und zuverlässig auf 0 sinken konnte. Danach erfolgten Tests mit 4433, 8515 und 8535, es ging.

Anfangs wurden die AVR-Typen noch von Hand (Menü) ausgewählt/eingestellt, inzwischen geschieht das automatisch durch Einlesen der Signature-Bytes.

Anfangs musste auch das Brennfile als BIN vorliegen, inzwischen liest das Programm die Datei im HEX-Format ein. Allerdings erfolgt dabei keinerlei Plausibilitätsprüfung, da mir damals keine Beschreibung des INTEL-HEX-Formates zur Verfügung stand. Inzwischen habe ich die Beschreibung, hatte auch mit dem Gedanken gespielt, eine Funktion zum Speichern von (aus AVR ausgelesenen) Programmen (HEX-Format) einzubauen, habe dies aber verworfen weil ich mit dem ISP selbstgemachte Programme brennen möchte und nicht Programmdateien anderer Leute aus fremden AVRs stehlen... Daher ist auch die HEX-Plausibilitätsprüfung (noch) nicht drin.

Nachdem bei Reichelt die AVR-Preise purzelten, wurden auch die Tinys und Megas interessant. Deshalb wurde die Kalibration der internen RC-Oszillatoren unter die Lupe genommen und in das Programm eingebaut. Bei erforderlicher manueller Kalibration wird nun das (der Taktfrequenz entsprechende) Kalibrationsbyte automatisch aus dem Signature-Bereich gelesen und beim Löschen in die letzte Flash-Zelle geschrieben, falls das (zu brennende) Programm die letzte Zelle nicht braucht.

Das Setzen der Lockbits wurde erst sehr spät eingebaut, erst als der Einbau der Fuse-Bit-Einstellung erforderlich wurde. Mir war eben nur die Funktion wichtig, nicht der Diebstahlschutz meiner Programme, denn diese hatten ein solches Niveau, dass sich ein Dieb damit nur angemeiert hätte.

Mit den Fusebits wurde auch gewartet, bis es wirklich erforderlich war. Inzwischen hatte ich im Mikrocontrollerforum etliche Beiträge gelesen, wo berichtet wurde, dass man den AVR durch Irrtum beim Einstellen der Fusebits unbrauchbar machte. Daher wurde hier ein etwas höherer Aufwand getrieben und es werden die Default-Einstellungen (lt. Datenblatt) angezeigt, aber auch bei umschaltbarer Taktquelle die Taktquelle im Klartext. Somit bleibt die Gefahr der irrtümlichen Falscheinstellung recht gering. Dafür werden aber nur die Typen unterstützt, die bei mir verwendet werden.

Das Programm ist Baustelle und wird es wohl auch ewig bleiben. Es kann nur das was ich bisher benötige. Es wird immer dann weiterentwickelt, wenn es für meine Anwendung erforderlich ist. Mit dem Programm möchte ich anderen Programmen wie Ponyprog keinesfalls Konkurrenz machen. An einer Verbreitung im großen Stil bin ich nicht interessiert da ich keine Lust habe, ständig Wünsche anderer Benutzer erfüllen zu müssen. Ich weiß dass das Programm nicht perfekt ist, denn ich habe es nicht geschrieben um "das ultimative ISP-Programm" zu schreiben, sondern um damit meine AVRs zu brennen...