AVR-Programmiergrät

die Schematik
die fertige Platine

AVRs sind Mikrocontroller mit den man allerhand anstellen kann. Die Frage die sich stellt ist nur, wie bekommt man das Programm in die kleinen Steinchen. Dafür hat der Hersteller Atmel sich eine Schnittstelle erdacht. Mit dieser Schnittstelle kann man den Controller seriell programmieren. Danach behält er die Daten in seinem Flash und jedes mal, wenn man Spannung anlegt geht die Post ab und das Programm läuft.

Da Atmel relativ freundlich ist was Entwicklungsumgebungen angeht, kann man bei Atmel auch fast alles für Lau bekommen, außer die Hardware halt. Die kostet logischerweise ein bischen Geld. Da aber auch der Hobbybastler für Atmel eine Zielgruppe darstellt, hat er es dieser Gruppe einfach gemacht und einen relativ einenfachen Programmer geschrieben. Dieser Programmer kann auch AVRs in Schaltung programmieren (ISP). Dies ist ausführlich in der Application Note 910 beschrieben. Dies hier ist ein vereinfachter Nachbau der im Prinzip aber das selbe tut, nur mit minimaler Hardware.

Da es Nachfragen nach diesem Programmiergerät gibt, werden wir in Kürze einige Platinen fräsen und unter die Leute bringen. Aber man wird schnell merken das es das Henne-EI-Problem gibt, denn auf den Programmer befindet sich ja auch ein Controller, der erst mal programmiert sein will. Auch hier werden wir Abhilfe schaffen und versuchen ein Komplettset anzubieten mit allen nötigen Teilen und einem fertig programmiert Controller.

Die jetzige Version ist noch auf eine vorhandene RS232 betrieben werden. Man kann natürlich auch mit einen USB-RS232-Wandler arbeiten. Eine USB-Version ist in Vorbereitung.

Die Spannungsversorgung erfolgt über die Zielschaltung in der der zu programmierende Controller steckt. Man muss also auf die Pinbelegung des Steckers achten. Als Programm kann AVRdude benutzen. AVRdude gibt es für Unixe und Windows (darwinports, FreeBSD-Ports etc.). Nach der Installation muss man nach einer avrdude.conf suchen. Dort ist AVR910 als Programmiergerät einzutragen. AVR-Studio bringt selbst ein Programm mit, welches auch mit diesem Programmiergerät funktioniert.

Direkt fräsbare oder ätzbare Layouts sollten im SVN zu finden sein.

AVR-Board mit Ethernet

Der Schaltplan

die Schematik
der Bestückungsplan
funktionsfähige Platine

Der Schaltplan gestaltet sich recht übersichtlich. Im großen und ganzen verrichten drei ICs die Arbeit. Da wären zum einen der ATmega32 von Atmel der mit den internen RC-Oszilator läuft und der ENC28J60 von Microchip der mit einem 25MHz externen Grundwellen Quarz läuft. Verbunden sind die beiden ICs per SPI-BUS, einen sparsamen seriellen 4-Drahtbus. Der MAX232 sorgt für das anpassen der Logikpegel der RS232 an die des ATmega32. Der ATmega32 sorgt für die Verarbeitung der vom ENC28J60 empfangenden Ethernetframes, wobei der ENC28J60 einige Frames zwischenspeichern kann, damit nicht so schnell Frames verloren gehen. Der TCP/IP-Stack wird komplett im ATmega32 realisiert. Das Platinenlayout ist einseitig ausgelegt und mit DIL-Gehäusen bestückt, so das es auch für den nicht so begabten Löter eine Chance gibt das Projekt hardwareseitig ohne Verluste zu Ende zu bringen. Einzig ein kleiner Drop-Down-Wandler ist in SMD gemacht, besitzt aber dafür auch nur 8 Beinchen. Die Stromaufnahme der Platine liegt ca. bei 150mA, kann aber durch diverse Sleep-Stufen noch reduziert werden. Zusätzlich ist das Board noch mit zwei Pinleisten bestückt, damit kann man anderweitig mit der Außenwelt in kontakt treten. So sind z.B. die 8ADC Eingänge auf eine Pinleiste geführt, welche bei entsprechender Programmierung eine genauigkeit von 10-bit haben, oder man verwendet sie einfach als digitale Ein-/Aus-gänge. Die zweite Pinleiste bietet einen I2C Bus, JTAG-Interface ( wenn eingeschaltet ) und die Anschlussmöglichkeit für einen RTC-Quarz ( 32.768kHz ) um eine RTC in Software zu bauen.

Bauteilliste

Für das Atmelbord mit Ethernetcontroller werden folgende Bauteile benötigt. Die Gesamtkosten in Prototypstückzahlen betragen so etwa 25 Euro.

Anzahl Bauteil
1 IC1: ATmega32P
1 IC2: MC33269-SO8
1 IC3: MAX232
1 U1: ENC28J60-DIL
1 J1-0: FastJack 10/100Base m.LED
1 Q1: Quarz 25MHz (Grundwellenquarz)
1 X1: DS09M-90´/ohne Bolzen
1 D1: 1N4004 Diode
4 C1,C12,C6,C7: Kondensator 0,1µF
2 C2,C3: Keramikkondensator 10nF
2 C4,C5: Keramikkondensator 18pF
4 C8-C11: Kondensator 10µF
4 R1-R4: Widerstand 51Ohm 1%
1 R5: Widerstand 2kOhm 1%
3 R6-R8: Widerstand 270Ohm
1 L1: Ferritkern 100mA, alternativ geht auch eine Drahtbrücke

Aufbau- und Prüfplan

Zum Aufbau hält man am besten ein Netzteil bereit, damit man die Schaltung Stück für Stück überprüfen kann. Ein altes MobiltTelefonnetzteil sollte es tun. Das Netzteil sollte natürlich Gleichspannung (DC) liefern und bei etwa 150 mA nicht in die Knie gehen.

Beim aufbauen werden die kleineren Bauteile zuerst aufgelötet. Zum Beispiel in folgener Reihenfolge:

  • Spannungswandler
  • Diode
  • C1, C7, C6

Dann die Stromversorgung anlöten. Strom einschalten. Auf der Kühlfläche unter dem Dropdown-Wandler sollte man nun gegen Masse 3.3V messen. Am Pluspol von C6 sollten auch 3.3V gegen Masse anliegen.

  • IC3 einlöten, prüfen ob zwischen Pin 2 (GND) und Pin 1 (Vcc) 3.3V zu finden sind. Zwischen Pin 2 und Pin 10 sollten etwa -6 bis -7 V zu messen sein.
  • U1 einlöten
  • Quarz, C4, C5, C3, C2
  • R5

Am Quarz sollte man nun 25 MHz messen. Das erfordert natürlich ein entsprechendes Gerät.

  • R1, R2, R3, R4
  • L1, alternativ eine Drahtbrücke
  • RJ45-Jack, überflüssige Plastiknasen kann man abbrechen. Das hält schon.

Board ans LAN anschliessen. Wenn die Link-LED an ist, ist alles in Ordnung.

  • Rest einlöten

Ganz zum Schluss lötet man den Atmel ein. Der kann auch gerne gesockelt werden.


Firmware übersetzen und flashen

Im SVN-Repository gibt es ein Verzeichnis webserver. Der darin enthaltene Code kann mittels make übersetzt werden. Wahrscheinlich muss dazu noch das makefile angepasst werden. Im makefile wird die MAC-Adresse, die IPV4-Adresse sowie die Netzwekmaske definiert. Mit dem Aufruf von make werden die Quellen übersetzt. Nach Eingabe von make programmer wird avrdude aufgerufen und die Firmware wird in den Atmel geschrieben. Sollte der Atmel hängen, muss man ein- bis zweimal wiederholen.

Mit ping sollte man den Controller via ICMP ansprechen können. Geht das nicht, helfen sicherlich Tools wie tcpdump oder ethereal beim Debuggen.

Links

SVN

Alle Dateien sollten im SNV vorhanden sein.

Anon-SVN:

svn co svn://anonsvn.h3q.com/svn/mikrokontroller

Entwickler-SVN:

svn co svn+ssh://svn.h3q.com/svn/mikrokontroller

Trac:

Das ist gerade kaputt.

https://anonsvn.h3q.com/projects/mikrokontroller