ATMega8535 mit Arduino programmieren

Hi

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.

Dazu habe ich:

  • aktuelle Arduino-Software (1.0.5-r2)
  • die extra-Daten von Alternate CORE files for Arduino besorgt und entsprechend in den hardware-Ordner gelegt
  • auf den Arduino-Mega den Arduino as ISP-sketch geladen
  • Arduino as ISP als Programmer, korrekter Port, als Board "Arduino-Test-Atmega8535"

Die Verkabelung habe ich entsprechend dem Breadboard-Arduino gemacht, e.g.

  • auf XTAL2 und XTAL1 liegt ein externer Oszillator (16MHz) mit den entsprechenden Kapazitäten (Pins 12, 13)
  • der Reset-Pin hängt über einen 10k Widerstand auf 5V (Pin 9)
  • Gnd-Pins auf Gnd (Pins 11, 31)
  • Vcc und AVCC auf 5V (Pins 10, 30)
    Datasheet Atmega8535: http://www.farnell.com/datasheets/6573.pdf

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

aktuelle Arduino-Software (1.0.5-r2)

Das wird Teil des Problems sein....

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

ahja, das hilft schon einmal gewaltig...

hab nachgesehen, anscheinend wurde mit core-0020, hab ich mir besorgt - und es kompiliert unter Atmega8535 - danke :slight_smile:

jetzt gibts aber in dieser Version keinen Button für "upload mit Programmer" - wie kann ich da vorgehen?

hik

jou, gab es damals noch nicht.

versuch den umgekehrten (und besseren) weg.

such in Deinen libraries, wo die WProgram.h inkludiert wird, und ändere es in Arduino.h .

auf dem bild siehst Du, wo es drinsteht, alle im core-verzeichnis. vor allem die main ist ein kandidat.

gruß stefan

w.gif

Und wie willst du die Fuses setzen?

sind die Fuses nicht schon durch

arduino_atmega8535.name=Arduino-Test-Atmega8535

arduino_atmega8535.upload.protocol=stk500v2
arduino_atmega8535.upload.maximum_size=7168
arduino_atmega8535.upload.speed=38400

arduino_atmega8535.bootloader.low_fuses=0xEC
arduino_atmega8535.bootloader.high_fuses=0x18
arduino_atmega8535.bootloader.extended_fuses=0xFD
arduino_atmega8535.bootloader.path=atmega
arduino_atmega8535.bootloader.file=stk500boot_v2_notdefined.hex 
arduino_atmega8535.bootloader.unlock_bits=0x3F
arduino_atmega8535.bootloader.lock_bits=0x0F

arduino_atmega8535.build.mcu=atmega8535
arduino_atmega8535.build.f_cpu=16000000L
arduino_atmega8535.build.core=arduino

(aus der boards.txt) gesetzt?

das mit den Libraries werd ich morgen versuchen, danke schonmal :slight_smile:

(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?

hat niemand eine Idee?

Nö.

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

Atmega328P
Flash (Kbytes):32 Kbytes
Pin Count:32
Max. Operating Freq. (MHz):20 MHz
CPU:8-bit AVR
Max I/O Pins:23
Ext Interrupts:24

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.

noch einmal danke für die Hilfe bisher
lg
wiseman

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.

Jedoch geht das nicht mit der IDE selber. Das kann man jedoch mit ua avrdude oder Ponyprog machen.
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

so, wie versprochen ein update, ich hab es gerade geschafft.

Um den AtMega8535 (und sämtliche andere in dieser (Liste) zu programmieren benötigt man folgendes:

  • alte Arduino-IDE core0020

  • arduino-extras.zip

  • WinAVR

  • 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

Upload:
avrdude -c avrisp -p m8535 -P com3 -b 19200 -U flash:w:Blink.hex

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

hoffe ich konnte jemandem helfen :slight_smile:
lg
wiseman