Forum: Mikrocontroller und Digitale Elektronik Von Arduino auf Atmel Studio 7.


von Bernhard S. (b_spitzer)


Lesenswert?

Hallo zusammen,
ich habe ein Projekt mit einem Arduino Uno begonnen und jetzt eigene 
Patinen mit einem ATmega168p gefertigt. Die Projekt-Software wurde mit 
Arduino entwickelt und nutzt dort die Bibliotheken EEPROM.h und Wire.h.
Die Testsoftware (nur Test der I/Os) für meine Platine habe ich mit 
Atmel Studio 7 erstellt und mit dem AVRisp MKII geflasht.

Jetzt will ich das Arduino-Programm anpassen und auf die eigene Platine 
flashen. Leider klappt das nicht. In Arduino wird der AVRisp erkannt, 
beim Hochladen über den Programmieradapter kommt nur eine nichtssagende 
Fehlermeldung in Arduino.
Dann habe ich versucht, die HEX-Dati in Arduino zu erstellen und zu 
exporterien. Die kann ich mit dem AVRisp flashen, aber dann tut sich 
nix. Auch ein testweise in Arduino erstelltes Blink-Programm 
funktioniert nicht beim Flashen mit dem AVRisp.
Als nächstes habe ich versucht, den Arduino-Sketch im Atmel-Studio 7 zu 
importieren. Geht soweit auch, aber beim Kompilieren gibt es 
Fehlermeldungen wegen fehlenden Bibliotheken EEPROM.h und Wire.h.

2 Fragen: könnte der Upload-Fehler in Arduino daran liegen, dass meine 
Platine jetzt einen ATmega168 hat und nicht den 328? (es sind aber nur 
10% des Speichers genutzt). Meine Platine hat auch einen 16MHz-Quarz, 
die Fuses hatte ich mit dem AVRisp passend gesetzt.

Wie kann ich in Atmel Studio7 die Arduino-Bibliotheken einbinden und 
nutzen?

von fifila (Gast)


Lesenswert?

Bernhard S. schrieb:
> eine nichtssagende
> Fehlermeldung in Arduino.

Wäre trotzdem schön, wenn du sie angeben könntest, vll ist ja nicht für 
jeden nichtssagend :)

Außerdem fehlt noch eine Beschreibung des restlichen Aufbaus. Was liegt 
zwischen ATmega und dem PC?

von Feldkurat K. (feldkurat)


Lesenswert?

fifila schrieb:
> Außerdem fehlt noch eine Beschreibung des restlichen Aufbaus. Was liegt
> zwischen ATmega und dem PC?

Die Tischplatte aus Buche massiv.
SCNR
-Feldkurat-

von opravo (Gast)


Lesenswert?

Feldkurat K. schrieb:
> Die Tischplatte aus Buche massiv.

"Eichen sollst du weichen, Buchen sollst du suchen" -> Buchenholz stößt 
Elektrizität ab -> Daten kommen nicht im ATmega an.




P.S.: Ich übernehme keine  Verantwortung, falls jetzt jemand ernsthaft 
bei nem Gewitter unter ne Buche rennt.

von Dieter F. (Gast)


Lesenswert?

Bernhard S. schrieb:
> 2 Fragen: könnte der Upload-Fehler in Arduino daran liegen, dass meine
> Platine jetzt einen ATmega168 hat und nicht den 328? (es sind aber nur
> 10% des Speichers genutzt). Meine Platine hat auch einen 16MHz-Quarz,
> die Fuses hatte ich mit dem AVRisp passend gesetzt.

Hat Dein ATMega-Eigenplatinenteil einen Bootloader? Sonst solltest Du 
den erstmal draufbringen ...

von Einer K. (Gast)


Lesenswert?

Bernhard S. schrieb:
> 2 Fragen: könnte der Upload-Fehler in Arduino daran liegen, dass meine
> Platine jetzt einen ATmega168 hat und nicht den 328? (es sind aber nur
> 10% des Speichers genutzt). Meine Platine hat auch einen 16MHz-Quarz,
> die Fuses hatte ich mit dem AVRisp passend gesetzt.

Natürlich wird die Arduino IDE den Upload verweigern, wenn sie den 
falschen Prozessor vorfindet.
Meldungen beim Upload aktivieren, in den Einstellungen.

Tipp:
Es gibt einige Arduino mit  ATmega168p, stelle ein solches Board ein.

von Bernhard S. (b_spitzer)


Lesenswert?

a) Die Fehlermeldung war "Programmiervorgang fehlgeschlagen, es ist ein 
Fehler aufgetreten".
b) Zwischen PC und ATmega ist der AVRisp MKII.

Das im Atmel Studio 7 erstellte Test-Programm lässt sich flashen und 
läuft wie erwartet. Auch die Programmierung der Fuses passt zum 16MHz 
Quarz, Clkdiv8 ist auch rausgenommen, die delay(1000) gibt eine Sekunde 
Wartezeit...
Ich möchte jetzt eben "nur" das Arduino-Programm, von mir aus auch über 
Atmel Studio 7, auf der Platine zum laufen bringen. Dazu brauche ich 
EEPROM-Zugriff und I2C-Slave (incl Unterstützung des General-Call) auf 
den Hardware-Pins.
Die serielle Schnittstelle wäre zur Not mit TTL-Pegel verfügbar, der 
Reset-Anschluss liegt aber nur auf dem ISP-Verbinder am Platinenrand. Es 
ist daher eher keine Option, den Arduino-Bootloader (geht der überhaupt 
für den 168?) zu flashen und das Programm über die serielle 
Schnittstelle hochzuladen.

von Bernhard S. (b_spitzer)


Lesenswert?

Arduino F. schrieb:
> Tipp:
> Es gibt einige Arduino mit  ATmega168p, stelle ein solches Board ein.

welch denn, konkret??

von Bernhard S. (b_spitzer)


Lesenswert?

Dieter F. schrieb:
> Hat Dein ATMega-Eigenplatinenteil einen Bootloader? Sonst solltest Du
> den erstmal draufbringen ...

Den sollte ich beim Flashen per AVRisp aber nicht benötigen.... Arduino 
generiert mir ja auch 2 Hex-Dateien, eine mit Bootloader, eine ohne. 
Beide laufen aber nicht.

von Dieter F. (Gast)


Lesenswert?

Bernhard S. schrieb:
> Den sollte ich beim Flashen per AVRisp aber nicht benötigen.... Arduino
> generiert mir ja auch 2 Hex-Dateien, eine mit Bootloader, eine ohne.
> Beide laufen aber nicht.

Hast Du beim Flashen (mit Atmel Studio 7) den richtigen Prozessor 
eingestellt?

von Bernhard S. (b_spitzer)


Lesenswert?

ja. Das in Atmel Studio erstellte Testprogramm läuft ja auch nach 
Flashen per AVRisp. Auch die in Auduio exportierten HEX-Dateien kann ich 
ohne Fehlermeldungen flashen, nur läuft halt nix. Auch kein simples 
Blink-Programm.

: Bearbeitet durch User
von Oliver J. (skriptkiddy)


Lesenswert?

Die Arduino-IDE wird meiner Erfahrung nach immer versuchen über 
Bootloader zu flashen. Dass man in der IDE den AVRISPMKii auswählen 
kann, dient glaube ich nur dem Flashen eines Bootloaders.

Vielleicht hilft es die Boards.txt anzupassen.?

Grüße Oliver

von Dieter F. (Gast)


Lesenswert?

Bernhard S. schrieb:
> Auch kein simples
> Blink-Programm.

Stell mal bitte Dein Test-Blink-Programm (Projekt) ein.

von Einer K. (Gast)


Lesenswert?

Oliver J. schrieb:
> Die Arduino-IDE wird meiner Erfahrung nach immer versuchen über
> Bootloader zu flashen. Dass man in der IDE den AVRISPMKii auswählen
> kann, dient glaube ich nur dem Flashen eines Bootloaders

Nein!
Es gibt zusätzlich noch den Menüpunkt "Upload mit Programmer", genau für 
diesen Zweck.

Oliver J. schrieb:
> Vielleicht hilft es die Boards.txt anzupassen.?
Wäre in letzter Konsequenz der richtige Weg, eine eigene boards.txt zu
erzeugen.
Wenn man den weiter Arduino nutzen möchte.

Beitrag #5080668 wurde von einem Moderator gelöscht.
von Oliver J. (skriptkiddy)


Lesenswert?

Arduino F. schrieb:
> Nein!
> Es gibt zusätzlich noch den Menüpunkt "Upload mit Programmer", genau für
> diesen Zweck.

Ahh cool! Da habe ich wahrscheinlich nicht lange genug gesucht, als ich 
mir das mal angeschaut habe.

von Bernhard S. (b_spitzer)


Lesenswert?

Dieter F. schrieb:
> Stell mal bitte Dein Test-Blink-Programm (Projekt) ein.

Das Projekt habe ich nicht hier. Aber außer DDRB in Init zu setzen und 
in der Loop einen Pin zu toggeln macht das nichts. Gleicher Quellcode im 
Atmel Studio läuft auf der Platine.

von Bernhard S. (b_spitzer)


Lesenswert?

Arduino F. schrieb:
> Wäre in letzter Konsequenz der richtige Weg, eine eigene boards.txt zu
> erzeugen.
> Wenn man den weiter Arduino nutzen möchte.

Der Hinweis könnte hilfreich sein. Den Arduino Nano gibt es sowohl mit 
dem 328 als auch mit dem 168. Wenn man den Nano einstellt, kommt ein 
weiterer Menüpunkt bei Werkzeuge, um den Prozessor auszuwählen. Das 
probiere ich morgen mal und vergleiche meine gesetzten Fuses mit den 
Angaben aus der boards.txt für den Nano.

von Dieter F. (Gast)


Lesenswert?

Bernhard S. schrieb:
> Das Projekt habe ich nicht hier. Aber außer DDRB in Init zu setzen und
> in der Loop einen Pin zu toggeln macht das nichts. Gleicher Quellcode im
> Atmel Studio läuft auf der Platine.

Ich auch nicht - daher schwer nachvollziehbar.

von Thomas V. (Gast)


Lesenswert?

Problem ist dass Du es im Arduino für einen anderen Zielprozessor 
kompiliert hast. Das funktioniert dann nicht wenn Du das HEX File auf 
einen anderen Prozessor flashen möchtest.

von grundschüler (Gast)


Lesenswert?

bau auf deinem laufenden blink-programm auf. zuerst die 
eeprom-funktionalität einbinden: arduino-eeprom.c und eeprom.h laden. 
Alle #includes müssen funktionieren. Wahrscheinlich ist es einfacher, 
die arduino-funktionen durch gcc-funktionen zu ersetzen. In der Regel 
sind das aber nur zwei Funktionen:
eeprom_read und eeprom_write 8 oder 16bit.l

Wenn das funktioniert, weiter mit i2c.

von Bernhard S. (b_spitzer)


Lesenswert?

Es hat jetzt auf Umwegen funktioniert.
In Arduino den Arduino Nano mit ATmega168p ausgewählt, neu compiliert 
und Hex-Datei exportiert. Die lässt sich aus Atmel Studio flashen und 
läuft jetzt.
Problem bei Arduino ist, dass der AVRisp MKII immer noch nicht von 
AVRDude erkannt wird. Wenn ich die Fehlermeldungen für den Upload 
aktiviere, sehe ich jetzt, dass er das USB-Device nicht findet. Im 
Gerätemanager ist der AVRisp aber mit genau der angegebenen VID und PID 
verfügbar (und läuft ja auch im Atmel Studio 7).

Könnte es sein, dass Arduino (bzw. AVRdude) nicht mit der neuen Firmware 
zurecht kommt, die bei der ersten Inbetriebnahme des AVRisp im Atmel 
Studio 7 installiert wurde? Der AVRisp ist übrigens kein Nachbau, 
sondern original.

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.