PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RP6 Programmierung via AVR-Studio



AlBundy94
29.07.2012, 16:31
Hallo!

Ich bin noch ein Anfänger was Roboterbau und -programmierung angeht. Ich habe vorher schon mit Microcontrollern gearbeitet, jedoch nicht mit welchen die ihren Platz auf einem Roboter wie dem RP6 gefunden haben. Ich besitze einen RP6 v.1 und möchte jetzt mit der Programmierung starten. Die Microcontroller habe ich sonst mit dem AVR-Studio 5.1 programmiert - und jetzt dachte ich mir, dass das doch für den RP6 auch eine Möglichkeit der Softwareentwicklung sein sollte, oder? :confused:

Mein Ziel ist es, ein Programm zu entwickeln, mit dem der RP6 (eher der ATMega32) über den I²C Port auf ein SRF02 Ultraschallmodul zugreifen kann. Die weiteren Funktionen sind noch unwichtig, mein großes Ziel ist es jetzt erstmal, überhaupt ein lauffähiges Programm zu implementieren.. :o

Ich habe mir zunächst erstmal ein neues Projekt erstellt und die RP6libs sowie die Dateien des I²C-Beispielprogramms eingebunden.. Ich überprüfte dann, ob alle benötigten Funktionen und Variablen erkannt wurden und kompilierte das Programm.. aber: Pustekuchen! Haufenweise Fehlermeldungen, die sich zu vermehren scheinen, wenn man erstmal die ersten Fehler ausgemerzt hat .. -_-

Vielleicht bin ich einfach nur zu doof, das AVR Studio zu bedienen oder ich habe einfach den falschen Ansatz gewählt? Mit welcher Entwicklungsumgebung implementiert und kompiliert Ihr denn eure HEX-Dateien??

Wäre nett wenn Ihr mir einen Rat geben könntet, ich bin nämlich schon leicht am Verzweifeln.. :(

PS: Wenn jemand mal drüber schauen möchte, hier der Link zum Projekt in meiner Dropbox: https://dl.dropbox.com/u/58299684/RP6/RP6%20Ultrasonic%20%28SRF02%29.rar

RolfD
29.07.2012, 23:18
Hallo AlBundy94,
also wenn du hier mal suchst wirst du Beiträge zu AVR-Studio sowie auch zum SRF02 und anderen SRFs finden da beides schon erfolgreich Verwendung fand.
Auch der Blick in http://www.rn-wissen.de/index.php/Hauptseite könnte weiter helfen.
Ich nutze das AVR Studio 4 bzw. 5 und/oder Notepad++ als Editor je mit dem gcc aus den WinAVR libs.
Ich würd zunächst mal externe makfiles in AVR Studio nutzen... für die interenen müssen die Pfade richtig stehen.
Dann sollten eigentlich keine Fehler kommen - und wenn doch, stimmt evtl. schon was mit der Installation der WinAVR Lib nicht. Dann mal das normale Make von cmd aus probieren.
Also so viel kann da eigentlich nicht schief gehen.
LG Rolf

AlBundy94
30.07.2012, 12:14
Vielen Dank für deine Antwort, Rolf!

Ich kenne mich leider mit makefiles noch nicht so gut aus, was bedeutet denn "externe makefiles benutzen" ? Warum kann das AVR Studio nicht die kompilierung übernehmen? Wenn ich doch alle Dateien in das Projekt einbinde, kennt es doch die zugehörigen Pfade, oder? Wie kann ich die internen Makefiles nutzen, bzw. die "Pfade richtig" eintragen?

LG Nils

RolfD
30.07.2012, 14:46
Hallo AlBundy94,
das AVR Studio "übernimmt" normalerweise nicht die Kompilierung, es nutzt den GCC als Compiler. Das ganze nennt sich Toolchain und nutzt ggf. andere Pfade als vorgegeben. Die Toolchains von WinAVR und Amtel sind eben etwas unterschiedlich aufgebaut... man muss sie ggf. anpassen. Das trifft auch für die make Files zu. Scheinbar.. da bin ich selbst noch am fummeln... hat Amtel inzwischen ne eigene Toolchain wohingegen sie früher noch die vorinstallierte von WinAVR nutzen... da scheints dann auch mal zu Problemen zu kommen.
Externe makefiles kannst du im Projekt Configuration Manager unter Build selbst einstellen.

Schau dir mal ein Makefile eines Examples an welches mit zum Lieferumfang vom RP6 gehört, damit du verstehst was ich meine.
Da stehen z.B. Sachen drin wie:

RP6_LIB_PATH=../../RP6Lib
RP6_LIB_PATH_OTHERS= $(RP6_LIB_PATH)/RP6base $(RP6_LIB_PATH)/RP6common
SRC += $(RP6_LIB_PATH)/RP6base/RP6RobotBaseLib.c
SRC += $(RP6_LIB_PATH)/RP6common/RP6uart.c
usw...
Das sind Angaben wie sie für die WinAVR Toolchain und für die RP6Lib relevant sind... die aber nicht fürs AVR Studio passen.
Dementsprechend findet AVR Studio bzw. die verwendete Toolchain vieles nicht und es kommt zu massenweise Fehlern wegen fehlender Referenzen.
Jetzt vergleich das mal mit dem makefile was das Studio anlegt wenn du nen Build machst... da stehen garantiert ganz andere Verweise drinne.

Makefiles sind etwas defiziler.. es reicht nicht den Code als großen Klumpen in ein Projekt zu importieren...
Ansonsten hier noch ein paar Links zum schlau machen....

http://www.robotik-projekt.de/index.php/programmierung-einrichten-von-avr-studio/
http://www.mikrocontroller.net/topic/191595
http://www.arexx.com/forum/viewtopic.php?f=19&t=1415
http://www.mikrocontroller.net/articles/AVR-Studio

LG Rolf

Max Web
30.07.2012, 15:04
Keine Angst, Du musst Dich überhaupt nicht mit Makefiles auskennen, um den RP6 programmieren zu können ;)
Ich selbst nutze AVR Studio 5/6 schon recht lange und hatte sowohl mit als auch ohne Makefiles nie Probleme damit (wieso auch, ist schließlich nur eine IDE).
Dein Projekt habe ich mir nur kurz angesehen, folgendes ist mir aufgefallen:
Dein Projekt enthält folgende Dateien:
- RP6Control.h
- RP6ControlLib.cpp
- RP6ControlLib.h
Es geht um ein Programm für die RP6 Base, da haben die nichts im Projektverzeichnis zu suchen ;) Diese Dateien sind für die M32-Erweiterungsplatine gedacht.

Wieso nutzt Du eigene Delay-Funktionen? Die RP6 Lib hat eigene Delay-Funktionen, die am Anfang (und auch später) vollkommen reichen sollten.

Du hast Teile der Lib verändert (vor allem die Includes, das geht so nicht). Nimm wieder die Originale, das wirft viele der Fehler raus. Lies Dir auch noch einmal ein Tutorial über Includes und Include-Guards durch.

In der "RP6 Ultrasonic (SRF02).cpp" inkludierst Du (ohne die defines aussen rum) #include "RP6RobotBaseLib.h" und #include "RP6I2CmasterTWI.h" und benennst die Datei in "RP6 Ultrasonic (SRF02).c" um,
sonst wirst Du Probleme kriegen.

Nach diesen Änderungen wurde das Programm bei mir fehlerfrei kompiliert.

Hoffe das hilft Dir ;)

- Max

AlBundy94
30.07.2012, 19:04
Hallo!!

Danke für eure Antworten, die sind echt qualitativ hochwertig ;) Ich habe es jetzt mal so wie MaxWeb beschrieben hat, probiert:

Die ORIGINALE Lib (unverändert) eingebunden und die Control-Lib draußen gelassen. Die Includes in der "RP6 Ultrasonic (SRF02).cpp" normal geschrieben und die Datei in "RP6 Ultrasonic (SRF02).c" umbenannt. Ich habe dann noch die delay.h rausgenommen und alles kompiliert - aber: Nix. :D

Mein Fehler ist wieder mal eine "multiple definition of.." - aber da es ja bei MaxWeb auch so ging, ohne Veränderungen würde ich jetzt gern wissen, ob ich noch etwas übersehen hab? :/

LG Nils

Max Web
30.07.2012, 19:55
Mein Fehler ist wieder mal eine "multiple definition of.."
Tja, genau ab da wird's interessant: Was wird denn mehrmals definiert? Welche Dateien sind jetzt im Projektverzeichnis?

- Max

AlBundy94
31.07.2012, 21:29
Fehler: multiple definition of `__vector_19' in Datei: /RP6I2CslaveTWI.c

Max Web
31.07.2012, 22:28
Hm, klingt ganz so, als ob die Datei "RP6I2CMaster" im Projektverzeichnis ist - bitte mal nachsehen.

RolfD
01.08.2012, 10:25
Ich vermute wie Max, das die TWI-Master Lib und die TWI-Slave Lib gleichzeitig eingebunden sind...
Die RP6Lib ist weder Multimaster noch Master/Slave fähig - es funktioniert nur Slave ODER Master und es dürfen auch nur die jeweils passenden Libs im Projekt referenziert werden.
Ggf. hilft es, die ISRs mit #def/#if def gegensinnig auszuklammern oder beide ISRs zusammen zu legen. Eine vereinheitlichte Master/Slave ISR wäre auch nur wenig größer als die beiden sich beißenden Einzelversionen.
Aber i2c auf RP6 (RP6Lib) ist ein weites Feld.... :)
LG Rolf

AlBundy94
01.08.2012, 18:46
FACEPALM!!!! Sorry, euch damit aufgehalten zu haben, ich hatte wirklich beide Libs eingebunden... Scham macht sich bei mir breit :D Danke euch, jetzt dürfe alles funktionieren.. der letzte Build war auf jeden Fall erfolgreich :)

LG Nils