Das ganze soll dann so aussehen, mit dem Atmega 128 und einem 4 Zeiligem Display von Pollin. Dort kann ich mir auch die Telemetriedaten des Jetimoduls ansehen und auswerten
das Programm ist in der For - Next Schleife und progelt gerade an dem Array Pulslaenge herum, ist gerade dabei in mehreren Takten (!!!) die Wordvariable zu schreiben. Jetzt schlägt ein Timer zu und die Variable ist gerade nur halb fertig.
Wenn Du Variablen manipulierst, die in einer ISR genutzt werden, den entsp. Interrupt deaktivieren, damit der da nicht zwischenhaut.
Oder sicherstellen, daß demnächst kein Timer zuschlagen kann.
Also:
Do
'nix
Loop until Timerx < 200
Wozu eigentlich 2 Timer? Das ist ziemlich merkwürdig gelöst.
Wo ist der Startimpuls des PPM-Signals?
Das Startsignal füllt den ganzen Frame zu den 20-25ms auf und muß deutlich länger sein als jeder mögliche Puls. (Genaues weiß man nicht aber ich schätze 4-5ms müssten reichen).
Wenn ich das richtig sehe, füllst Du das am Ende auf. Dadurch wird der Frame unterschiedlich lang sein, da ja die Signale des nächsten Frames anders sein können.
Da hast Du noch nen langen Weg vor Dir, denke ich.
Ein Mega128 ist vielleicht auch etwas sehr großzügig ;-)
Mein Programm ist keine 10k groß.
Anbei mal mein Programm, falls Dir das was hilft. Schau Dir vor allem die Timer-isr an und die ganzen Subs zu denen er da drin springt. Sowas kann man natürlich nur machen wenn man das Timing immer klar vor Augen hat.
Gruß,
Norbert
rMM 101
2,4GHz Eigenbau mit Assan-HF
Hamburg
Wenn einer grad mit Mühe kaum, geklettert ist auf einen Baum und denkt es ist ein Vogel er, so irrt sich der.
erstmal vielen dank, werde dein programm mal morgen ausprobieren.
habe bisher auch nur die grundsätzlichen sachen ausprobiert, sowas wie auswertung der jeti duplex sensoren, display mit 4 zeilen hat auch etwas gedauert, tastaturmatrix und geber bzw kanalzuordnung. ach ja, und die digi trimmung. platine und schaltplan sind soweit auch fertig, nur noch nicht bestellt weil ich halt mit dem signal nicht klar kam.
diese schleife in meinem programm ist nur so proforma da, dort werden ja später die analogeingänge verarbeitet.
meine timer machen folgendes. der eine starte alle 23ms den anderen. in dem werden dann die eigentlichen signale geschaltet. habe mich an meiner alten multiplex orientiert. 9 signale und dazwischen halt die austastsignale von 0,3ms. dann wieder auf den ersten timer warten.
ach ja, wenns von interesse ist, ich habe mal das vario von jeti ausgelesen, dort werden auch das sinken und steigen differenziert ausgegeben in form von mehr oder weniger gleichen zeichen.
so, danke erstmal. gruß gerd
das mit der Schleife war ja nur ne Erklärung für das Problem.
Gehe mal davon aus, daß fast jeder Befehl in Bascom mehrere Instruktionen (also Takte) im Maschinencode bedeutet.
Da kann ein Interrupt jederzeit reinhauen und wenn in der ISR eine Variable benutzt oder manipuliert wird, an der der Bascom-Code gerade gearbeitet hat, geht das in die Hose.
Das kann offensichtlich sein wie hier, kann aber auch viel seltener passieren, so daß man es zuerst nicht merkt.
So wie Du diesen Testcode geschrieben hast, würde ich nichtmal entfernt daran denken, damit zu fliegen, wenn Du das fertig hast.
Baue erstmal einen ersten Test auf Lochraster oder Breadboard um die grundsätzlichen Funktionen zu testen.
Eine Platine bestellen wäre in diesem Stadium vermutlich rausgeschmissenes Geld. Da passen garantiert viele Dinge nicht.
Gruß,
Norbert
rMM 101
2,4GHz Eigenbau mit Assan-HF
Hamburg
Wenn einer grad mit Mühe kaum, geklettert ist auf einen Baum und denkt es ist ein Vogel er, so irrt sich der.
Puh, habe das Teil gestern live und in Farbe am Wasser gesehen.
Da ist mir klargeworden, dass Norbert sich mit dem Sender eine super Individualergonomie geschaffen hat. Er steckt nicht nur in jedem Detail drin, sondern kann damit auch hochgradig gut umgehen! 2. Platz beim Westküstenrace unter schwierigsten Bedingungen.
Das passt schon.
Martin
GER 4 -K.12/27MHz - 2 Servos müssen reichen
Wind-powered by genuine swan-sails.
Der Pessimist ist der einzige Mist auf dem nix wächst.
hallo, bin inzwischen auch erheblich weiter gekommen.
modellauswahl, geber / servozuordnung funktionieren.
das problem mit den timern habe ich (dank norberts tips) inzwischen auch in den griff bekommen.
einige menues fehlen noch, ist halt etwas fleißarbeit nötig, und die mischer gibt es noch garnicht. aber rennt ja nicht weg. http://www.mm-sailing.de/forum/images/em...humbup.gif
@ Martin: Danke für die Blumen. Das mit dem individuellen Design war eine starke Triebfeder, das Ding kann ja momentan noch kein Stück mehr als käufliche Anlagen. Und: Nie wieder Meckern über die bescheuerte Menüführung beim Programmieren des Senders ("Welcher hirnverbrannte Idiot hat sich das bloß ausgedacht und programmiert").
Es ist möglich, das so zu machen, daß man es nach etwas probieren intuitiv bedienen kann. Können wir bei Gelegenheit ja mal ausprobieren.
@kopy:
Nicht schlecht! Das ist eine etwas andere Grössenordnung als meine Minimallösung.
Achtung, falls Du in meinem Programm abkopieren willst, das ist so wie gepostet ziemlich buggy.
Servorate einstellen ist totaler Mist und das Feld Array invert ist nur 8 Byte, müsste aber 64 groß sein.
Komischerweise hat beides zusammen halbwegs funktioniert, man konnte nur Servoreverse nicht dauerhaft speichern.
Dann hatte ich das erstere Problem korrigiert und dann hat die Kiste nur noch Quatsch gemacht. Das hat mich fast in den Wahnsinn getrieben, hab ewig nach dem Fehler mit dem Array gesucht. Weil das zu klein deklariert war, habe ich mir schön andere Variablen im EEprom mit Murks überschrieben und ständig an der falschen Stelle im Programm gesucht.
Ich hab dann das Programm immer weiter reduziert um andere Dinge auszuschliessen, am Ende hatte ich nur noch 1,5 Seiten Code und den Fehler immer noch. Ich war dann so verzweifelt, daß ich das bei µcontoller.net gepostet hatte und dort ist einer über das Array gestolpert.
Naja, den Teil hast Du ja nun wohl hinbekommen.
Mit Mixern hast Du Dir was vorgenommen. Sportlich ist dabei, das Ganze mit Servoweg, Umkehr und Mischerrate erstmal theoretisch unter einen Hut zu bekommen. Richtig spannend wird es dann, wenn Du Dich noch an einen 120° Taumelscheibenmischer rantrauen willst.
Ich brauche keine Mischer, da ich nicht vorhabe, wieder mit der Fliegerei anzufangen.
Einzig für ein Boot mit drei Motoren habe ich mir einen speziellen Regler gebaut, der mit einem Extrakanal die Äusseren Motoren separat beeinflusst. Den Regler mit 3 Ausgängen habe ich sowieso selbst gebaut also nur ein weiterer Kanaleingang und etwas Software für die Mischerei. Für eine konkrete Anwendung ist das einfach zu programmieren aber so allgemein senderseitig Mischen, freie Zuordnung und alles einstellbar - das erspare ich mir, weil ich's nicht brauche.
Was auf jeden Fall noch kommt, ist ein Multinaut, also mehrere Schaltfunktionen über einen Kanal.
Theoretisch könnte ich locker 10 bit in einem Kanal unterbringen aber ich hab keine Ahnung, ob Herr Assan mit seinem Modul bei so einer Auflösung noch mitspielt. Ausserdem braucht das kein Mensch und ich wüsste auch nicht, wo ich im Sender die ganzen Schalter noch unterbringen sollte ;-) Also werde ich mal rumprobieren, was das Modul hergibt. Ich könnte mir vorstellen, daß das 8 Bit ist, dann hätte man mit 4 Bit schönes doppeltes Oversampling und das Timing wird schön unkritisch. (Internen Oszillator bei der Auswerung im Modell).
Vergiss die Öse für nen Tragegurt nicht, so wie ich (ach, beim ersten Mal unnötig, kommt später). Das ist ein ganz blödes Gefühl auf dem Steg. Fallen lassen ist schon blöd - ins Wasser fallen lassen noch blöder. (Nein, nix passiert)
Ach ja, ich kann übrigens Platinen machen, falls mal Bedarf besteht. Doppelseitig mit einer Deckungsgleichheit von 0,2 - 0,3mm kriege ich hin, 0,5mm Pitch geht, 0,8mm Pitch ist vollkommen unkritisch. Zur Not schaffe ich also die "harmloseren" Grenzen industrieller Fertigung (Abstand/Breite >=0,3mm), lediglich Dukos sollten wegen der nicht so tollen Deckungsgleichheit etwas grösser sein, Bohrung 0,4mm und Durchmesser 1,2mm, das klappt immer.
Durchkontaktieren kann ich natürlich nicht, ebensowenig wie Bedrucken oder Lötstop. Letzteres geht zwar homebrew, ist aber ein Mordsaufwand. Durchkontaktieren ist bei reinen Dukos kein Problem, nur etwas Arbeit aber z.B. bei bedrahteten Elkos grosser Mist, wenn eine Leiterbahn auf der Bestückungsseite dran soll.
Ich kann die zum Quasi-Selbstkostenpreis machen, müsstest nur selbst bohren und alles andere als rechteckig auch selber mit der Laubsäge rausfideln. Über das Bohren kann man reden, hat ja nicht jeder nen kleinen Bohrständer und Hartmetallbohrer unter 1mm (HSS ist bei den Epoxyplatinen nach ein paar Löchern hinüber). Einfach ein paar spezielle Dinge beim Layout berücksichtigen und meine Platinen ersetzen zu 99% professionell gefertigte.
Gruß,
Norbert
rMM 101
2,4GHz Eigenbau mit Assan-HF
Hamburg
Wenn einer grad mit Mühe kaum, geklettert ist auf einen Baum und denkt es ist ein Vogel er, so irrt sich der.
Dieser Beitrag wurde zuletzt bearbeitet: 28.03.2010 17:32 von Norbert.
hallo norbert, erstmal danke für das angebot mit den platinen. wenn mal bedarf besteht werde ich mich bestimmt nochmal mit dir in verbindung setzen.
dein eeprom-speicher-problem habe ich heute auch geschafft. irgendwo beim speichern der geberwege mache ich grade mist. naja, werde ich schon finden, die anderen daten kommen ja auch nach dem einschalten wieder.
tja, und die mischer, da habe ich bestimmt noch nen langen weg vor mir und habe schon viel gegrübelt. aber mich jagd ja nichts.vieles ergibt sich bei mir oft wenn ich dabei bin. bisher habe ich hauptsächlich die geberseitige beeinflussung programmiert, also zuordnung welcher geber welche funktion steuert und an welchem kanal das signal dann ausgegeben wird. ist sehr ähnlich der mc3030 von multiplex gehalten und funktioniert gut. als nächstes werde ich mich um weg/rev funktion kümmen. einfach pro steuerweg zwei integervariablen (knüppel links und rechts) und je nachdem ob der wert positiv oder negativ ist läuft das servo in die entsprechende richtung mit dem vorgegebenen weg.
(-100 bis +100 prozent * dem steuerweg) / 100
wenn intresse besteht kann ich ja mal meinen quellcode mitschicken, sieht aber noch sehr wirr aus. das verschönern kommt dann noch damits etwas übersichtlicher wird.
werde bestimmt wieder posten wenns weitergegangen ist. gruß gerd
Deinen Quellcode verstehst vemutlich nur Du ;-)
Und das nach Wochen auch nur mit Glück oder viel Mühe.
Vom Prinzip her ist das ja alles relativ einfach aber eben recht umfangreich.
Meine Version ist eher zum Nachbau für Schiffsmodellbauer gedacht und zuerst decke ich nur meinen Bedarf ab.
Der Schiffsmodellbauer braucht keine Mischer aber vielleicht Multinaut und Modellspeicher.
Die freie Kanalzuordnung brauchst Du nur in Verbindung mit Mischern. Bei mir ist der Analogeingang 0 fest der Kanal 1 am Empfänger usw....
Die Kanäle muss man eben entsprechend am Empfänger stecken.
Mit frei zuzuordnenden Mischern wird das natürlich alles fürchterlich kompliziert.
Daher habe ich mir das erspart.
Gruß,
Norbert
rMM 101
2,4GHz Eigenbau mit Assan-HF
Hamburg
Wenn einer grad mit Mühe kaum, geklettert ist auf einen Baum und denkt es ist ein Vogel er, so irrt sich der.
auch wenn du es nicht brauchst, so kompliziert ist die ganze sache wahrscheinlich nicht.
natürlich steckt der geber 1 immer am analogeingang eins.
die zuordnung , welche dieser geber steuert ist ja nur auf dem diaplay zu sehen, ändert im programm sonst weiter nix.
ich habe 30 variablen reserviert für diese funktion zb
Funktion(1) = "Quer"
Funttion(2) = "Hoehe"
usw
so kann ich dann wählen das geber(1) = 2 ist und angezeigt wird mir Hoehe
beim servo so ähnlich
ich wähle die funktion 1 - 9 der jeweils ein name zugeordnet ist.
bekommt servo(1) die funktion Hohe entspricht das eben der 2
beim zuweisen geht dann der analogwert(1) an den kanal(servo(1)), sprich 2
bekommen zwei servos die gleiche nummer, dann habe ich halt zwei kanäle auf eine funktion gelegt (zwei querruder z)
funktioniert jedenfalls bei mir gut.
dualrate ist auch banal
analoggeberwert * dualrate / 100
soweit die geberseite
der zweite teil ist dann die servoseitige mischung, daran arbeite ich halt noch
weg/rev funktioniert so wie dualrate, nur für knüppel links/rechts getrennt, also 2 werte auf den servokanal wirkend, nicht auf den geberwert
ist dieser weg/rev negativ läuft das servo mit dieser knüppelrichtung halt andersrum
und dann, irgendwann, die mischer............
fertigstellung ende 2010 oder so
ps: das loch für den haltegurt bohre ich wenn ich die frontplatte habe und das ganze in etwa auswiegen kann um den schwerpunkt einigermaßen zu treffen.
Dieser Beitrag wurde zuletzt bearbeitet: 28.03.2010 21:42 von kopy.