Forum: Mikrocontroller und Digitale Elektronik Welche Programmierung für Attiny85


von Martin H. (dermaddin)


Lesenswert?

Hallo zusammen,

bin aktuell dabei ein paar sehr einfache Arduino Projekte 
einzuschrumpfen auf einen ATTINY. Habe zu diesem Zweck das OLIMEXINO-85S 
gekauft und getestet

https://www.olimex.com/Products/Duino/AVR/OLIMEXINO-85S/open-source-hardware

Funktioniert alles wie gewünscht. Mein Problem ist nur der Boot Vorgang 
des boards. Um es zu programmieren setzt man die IDE in den 
Programmiermodus und steckt dann das Board an, dieses Bootet dann 
erstmal ( immer wenn Versorgungsspannung anleigt ) im Programmiermodus 
hoch und empfängt dann den neuen Code. Ab dem Zeitpunkt möchte ich es 
ohne diesen Programmier Bootmodus verwenden da der Bootvorgang auf diese 
Weise 8 Sekunden lang dauert und der Controller nachher relativ 
zeitkritisch hochfahren soll. Wie kann ich das ändern?

Ich weiß, dass es mehrere Möglichkeiten gibt ein ATTINY zu 
programmieren, sogar mehrere mit Arduino. Frage ist, welche 
Programmiersprache, welcher Bootloader für Arduino wäre der schnellste 
für meine Anwendung? Kriege ich das auf das Olimexino Board? ( ist ja 
kein Problem ein anderes ATTINY Board zu bestellen, sind ja spottbillig 
[könnte mir sogar ein eignes herstellen, habe die möglichkeit SMD 
Bauform zu löten und Platinen zu fräsen])


Vielen Dank im Voraus!

von Rainer U. (r-u)


Lesenswert?

Martin H. schrieb:
> Frage ist, welche
> Programmiersprache, welcher Bootloader für Arduino wäre der schnellste
> für meine Anwendung?

Also am schnellsten wäre es ganz OHNE Bootlader (weil der ja immer eine 
definierte Zeit wartet, ob auf der TX was 'reinkommt). Mit AVR Studio in 
ASM oder C oder mit Bascom in Basic das Programm erstellen und mit einem 
USB-ISP programmieren - Dein "Board" würde sich dann auf den Chip 
beschränken plus Reset-Beschaltung plus Stützkondensator plus Pinheader 
oder pads für die Pins, die Du benutzen willst.

von Martin H. (dermaddin)


Lesenswert?

Vielen Dank für die schnelle Antwort. Habe mir schon gedacht, dass das 
programmieren ohne Bootloader das schnellste wäre.

Könnte ich speziell dieses Board ohne einen Brenner so wie du es 
beschrieben hast Programmieren? Habe ein paar beispiele gesehen wo Leute 
einen Arduino UNO als programmiergerät verwendet haben, wäre das hierfür 
auch zu gebrauchen oder müsste dafür trotzdem ein Arduino Bootloader auf 
dem ATTINY sein?

Habe an Arduino Boards 2x UNO 1x NANO zur Verfügung falls das hilft.

Welche Programmiersprache wäre für mich am naheliegensten im vergleich 
zu Arduino. Mein Programm wird nur einen Taster abfragen und daraufhin 
per 433mhz Sender

http://www.amazon.de/dp/B00ATZV5EQ/ref=sr_ph?ie=UTF8&qid=1410778575&sr=1&keywords=433mhz

Eine festgelegte 8byte lange Botschaft 10 mal Senden [funktioniert 
bereits]
1
// Sender
2
3
4
#include <VirtualWire.h>
5
6
7
8
9
void setup()
10
{
11
  pinMode(3, INPUT); //Taster
12
  pinMode(1, OUTPUT);  // LED
13
  vw_set_tx_pin(0); // Senderanschluss
14
  vw_setup(2000); // Datenrate
15
}
16
17
byte count = 0;
18
char msg[8] = { 'k','l','i','n','g','e','l','#' };
19
20
void loop()
21
{
22
  if (count == 0 && digitalRead(3) == LOW)
23
  {
24
    count = 10;
25
  }
26
  else if (count > 0)
27
  {
28
    digitalWrite(1, HIGH);
29
    vw_send((uint8_t *)msg, 8);
30
    vw_wait_tx();
31
    digitalWrite(0, LOW);
32
    count = count - 1;
33
  }
34
    else
35
    {
36
      digitalWrite(1, LOW);
37
    }
38
}

von Amateur (Gast)


Lesenswert?

Wenn Du direkt, d.h. ohne die Arduino-Umgebung arbeiten willst, so 
solltest Du bedenken, dass setup() und loop() normalerweise nicht zur 
Verfügung stehen.
pinMode und ähnliches sind auch aus der Arduino-Umgebung.

Ein ISP wird darüber hinaus auch noch nötig.

von Uwe K. (ukhl)


Lesenswert?

Martin H. schrieb:
> Welche Programmiersprache wäre für mich am naheliegensten im vergleich
> zu Arduino.

Wenn es um die Frage Assembler, Basic, C oder C++ geht, dann:

C  (GCC)

von Karl H. (kbuchegg)


Lesenswert?

Amateur schrieb:
> Wenn Du direkt, d.h. ohne die Arduino-Umgebung arbeiten willst, so
> solltest Du bedenken, dass setup() und loop() normalerweise nicht zur
> Verfügung stehen.

Nicht den Arduino Bootloader zu verwenden bedeutet ja nicht 
zwangsläufig, dass er auf die Arduino Laufzeitumgebung verzichten muss.

Selbstverständlich kann er sich aus der Arduino-IDE ein ganz normales 
Hex-File erzeugen lassen und das mit dem ISP-Brenner seiner Wahl in den 
µC brennen. Das Problem ist halt nur, dass sein Board (anscheinend) die 
ISP Pins nicht herausgeführt hat, weil der Hersteller davon ausgeht, 
dass der Bootloader benutzt wird (was bei einer Anbindung per USB ja 
auch Sinn macht)

von Max B. (theeye)


Lesenswert?

Uwe K. schrieb:
> Wenn es um die Frage Assembler, Basic, C oder C++ geht, dann:
>
> C  (GCC)

+1

Gruß Max

von Karl H. (kbuchegg)


Lesenswert?

Martin H. schrieb:

> Könnte ich speziell dieses Board ohne einen Brenner so wie du es
> beschrieben hast Programmieren?


Nein.
Entweder du überträgst das compilierte Programm per Bootloader in den 
Tiny und der Bootloader programmiert dann damit das Flash.
Oder du benutzt einen Programmer um das Programm in den Tiny zu brennen.
So ein Programmer erledigt das über die ISP Schnittstelle (d.h über ein 
paar von Atmel definierte Pins).

Eine andere Möglichkeit gibt es nicht.

> Habe ein paar beispiele gesehen wo Leute
> einen Arduino UNO als programmiergerät verwendet haben, wäre das hierfür
> auch zu gebrauchen oder müsste dafür trotzdem ein Arduino Bootloader auf
> dem ATTINY sein?
Würde funktionieren.
Nur ist dann die USB Schnittstelle auf deinem Einsatz-Board erst mal 
ohne Funktion und du müsstest ein Kabel-ISP vom Brenner zum Einsatzboard 
einrichten.

Mit der Programmiersprache hat das erst mal überhaupt nichts zu tun.
Du musst da schon ein wenig differenzieren.
Das eine ist die Erstellung des Programms, das andere ist wie das 
Programm in den Tiny kommt. Nur weil deine IDE beide Funktionen in 
Personalunion vereint, bedeutet das nicht, dass man da die Einzelteile 
nicht ersetzen könnte.

: Bearbeitet durch User
von Rainer U. (r-u)


Lesenswert?

Martin H. schrieb:
> Könnte ich speziell dieses Board ohne einen Brenner so wie du es
> beschrieben hast Programmieren?

nein, Du brauchst einen ISP-Programmierer und herausgeführte ISP-Pins 
(siehe Antworten oben).

Martin H. schrieb:
> Habe ein paar beispiele gesehen wo Leute
> einen Arduino UNO als programmiergerät verwendet haben, wäre das hierfür
> auch zu gebrauchen oder müsste dafür trotzdem ein Arduino Bootloader auf
> dem ATTINY sein?

geht evtl. (hab das auch mal gelesen), aber mir wär's zu mühsam - Die 
ISP-Pins müsstest Du in jedem Fall anlöten und die ISP-Programmiergeräte 
gibt's fertig für einen einstelligen Euro-Betrag.

von Martin H. (dermaddin)


Lesenswert?

Vielen Dank für die zahlreichen Antworten. Also was ich jetzt für mich 
hier raus entnommen habe ist:

- Ein ISP Programmer ist nicht zwangsläufig notwendig aber eine günstige 
komfortable Sache. [ pins anlöten etc. ist überhaupt kein Problem, kann 
wie gesagt sogar SMD löten. Bin ausgebildeter Elektroniker für Geräte 
und Systeme ]. Habe mal den Programmer hier rausgesucht

http://www.amazon.de/Programmierer-Adapter-3-3V-USBASP-Download-Programm-ISP-AVR/dp/B00AVRHVPO/ref=sr_1_1?ie=UTF8&qid=1410781959&sr=8-1&keywords=isp+programmer

- Ich kann die Arduino IDE weiterhin verwenden, muss mir das ganze nur 
als HEX File ausgeben lassen und über den Programmer einspielen. Dadurch 
wird der "langsame" Bootvorgang des Arduino Bootloaders umgangen. 
Natürlich muss jede änderung am Code wieder via Programmer eingespielt 
werden.


Bitte korrigiert mich, wenn ich irgendwo falsch liege

von Karl H. (kbuchegg)


Lesenswert?

Martin H. schrieb:

> - Ich kann die Arduino IDE weiterhin verwenden, muss mir das ganze nur
> als HEX File ausgeben lassen und über den Programmer einspielen. Dadurch
> wird der "langsame" Bootvorgang des Arduino Bootloaders umgangen.
> Natürlich muss jede änderung am Code wieder via Programmer eingespielt
> werden.

Bis jetzt soweit richtig.
Was noch fehlt ist, dem Tiny per Fuse mitzuteilen, dass es keinen 
Bootloader mehr gibt. Auch das wird mit dem ISP Programmer gemacht.
Im denke, im Prinzip müsste es bei bereits programmiertem Tiny sogar 
reichen, ganz einfach die Bootloader Fuses zurückzusetzen um den 
Bootloader komplett abzuschalten. Ich denke nicht, dass die Arduino 
Laufzeitumgebung auf eine Initialisierung durch den Bootloader 
angewiesen ist.

: Bearbeitet durch User
von Martin H. (dermaddin)


Lesenswert?

Hab jetzt den von mir zuvor genannten Brenner bestellt. Soweit wie ich 
das in anderen Threads gelesen hab, muss man die Fuse einfach nur in 
eine File mit einfügen. Denke mal, dass ich das schnell per Google 
rausfinden kann sobald es soweit ist.

Ich muss mir jetzt also nur das Datenblatt des ATTINY runterladen und 
die ISP Pins raussuchen und diese dann nachher mit meinem Programmierer 
verbinden. Kann es da evtl Probleme geben aufgrund der Bestückung der 
Platine?

von Uwe S. (de0508)


Lesenswert?

Martin H.,

nee die Fusebits ändern ist ein eigener Vorgang und hat nichts mit dem 
Programm zu tun.

Schau dir die Doku zu avrdude 5.5 (oder 6.0) und Engbedded Atmel AVR® 
Fuse Calculator an.

# 
http://download-mirror.savannah.gnu.org/releases/avrdude/avrdude-doc-5.5.pdf
# http://www.engbedded.com/fusecalc/

von Martin H. (dermaddin)


Lesenswert?

Ich bin leider auf ein Problem mit dem ATTINY gestoßen. Für meine 
zukünfitge Anwendung reichen die Ports nicht aus da ich auch eine SPI 
Schnittstelle verwenden werde. Der Programmer wird weiterhin ja 
funktionabel sein, da ich vorhabe einen Atmega328p wie auf dem NANO zu 
verwenden und so wie ich das der genannte Controller mit zu den 
Unterstützden des Programmers gehört.

Für erste Tests wollte ich mri dieses Board holen

http://www.amazon.de/verbesserte-ATmega328P-elektronische-Bausteine-Interactive/dp/B00FR0W9Z2/ref=sr_1_2?ie=UTF8&qid=1410865318&sr=8-2&keywords=atmega328p

Obwohl der Controller anscheinlich keinen Bootloader integriert hat und 
daher nur per externem Brenner programmiert werden kann, möchte ich 
trotzdem fragen ob ihr meiner Vermutung zustimmt, dass ich die 
entsprechende Pinbelegung raussuchen muss und danach "einfach" über die 
Pfostenstecker außen an der Platine programmieren kann. Oder muss ich 
mir sorgen machen, dass du Widerstände,LEDs etc. es zu Problemen kommen 
kann?

von Amateur (Gast)


Lesenswert?

Die meisten Atmels lassen sich mit den meisten ISPs programmieren.
Fast immer gibt es auch, zu DEINEM ISP, eine Liste der "unterstützten" 
Devices im Netz.

von Karl H. (kbuchegg)


Lesenswert?

Martin H. schrieb:

> Für erste Tests wollte ich mri dieses Board holen
>
> 
http://www.amazon.de/verbesserte-ATmega328P-elektronische-Bausteine-Interactive/dp/B00FR0W9Z2/ref=sr_1_2?ie=UTF8&qid=1410865318&sr=8-2&keywords=atmega328p
>
> Obwohl der Controller anscheinlich keinen Bootloader integriert hat

Da würde ich noch mal genauer beim Hersteller selber nachsehen.
Da Amazon das hier
http://www.amazon.de/XINTE-Downloader-USB-Serielles-Download-USBTO232/dp/B00GBVMWBC/ref=pd_bxgy_ce_img_y
als Zusatzprodukt bewirbt und mir dieses Teil sehr nach USB/Rs232 
Umsetzer aussieht. Der Name "Downloader" weckt da schon sehr starke 
Assoziationen in Richtung Bootloader.
Zumal auch seltsam ist, dass auf der Prozessorplatine die ISP Pins nicht 
markiert oder zusammengruppiert sind.

von Martin H. (dermaddin)


Lesenswert?

Hab jetzt erstmal die Finger vom Atmega328p gelassen und mir gedacht, 
dass ich erstmal mit dem tiny experimentiere.

Der genannte Programmier ist angekommen, AVRdude habe ich ebenfalls 
instlliert sowie den USBasp Treiber.

Mithilfe dieses Tutorials
http://www.ladyada.net/learn/avr/avrdude.html
Habe ich es dann geschafft das von ladyada zur Verfügung gestellte 
"test_leds.hex" in den Controller zu laden. Es hat auch einwandfrei 
funktionert.

Nun wollte ich mein Programm vom Arduino einfügen. Dazu habe ich HEX 
Datei die beim Kompilieren entsteht aus 
C:\Users\Martin\AppData\Local\Temp\build2697018315192744283.tmp\Klingel_ 
Sender.cpp.hex  herauskopiert und in den passenden Ordner für AVRdude 
kopiert.

Am ende des posts seht ihr den kompletten Verlauf aus dem cmd Fenster.

Leider funktioniert das Programm nicht, es sendet keine Daten mehr per 
Funk. Der Arduinocode aus dem die Hexfile generiert wurde is definitiv 
der richtige.

Müssen hier jetzt evtl die Fuses gesetzt werden über die wir zuvor 
gesprochen haben? Das Testprogramm hat ja auch ohne funktioniert und 
zwar sofort nach dem einstecken, es gab also keinen Bootmodus mehr



C:\Users\Martin>avrdude -c usbasp -p t85 -U 
flash:w:Klingel_Sender.cpp.hex

avrdude: warning: cannot set sck period. please check for usbasp 
firmware update
.
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 
0.04s

avrdude: Device signature = 0x1e930b
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: warning: cannot set sck period. please check for usbasp 
firmware update
.
avrdude: reading input file "Klingel_Sender.cpp.hex"
avrdude: input file Klingel_Sender.cpp.hex auto detected as Intel Hex
avrdude: writing flash (2898 bytes):

Writing | ################################################## | 100% 
1.07s



avrdude: 2898 bytes of flash written
avrdude: verifying flash memory against Klingel_Sender.cpp.hex:
avrdude: load data flash data from input file Klingel_Sender.cpp.hex:
avrdude: input file Klingel_Sender.cpp.hex auto detected as Intel Hex
avrdude: input file Klingel_Sender.cpp.hex contains 2898 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 
0.75s



avrdude: verifying ...
avrdude: 2898 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Martin H. schrieb:
> Habe ich es dann geschafft das von ladyada zur Verfügung gestellte
> "test_leds.hex" in den Controller zu laden. Es hat auch einwandfrei
> funktionert.
>
> Nun wollte ich mein Programm vom Arduino einfügen. Dazu habe ich HEX
> Datei die beim Kompilieren entsteht aus

Martin H. schrieb:
> Leider funktioniert das Programm nicht, es sendet keine Daten mehr per
> Funk. Der Arduinocode aus dem die Hexfile generiert wurde is definitiv

 Es verwundert mich immer wieder.
 Ein Programm funktioniert, das andere nicht, aber es wird nach Fuses,
 Einstellungen und solchen Sachen gefragt.
 Alles kann falsch sein, bloß dein Programm nicht...

 Aber egal:
 Wo befindet sich deine InterruptTable ?
 Wo zeigt der ResetVektor hin ?
 Das wird mit Fusen eingestellt und wenn dein Programm ISR benutzt,
 kann es in die Hose gehen.

: Bearbeitet durch User
von Martin H. (dermaddin)


Lesenswert?

Ich bin da leider überfragt. Werde gleich mal in google nachschauen.

Zur Info nochmal kurz:

Das Programm ist in Arduino IDE geschrieben und auch hierüber auf das 
Board geschrieben worden. Das Programm hat soweit fehlerfrei 
funktioniert.

Ich wollte jetzt den Bootloader umgehen und das Programm direkt auf den 
Attiny85 bringen um die Zeitverzögerung der Funktion des Programmes nach 
einschalten zu verringern. Zuvor hat der Controller immer etwa 5-8 
Sekunden gewartet bis er aus dem Programmiermodus ins eigentliche 
Programm gewechselt hat.

Programmieren direkt via ISP über einen Programmer habe ich zuvor nie 
gemacht, kann mir sehr gut vorstellen, dass im Programm was geändert 
werden muss. Nur ich weiß nicht wo und wie, denn mit der hex file die 
ich aus der Arduino IDE entehme wüsste ich nichts anzufangen außer sie 
halt aufzuspielen auf den controller über den Programmer.

von Martin H. (dermaddin)


Lesenswert?

Ich schäme mich grade in Grund und Boden. Hatte die Arduino IDE noch auf 
das NANO Board eingestellt was als Receiver dient, da kann natürlich 
nichts passendes kompiliert werden.

Nun umgestellt lies sich das Programm rüberschieben. Der Sender regiert 
auf den Taster, so wie es sich gehört. Jedoch kommen meine Nachrichten 
nicht an.

Ich werde mal etwas rumexperimentieren um den Fehler zu finden und 
danach meine Lösung (falls ich eine finde) hier posten. Denke mal das 
der clk divide drinne ist, da die Zeit die die LED leuchtet die mir 
signalisiert, dass eine Nachricht gesendet wird wesentlich länger 
zugeschaltet ist als zuvor.

von c-hater (Gast)


Lesenswert?

Martin H. schrieb:

> Programmieren direkt via ISP über einen Programmer habe ich zuvor nie
> gemacht, kann mir sehr gut vorstellen, dass im Programm was geändert
> werden muss.

Generell normalerweise nicht. Allenfalls, wenn die Anwendung Teile des 
Bootloaders benutzt, wäre sowas nötig. Die einzigen Fälle, in denen das 
möglicherweise passiert, ist wenn auch die Anwendung in den Flash 
schreibt oder aus der Anwendung in den Bootloader gesprungen wird.

von Kahn P. (Gast)


Lesenswert?

Tut mir leid ich habe voll viel geschrieben , und dann sende ich es ab, 
und es kommt eine blanke Seite.. Alles weg sehr sehr Ärgerlich , das 
Forum muss repariert werden !!!!!!!!!!!!!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.