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!
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.
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 | } |
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.
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)
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)
Uwe K. schrieb: > Wenn es um die Frage Assembler, Basic, C oder C++ geht, dann: > > C (GCC) +1 Gruß Max
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
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.
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
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
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?
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/
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?
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.
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.
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.
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
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.