Sensor Shield (Nano)
Diese Platiene bietet bequeme Anschlussmöglichkeiten (Sensoren, Servos,..) für ein Arduino Namo. Auch eine Hohlbuchse für Stromversorgung ist dabei (wie bei einem Arduino UNO). Zusätzlich gibt es ein 3,3V Spannungsregler.
Steckbrett-Arduino
Das Herzstück eines Arduino, unabhängig von dem Modell, ist ein ATMEL-Microcontroller. Aktuelle Boards enthalten meist einen ATmega328p oder ATmega2560. Alles andere auf dem Board ist mehr oder weniger nebensächlich.
Mit einer DIP-Version (also nicht SMD) eines µC kann leicht ein Arduino-Clon auf einem Steckbrett aufgebaut werden. Man kann dies natürlich auch auf einer einegentwickelten PCB aufbauen, was eine kleine und günstige Schaltung ermöglicht.
Es muss ja nicht immer gleich ein ATmega sein. Manchmal reicht auch ein viel kleinerer Microcontroller, z.B. ein ATtiny84A. Ein ganzes Board ist es zwar nicht, aber mit etwas Vorarbeit doch ein 'echter' Arduino.
Bei diesem Microcontroller handelt es sich um die weitgehend kompatible Weiterentwicklung des ATtiny24. Der Baustein wird im Format DIP-14 mit folgender Pinbelegung gefertigt:
Auszug aus der Beschreibung des Herstellers:
- 120 Powerful Instructions – Most Single Clock Cycle Execution
- 32 x 8-bit General Purpose Working Registers
- Up to 20 MIPS Throughput at 20 MHz
- 8 K Bytes of In-System Self Programmable Flash
- 512 Bytes In-System Programmable EEPROM
- 512 Bytes Internal SRAM
- Write/Erase Cycles: 10,000 Flash/100,000 EEPROM
- One 8-bit Timer/Counter with Two PWM Channels
- One 16-bit Timer/Counter with Two PWM Channels
- 10-bit ADC
- USI – Universal Serial Interface
- Pin Change Interrupt on 12 Pins
- Low Power Idle, ADC Noise Reduction, Standby and Power-down Modes
- Internal Calibrated Oscillator
- 12 Programmable I/O Lines
- 1.8 – 5.5V Operating Voltage
- 210 μA at 1.8 V and 1 MHz (Active Mode)
- 33 μA at 1.8 V and 1 MHz (Idle Mode)
- 0.1 μA at 1.8 V and +25°C (Power-down Mode)
Umgemünzt auf die Arduino Pins egibt sich folgende Belegung:
Im Unterschied zu einem ATmega wird bei ATtiny wird kein Arduino-Bootloader benutzt. Die Programmierung erfolgt nicht über USB, sondern mit Hilfe eines Programmers.
Hier musste ich feststellen, dass mein Programmer (USBASP) nicht mit diesem µC kompatibel ist. Auf diese Idee kam ich aber erst nach etlichen Versuchen und Prüfungen/Austausch aller Kabel. Dann musste eben ein Arduino Mega (mit ArduinoISP Sketch) in die Bresche springen.
Die Verkabelung (Für UNO oder MEGA):
Signal (ICSP) |
Arduino Mega | Arduino UNO | ATtiny84A |
RST | 53 | 10 | Pin 4 |
MOSI | 51 | 11 | Pin 7 |
MISO | 50 | 12 | Pin 8 |
SCK | 52 | 13 | Pin 9 |
3.3/5V | 3.3/5V | 3.3/5V | Pin 1 |
GND | GND | GND | Pin 14 |
Bei der Verwendung des internen Oszillators werden keine weitere externe Bautele zum Betrieb des µC benötigt! So sieht es dann in etwa aus (LED ist natürlich zum Programmieren nicht notwendig, sie war jedoch nützlich für den ersten Test):
Bevor man anfangen kann, muss die ArduinoIDE für die Benutzung von ATtiny vorbereitet werden. Unter http://code.google.com/p/arduino-tiny/downloads/list lädt man die neueste Version des Plugins und installiert diese entsprechend der Anweisungen. Nach dem IDE-Neustart kann in dem Boards-Menü ein Eintrag für ATtiny84 ausgewählt werden. Mit dem Menüeintrag 'Bootloader installieren' wird der Chip für die erste Nutzung vorbereitet. Ein Bootloader wird dabei zwar nicht installiert, es werden jedoch die notwendigen "Fuses" gesetzt. Danach kann ein eigener Sketch auf den Microcontroller geladen werden (wieder mit dem ArduinoISP).
Zum ersten Test habe ich den Blink-Sketch verwendet. Jetzt habe ich einen HiTech-Blinklicht ;)
Läuft wunderbar auch mit einem Akku (tagelang):
Selbstverständlich kann ein Steckbrett-Arduino auch mit einem ATmega328p aufgebaut werden, wie auch bei einem UNO, Nano, Pro Mini etc.
Dieser µC in DIP-28 Form besitzt folgende Pinbelegung:
Dieser µC soll auch mit einem Bootloader versehen werden, dabei werden (je nach Boardauswahl) Fusen gesetzt. Bei einem 'richtigen' Arduino wird ein Crystal-Oscillator ('Quarz') verwendet. Aber es geht auch mit dem internen Taktgeber (8 MHz). Für den ersten Fall wählt man als Boars z.B.einem Arduino UNO, oder Pro Mini. Damit es mit einem Internen geht, muss dieses Modus der IDE bekannt zunächst gemacht werden (s. http://arduino.cc/en/Tutorial/ArduinoToBreadboard).
Verbindung zum Programmer:
Signal (ICSP) |
Arduino Mega | Arduino UNO | ATmega328 |
RST | 53 | 10 | Pin 1 |
MOSI | 51 | 11 | Pin 17 |
MISO | 50 | 12 | Pin 18 |
SCK | 52 | 13 | Pin 19 |
3.3/5V | 3.3/5V | 3.3/5V | Pin 7 + Pin 20 |
GND | GND | GND | Pin 8 + Pin 22 |
Tests mit dem internen Taktgeber und mit einem 'Quatz':
USB ISP Programmer für Atmel AVR (USBASP)
Mit Arduino wurde vieles bequemer und in einer gewissen Weise sogar einfacher. So können Programme einfach per USB auf den Microcontroller geladen werden. Wer jetzt jedoch denkt, es gäbe für den guten, alten Programmer keine Verwendung mehr, irrt sich.
Die selben Arduino-Sketches können auch mit dem Programmer geladen werden. Da dabei der Arduino-Bootloader nicht benötigt (und daher entfernt) wird, bekommen Programme etwa 2KB mehr Platz und weil keine Zeit zum Warten auf den Upload verschwendet wird, auch ein erheblich schnelleren Start- bzw. Reset-Vorgang. Allerdings wird nach dieser Prozedure ein erneutes Installieren von Bootloader notwendig, wenn danach wieder Upload per USB gewünscht sein sollte. Das geht ganz einfach mit der Arduino-IDE, auch für dann, wenn der verwendete Atmel Microcontroller noch nie davor als Arduino geflasht gewesen war. Natürlich geht es auch umgekehrt, ein Arduno kann als eine ganz normale Atmel-CPU verwendet werden.
Ein extrem günstiger (<3 Euro) Programmer habe ich auf eBay zu gefunden (China-Produkt).
Das Gerät besitzt einen 10-polligen ISP-Stecker. Zusätzlich zu der Standardbelegung, sind Pins 4 und 6 mit TXD und RXD Signalen belegt. Um ein Arduino-Board (Uno, Nano, Mega) daran anzuschliessen, wird noch ein Adapter auf 6-polligen ISP (auf dem Arduino als ICSP beschriftet) benötigt. Auch diesen bekommt man sehr günstig bei eBay.
Bei Boards, die keinen ICSP-Leiste anbieten, müssen entsprechende Pins direkt verwendet werden. Folgende Zeichnung zeigt das für ein ProMini Board.
Ich musste schon etwas suchen und vergleichen, habe aber einen Schaltplan zu diesem Gerät gefunden. Ich wollte keine fremde Bilder verwenden, daher habe ich das Schema mit Eagle selbst gezeichnet. Es handelt sich um Software zur Erstellung von Schaltplänen und Platinen und ist auch in einer kostenlosen Version (für privatgebrauch) erhältlich. Das Program ist sehr mächtig, die Bedienung habe ich mir jedoch etwas intuitiver vorgestellt.
Bei dem Gerät handelt es sich um einen fast haargenauen Nachbau von USBasp-Adapter (http://www.fischl.de/usbasp/). Eine nützliche Erweiterung ist ein 3,3V Linear-Regler zur Stromversorgung des zu beschreibenen Microcontrollers. Als Upload-Tool kann AVRDUDE verwendet werden. Es können damit EEPROM, Firmware, Fuse und Lock Bits aus dem Mikrocontroller ausgelesen oder geschreiben werden. Windows braucht einen zusätzlichen Treiber: https://github.com/stefanbeller/USBasp/tree/master/bin/win-driver/libusb_1.2.4.0
Auf dem Board befinden sich 3 Jumperleisten, die J2 und J3 sind allerdings nicht aufgelötet. Mit J1 wird die Spannung zur Versorgung von Ziel-Microcontroller definiert (5V oder 3,3V). J2 wird benötigt, wenn Betriebssoftware (Firmware) des Programmes selbst aktualisiert werden muss. J3 erlaubt das Flashen von sehr langsam (<1,5MHz) getakteten Microcontroller. Neuere Firmwareversionen unterstützen dies jedoch in Software (-B Option in AVRDUDE), so dass dieser Jumper überflüssig wird.
Firmware aktualisieren
Der Programer funktioniert mit dem Arduino-IDE, allerdings scheint er eine veraltete Firmwareversion zu besitzen, zumindest beschwert sich AVRDUDE darüber in seinen Ausgaben.
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
Man könnte die Meldung zwar ignorieren, Nachteile hatte ich bis jetzt noch nicht gemerkt. Ich möchte trotzdem eine neuere Version aufzuspielen versuchen. Im Netz habe ich eine gute Anleitung zu genau diesen Programmer gefunden. Ich werde auch ähnliche Weise vorgehen.
Wenn Sie auch nachmachen wollen, beachten Sie bitte,
dass ein Firmwareaustausch immer mit einem gewissen Risiko verbunden ist
und zu einem nicht mehr brauchbaren Gerät führen kann.
Alles was Sie tun, tun Sie auf Ihr eigenes Risiko!
Die Warnung muss sein, auch wenn ein AVR nicht so einfach zu zerflashen ist.
Zunächst muss die J2-Brücke geschlossen werden. Ich habe dafür eine kleine Pinleiste eingelötet, aber auch jede andere Form einer sicheren Verbindung wäre ok.
Dann wird noch ein weiteres Programmer benötigt. Ich habe zwar keinen mehr, aber ein Arduino-Board eignet sich sehr gut auch für diese Aufgabe. Laden Sie den "Arduino ISP"-Sketch darauf (ist unter Datei->Beispiele->Arduino ISP zu finden) und stellen Sie die Verbindung her, wie im Quelltext des Sketches angegeben. Es werden 6 Leitungen benötigt: VCC, GND, RST, SCK, MOSI und MISO. Zu beachten ist, dass ein Mega anders angeschlossen wird, als andere Arduinos wie UNO, Mini oder Nano.
ISP | Arduino Mega | Arduino UNO |
RST | 53 | 10 |
MOSI | 51 | 11 |
MISO | 50 | 12 |
SCK | 52 | 13 |
Bei mir lag gerade ein Mega arbeitslos rum ;-)
Wenn alles richtig verbunden ist (der Programmer bitte nicht ins USB-Buchse stecken!), kann zum Testen folgendes Befehl verwendet werden:
avrdude -C ../etc/avrdude.conf -c avrisp -P COM20 -b 19200 -p m8 -v
Das Befehl muss in AVRDUDE-Verzeichnis eingegeben werden. Ich habe einfach das entsprechende Verzeichniss aus Arduino-IDE verwendet.
Bitte setzen Sie den COM-Port (Parameter -P) entsprechend Ihrer Konfiguration. Wenn Ihr Programmer nicht auf Basis eines ATMega8 aufgebaut ist, müssen Sie auch noch den Prozessortyp (Parameter -p) anpassen.
War alles richtig, sollte etwas in der Art der folgenden Ausgabe erscheinen:
D:\Arduino\arduino-1.0.5\hardware\tools\avr\bin>avrdude -C ../etc/avrdude.conf -c avrisp -P COM20 -b 19200 -p m8 -v avrdude: Version 5.11, compiled on Sep 2 2011 at 19:38:36 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2009 Joerg Wunsch System wide configuration file is "../etc/avrdude.conf" Using Port : COM20 Using Programmer : avrisp Overriding Baud Rate : 19200 AVR Part : ATMEGA8 Chip Erase delay : 10000 us PAGEL : PD7 BS2 : PC2 RESET disposition : dedicated RETRY pulse : SCK serial program mode : yes parallel program mode : yes Timeout : 200 StabDelay : 100 CmdexeDelay : 25 SyncLoops : 32 ByteDelay : 0 PollIndex : 3 PollValue : 0x53 Memory Detail : Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- eeprom 4 20 128 0 no 512 4 0 9000 9000 0xff 0xff flash 33 10 64 0 yes 8192 64 128 4500 4500 0xff 0x00 lfuse 0 0 0 0 no 1 0 0 2000 2000 0x00 0x00 hfuse 0 0 0 0 no 1 0 0 2000 2000 0x00 0x00 lock 0 0 0 0 no 1 0 0 2000 2000 0x00 0x00 calibration 0 0 0 0 no 4 0 0 0 0 0x00 0x00 signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00 Programmer Type : STK500 Description : Atmel AVR ISP Hardware Version: 2 Firmware Version: 1.18 Topcard : Unknown Vtarget : 0.0 V Varef : 0.0 V Oscillator : Off SCK period : 0.1 us avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.09s avrdude: Device signature = 0x1e9307 avrdude: safemode: lfuse reads as 9F avrdude: safemode: hfuse reads as D9 avrdude: safemode: lfuse reads as 9F avrdude: safemode: hfuse reads as D9 avrdude: safemode: Fuses OK avrdude done. Thank you. D:\Arduino\arduino-1.0.5\hardware\tools\avr\bin>
Als nächstes sollte man sich eine Kopie der Originalfirmware anlagen. So hat man später eine Möglichkeit den Ursprungszustand wiederherstellen, wenn die neue Version aus irgendwelchen Gründen nicht funktioniert.
avrdude -C ../etc/avrdude.conf -c avrisp -P COM20 -b 19200 -p m8 -U flash:r:usbasp_original_firmware.bin:r
So soll das aussehen:
D:\Arduino\arduino-1.0.5\hardware\tools\avr\bin>avrdude -C ../etc/avrdude.conf - c avrisp -P COM20 -b 19200 -p m8 -U flash:r:usbasp_original_firmware.bin:r avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.09s avrdude: Device signature = 0x1e9307 avrdude: reading flash memory: Reading | ################################################## | 100% 9.86s avrdude: writing output file "usbasp_original_firmware.bin" avrdude: safemode: Fuses OK avrdude done. Thank you. D:\Arduino\arduino-1.0.5\hardware\tools\avr\bin>
Die entstandene Datei hebt man sich gut auf.
Jetzt kann eine andere Firmware aufgespielt werden. Ich habe folgende benutzt: usbasp.2011-05-28.tar.gz. Im Verzeichnis \bin\firmware befinden sich drei fertig kompilierten Dateien für verschiedene Prozessor-Typen (ATMega8, ATMega48 und ATMega88). In meinem Fall ist die Datei mit dem Namen usbasp.atmega8.2011-05-28.hex die richtige. Man sollte sich nicht wundern, dass die neue Datei drei Mal so groß ist. Die vorher ausgelesene Datei wurde in binären RAW Format angelegt (wg. Parameter :r), die neue ist Hexadecimal kodiert.
avrdude -C ../etc/avrdude.conf -c avrisp -P COM20 -b 19200 -p m8 -U flash:w:usbasp.atmega8.2011-05-28.hex
Das hat bei mir auch ohne Probleme funktioniert.
D:\Arduino\arduino-1.0.5\hardware\tools\avr\bin>avrdude -C ../etc/avrdude.conf - c avrisp -P COM20 -b 19200 -p m8 -U flash:w:usbasp.atmega8.2011-05-28.hex avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.07s avrdude: Device signature = 0x1e9307 avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option. avrdude: erasing chip avrdude: reading input file "usbasp.atmega8.2011-05-28.hex" avrdude: input file usbasp.atmega8.2011-05-28.hex auto detected as Intel Hex avrdude: writing flash (4700 bytes): Writing | ################################################## | 100% 9.35s avrdude: 4700 bytes of flash written avrdude: verifying flash memory against usbasp.atmega8.2011-05-28.hex: avrdude: load data flash data from input file usbasp.atmega8.2011-05-28.hex: avrdude: input file usbasp.atmega8.2011-05-28.hex auto detected as Intel Hex avrdude: input file usbasp.atmega8.2011-05-28.hex contains 4700 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 5.82s avrdude: verifying ... avrdude: 4700 bytes of flash verified avrdude: safemode: Fuses OK avrdude done. Thank you. D:\Arduino\arduino-1.0.5\hardware\tools\avr\bin>
Jetzt fehlt nur noch ein Test des Programmers, aber vorher muss noch die J2-Brücke entfernen werden.
Testweise habe ich einen Sketch und dann wieder einen Arduino-Bootloader auf mein Nano Board geflasht. Keine Fehlermeldung mehr ;-)
Sensor Shield (UNO)
Diese Platine bietet Anschlusmöglichkeiten für Sensoren und Servos in dem für jedes Gerät eine eigene Leiste incl. Spannungsversorgung zur Verfügung stellt.
Seite 10 von 14