Benutzer-Werkzeuge

Webseiten-Werkzeuge


attiny85

Dies ist eine alte Version des Dokuments!


ATTINY85 LowPass-Pilight

ATTINY85 - Setup

Gekauft habe ich eine Developer-Edition mit USB-Anschluss. Das Schaltbild und weitere Infos gibt es hier. Das sollte alles einfacher machen. In Arduino unter Einstellungen bei Boardmanagern folgendes eintragen

http://digistump.com/package_digistump_index.json

In Werkzeuge→Board …→Boardverwalter nach „Digistump AVR Boards“ suchen und installieren. Dann das Default-Board auswählen. Wichtig: Nicht einstecken, bis Arduino dich auffordert! Sonst kommt die Meldung

Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)
Assertion failed: (res >= 4), function micronucleus_connect, file library/micronucleus_lib.c, line 100.
> Please plug in the device ... 
> Press CTRL+C to terminate the program.

Es hat auch geholfen, alle USB-Devices (und leere Kabel) abzuziehen. Aus der Anleitung: Digispark only shows up as a programmable device for 5 seconds, after that it will start running its code (when it is new and un-programmed this means it will blink) and disappear or act like the USB device you programmed it to act like.]

ATTINY85 - Programmieren

Eine LED mit 220Ohm Widerstand an PB0 (MOSI); PB2 (SCK/ADC1); PB4 >(ADC2) und man kann mit wenig Code LEDs schalten (Stromversorgung nicht über das USB-Programmier-Kabel vom Rechner, da sonst nicht alle Pins gehen.

pinMode(PIN, OUTPUT); # 0,2 oder 4 für PIN
digitalWrite(PIN, HIGH);
digitalWrite(PIN, LOW);

Interrupt-Programmierung ist in diesem Artikel mit einem Beispiel sehr schön erklärt. Auch ein Beispiel mit Asynchronen Timern ist da zu finden.

Ich habe daraus gelernt, dass durch 'volatile' der Compiler die Variable nicht ratsoptimiert, wenn sie nur in einer interrupt-routine aufgerufen wird, die aus dem code nicht explizit angesprungen wird. PORTB sind die Pins 0-4 in einem Register zusammengefasst.

Dokumentation zum Chip findet man in der Atmel 8-bit AVR Microcontroller with 2/4/8K Bytes In-System Programmable Flash

ATTINY85 - FUSE

FUSE das hat mich konfuse gemacht - sind: Einstellungsbits, mit denenman z.B. die Taktfrequenz von 8MHz auf 1MHz umstellen kann. Hackaday erklärt hier Grundlegendes und hier geht embedderslife ins Details. Lock und Suse Settings sind jeweils bei 0 aktiv, nicht wie gewohnt bei 1 seufz Im Link zu den Details steht, wie man berechnet, was man bei avrdude.exe angeben muss - im Beispiel für einen ATmega, nicht für einen ATTINY.

Da der Entwickler, von dem ich das erste Beispiel habe, beim ATTINY85 „-U lfuse:w:0x62:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m“ drin hat, sollte das als Referenz dienen. Die angegebenen Werte sind die im Datenblatt als default eingestellten Werte. Man müsste Bit 7 auf 1 setzen, wenn man statt 1GHz die 8GHz haben wollte, also statt 0x62 dann 0xe2.

Mehr Beispiele Blinken mit Timer-Interrupt; Getting Started mit ATTINY85 und den Fuse-Einstellungen; Debounce Push-Button da wartet er immer 200 Microsekunden, bevor er den Button als gedrückt oder nicht 'erkennt'.

AVRFuseCalc

Es war wohl doch keine so gute Idee, den Digispark-ATtiny85 zu bestellen. Da der RESET-Pin durch den eingebauten Bootloader deaktiviert ist, kann man die fuse nicht so einfach setzen. Geht nur kompliziert - siehe in der Digispark Dokumentation.

ATTINY85 - DIGISPARK - FUSE setzen, um pilight lowpass Filter zu nutzen

Weiteres Vorgehen:

  • versuchen, mit dem Raspberry zu programmieren (geht wahrscheinlich nicht)
  • mit dieser Anleitung über einen Arduino das ganze probieren

Von der Anleitung für V3 NICHT avrdude installiert, sondern mit „sudo apt-get install avrdude“, da es bei den dpkg Abhängigkeitsverhältnis-Probleme gab.

Nachdem ich GPIO10_MOSI_Pin19; GPIO9_MISO_Pin21 GPIO11_SCLK_Pin23 und GPIO13_RESET_Pin33 angeschlossen hatte, habe ich die Datei .avrduderc (falsch) angepasst. Dann kam immer der Fehler:

gpio/direction: No such file or directory

Mit folgender Datei unter root angelegt(!) geht es:

default_programmer = "mit_gpio";

programmer
  id    = "mit_gpio";
  desc  = "Use sysfs interface to bitbang GPIO lines";
  type  = gpio;
  reset = 13;
  sck   = 19;
  mosi  = 10;
  miso  = 9;
;

Problem mit dem Makefile gab es auch noch. Er mag die Doppelpunkte im Pfad nicht. Also statt

geht nicht:
sudo $(AVRDUDE) -p $(AVRDUDEMCU) -P gpio -c gpio -b 10000 -U flash:w:$(TARGET)_$(AVRDUDEMCU).hex
geht:
sudo $(AVRDUDE) -p $(AVRDUDEMCU) -P gpio -c gpio -b 10000 -U $(TARGET)_$(AVRDUDEMCU).hex
attiny85.1615830648.txt.gz · Zuletzt geändert: 2021/03/15 17:50 von varnholt