Allgemeines:
Die geistigen Wurzeln der Schaltung reichen auf B. Kainka, DK7JD und U. Bangert, DF6JB zurück. Es war die erste mir zugängliche Schaltung mit einem Mikrocontroller, die kein teures Programmiergerät verlangte. Zudem war der benutzte 8051-Kern von Druckmedien und Literatur deutlich besser unterstützt, als die moderneren RISC-Prozessoren (AVR, PIC, usw.), die überwiegend durch das Internet Verbreitung fanden, logischerweise nur im Kreis entsprechend privilegierter Menschen. Für die anderen erfand man die Worte „bildungsfern“ und „Einödhof“ ☺
Da die Resourcen im AT89S8252 (später S8253) völlig ausreichend für die Aufgabe als Reziprokzähler erschienen (RAM/ROM), war kein externer Programmspeicher nötig, damit entfiel auch der übliche Adressmultiplexer. Für die Peripherie sollten aber ausreichend viele Adressen vorgesehen werden. Ohne Multiplexer stehen hierfür 256 Adressen bereit, die völlig genügen und deshalb nicht vollständig dekodiert sein müssen. Trotzdem sollte die Dekodierung weitgehend eindeutig sein und keine Spiegeladressen zulassen. Lediglich das LCD benutzt 8 anstatt der benötigten 4 Adressen. Aus dem Adressraum wird der Bereich von hex80 bis hexBF in Achtergruppen dekodiert, davon als Leiterbahn die Gruppe hex80..87 herausgeführt. Das LCD ist fest auf hexB8..BF verdrahtet.
Um die Schaltung weiter zu vereinfachen, wurden die Schreib- und Lesesignale zusammengefasst, mit dem Vorteil, statt zwei nur eine Signalleitung zur Peripherie führen zu müssen. Nachteilig ist lediglich, dass das Programm keine Befehle enthalten darf, die schreibend auf ein Leseregister zugreifen.
Zugegeben, aus letzter Sicht erweist sich die Adressdekodierung als ziemlicher „Overkill“, aber so bleibt die Platine ausgesprochen universell. In Anbetracht eines einzigen Bauteils (IC3) ist das Sparpotenzial auch sehr gering.
Der Schaltungsteil um den 74HC125 entspricht weitgehend dem Vorschlag von DF6JB, er wurde lediglich an den leichter erhältlichen IC-Typ angepasst. Damit ist der Prozessor mit jeder RS232-Schnittstelle im PC und einer Pegelwandler-Schaltung (siehe DJ6FB) programmierbar. Die Pegelwandler wurden aber auch aus Platzgründen nicht mehr auf der Platine vorgesehen, um den Anschluss einer USB-Schnittstelle zu erleichtern. Diese ist im Platinensatz enthalten und wird an anderer Stelle beschrieben. Für die Verbindung genügt ein 10-poliges Flachbandkabel ohne Kreuzungen.
Aufbau und Inbetriebnahme:
Für den Aufbau wird empfohlen, sich vor Beginn der Lötarbeiten die Datenblätter aller ICs bereitzulegen, insbesondere des AT89S8253. Zusätzlich wird die Bauanleitung aus dem FA-Downloadbereich benötigt. Die Kondensatoren C1 und C2 sollte man, besonders bei Einsatz eines HC49/U-Quarzes, vorerst nicht einbauen. Wem der Einbau von C8 zu beengt vorkommt (wegen Wannenstecker für K6 oder der Klemmenleiste), darf C8 weglassen, dieser ist nun zusätzlich auf der Zählerplatine vorgesehen. Zum Einbau der PLCC-Fassung ist die Kenntnis der Orientierung zwingend. Die Reihe mit Pin1 von IC1 ist der Stiftleiste K4 zugewandt.
Vor dem Einsetzen der MCU ist die gelötete Platine noch einmal genau zu prüfen und provisorisch eine geringe Betriebsspannung anzulegen, es darf dabei kein nennenswerter Strom fließen. Eine Versorgung mit 12V wird bis zur Inbetriebnahme der Zählerplatine nicht benötigt und sollte auch keinesfalls angelegt werden. Nach Entfernen der Spannung kann man IC1 in den Sockel stecken und die Stromaufnahme erneut prüfen. Es wird empfohlen, diese ersten Versuche mit einer unprogrammierten MCU durchzuführen, damit die programmierte ganz sicher keinen Schaden nehmen kann. Ist auch hier wieder die Stromaufnahme unter den gegebenen Grenzen, ist als nächstes die Prüfung des ALE-Signals an der Reihe. Der Testpunkt hierzu befindet sich auf der Platinenoberseite zwischen C4 und dem IC-Sockel. Das Signal muss absolut sauber, stabil und jitterfrei messbar sein. Anderenfalls sind die Kondensatoren C1 und C2 mit 2,2p zu bestücken und die Prüfung zu wiederholen. Weitere Optionen sind 4,7p und 2,2p + 4,7p. Ohne stabiles ALE-Signal wird wahrscheinlich schon die Programmierung fehlschlagen und der Betrieb später sporadisch unterbrochen sein und sich das Programm „aufhängen“.
Ist auch das zufriedenstellend gelöst, ist K1 mit dem USB-Modul zu verbinden, natürlich nicht unter Spannung, die Polung der Stecker ist genau zu überprüfen. Es genügt aber, auf Übereinstimmung von Pin1 zu achten, der Rest stimmt dann von selbst, vorausgesetzt, die Stiftleisten sind auf beiden Platinen von der gleichen Seite bestückt,
Nach Wiederanlegen der Betriebsspannung (5V, keine 12V) meldet sich das USB-Modul erneut bei dem Betriebssystem des Rechners (PC) an, der Treiber war ja bereits installiert. Die Konfigurationsanzeige des Betriebssystems verrät uns den willkürlich festgelegten com-port . Diesen Wert tragen wir in das Programm AtmelISP ein und setzen die Parameter entsprechend der Bauanleitung.
Jetzt kann man nach Einsetzen der Brücke K2 und Laden des Buffers mit der .hex-Datei die Programmierung starten (Write Buffer to Code Memory)! Hier ist Geduld angesagt, das kann auch über 10 Minuten dauern. Die Funktionen „Verify Code Memory“ (dauert noch länger!) und „Show Differences“ werden uns zeigen, ob die Programmierung erfolgreich war oder nicht. Erscheint die MCU danach völlig „leer“, sind alle Vorgaben nochmals genau zu prüfen und alle Quellen zu lesen. Sind jedoch nur wenige Adressen im ROM „fehlerhaft“, kann man eine erfolgreiche Programmierung bereits annehmen. Ein angeschlossenes LCD wird dann auch nach jedem Reset eine Willkommensmeldung mit der Versionsnummer und anschließend „no signal“ anzeigen. Bitte die Einstellung des Kontrast-Trimmers (R5) nicht vergessen. Bleibt das LCD trotz allen Versuchen blind, oder man misstraut diesem oder dessen Anschluss, dann lohnt sich ein Blick in das Terminalfenster von AtmelISP, denn dort müssen im Sekundentakt die „no signal“-Meldungen geschrieben werden, wie im folgen Bild zu sehen. Wenn der Mikrocontroller an keiner Stelle ein Lebenszeichen abgibt, müssen wir eine erneute Programmierung durchführen, evtl. mit etwas größeren Delays.
Nur wer bei diesem Schritt partout nicht ankommt, sollte, wenn vorhanden, eine bereits programmierte MCU einsetzen, zuvor ist K2 zu entfernen! Wenn auch damit keine Willkommensmeldung erscheint, ist die Verdrahtung zum Display zu prüfen und nach „unmöglichen“ Fehlern zu suchen. Das Programm im Mikrocontroller ist nicht geschützt, es kann daher im Fehlerfall auch überschrieben werden, aber ohne K2 ist das sehr unwahrscheinlich.
Die letzte Prüfung betrifft die Kommunikation mit dem Terminalprogramm. Dazu öffnen wir das Terminalfenster des Programms AtmelISP und sehen (hoffentlich) die „no signal“-Meldungen im Sekundentakt. Wir unterbrechen diese Ausgabe mit dem Ausrufezeichen !, das wir an der Tastatur des PC eingeben. Die MCU muss jetzt mit einer Ausgabe von „Cmd“ antworten. Spaßeshalber drücken wir nun die Ziffer 0 am PC und weitere beliebige Zeichen, die uns die MCU mit einem Echo des Zeichens und seinem Ascii-Äquivalent in hexadezimaler Form zurücksendet. Ein Beispiel für die Reaktion auf die Zeichenfolge !01234 sehen wir im folgenden Bild. Die Ausgabe und Formatierung auf dem LCD ist willkürlich und irrelevant. Mit Druck auf die Reset-Taste beenden wir diesen Modus.
Wird auch dieser Test bestanden, haben wir ohne Programmiergerät einen Mikrocontroller programmiert und einen wesentlichen Schritt zum Aufbau des Zählerprojektes getan.
Es folgen noch die Bilder der Bestückungspläne. Für die Darstellung des Schaltbildes bitte hier klicken.
