Pages: [1]   Go Down
Author Topic: Arduino IDE für eigene Boards  (Read 1611 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Sr. Member
****
Karma: 1
Posts: 353
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,
brauch mal wieder eure Hilfe:
Ich hab noch ein Board mit einem ATMega8 rumliegen. Für eine kleine Anwendung würde mir der reichen.
Da ich mich mit der Arduino IDE sehr gut angefreundet habe, möchte ich diese gerne dazu benutzen um das Programm damit zu entwickeln, und den Chip über ISP zu programmieren.
Hab auch gesehen, daß man in der IDE ein Board namens "Arduino NG/ATmega8" auswählen kann.

Wenn ich das nehme, meinen Code schreibe und dann mit ISP auf den Chip brenne... passt das dann?
Ich meine wegen der Fuses und so.
Ich hab auch mal in der "boards.txt" nachgeschaut. Da stehen zwar Fuses drin, aber die sind doch nur wegen dem Bootloader oder?
In der Datei könnte man doch ein Board kopieren, und dann in der Kopie Parameter wie Taktfrequenz ändern, wenn ich jetzt nur einen 8MHz Quarz hätte. Geht das?
Und welche Fuses nimmt die IDE eigentlich her, wenn ich mein Programm ohne Bootloader auf die CPU brennen will? Den brauch ich ja nicht, wenn ich über ISP flashe.
Logged

Arduino 1.0.5 | Arduino UNO & MEGA | Arduino 1.54r2 mit DUE

Germany
Offline Offline
Edison Member
*
Karma: 46
Posts: 2310
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Doch, die Fuses brauchst du in jedem Fall. Hier wird festgelegt was die Taktquelle ist, BOD-Level, Watchdog etc.. Selbst den reset-Pin kannst du ausschalten, was das Programmieren allerding stark verkomplziert... smiley-wink
Hier mal ein Link zum Fuse Calculator: http://www.engbedded.com/fusecalc
Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Offline Offline
Sr. Member
****
Karma: 1
Posts: 353
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ja, aber die Fuses die in der boards.txt stehen sind so berechnet, daß sie mit bootloader laufen.
Wenn ich jetzt bei meinem Mega keinen Bootloader will, dann muss ich doch die Fuses ändern.

Hmm.... generell stellt sich mir jetzt die Frage, wann Arduino die Fuses eigentlich schreibt. Nur beim Bootloader flashen? Oder auch jedesmal beim flashen des Anwenderprogrammes.
Logged

Arduino 1.0.5 | Arduino UNO & MEGA | Arduino 1.54r2 mit DUE

Cologne
Offline Offline
Sr. Member
****
Karma: 11
Posts: 496
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Die Fuses werden nur beim Flashen des Bootloaders geflashed.
Die Fuses musst du insbesonders dann umstellen, wenn der Takt oder die Taktquelle geändert wird. Der Atmega8  steht bei Auslieferung auf internem Takt mit 1MHz.
Für den ArduinoNG Atmega8 musst du die Fuses umflashen. Wenn du dir den Quarz sparen willst, kannst du auch auf 8MHz intern flashen.
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 82
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn du einen externen Quarz mit 8 ... 20 MHz für dein Projekt verwendest passt du die Frequenz und deinen ISP in der boards.txt an und lädst einmal den Bootloader hoch. Danach lädst du dein Programm über "Upload mit ISP" hoch, der Bootloader ist weg und die Fuses bleiben.
Logged

Offline Offline
Sr. Member
****
Karma: 1
Posts: 353
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn du einen externen Quarz mit 8 ... 20 MHz für dein Projekt verwendest passt du die Frequenz und deinen ISP in der boards.txt an und lädst einmal den Bootloader hoch.
Wieso den ISP??
Wird das nicht vom Menüpunkt "Programmer" übersteuert?

Quote
Danach lädst du dein Programm über "Upload mit ISP" hoch, der Bootloader ist weg und die Fuses bleiben.
Hmmm.... OK, der Bootloader ist weg, aber die Fuses haben doch noch immer die Einstiegsadresse vom Bootloader. Und die liegt doch im oberen Speicherbereich.
Wie startet dann der AVR nach einem Reset wieder mit dem Anwenderprogramm??
Ob Bootloader oder Start von 0x0000h wird doch durch das BOOTRST Fusebit gesteuert. Und wenn das nicht geändert wird, dann will doch der AVR wieder an der Startadrese des Bootloaders starten und da ist dann keiner mehr.
Logged

Arduino 1.0.5 | Arduino UNO & MEGA | Arduino 1.54r2 mit DUE

Cologne
Offline Offline
Sr. Member
****
Karma: 11
Posts: 496
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Erste Frage: wie stehen die Fuses jetzt? Wenn du unter Linux arbeitest kannst du die Fuses mit avrdude abfragen
Code:
avrdude -p atmega8 -P /dev/ttyUSB0 -c stk500v2 -v
Schnittstelle und Programmer musst du natürlich anpassen. Unter Windows müsste das auch gehen, da musst du nur den Pfad herausfinden.
Wenn der Chip einen Bootsektor definiert hat, wird bei einem Programm-Upload das Programm immer hinter das Bootloader-Segment geschrieben.
Logged

Offline Offline
Sr. Member
****
Karma: 1
Posts: 353
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn der Chip einen Bootsektor definiert hat, wird bei einem Programm-Upload das Programm immer hinter das Bootloader-Segment geschrieben.

Bist du dir da sicher??? Ich bin der Meinung, das Programm beginnt bei 0x000h. Und ein Bootloader z.B. bei 0xE000h. Also im hinteren Bereich des Flash.
Wobei "Vorne" ist bei mir 0x0000h

Edit:
Hab dazu was gefunden:
« Last Edit: November 17, 2012, 03:20:41 am by hk007 » Logged

Arduino 1.0.5 | Arduino UNO & MEGA | Arduino 1.54r2 mit DUE

0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3470
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Der Bootloader ist immer hinten und nie vorne. Wer es genauer wissen will schaut ins Datenblatt. Dort steht das genau drin.
Logged

Check out my experiments http://blog.blinkenlight.net

Neuss
Offline Offline
Full Member
***
Karma: 1
Posts: 200
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Hmmm.... OK, der Bootloader ist weg, aber die Fuses haben doch noch immer die Einstiegsadresse vom Bootloader. Und die liegt doch im oberen Speicherbereich.
Wie startet dann der AVR nach einem Reset wieder mit dem Anwenderprogramm??
Ob Bootloader oder Start von 0x0000h wird doch durch das BOOTRST Fusebit gesteuert. Und wenn das nicht geändert wird, dann will doch der AVR wieder an der Startadrese des Bootloaders starten und da ist dann keiner mehr.


In der Praxis dürfte es aber trotz eigentlich falsch gesetzten BOOTRST Fuse oft funktionieren:

Wenn die BOOTRST Fuse programmiert ist, springt der Controller bei einem Reset an den Anfang des Bootloader-Bereichs (statt auf die Adresse 0). Dort enthalten bei einem fehlendem Bootloader bis zum Ende des Flashs alle Speicherzellen üblicherweise den Wert FF (hex) / 11111111 (bin). Immer vorausgesetzt, dass das eigentliche Programm nicht so groß ist, dass es schon in den Bootloader-Bereich hineinreicht.
Im gelöschten/noch nicht programmierten Flash-Speicher sind alle Bits auf 1 gesetzt!
FF FF ist für den Controller ein ungültiger Befehlscode, der nichts tut, aber auch nicht zur Exception oder zu ähnlichem führt. Nach dem "Nichtstun" wird der Program Counter erhöht und das nächste FF FF tut ebenfalls wieder nichts. Und irgendwann kommen wir am Ende des Adressbereichs an.

Und jetzt wird  wieder alles gut! Der Program Counter wird beim Überlauf als nächstes auf Adresse 0 gesetzt und dort sollte in der Interrupt-Vektor-Tabelle hoffentlich der Sprungbefehl zum eigentlichen Beginn des Programms stehen, der sonst bei einem Reset direkt ausgeführt würde.

Aber die feine Art ist das auf keinen Fall!

Gruß
Wolfgang


« Last Edit: November 17, 2012, 02:25:52 pm by voithian » Logged

Pages: [1]   Go Up
Jump to: