Ich versuche gerade einen ATMega8535 (um genau zu sein ATMEGA8535-16PU) mit Arduino zu programmieren.
Einen Bootloader gibt es meines Wissens nicht, also würde ich den Code einfach per ICSP mit meinem Arduino-Mega auf den Chip übertragen.
zum programmieren dann die Pins 6-9 (MOSI, MISO, SCK, RESET) zu den entsprechenden am Arduino-Mega (50-53)
jetzt will ich den Blink-sketch zum Testen hinaufladen, das scheitert jedoch schon beim kompilieren, ich bekomme die Fehlermeldung, dass die Datei "Arduino.h" gefunden wurde, und dadurch die Funktionen nicht erkannt werden:
Blink.ino:10:21: error: Arduino.h: No such file or directory
Blink.ino: In function 'void setup()':
Blink:15: error: 'OUTPUT' was not declared in this scope
Blink:15: error: 'pinMode' was not declared in this scope
Blink.ino: In function 'void loop()':
Blink:20: error: 'HIGH' was not declared in this scope
Blink:20: error: 'digitalWrite' was not declared in this scope
Blink:21: error: 'delay' was not declared in this scope
Blink:22: error: 'LOW' was not declared in this scope
so, das ist das Problem, ich hoffe jemand kann helfen
schon einmal danke für jede Antwort, lg
wiseman
Deine nachinstallierte Software wird auf einer älteren IDE basieren und liefert darum eine WProgram.h mit.
Die Arduino-Software >1.x.x erwartet aber eine Arduino.h
(hatte doch noch Zeit) also einfach in der main.cpp auf Arduino.h und diese in dieselbe directory kopieren bringt leider nichts, dann fehlen ihm ein paar andere Dateien. Wenn man den ganzen core-Ordner reinkopiert und nix ersetzt was schon drin ist kommt:
C:\Program Files (x86)\Arduino\hardware\arduino-extras\cores\arduino\IPAddress.cpp: In member function 'virtual size_t IPAddress::printTo(Print&) const':
C:\Program Files (x86)\Arduino\hardware\arduino-extras\cores\arduino\IPAddress.cpp:50: error: void value not ignored as it ought to be
C:\Program Files (x86)\Arduino\hardware\arduino-extras\cores\arduino\IPAddress.cpp:50: error: in evaluation of 'operator+=(size_t, void)'
C:\Program Files (x86)\Arduino\hardware\arduino-extras\cores\arduino\IPAddress.cpp:51: error: void value not ignored as it ought to be
C:\Program Files (x86)\Arduino\hardware\arduino-extras\cores\arduino\IPAddress.cpp:51: error: in evaluation of 'operator+=(size_t, void)'
C:\Program Files (x86)\Arduino\hardware\arduino-extras\cores\arduino\IPAddress.cpp:53: error: void value not ignored as it ought to be
C:\Program Files (x86)\Arduino\hardware\arduino-extras\cores\arduino\IPAddress.cpp:53: error: in evaluation of 'operator+=(size_t, void)'
gehts nicht irgendwie, dass man die kompilierte hex-Datei per upload using programmer auf den chip überträgt?
Ich kenne die arduino-extras nicht. Vermutlich sind die mit der aktuellen Version der IDE nicht mehr kompatibel. Desweiteren kenne ich den Atmega8535 überhaupt nicht. Worin liegt der Vorteil, diese gegenüber den typischen Arduino MCU (Mega2560, Mega328P, Mega168P, 16u2....). Weitere Probleme wirst du später vermutlich ebenfalls haben in der Form, das fast jede externe Libary mühsam angepasst werden muss.
mit gehts eigentlich mehr ums Prinzip - ich will generell auch andere ATMegas verwenden können und denke mir, wenn ich den 8535 schaffe (den ich eben schon habe...) dann schaffe ich auch praktisch alle anderen ATMegas. Gleichzeitig will ich die Arduino-Umgebung verwenden wegen der Einfachheit halber.
und ja, die files sind für core 0020 geschrieben, das verursacht offenbar die Probleme. Was ich mir irgendwie nicht vorstellen kann ist, dass man eine kompilierte fertige hex-Datei (die ja in irgendeinem temp-Verzeichnis liegt) nicht irgendwie mit der Arduino-IDE auf den Chip übertragen kann?!
Das könnte zum großen Problem werden. Ein Grund, wieso es für den Arduino so viele direkt funktionsfähige Libarys gibt, liegt daran, die eingesetzte Hardware fast identisch ist. Die Register sind weitesgehend identisch bzw. bedürfen nur minimalen Anpassungen.
Die Attinys waren und sind für den Arduino nicht gedacht gewesen, da diese bis auf der mir bekannten (Attiny2313, 481, 841) keine Hardware UART Schnittstelle haben. Somit besteht hier erst einmal keine Möglichkeit, diese einfach über USB mithilfe eines Bootloaders und 16U2 zu flashen. Jedoch gibt es durch aus genügend Leute, die mit einem AVR ISP Programmer (zur not auch den UNO) nutzen, um ihre Schaltung auf ein Minimum zu reduzieren. Daraus hat sich dann eine kleine Gruppe gebildet, die die Cores für die Attinys angepasst haben.
Wenn man es geschafft hat, einen bestimmen Atmega oder Attiny in die IDE einzubinden, ist das noch keine Garantie das man es mit weiteren ebenfalls so machen kann. Die meisten Libarys (vorallem die auf andere Register zugreifen wollen) werden dir die "Hölle heiß machen". Das hat dann nichts mehr mit der "Einfachheit halber die Arduino Umgebung nutzen" zu tun.
Die 0020 ist bereits sehr alt. Inzwischen hat sich da einiges getan (nachzulesen im Changelog).Mit Glück erreichtst du den Devoloper und fragst an, ob es dazu noch ein neueres Release für aktuelle Versionen geben wird. Wobei mir der Sinn noch nicht in den Kopf will, warum jemand einen solchen MCU noch mit einbinden möchte.
Das Teil ist ja ein riesen Teil. Bietet dafür aber einfach zu wenig interessante Features.
Atmega8535
Flash (Kbytes):8 Kbytes
Pin Count:44
Max. Operating Freq. (MHz):16 MHz
CPU:8-bit AVR
Max I/O Pins:32
Ext Interrupts:3
Der Atmega328P ist wie aus den Daten hervor geht bereits einiges ausgereifter. Selbst die kleinen Attinys (84/85/...) sind hier bereits in der Lage dem Atmega8535 Paroli zu bieten.
danke für die Antwort, vermutlich hast du ja eh recht und es bringt sowieso nix
beim Developer werd ich es noch versuchen, vielleicht komm ich ja auf was, falls das so ist werd ich die (hoffentlich) "Lösung" noch posten.
So teuer sind die Atmega328P auch nicht. Pro Mini gibts original für nen 10er(exp-tech, watterott,...). Woanders auch deutlich günstiger von den Chinesen.
Was ich vorhin vergessen habe zu schreiben. Wenn die Hex-File für den 8535 bereits von jemanden erfolgreich kompiliert wurde, kannst du diese auf deinen 8545 aufspielen.
die arduino-extras.zip in den hardware-Ordner der alten IDE entpacken
wenn man das board dann nicht unter tools auswählen kann weil zu viele angezeigt werden einfach die überflüssigen boards aus der boards.txt in den arduino-extras löschen
das Programm, dass man auf den Chip spielen will dann mit der alten IDE kompilieren, die HEX-Datei findet man in einem temporären Verzeichnis (bei mir z.B. C:\Users\Administrator\Lokale Einstellungen\Temp\build3412405061847703349.tmp) - dieser Ordner wird erstellt wenn man die Arduino-IDE das erste mal startet -> einfach schauen welcher Ordner neu entsteht, dort liegt dann die HEX-Datei, z.B. Blink.cpp.hex (ich habe sie in Blink.hex umbenannt). Man kann die Datei einfach einmal mit dem Texteditor öffnen, dann sollten nur HEX-Zeilen drin sein.
WinAVR installieren
ArduinoISP auf das Arduino-board laden und alles entsprechend verkabeln (MISO, MOSI, SCK, Reset & Vcc/Gnd)
in der Konsole (einfach cmd.exe) braucht man dann entsprechend die Befehle um den Chip zu programmieren, für den AtMega8535 sieht er so aus (beim Upload zuerst in der Konsole den Ordner navigieren, wo die Blink.hex liegt):
Verbindungscheck (muss ein ok liefern)
avrdude -c avrisp -p m8535 -P com3 -b 19200
für eine Erklärung des Befehls siehe LINK
Die Fuses (extended, low, high) sind meistens bei einem frischen Chip so eingestellt, dass keine externe Clock verwendet wird (anschließen auf XTAL1 & XTAL2)
auslesen der Fuses in eine Datei geht über den Befehl (low: lfuse, high: hfuse, extended: efuse):
avrdude -c avrisp -p m8535 -P com3 -b 19200 -U lfuse:r:lfusefile.hex:i
ein bisschen abändern dann kann man damit die fuses setzen, wie genau steht im Datenblatt
Bootloader gibts für den 8535 keinen, aber in den Arduino-extras ist für viele Chips in der oben genannten List einer vorhanden - welche genau weiß ich selber nicht.
für die Pinbelegung siehe für den 8535 unter \arduino-extras\cores\arduino\pins_unknown.cxx, wenn ich es richtig verstehe werden den PA-pins die Werte 0-7 (e.g. PA0 = 0, PA1 = 1, ...), den PB pins 8-15 (PB0 = 8, ...) usw. zugeordnet (stimmt bei mir beim Blink-sketch zumindest). Diese Zuordnung wird für alle Chips verwendet wo nicht speziell eine Datei vorhanden ist