PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ganz einfach: Programm starten



morten1027
14.09.2011, 13:29
Hi,

ich nutze z.Zt. die M32 Platine als Testplatine für ein paar Dinge - OHNE die robot BASE.

Nun wenn ich mit dem rp6 loader das prog auf die m32 lade und autom. starte ist alles ok.
Aber wie kann ich ohne die Base das programm starten.

Mit "low legen" des MRESET Pins am XBUS1 Stecker kann ich den Controller komplett neu starten, auf dem Display kommt "bootloader 1.4" usw.
Aber wie kann ich von diesem Punkt an in die Main-Schleife starten? Also welches Signal muss an welchen Pin?

Gruß

morten1027
14.09.2011, 14:49
manchmal ist beim ab- u. aufstecken das programm auch so gestartet.

Mein Gedanke war dass es durch den MRESET passiert, so würde es ja auch nach schaltplan sinn machen.
Jetzt habe ich festgestellt dass das Programm zuverlässig startet (nach dem bootload bildschirm "ready to.." wenn ich den Pin 12 am XBUS1, sprich SDA auf GND lege, entweder direkt oder per Widerstand, zb 100k. Ich verstehe es einfach nicht. Wäre super wenn mir jemand sagt was dahinter steckt :)

SlyD
14.09.2011, 15:06
s.
https://www.roboternetz.de/community/threads/33789-Starttaster-f%C3%BCr-das-RP6-CONTROL-M32-Erweiterungsmodul

MfG,
SlyD

morten1027
14.09.2011, 15:22
Vielen Dank!
Nur mir stellt sich noch die Frage (weil ich das etwas unschön finde den SDA pin auf low zu ziehen der ja evtl. grundsätzlich mal für i2c genutzt wird) WO im Programm der M32 befindet sich die Stelle an der es heißt:

"wenn sda= low, starte programm"

Ich würde dafür nämlich sehr gerne einen anderen Pin verwenden.

Danke schonmal!

SlyD
14.09.2011, 15:27
Das ist im Bootloader integriert. Das muss so gemacht werden da auf dem RP6 ja ggf. mehrere Controller gleichzeitig (und nur über einen zentralen Taster oder per Kommando) gestartert werden sollen.
Der I2C Bus wird dadurch NICHT gestört.

Einzige andere Alternative ist ein "s" über die serielle Schnittstelle zu senden - oder den Bootloader löschen und dann nur noch über ISP programmieren.

MfG,
SlyD

morten1027
14.09.2011, 16:39
Super danke.

Es führt genau zu dem Thema hin wo ich nicht fit bin.

Wie genau kann ich mir den Bootloader vorstellen, wo und wie wird er erstellt, draufgeladen, wie lösche ich ihn, wie wird das programm mit dem bootloader "verbunden".. In dem Bereich bin ich ehrlich gesagt nicht sehr fit.
Hast du hierfür einen guten link den ich mir mal in Ruhe zu Gemüte führen kann?

Du hast es auch schon angesprochen "den bootloader löschen" und über spi programmieren.

Da soll das Ziel hingehen. Ich würde gerne später über einen Atmel programmer (weiß nicht genau welchen wir haben) den Controller über die SPI schnittstelle programmieren. Wie genau gehe ich da vor? Die kleinen Hardware Änderungen machen und den Bootloader löschen, das wars?

Wäre super wenn du mir für diese Thematik ein paar links bereitstellen könntest, vielen Dank!

SlyD
14.09.2011, 16:54
Der Bootloader ist schon ab Werk im RP6 Controller drin - damit man den Prozessor auch einfach nur mit dem USB Interface programmieren kann (und mit demselben Interface auch die serielle Ausgabe möglich ist).
Den kann man nur über ISP löschen sonst nicht.

http://www.rn-wissen.de/index.php/Bootloader
http://www.rn-wissen.de/index.php/RP6
https://www.roboternetz.de/community/threads/30377-RP6-Bootloader

Im RP6 Artikel steht auch was zum ISP Anschluss.

Du musst da aber etwas aufpassen - nicht die Fusebits verstellen da kannst Du Dich leicht "aussperren" (noch ein Grund für den Bootloader: damit kein Anfänger unabsichtlich den Prozessor "zerfused").

MfG,
SlyD

morten1027
15.09.2011, 06:31
Ok danke, sind denn im Bootloader noch andere Programm-relevante Dinge enthalten, zusätzlich zum Programm start bei SDA low.

Also wenn ich mich entscheiden würde den Bootloader runterzuschmeißen und über ISP zu programmieren.
Mein Programm ist nach wie vor das selbe, dann müsste ich schonmal die Änderung vornehmen dass ich das programm nicht über den SDA starten muss, sondern anders. Meine Frage ob ich dann noch andere Änderungen, zusätzlich zu der SDA_low Geschichte vornehmen müsste damit alles so funktioniert.

Gruß

edit:
In zusammenhang mit ISP wird oft auch "bootloader löschen" genannt. Aber es ist doch auch möglich "alles so zulassen" und lediglich die Hardware umzubauen, damit ich per Uart(bootloader) oder eben ISP programmieren kann - wahl per steckbrücke. Wenn ich nun per ISP programmiere ist der bootloader ja dann völlig außer acht - d.h. mein Programm würde in diesem Fall automatisch starten?

Arkon
15.09.2011, 07:26
Ich bin in dem Thema auch nicht 100% fit. Aber so habe ich es damals verstanden:

Der Bootloader initialisiert einen Teil der Hardware (u.a. die Kommunikation über UART und Co.) damit du über den USB-Adapter oder was halt beiliegt programmieren kannst. Der Bootloader ist im Prinzip auch "nur" ein normal geschriebenes Programm welches aber in einem speziellen Bereich des Speichers abgelegt wird.

In den Fuses kannst du einstellen, dass
a) der Bereich mit dem Bootloader geschützt wird (so kannst du auch über ISP Programme flashen ohne den Bootloader zu beeinflussen) und
b) wie groß der reservierte Bereich für den Bootloader sein soll.

Wie es beim RP6 ist kann ich nicht genau sagen, ich weiß nur, dass wir bei einem Projekt auf Basis eines Asuros (ich war für die Mechanik zuständig) Teile des Bootloaders brauchten damit die vorgegebenen Funktionen (wie MotorSpeed(); MotorDir(); ect. funktioniert haben.

SlyD
15.09.2011, 10:52
Hallo,

die RP6Library ist unabhängig vom Bootloader das funktioniert auch ohne (das geht natürlich auch auf dem ASURO Du musst nur die Hardware richtig initialisieren).

Den RP6Loader / RobotLoader kannst Du dann nur noch als Terminal verwenden, aber nicht zum Flashen.


Die normalen ISP Programmer löschen übrigens den ganzen Speicher, per ISP kannst Du keine einzelnen Speicherbereiche löschen wie im Bootloader da wird immer der ganze Chip gelöscht - inklusive Bootloader.
Nein das können keine Fusebits verhindern die sind nur um den Bootloader vor sich selbst oder verrückt spielenden Anwenderprogrammen zu schützen.
Wenn die Lockbits gesetzt sind ist ohnehin über ISP vorher ein komplettes löschen notwendig.

Jaja man kann das device erase deaktivieren (bringt aber aus oben genanntem Grund nix) - das willst Du aber auch nicht wirklich machen denn Flash Speicher MUSS vor dem neuprogrammieren gelöscht werden. Man kann da nur Nullen speichern. Einsen werden gelassen wie sie sind. Daher muss vorher der Speicherbereich (eine Page oder der ganze Chip) komplett gelöscht werden damit zu beginn alles auf 1 steht.


Du kannst aber natürlich den Bootloader mit den bereitgestellten hex Dateien wiederherstellen (wenn Du die Fusebits richtig einstellst - genau so wie in den PDFs die dabei sind angegeben). Beides gleichzeitig verwenden geht allerdings nicht so ohne weiteres.

MfG,
SlyD

morten1027
19.09.2011, 07:38
Sorry, nur um mich nochmals zu versichern.

Wenn mein Programm auf der M32 läuft (mit SDA auf low) kann ich das Programm (die erzeugte hex file mit avr studio4) in einen X-beliebigen ATMEGA32 mit ISP laden (mit passender periphery) und dann sollte es "funktionieren" - ist das so?

SlyD
19.09.2011, 10:08
Die RP6lib interessiert sich nicht für den Pegel von SDA. Der sollte aber natürlich high sein im normalzustand.

Wie schon gesagt - den Bootloader löschst Du so ja komplett.

Unbedingt die Fusebits richtig einstellen insbesondere den Oszillator sonst kanns passieren das der nicht mehr startet!
(und den Boot Reset Vector deaktivieren da ja kein Bootloader mehr drin ist)

MfG,
Dominik

EDIT:
Achso Du fragst ja nach beliebigem MEGA32:
Prinzipiell ja, aber Du musst dann natürlich schauen das die Pins richtig initialisiert werden (Eingang/Ausgang - das wird in der RP6Control.h Header Datei definiert).

morten1027
20.09.2011, 06:41
Genau (zu deinem Edit), ich habe auf der M32 eine Art prototypen gebaut, bzw. programmiert, da ich dort alles hatte was ich brauchte. Display, leds, buttons und eine lib um nicht ganz bei Null anzufangen - also quasi als eval board benutzt.

Und dann, wenn ich soweit bin, werde ich auf meinem individuell hergestellen pcb, eben auch einen MEGA32 mit gering geänderter Periphery laufen lassen, welchen ich dann über isp programmiere.

Z.b. kommt eine RTC DS1338 bzw. 1307 drauf, da bin ich gerade am einarbeiten um dafür ein paar funktionen zum stellen und lesen zu schreiben. Falls diesbezüglich jemand eine Hilfe, link, o.ä. hat wo das schonmal verwendet wurde - als her damit :)

Gruß und schönen Tag, Andreas