Hallo Richard,
das größte Problem sind die Bäume!
Selbst wenn Du weist, in welcher Richtung er runter gekommen ist,
Dir tut dann bald der Nacken weh...nach oben suchen zu wollen.
Danke für die Antworten!
Grüße
Rolf
Hallo Richard,
das größte Problem sind die Bäume!
Selbst wenn Du weist, in welcher Richtung er runter gekommen ist,
Dir tut dann bald der Nacken weh...nach oben suchen zu wollen.
Danke für die Antworten!
Grüße
Rolf
Hallo Rolf,
umzugsbedingt war ich ein paar Tage offline - ich lebe zwar immer noch mit, aus und in Kartons, aber der Internet-Zugang geht wenigstens schon mal
Ehrlich gesagt, würde ich das Problem auch nach der "Sender-Aus"-Methode lösen... Was die Servo-Impulse anbetrifft dürfte es doch nicht den geringsten Unterschied machen, ob eine Anlage auf 35 MHz, 2,4 GHz oder welcher Frequenz auch immer sendet, und ob sie AM (), FM oder PCM als Modulationsverfahren verwendet - ALLE Servos dieser Welt brauchen Rechteckimpulse mit einer Impulslänge zwischen 1 und 2 ms, und die muss JEDER Empfänger liefern. Und genau da würde ich den Hebel ansetzen: Kommt für eine bestimmte Zeit (z.B. 10 Sekunden) dieser Impuls nicht mehr, wird der Pieper aktiviert. Das einzige wirkliche Hindernis könnten vielleicht solche hypermodernen Empfänger sein, die auch nach Verlust des Sendersignals die letzte korrekt empfangene Impulsfolge weiter an die Servos ausgeben. Aber so etwas ist glaube ich noch keineswegs der Standard.
Und wenn gekaufte Schaltungen diese (einfache!) Aufgabe nicht zuverlässig lösen können, würde mich das nur anspornen, einen besseren Code zu schreiben
Aber das nur am Rande. Die Sache mit den vorgesehenen Zeiten lässt sich sicher lösen!
Bei der ja bereits erwähnten stromsparenden Taktfrequenz von 128 kHz läuft der 8bit-Timer alle 2ms über. Du könntest also z.B. im Timer-Interrupt eine Word-Variable um 1 hochzählen lassen. In der Hauptschleife wird diese Variable abgefragt; wenn sie 30.000 erreicht hat ist eine Minute rum, und eine entsprechende zweite Minuten-Variable wird um 1 inkrementiert. Dann muss nur noch überprüft werden, ob die vorgewählte Anzahl an Minuten schon erreicht ist, und gegebenenfalls der Pieper aktiviert werden.
Als bekennendes Spielkalb kommen mir aber gerade noch ein paar Ideen, wie man das Ding noch komfortabler machen könnte. Wie wär´s denn mit frei einstellbaren Zeitspannen (z.B. in 10-Minuten-Schritten) und einem einzigen Taster zur Bedienung? Nach dem Einschalten könnte man mit kurzen Tastendrücken die Zeit um jeweils 10 Minuten erhöhen (z.B. 4 Drücke = 40 Minuten), und durch einen langen Tastendruck dem Controller sagen, dass man fertig ist und er diesen Wert speichern soll.
Mit was hast Du denn die kleinen PICs programmiert?
Grüße,
Daniel
Robbe/Futabe bewerben grade stark ihr Bus-System. Dies ist zwar hautpsächlich für große Modelle mit vielen Funktionen gedacht aber kann auch in kleinen Maschinen eingesetzt werden. Diese arbeiten mit "Digital-Servos" mit anderen Zeiten für HIGH- und LOW-Pegel arbeiten. Diese sind aber noch recht neu.
Die Funktion, dass der Empfänger auch bei Abbruch der Funkverbindung zum Sender noch Signale an die Servos sendet, nennt sich FailSave und ist bei halbwegs modernen Sender/Empfänger standart.
Man könnte aber z.B. einen Kanal überwachen, welcher im Flug "viel" benutzt wird, z.B. Querruder. Auf diesem Kanal überprüft man eine bestimmte Zeit lang ob sich das Signal ändert. Wenn jetzt z.B. 15 Sekunden lang keine Änderung auf dem Kanal auftritt wird der Pieper ausgelöst, weil man davon ausgehen kann, dass das Model den Kampf mit der Schwerkraft verloren hat.
Alles ist möglich. Unmögliches dauert nur etwas länger!
Eure Ideen haben gewiss Vorteile und Nachteile:
zu Daniel....vor mir liegt ein PCM-Empfänger von Graupner "smc16 scan 35"
mit nen Skop waren auf allen Kanälen feine Nadelimpulse im ySec. Bereich sichtbar, obwohl Sender aus und
Fail Save nicht aktiv war.
Bei PPM Empfängern ist nichts zu sehen. Bei Jeti 2,4 GHz bin ich mir nicht so sicher.
Die käuflichen Pieper reagieren nicht, wenn der Sender aus ist.
Zum anderen verschwindet das Modul im Rumpf und man kümmert sich nicht mehr darum. Oftmals käme man
nicht so eben mal ran, um eine Taste zu drücken.
Ich würde sagen, daß mit den 3 Zeiten hat sich schon bewährt.
so war es mit den PIC:
#include<p12f675.inc>
__config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_ON
radix dec ;alle nicht defin. Werte, z.B HIGH 1300 dezimal
;Configurationsergebnis =
;************************************************* **********************************
;Variable Definition (nach Anwendung anpassen)
CBLOCK 0x20 ;erste RAM Adresse = 20h anwählen
SEKUNDEN_HIGH ;20h Variablen auf Spalte 1 setzen (Col 1)
SEKUNDEN_LOW ;21h
LOOP1 ;22h
LOOP2 ;23h
LOOP3 ;24h
ENDC ;mit ENDC unbedingt abschließen
;************************************************* **********************************
org 0x00 ;Reset ab Adresse 0
;Vorbereitung:
movlw 0x3F ;B'0011 1111'
movwf CMCON ;GP0-GP5 = digital (Bank0)
bsf STATUS,RP0 ;Bank 1
errorlevel -302
movlw B'111011' ;GP0/1/3/4/5 = Input=1
;GP2 = Output=0
movwf TRISIO ;Register in Bank1
movlw B'110011' ;GP-Eingänge mit Pull-Up Widerst.=1
movwf WPU ;Register in Bank1
bcf OPTION_REG,7 ;GPPU-Bit 7 auf Null setzen
call 0x3FF ;springe zur Adresse 3FFh und hole ins W-Reg.
;da liegt der Inhalt vom Hersteller und
;Rückkehrbefehl retlw
movwf OSCCAL ;Inhalt vom W-Register ins Register OSCCAL
;interner Oszillator wird kalibriert.
bcf STATUS,RP0 ;Bank 0
errorlevel +302
clrf GPIO ;Wichtig, Register definitiv auf Null setzen!
;Adresse Befehl Operand Kommentar
begin goto abfrage
abfrage btfss GPIO,1 ;Taste "Test",springe wenn Test offen(GP1=High)
goto blinken
btfss GPIO,4 ;Taste "S1",springe wenn S1 offen(GP4=High)
goto vorber1
btfss GPIO,0 ;Taste "S2",springe wenn S2 offen(GP0=High)
goto vorber2
btfss GPIO,5 ;Taste "S3",springe wenn S3 offen(GP5=High)
goto vorber3
goto abfrage
blinken bsf GPIO,2 ;Output GP2 = HIGH, Pieper EIN
call impuls ;Impulszeit ca. 3Sek.
bcf GPIO,2 ;Output GP2 = LOW, Pieper AUS
call pause ;Pausenzeit ca. 5 Sek.
goto blinken
impuls movlw H'FF' ;Achtung: für"'" richtige Taste(#) verwenden!
movwf LOOP1
movlw H'FF'
movwf LOOP2 ;impuls-Zeitroutiene = 0,8 Sec.
movlw H'04'
movwf LOOP3
blink decfsz LOOP1,F ;Sprung, wenn LOOP1 = 0
goto blink
decfsz LOOP2,F ;Sprung, wenn LOOP2 = 0
goto blink
decfsz LOOP3,F ;Sprung, wenn LOOP3 = 0
goto blink
retlw 0 ;CALL-Rücksprung (Impuls)
pause movlw H'FF'
movwf LOOP1
movlw H'FF'
movwf LOOP2 ;pause-Zeitroutiene = 3,2 Sec.
movlw H'10'
movwf LOOP3
gehe0 decfsz LOOP1,F ;Sprung, wenn LOOP1 = 0
goto gehe0
decfsz LOOP2,F ;Sprung, wenn LOOP2 = 0
goto gehe0
decfsz LOOP3,F ;Sprung, wenn LOOP3 = 0
goto gehe0
retlw 0 ;CALL-Rücksprung, Ende der Pausenzeit.
;************************************************* *************************
vorber1 movlw HIGH 1200 ;Zeitschleife = 20 Minuten
movwf SEKUNDEN_HIGH ;gemessen = 1201 Sec.
movlw LOW 1200
movwf SEKUNDEN_LOW
call warten
goto blinken
warten incf SEKUNDEN_LOW,F ;Inhalt+1 (Inkrementieren)
incf SEKUNDEN_HIGH,F
warten1 decfsz SEKUNDEN_LOW,F ;dekrement (-1 springe wenn 0)
goto warten2 ;Sprung zur 1 Sekunden-Schleife
decfsz SEKUNDEN_HIGH,F
goto warten2
retlw 0 ;Rückkehr zum blinken
warten2 movlw H'FF'
movwf LOOP1
movlw H'FF'
movwf LOOP2
movlw H'05'
movwf LOOP3
gehe decfsz LOOP1,F ;Sprung, wenn LOOP1 = 0
goto gehe
decfsz LOOP2,F ;Sprung, wenn LOOP2 = 0
goto gehe
decfsz LOOP3,F ;Sprung, wenn LOOP3 = 0
goto gehe
goto warten1
;************************************************* *****************************
vorber2 movlw HIGH 1800 ;Zeitschleife = 30 Minuten
movwf SEKUNDEN_HIGH ;gemessen = 1802 Sec.
movlw LOW 1800
movwf SEKUNDEN_LOW
call hallo
goto blinken
hallo incf SEKUNDEN_LOW,F ;Inhalt+1 (Inkrementieren)
incf SEKUNDEN_HIGH,F
hallo1 decfsz SEKUNDEN_LOW,F ;dekrement (-1 springe wenn 0)
goto hallo2
decfsz SEKUNDEN_HIGH,F
goto hallo2
retlw 0
hallo2 movlw H'FF'
movwf LOOP1
movlw H'FF'
movwf LOOP2
movlw H'05'
movwf LOOP3
laufe decfsz LOOP1,F ;Sprung, wenn LOOP1 = 0
goto laufe
decfsz LOOP2,F ;Sprung, wenn LOOP2 = 0
goto laufe
decfsz LOOP3,F ;Sprung, wenn LOOP3 = 0
goto laufe
goto hallo1
;************************************************* *********************************
vorber3 movlw HIGH 2400 ;Zeitschleife = 40 Minuten
movwf SEKUNDEN_HIGH ;gemessen = 2402 Sec.
movlw LOW 2400
movwf SEKUNDEN_LOW
call gisela
goto blinken
gisela incf SEKUNDEN_LOW,F ;Inhalt+1 (Inkrementieren)
incf SEKUNDEN_HIGH,F
gisela1 decfsz SEKUNDEN_LOW,F ;dekrement (-1 springe wenn 0)
goto gisela2
decfsz SEKUNDEN_HIGH,F
goto gisela2
retlw 0
gisela2 movlw H'FF'
movwf LOOP1
movlw H'FF'
movwf LOOP2
movlw H'05'
movwf LOOP3
springe decfsz LOOP1,F ;Sprung, wenn LOOP1 = 0
goto springe
decfsz LOOP2,F ;Sprung, wenn LOOP2 = 0
goto springe
decfsz LOOP3,F ;Sprung, wenn LOOP3 = 0
goto springe
goto gisela1
org 0x3FF
retlw 0x80
end
Das finde ich einen guten Ansatz, allerdings sind die zehn Sekunden nicht wirklich realistisch - wer sucht sein Modell schon nach zehn Sekunden? Hier ist die eingestellte Piepspause sicher ein besseres Maß. Für den Fall, dass ein Kanal für den Piepser frei ist ergibt sich ja eine ziemlich triviale Lösung: Fliegen: Signal (d.h. "Servo") Anschlag eine Seite, Verlust: Anschlag andere Seite. Ich denke für die übliche Vollbelegung der Kanäle an eine andere Lösung.... Kommt für eine bestimmte Zeit (z.B. 10 Sekunden) dieser Impuls nicht mehr, wird der Pieper aktiviert ...
Voraussetzung ist, dass das Modell nicht aus dem Sendebereich herausfliegt - das ist heutzutage eigentlich schon zu erwarten. Dann horcht der Piepser auf - beispielsweise - das Höhenruder. Selbst bei extremen Kunstflügen dürfte eine Sequenz von "Knüppel voll ziehen - voll drücken" im Sekundentakt für, sagen wir mal, zehn Mal wirklich nicht vorkommen. Da bräuchte der Pieps-Controller nur auf diese Sequenz zu hören - und schon weiß er, wann er angesprochen ist . . . oder?
Nachtrag: Wenn die Signalanalyse der Servosignale Probleme macht, kann die zuletzt genannte Lösung auch mithilfe von zwei Mikrotastern realisiert werden, die an die Servohalterung oder sonstwie montiert sind und die Servo-Endstellung z.B. am Servohorn abfragen. Beispiel siehe Bild.
Bild hier
Mini - Taster 3,5 x 6 mm Artikelpreis: 0.15 EUR
Geändert von oberallgeier (14.09.2011 um 08:40 Uhr)
Ciao sagt der JoeamBerg
Okay - ich dachte, dass die Geschichte mit dem Taster vor jedem Start erfolgen soll, aber jetzt ist mir alles soweit klar. Und außerdem wirst Du Dir über die "features" der Schaltung ja auch schon gute Gedanken gemacht haben. Aber ein´ hab ich noch: Mit 3 DIP-Schaltern könnte man ja theoretisch nicht nur 3, sondern 8 Zeiten codieren...
Und mit getrennten "Test"- und "Reset"-Tastern werden die Pins knapp: Beim Tiny13 (und allen anderen 8-Beinern) kann man nur 5 Pins nutzen, weil 2 für die Versorgungsspannung und einer als Reset-Eingang reserviert sind.
Der PIC-Programmcode kam mir so vor, wie Dir wahrscheinlich Englisch- trotzdem vielen Dank!
Ist den die Zuordnung von den einzelnen DIP-Schaltern, dem Taster und dem Piepser zu den Pins des Controllers fest (so wie in Deinem ersten Posting), oder wäre da noch etwas veränderbar?
Grüße,
Daniel
Lesezeichen