Hi,
schau mal im Forum und in der Hilfe nach dem Befehl: debounce nach. Dieser Befehl ist sehr gut zum Tastendruck mit Entprellung gedacht.
Gruß MAT
Hi,
schau mal im Forum und in der Hilfe nach dem Befehl: debounce nach. Dieser Befehl ist sehr gut zum Tastendruck mit Entprellung gedacht.
Gruß MAT
Hallo an alle Modellflieger,
bevor ich das Thema "Timer" anspreche ein paar Worte zum Ortungspieper.
Seit Jahren haben wir auf dem Platz immer wieder Abstürze, wo Modelle in Maisfelder, im Wald, oder auf Bäumen
hängen bleiben. Letztere sind oft schwer auszumachen, da man sie in Bäumen schwer findet.
Die Käuflichen Pieper arbeiten nach dem Prinziep "Sender ausstellen, es ertönt ein Ton im Intervall.
(Mit PCM-Empfängern geht das schon garnicht, mit 2,4 GHz Anlage auch nicht). Es kommt oft vor, daß trotz
Sender ausmachen von dem Ton nichts zu hören ist, das Modell ist weit weg vom Standort gelandet, es liegt
also ausserhalb der Tonreichweite. Man fährt gefrustet nach Hause.
Das brachte mich vor 3 Jahren auf die Idee, das Prinziep "Sender ausmachen" anders zu gestalten.
Mit einem Controller PIC der 12 Reihe baute ich eine neue Gangart auf.
Auf der Lochrasterkarte befindet sich eine Taste "Reset" / eine Taste "Test" / 3 Dip-Schalter / der PIC
und diverse SMD-Bauteile. Der Pieper wird an der Aussenwand des Modells montiert.
Die Funktion im einzelnen:
alle 3 DIP-Schalter stehen zu Beginn auf OPEN...
das Modul wird an einen freien Empfängerkanal angesteckt, um mit ca. 5 Volt versorgt zu werden....
Modell scharf machen....der Piper bleibt ruhig....
Nur einmalig die Taste "Test" betätigen, der Intervallton beginnt zu piepen, d.h. alles ist ok, Taste "Reset"
der Ton erlischt. (Dieser Ablauf wird nur getätigt, um alles zu kontrollieren).
Modell wieder entschärfen....
Jetzt kommt die Wahl des DIP-Schalters Sw1 oder Sw2 oder Sw3
Sw1 ist gedacht für 20 Minuten (zu empfehlen für Hotliner oder auch Motormodelle).
Sw2 ist gedacht für 30 Minuten (zu empfehlen für Segler mittlere Spannweite).
Sw3 ist gedacht für 40 Minuten (für Segler größerer Spannweite).
2 St. habe ich für Leute an der Wasserkuppe erstellt mit 60 Minuten.
Also, d.h. man entscheitet sich, welcher Swx auf ON gestellt wird.
Modell scharf machen und jetzt läuft die gewählte Zeit x ab, danach beginnt der Pieper im Intervall.
Ich habe Modelle nach 14 Tagen wieder bekommen, da Pilzsammler oder Reiter dem Ton nachgegangen
sind und das Telefon klingelte.
Ist der Absturz so stark, daß die Batt. zerstört wird, dann hilft natürlich kein Pieper mehr.
Aber wie ich schon schrieb, haben wir oder andere Leute in Bäumen das Modell gefunden.
Nun wollte ich das Ganze mit einem Tiny13 aufbauen. Das Proplem sind die Zeiten 20, 30, 40 Minuten
Bzw. besitzt der Tiny13 einen Timer1 oder würdet Ihr lieber einen anderen 8 Beiner nehmen.
Mein Englisch ist Null und habe jetzt mit über 70 Jahren keine Lust mehr zum lernen.
Ich hoffe, ich hab es verständlich geschildert
Viele Grüße
Rolf
Hallo Daniel, meine Frage an Dich hätte ich mir sparen können, wenn ich sehe welche Hilfe Du
anderen anbietest!
Schon einmal an so etwas gedacht? http://zft.de/peil1.htm ein Modell kann ja recht teuer sein..in diesem Link ist die Reichweite nicht optimal, aber der normale Flieger wird ja in etwas die Richtung kennen wo das Modell "abhanden" gekommen ist?
Gruß Richard
Der Tiny13 hat einen 8-bit Timer. Den TIMER0. Ich kenne mich jetzt in Bascom gar nicht, und in C nur ein wenig, aus, aber die Programmierung sollte eigentlich keine große Aufgabe sein.
Ich würde den Timer mit dem höchst möglichen Prescaler initialisieren. Bei jedem Überlauf einen Zähler inkrementieren und bei Bedarf den Pieper starten.
So lange der Controller nen Timer hat dürfte es egal sein, welchen Typ du genau verwendest. Denn die Aufgaben die du bisher beschrieben hast dürften Alle ohne Probleme lösen können.
Alles ist möglich. Unmögliches dauert nur etwas länger!
Hallo Rolf,
was für ein pfiffiges Projekt *ggg*Der Tiny13 hat, im Unterschied zu den meisten anderen Controllern, drei interne Oszillatoren. Der langsamste schwingt mit 128 kHz. Bei dieser Frequenz kannst Du den herunter bis 1,8 Volt betreiben, dabei frisst der Kleine (NUR der Controller) im aktiven Modus 240 µA. Den Watchdog kannst Du so programmieren (Clock/1024), dass der Controller fast ne halbe Sekunde verschläft und dann überlegt, ob die 40 Minuten vergangen sind *ggg* - sprich: im Aktivmodus von rund 5000 runterzählen (40 min * 60 sec/min * 2 Aktivzeiten/sec => 4800) und er hat die 40 Minuten. In den Pausen schläft er (Sleep Modus) und frisst dabei (NUR der Controller) weniger als 0,1 µA bei 1,8 V. Fazit: Aufgabe machbar, mit Sleep Modus wird Energie gespart - da müssen die Modelle nur noch gegen frühzeitigen Käferbefall oder Fäulnis gesichert werden *ggg*.Zitat von hegewald
Viel Erfolg mit dem Projekt!
Für den Fall, dass Du für den Tiny13 doch noch das Datenblatt suchst (Lektüre ist dringend zu empfehlen - leider) dann hier klicken.
Offtopic: das nächste Mal werde ich beim Gleitschirmfliegen auf der Wasserkuppe mein Vario ausschalten - vielleicht hör ich es dann im Wald piepsen. Offtopic zu Ende
Ciao sagt der JoeamBerg
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
Lesezeichen