PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie ein Projekt zugänglicher machen?



Willa
05.11.2009, 19:22
Hallo!
Wie der eine oder andere evtl. mitbekommen hat entwickle ich zur Zeit ein Open source Tricopter Projekt. Der Copter ist in Bascom programmiert und wird per ISP-Programmer programmiert. Genau die letzteren beiden Dinge sind ein Problem. Die Leute, die den Copter nachbauen wollen, haben in den seltesten Fällen einen ISP Programmer oder gar Bascom. Es ist aber zur Inbetriebnahme notwendig einige Parameter (z.B. Gyroempfindlichkeit etc.) auf das eigene Setup anzupassen.

Nun möchte ich das Ganze gerne benutzerfreundlicher gestalten. Ich hatte an folgendes gedacht: Der potentielle Nachbauer erhält (z.B. von mir) einen vorprogrammierten Arduino mini pro (oder er erhält den compilierten Code und spielt den selber per ISP Programmer ein). Jetzt soll der Benutzer mit einem Tool (vorzugsweise ein GUI) die notwendigen Parameter einstellen können. Der µC (ein mega168) muss also per RS232 Daten erhalten die er dann dauerhaft speichert. Nach welchen Stichworten muss ich hier suchen? Gibt es evtl. ein Beispiel wo man mal sehen kann wie per RS232 Daten dauerhaft im µC gespeichert werden? Ist das ganze überhaupt eine sinnvolle Idee? Oder fällt jemandem von euch eine praktikablere Lösung ein?

Der Arduino selber wird ja, soweit ich weiss, mit einem Bootloader ausgeliefert. Kann man wohl mit dem Arduino Tool fertig compilierte Dateien hochladen? das wäre sehr praktisch, dann könnte jeder selber meinen kompilierten Bascom Code per RS232 und Bootloader auf den Arduino überspielen.
Danke für eure Tipps und Ideen.

Bammel
05.11.2009, 19:51
hmm ich glaube das wird schwer... da müsstest du bestimmt in dem hexfile rumfummeln... den nen compiler wirst de so glaube ich kaum bekommen...

aber ich finde das tut auch nicht not.. wenn leute schon ein opensource projekt bauen wollen sollten sie auch die anderen mittel zu verfügung haben.. oder in der lage sein sich diese zu verschaffen. ist ja immernoch günstiger als was zu kaufen.

nen isp programmer ist ja auch kein ding da gibt es ja ne variante mit nur, ich glaube, 5 widerständen.. bascom gibt es als demo umsonst... aber ich glaube dein code passt nicht mehr in die demo stimms?

es gibt doch nen commandline compiler von bascom hat der auch dei beschränkung?

Willa
05.11.2009, 19:57
Ich habe jetzt herausgefunden, dass der Standard Bootloader auf einem Arduino wohl wie ein ISP-Programmer erkannt wird (stk500v1). D.h. ich kann mit avrdude die Hexdatei per RS232 auf den Arduino brennen. Jetzt bräuchte ich nur noch Iden und Tipps wie ich das mit dem dauerhaften Parametrieren am besten machen kann......

@Bammel: Das mit dem Programmer ist für normale Copterflieger aber eine ganz schön große Hürde und abschreckend...

Hast du das Ladegerät schon ausprobiert? Und stell dir vor, hatte ja erzählt dass ich den Motorenhersteller angeschrieben hatte und das Video etc. geschickt hatte. Heute bekomme ich Antwort von einem netten Herren, der total begeistert war und mir nun extra angefertigte Prototypen (leichter+mehr Leistung) schicken will für lau!! Mensch, das Internet geht echt sowas von ab... \:D/

Jon
05.11.2009, 20:07
Hi,
wenn du eine GUI erstellen willst, über die man bestimmte Parameter eingeben kann, so können diese per RS232 an den µC geschickt werden und dort im EEPROM gespeichert werden. Somit sind die Werte auch nach dem Ausschalten verfügbar und können einfach wieder geladen werden. (Diese Methode verwende ich auch bei meinem IMADEIT-V3)
Stichworte hierzu sind in der BASOM-Hilfe EEPROM und DIM. Da solltest du eigentlich alles finden, was du suchst.
Einziger Nachteil dieser Sache, ein EEPROM kann nicht beliebig oft beschrieben werden. Irgendwann ist schluss. Jedoch scheint es mir nicht so, als müsste man diese Werte ständig ändern, weshalb das bei deinem Fall kein Problem darstellen sollte.

Viele Grüße,
jon

Netzman
05.11.2009, 20:10
Bei den Bascom Samples ist auch ein RS232-Bootloader enthalten. Den könntest du anpassen, dass er auch auf andere Befehle als ASCII 123 (Empfange Programm) reagiert, um damit zb. im Eeprom abgespeicherte Werte zu ändern.
PC-seitig wäre das im Endeffekt die Hex-Datei (Firmware-Updates sind so auch einfacher), die Standalone-Bootloaderprogrammer Version von MCS und ein eigenes kleines Konfigurationsprogramm für die Einstellungen.
Ausliefern müsstest du nur mit dem Bootloader vorprogrammierte µC.

So ein Paralell- oder Seriell-Port Programmer (zum selbst flashen vom Bootloader) ist ja wirklich nicht sehr aufwändig, ist aber denke ich aus Gewichtsgründen direkt auf der Platine nicht optimal :)
Ein Kompromiss wäre zb. den Programmer auf einem aus der Hauptplatine "herausbrechbaren" Stück unterzubringen.

mfg

Willa
05.11.2009, 20:13
Danke für eure Tipps, da werde ich mich mal mit auseinandersetzen und bei Problemen oder Erfolg laut geben ;-D

guenter1604
05.11.2009, 21:41
Hallo Willa,

du sendest doch schon seriell. Dann richte doch einfach den Empfang ein:


Config Serialin = Buffered , Size = 40 , Bytematch = 13

jetzt wird beim Empfang des "Enter" ein Interrupt ausgelöst. Damit der deine Regelung nicht zu sehr bremst, setzt du nur einen Flag:


'---------------------------------------------------------------------------
' Serial0charmatch
'
' In the Inputbuffer i recieved a "13"
' Set only a Flag
'---------------------------------------------------------------------------

Serial0charmatch:
Cr_received = 1
Return

Danach entferne noch ein ev. vorhandenes "10" am Anfang des Strings und schicke den String an einen Parser


If Cr_received = 1 Then 'check the Buffer
Cr_received = 0
Input Serinpstr
'cut LFs from the String
While Asc(serinpstr) = 10
Strsize = Len(serinpstr) - 1
Serinpstr = Right(serinpstr , Strsize)
Wend
Call Parser
End If

Mein Parser teilt dann den Befehl in Moduladresse, Befehl und Wert auf.

z.B.: 0:123=456

Modul 0 erhält den Befehl 123 es soll der Wert 456 gesetzt werden.
Jetzt noch ein


Writeeeprom Wert , Speicherzelle

und schon könnte man in jedem Terminal mit Hilfe eines Standard Seriellkabels Werte ins EEPROM des ATMega schreiben.
Den RS232-Wandler hast du ja schon auf der Platine.

Wenn du willst kann ich dir den ganzen Telemetrieteil meines Vertikal-Duokopters mailen ;-)

Günter[/code]

Bammel
05.11.2009, 21:44
also ich finde jon's vorschlag am besten und leichtesten umzusetzen...
edit: günter hats ja schon erklärt



@Bammel:

Hast du das Ladegerät schon ausprobiert? Und stell dir vor, hatte ja erzählt dass ich den Motorenhersteller angeschrieben hatte und das Video etc. geschickt hatte. Heute bekomme ich Antwort von einem netten Herren, der total begeistert war und mir nun extra angefertigte Prototypen (leichter+mehr Leistung) schicken will für lau!! Mensch, das Internet geht echt sowas von ab...



ne hab ich noch nicht. noch ist der akku auch noch bei 11,3volt hab die letzten tage viel auf arbeit zu tun und hatte dann abends keine lust mich mit dem roboter usw. zu befassen. sonntag komm ich vllt dazu. habe eben zwar ein wenig programmiert aber ich verwerfe das ganze programm wieder. ich muss mir erstmal auf nen block ne skizze machen wie ich was umsetzen will/muss.

das mit den motoren ist ja mal pornös!!! wie machst du das immer??? dann hast ja fast den ganzen tricopter für lau. bis auf akku und kleinteile.

ich will auch sachen für lau haben :D :D :D
bzw. würde ich sogar gerne nen tricopter haben

Willa
06.11.2009, 07:49
@Günter: Vielen Dank, das sieht schon mal nach einem sehr guten Ansatzpunkt für mich aus. Ich glaube aber, ich werde nach dem Einschalten des Copters 1 Sekunde lang auf ein serielles Signal warten, wenn nichts empfangen wurde kann man fliegen, wenn was empfangen wurde ist man im Programming mode. Dadurch wird die Regelung dann gar nicht beeinflusst.

dir den ganzen Telemetrieteil meines Vertikal-Duokopters mailen
Den Vertikal Duokopter würde ich sehr gerne mal sehen!! Gibts Videos?

Edit:
Kannst du vielleicht auch noch mal den Code deines Parsers zeigen? Ich hätte zwar auch eine Idee (z.B. den String "A12345" senden, String auf das Vorkommen eines A's überprüfen, das A abschneiden, Variable "A_received" auf 1 setzen und den Rest des Strings verwerten), aber vielleicht hast du ja eine elegantere Möglichkeit?

guenter1604
06.11.2009, 09:20
Den Vertikal Duokopter würde ich sehr gerne mal sehen!! Gibts Videos?

Du hast das ;-) übersehen

http://www.gerold-online.de/cms/wheelie/videos.html

Der Parser ist recht umfangreich und warscheinlich in diesem Fall mit Kanonen auf Spatzen geschossen, aber ich hänge ihn an.

Dein Ansatz ist richtig, so läufts auch bei mir.
Jedoch beim Wheelie liegt die ganze Regelung in einem Interrupt (alle 10ms), der Parser in der Hauptschleife. So ist sichergestellt, daß die Regelung im festen Rythmus abgearbeitet wird. Wenn gerade nichts zu tun ist wird das Serielle erledigt. Der Parser eskaliert mit der Zeit sowieso, wenn man mal Blut geleckt hat. Zur Laufzeit zahllose Parameter zu verändern und die Auswirkungen zu beobachten macht Laune ;-)

Günter

Willa
06.11.2009, 09:48
Hi Günter, vielen Dank für den Code, ist eine gute Referenz. Das ist ja eher ein vertikal Duochopper :-D Dann bin ich mal gespannt ob ich da was schönes hinbekomme. ich werde wohl eine grafische Benutzeroberfläche machen. Gibts da evtl. noch weitere Tipps?
Ich dachte an folgendes:
Ein Button "connect", der gedrückt werden muss innerhalb der Zeit in der der Copter auf einen Befehl wartet. Sobald der programming modus aktiviert ist, sendet der Copter eine Liste mit allen aktuellen Einstellungen. Diese werden im GUI in Textfeldern dargestellt. Neben jedem Textfeld ist ein weiteres Textfeld in dem man eine neue Eisntellung eintragen kann. Das ganze leuchtet grün wenn aktuelle Eisntellung = gewünschte Einstellung und rot wenn da ein Unterschied ist. Es gibt einen weiteren Button "Write", der alle Werte überträgt die sich geändert haben. Hat der Copter einen Satz neue Einstellungen empfangen, sendet er nochmal zurück was er glaubt empfangen zu haben, alle Textfelder sollten danach grün leuchten.
Hat jemand Verbesserungsvorschläge?

guenter1604
06.11.2009, 09:56
Daten seriell empfangen und im Puffer ablegen macht der ATMega ohne Belästigung des Prozessors, der Interrupt und das setzen des Flags sollte deine Regelung nicht beeinflussen. Dann müsstest du nur den Parser dazu oder wegschalten.:

Dim State As Byte 'Contains selected control loop state: 0 = Motors off, 1 = Acrobatic mode, 2 = Hover mode

if state = 0 then gusub Parser