Forum: Compiler & IDEs Arduino 1.8.1 & ATmega168PA


von Tomasz L. (tomasz)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

jetzt muss ich doch mal paar Fragen stellen. Irgendwie komme ich nicht 
weiter. Ich arbeite mit Arduino 1.8.1 unter Win10 und benutze den 
ATmega168PA "nackt" mit ext. 8MHz, kein Arduino Board.

1) momentan mein Hauptproblem ist der Bootloader. Ich hab den Bootloader 
durch Änderung der boards.txt draufbekommen. avrdude sagt mir auch 
"Device signature = 0x1e940b (probably m168p)". Doch wenn ich dann über 
serial ein Program uploade ist die Signature "Device signature = 
0x1e9406 (probably m168)". Ich denke das kommt aus dem Bootloader, aber 
wo/wie bekomme ich den Bootloader mit der richtigen Signatur?

2) Im Internet sieht man Anleitungen, das man eigene Boards definieren 
kann. Aber irgendwie funktioniert das bei mir nicht ganz. Ich benutze 
dazu den "BOARDS.TXT Editor". Wenn ich z.B. eine Kopie vom Pro Mini 
mache und den Identifier auf "NEW" anpasse, dann bekomme ich "Board NEW 
(Plattform avr, Paket arduino) ist unbekannt". Und wenn ich den 
Identifier "pro" verwende, und dort eine neue "CPU" (bei mir Test bzw. 
8MHzatmega168p) hinzufüge, dann bekomme ich vom Compiler "avr-g++: 
error: missing device or architecture after '-mmcu='". Irgendwie scheint 
es KeyWords fürs boards.txt zugeben (pro, 8MHzatmega168, 16MHzatmega168, 
...), aber wo ist sowas definiert? wie kann ich neue Boards eintragen?

Anbei meine jetzige boards.txt

Schon mal danke für euer Feedback,
Tomasz

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Tomasz L. schrieb:
> Ich denke das kommt aus dem Bootloader,

Ja.

> aber wo/wie bekomme ich den
> Bootloader mit der richtigen Signatur?

Woher hast du denn den jetzigen?

von Tomasz L. (tomasz)


Lesenswert?

Ich benutze den mit Arduino mitgelieferten ATmegaBOOT_168_pro_8MHz.hex, 
auch zu finden unter

https://github.com/arduino/Arduino/tree/master/hardware/arduino/avr/bootloaders/atmega

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Dort findest du auch die C-Quelle, aus der das compiliert worden ist.

Die müsstest du passend ändern.

von Tomasz L. (tomasz)


Lesenswert?

Ja, das habe ich mir heute auch schon etwas angeschaut. Mal schauen, ob 
ich den Compiler heute Abend angeschmissen bekomme, ist nicht gerade 
meine Stärke. Muss ich da nach Anpassung des C Codes das ganze einfach 
mit "make pro8" lostreten oder wie mache ich das unter Win10?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Tomasz L. schrieb:
> Muss ich da nach Anpassung des C Codes das ganze einfach mit "make pro8"

Vermutlich, aber ich blicke bei den vielen vorgesehen Targets im
Makefile nicht durch.

> lostreten oder wie mache ich das unter Win10?

Da müsstest du insbesondere zusehen, dass der Compiler (avr-gcc) im
%PATH% erreichbar ist.

Die zu ändernde Stelle wäre:
1
#elif defined __AVR_ATmega168__
2
#define SIG2  0x94
3
#define SIG3  0x06
4
#define PAGE_SIZE  0x40U  //64 words

Entweider du hackst dort direkt die andere Signatur hinein, oder wenn
du es sauber machen willst, dann ergänzt du den ATmega168P:
1
// alt:
2
#elif defined __AVR_ATmega168__
3
#define SIG2  0x94
4
#define SIG3  0x06
5
#define PAGE_SIZE  0x40U  //64 words
6
// neu:
7
#elif defined __AVR_ATmega168P__
8
#define SIG2  0x94
9
#define SIG3  0x0b
10
#define PAGE_SIZE  0x40U  //64 words

Dann müsstest du an allen Stellen, wo derzeit ein ATmega168 getestet
wird, aber auch den '168P nachtragen, bspw. hier:
1
// bisher
2
//#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined (__AVR_ATmega328__)
3
// danach:
4
#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega168P__) || defined(__AVR_ATmega328P__) || defined (__AVR_ATmega328__)

Abschließend im Makefile MCU_TARGET auf "atmega168p" ändern.

: Bearbeitet durch Moderator
von Tomasz L. (tomasz)


Lesenswert?

OK, danke erstmal. Das mit den Änderungen sollte funktionieren. Ich 
vermute, dass ich mit dem Compiler etwas rumprobieren muss bis er mir 
was ausspuckt. Werd heute Abend mich dran versuchen.

von Tomasz L. (tomasz)


Lesenswert?

So, Punkt 1 ist jetzt erledigt, hab jetzt einen Bootloader für den 
ATmega168pa. Musste dafür folgendes tun:
1) Make für Windows installieren
2) Source File um den 168P erweitert
3) Makefile angepasst
4) hex generiert :o)

Jetzt noch das zweite Problem mit dem boards.txt ...

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.