Hallo!
Wenn ein Programm fertig programmiert wurde, dann wird es kompiliert. Das heißt, der Bascom-Quellcode, den wir geschrieben haben, wird in ein vom µC ausführbares Maschinencode-Programm umgewandelt. Dieses Programm kann als HEX-Datei oder als BIN-Datei vorliegen.
Um dieses Programm in den µC übertragen zu können, braucht man einen so genannten Programmer (Programmiergerät). Das kann ein einfaches Kabel für den Anschluss an den Parallelport mit ein paar Widerständen und ein paar Dioden sein. Das kann ebenso ein mit ein paar Dioden und Widerständen versehenes Kabel für den Anschluss an den "Seriellen Port" (RS-232) sein. Das kann aber auch ein Gerät für den USB sein. Es gibt viele verschiedene Programmer für die verschiedensten Anschlüsse.
Aber warum nimmt dann nicht jeder ein einfaches Parallelportkabel, wenn es doch damit funktionieren soll? Oder warum nicht einfach das Kabel für den "Seriellen Port"? -- Die Sache ist die, dass viele Computer keinen Parallelport mehr haben. Es gibt zwar USB-Parallelport-Adapter, aber mit denen kann man die µC nicht programmieren, da der Datenaustausch in beide Richtungen oft nicht richtig funktioniert und die Hi-Low-Level meist keine einheitliche Spannung haben.
Es gibt Parallelport-Programmer, die zumindest das Problem der niedrigen Parallelport-Spannung ein wenig entschärfen. Den Bauplan für einen STK200-kompatiblen Programmer für den Parallelport findest du unter http://www.mikrocontroller.net/articles/STK200.
Es geht noch weiter. Seit Windows 2000 kann man nicht mehr direkt von einem Programm aus auf den Parallelport zugreifen. Man kann das umgehen, indem man einen speziellen Treiber dafür installiert. Aber leider werden diese Treiber nicht aktiv weiterentwickelt, so dass diese Treiber schon seit Windows XP teilweise Schwierigkeiten machen oder sogar überhaupt nicht funktionieren. Fazit: Der Parallelport scheidet aus, wenn man kein Gefrickel will. Er ist aber eine billige Alternative, wenn man sparen muss und noch einen richtigen, eingebauten Parallelport im Computer hat.
Tipp
Diesen STK200 Parallelport-Programmer habe ich nachgebaut und muss gestehen, dass er bei mir ziemlich gut läuft. Er taugt also auf jeden Fall als billiger Programmer, wenn man sich keinen USB-Programmer leisten kann und noch einen Parallelport in seinem Computer eingebaut hat.
Dieser Programmer ist so billig, dass man es verschmerzen kann, falls einem das Betriebssystem den Spaß verdirbt und den Parallelport nicht frei gibt. In so einem Fall kann man ja immer noch einen USB-Programmer kaufen.
Weit mehr Computer haben noch einen "Seriellen Port" (RS-232 oder auch COM genannt), der nicht wie der Parallelport vom Betriebssystem abgeblockt wird. Also scheint der COM-Port gar nicht so schlecht dafür geeignet zu sein. Und die benötigte Hardware begrenzt sich auf ein Kabel, ein paar Dioden, Transistoren und Widerstände. Aber ein paar Probleme gibt es damit doch. Diese Art der Übertragung ist nicht sehr gut in Bascom integriert, was das Arbeiten erschwert. Außerdem funktionieren die meisten, einfachen "Seriellen" Programmer nur mit echten, in den Computer eingebauten COM-Ports.
Leider gibt es Probleme mit USB/COM-Adaptern. Diese stellen oft nicht die gewünschten Spannungen für die Programmer zur Verfügung. Oft sind auch nur die Pins RX und TX durchgeschaltet, was zu wenig für die einfachen "Seriellen" Programmer ist.
Es gibt auch "Serielle" Programmer mit eingebauten Mikrocontrollern. Diese können auch an USB/COM-Adapter angeschlossen werden und die daran angeschlossenen µController mit voller Geschwindigkeit flashen. Aber mit denen habe ich mich nie befasst und kann nichts dazu schreiben.
Die folgenden Links führen dich zu Seiten, die dir mehr über über ein paar dieser einfachen Programmer erzählen und wie man sich selbst so einen Programmer basteln kann.
Für heutige Computer empfehle ich USB-Programmer.
USB wird nicht so schnell aussterben und die USB-Programmer werden immer billiger. So gibt es mit dem mySmartUSB einen Programmer, der -- an den Computer angeschlossen -- einen COM-Port simuliert und sehr einfach von Bascom aus genutzt werden kann. Also ideal für Einsteiger.
Diesen mySmartUSB-Programmer bekommt man direkt bei myAVR oder von Conrad. Wenn man den Programmer geliefert bekommt, dann fehlt nur noch der zehnpolige Wannenstecker, den man noch einlöten muss. Mit dabei ist ein kurzes Flachbandkabel mit zwei zehnpoligen Pfostensteckverbindern. Es hat sich eingebürgert, µC-Schaltungen mit einem Wannenstecker auszustatten, über den die µC im System programmiert werden können.
Die AVR-Mikrocontroller müssen also nicht jedes mal ausgebaut werden, um ein neues Programm zu übertragen. Es genügt, wenn man die Leitungen "Reset", "MOSI", "MISO", "SCK", "GND" und "VCC" über einen Stecker nach außen führt. Diesen Stecker kennzeichnet man üblicherweise mit "ISP", was für "In System Programming" steht. Auf die Bedeutung von "MOSI", "MISO" und Co. werde ich später noch eingehen. Aber zuerst kümmern wir uns um die Hardware. Es ist nämlich so, dass Roland Walter in seinem Experimentierboard nicht diesen Wannenstecker, sondern eine sechspolige SIL-Leiste verwendet. Das ist zwar schön platzsparend, aber man muss sich einen Adapter zusammenlöten um mit dem mySmartUSB auch dieses Experimentierboard anschließen zu können.
10-poliger und 6-poliger ISP-Stecker (Atmel):
http://www.mikrocontroller.net/articles/AVR_In_System_Programmer
6-poliger, einreihiger Stecker den Roland Walter verwendet:
http://rowalt.de/mc/avr/avrbuch/AvrBoard.pdf
Beim Übertragen der Daten kommuniziert der Programmer mit dem µC normalerweise über die SPI-Schnittstelle (Serial Peripheral Interface). Diese SPI-Schnittstelle arbeitet mit drei Leitungen. Wenn mehr als zwei Geräte miteinander kommunizieren, dann ist noch eine zusätzliche Leitung zum Auswählen des Empfängers im Spiel. Aber das ist jetzt nicht so wichtig.
Die SCK-Leitung (SPI Clock) gibt den Takt an. Einer der Kommunikationspartner ist immer der Master. Dieser bestimmt den Takt. Der andere Kommunikationspartner ist der Slave.
Die MOSI-Leitung (Master Out/Slave In) überträgt Daten vom Master zum Slave.
Die MISO-Leitung (Master In/Slave Out) überträgt Daten vom Slave zum Master.
Dieses SPI kann dazu benutzt werden um Daten und Anweisungen von einem µC an andere µC weiter zu geben. Es wird auch zum Übertragen des Programms vom Computer zum µC verwendet. Der einzige Unterschied ist, dass der Programmer vorher den Reset-Eingang des µC nach GND zieht. Das ist das Zeichen für den µC, dass es sich bei der Übertragung nicht nur um normale Daten, sondern um das Programm handelt. Dieses wird dann in den eingebauten Flash-Speicher geschrieben.
Manche µC verwenden nicht die SPI-Pins zum Flashen. So ein Sonderfall ist z.B. der ATmega128. Das ist aber für uns noch nicht so wichtig, da der ATmega128 eine Liga über dem ATmega8 oder dem ATmega16 spielt.
Siehe auch: AVR Hardware Design Considerations
mfg Gerold :-)
PS: Nicht verwechseln: SPI (Serial Peripheral Interface) und ISP (In System Programing)
Den zugehörigen Original-Beitrag findest du im Loetstelle-Forum.
Ich programmiere Progressive Web Applications, Mobile Apps, Desktop-Programme und noch vieles mehr. Falls es dich interessiert, findest du mehr Informationen darüber auf meiner Business-Website.