ATTiny, Servo und Empfänger

Das ganze ist ein eigenes Kapitel wert.
Machmal ist ein großer Arduino für kleinere Projekt zu groß. Aber dafür gibt es ja die ATTiny Serie. Der kleinste ist der ATTinyx5. Und davon sollte man sich am besten immer gleich die ATiny85 kaufen. Der hat am meisten Flashspeicher und kann auch mit 16MHz intern betrieben werden. Der Chip selber hat nur 8 Pins, davon kann man 5 (ohne Reset und ISP Möglichkeit 6) frei programmieren. Leider kann man auf dem kleinen nicht die normale Servo Bibliothek verwenden, da im Chip kein 16-Bit Timer vorhanden ist. Aber dazu später mehr.

Hardware

Aber wie kriegen wir nun dsa Programm in den Chip?
Das ist jetzt etwas tricky. Wir brauchen dazu

  • einen ISP, den die Arduino IDE kennt. Ich hab sowas:
  • einen kleinen Programmieradapter. Oder wir nehmen einfach unser (hoffentlich vorhandenes) Breadboard und verkabeln die 6 Anschlüsse des ISP mit dem Chip. (attiny_programmiersockel.zip (Target Format)

Man kann auch einen Arduino als ISP programmieren. Wie das geht steht z.B. hier: ArduinoISP

IDE vorbereiten

Zum Programmieren gibt es dann einen kleinen Trick.(Quelle: Programming an ATtiny w/ Arduino 1.0)
Zunächst stellt man das richtige Board ein, also bei uns einen Dem ATtiny85 (internal 8 MHz clock) oder besser Dem ATtiny85 (internal 16 MHz PLL; 4.3 V BOD).
Dann wählt man den richtigen Programmer. (Man kann übrigens auch einen normalen Arduino als Programmer programmieren…)
Jetzt muss man zunächst einen Bootloader programmieren.
Ja, auch wenn tatsächlich keiner eingebrannt wird, weil wir keinen brauchen. Aber dadurch werden im Chip die richtigen Einstellungen gemacht und der Chip rennt danach mit der richtigen Taktfrequenz. (Nennt man Fuses…)
Und jetzt kann man ganz normal das Programm mit der IDE programmieren.

Bibliothek

Weiter oben habe ich ja bereits aufgeführt, das es nicht so einfach ist, auf den Tinys die normalen Bibliotheken zu verwenden. Deshalb gibt es etliche Varianten. Ich habe für mein FlugESCanCARRC Projekt etliche probiert, aber keine wollte zufriedenstellend zusammen mit meiner RC Bibliothek laufen. Also hab ich eine eigene Bibliothek geschrieben.
Diese gibt's jetzt hier.

TinyServo Bibliothek

Darin ist enthalten: libraries Ordern

  • TinyServo Bibliothek
  • RCReceiver Bibliothek mit Anpassung an den ATTiny
  • MCSTools, das sind verschiedene Makros, die man imemr mal brauchen kann

hardware Ordner

  • Definition der verschiedenen ATTiny Boards.

Ganz wichtig: Die Bibliothek funktioniert nur mit der Arduino 1.0.x IDE. Eine Version für die 1.5 hab ich zwar da, werde ich aber erst veröffentlichen, wenn auch die 1.5 IDE offiziell ist.
ACHTUNG: Bei größeren Projekten kommt es manchmal zu einem Linkerfehler. Da steht dann was von „D:\Sprachen\Arduino-1.0.5\hardware\arduino\cores\arduino/main.cpp:15: relocation truncated to fit: R_AVR_13_PCREL against undefined symbol `serialEventRun()'“ oder was ähnliches. Das Problem ist der Linker der winAVR Version, die sowohl in der 1.0.x wie auch in der 1.5.x Welt dabei ist. Wenn ihr auf diesen Fehler stosst, müßt ihr den Linker austauschen gegen diesen hier. neuer Linker. Einfach das Zip in das Arduino Verzueichniss auspacken. Es wird die Datei <Arduino>\hardware\tools\avr\avr\bin\ld.exe ausgestauscht. (Man kann die alte Datei natürlich vorher sichern.)

Die Bibliotek arbeitet interruptgesteuert und benutzt den Timer 1 dafür. (Timer 0 bleibt für das restliche Arduino System und für die RCReceiver Bibliothek. Da der Timer nur 8Bit hat, gibt es ein paar Einschränkungen.

  • Die Bibliothek kann nur Zeiten von 1ms bis 2ms erzeugen. Das reicht normalerweise aus, aber manche Servos brauchen für den vollen Weg doch etwas mehr „Swing“.
  • Die Auflösung innerhalb dieses Bereiches beträgt 245. Diese werden dann auf den Bereich 0..180Grad gemappt. Das kann manchmal beim Auslesen zu Problemen des Stellwinkels führen.
  • Der Impuls hängt von dem internen 16MHz PLL bzw. vom 8MHz Systemtakt ab. Deswegen würde ich dringend dazu raten, den Chip zu kalibrieren.
  • Die ServoBibliothek kann nur die 5 Pins verwenden. Der 6. Pin, wo normalerweise der Reset liegt, kann icht verwendet werden.

SO und nun viel Spass damit.
Willie

Diskussion

Christian Schweiger, 2014/02/07 11:52
Hallo Herr Klaas,

leider scheint der Link zur Tiny Servo Bibliothek nicht zu funktionieren.
mfg
Christian Schweiger
Melden Sie sich an, um einen Kommentar zu erstellen.
arduino/modellbau/projekte/attiny.txt · Zuletzt geändert: 2018/11/04 10:51 von 127.0.0.1
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0