Will einen einfachen Schaltkanal mit AVR Micro bauen.

Antworten
Benutzeravatar
Heli_Crusher
Beiträge: 2721
Registriert: 19.06.2006 14:31:54
Wohnort: Wittlich
Kontaktdaten:

#1 Will einen einfachen Schaltkanal mit AVR Micro bauen.

Beitrag von Heli_Crusher »

Ich frage mal einfach hier so in die Runde, der Microcontrollererfahrenen Helipiloten ...

Hat jemand schon einmal einen Servoausgang eines Empfängers mit einem Atmel Microcontroller ausgewertet ??

Konkret geht es mir darum, einen meiner Dragonfly 4 mit ein wenig Beleuchtung und Blinkkram auszustatten.

Nun bin ich auch schon fleißig mit dem Programmieren in C (WinAVR) dran, aber irgendwie komme ich nicht so richtig weiter.

Kann mir da mal jemand, evtl. aus seiner eigenen Erfahrung, mal ein wenig weiterhelfen ??

Guten Rutsch

Michael
Tomahawk HT-CCPM & D-CCPM bestehend aus: 3 x HS 65MG an der TS, FS61BB am Heck, GY-401, R607FS FASST, Kontronik Jazz 40-6-18 Regler, 500TH Motor.
Jeweils ein 3DX500 und ein HDX500.
Sender: Futaba FF-9 (T9CP) mit TM-8
Status: R/C - Helifliegen wird wird wieder trainiert. Einweisung auf der Dynamic WT9 geht gut voran und ich hoffe Ende Januar allein damit fliegen zu dürfen.
Versichert: DMFV. (Zusatz 3)
wicky
Beiträge: 393
Registriert: 24.10.2004 23:53:47

#2 Re: Will einen einfachen Schaltkanal mit AVR Micro bauen.

Beitrag von wicky »

Heli_Crusher hat geschrieben:Hat jemand schon einmal einen Servoausgang eines Empfängers mit einem Atmel Microcontroller ausgewertet ??

Kann mir da mal jemand, evtl. aus seiner eigenen Erfahrung, mal ein wenig weiterhelfen ??
ein 2-punktschalter ist einfach.

programmiere einen interupt (z.b. pin change),
starte bei steigender flanke einen timer und werte den timer bei fallender flanke aus (setze ein register).
die ansteuerung der LED kannst du dann in main erledigen.

achja am besten schreibst du die interput prozeduren mit assembler ... und halte die I-Prozeduren kurz.

Gruss
Wicky
So Long, and Thanks For All the Fish
Benutzeravatar
Heli_Crusher
Beiträge: 2721
Registriert: 19.06.2006 14:31:54
Wohnort: Wittlich
Kontaktdaten:

#3

Beitrag von Heli_Crusher »

Nun ja,

so weit war ich auch schon. Internen Oszilator mit den Fuse-Bits auf 1 MHz, Timer 1 in den ICP (Impuls Capture Mode) gebracht. Taktteiler auf 1 (Systemtakt) gestellt, fallende Flanke als Interrupt gesetzt und den Wert aus dem 16-Bit Timer dann mit dem Startwert verrechnet und so weiter.

Eingang ICP1 (PB0) als Eingang ohne Pull-Up und dann den Ausgang von, z. B. Kanal 3 (Futaba Throttle) dran.

Eigentlich hätten die Werte zwischen ca. 1000 und ca. 2000 (Wegen Noisecancel, Ungenauigkeiten in der Übertragung, etc. nur ca.) liegen müssen.

Habe die aber nicht. Irgendwie bekomme ich den Beginn des Impulses nicht mit. Nur das Ende. Dazwischen liegt dann ein Timerüberlauf oder irgendwelche Werte.

Das Problem ist also, das ich den Timer 1 mit der steigenden Flanke starten und mit der fallenden Flanke anhalten und auslesen müsste. Da komme ich aber noch nicht hinter.

Michael
Tomahawk HT-CCPM & D-CCPM bestehend aus: 3 x HS 65MG an der TS, FS61BB am Heck, GY-401, R607FS FASST, Kontronik Jazz 40-6-18 Regler, 500TH Motor.
Jeweils ein 3DX500 und ein HDX500.
Sender: Futaba FF-9 (T9CP) mit TM-8
Status: R/C - Helifliegen wird wird wieder trainiert. Einweisung auf der Dynamic WT9 geht gut voran und ich hoffe Ende Januar allein damit fliegen zu dürfen.
Versichert: DMFV. (Zusatz 3)
wicky
Beiträge: 393
Registriert: 24.10.2004 23:53:47

#4

Beitrag von wicky »

Schicke mir mal dein programm via pn - mit der angabe, welchen AVR du nutzt. Ich schaue es mir an und sage dir dann was falsch ist.

Gruss

Wicky
So Long, and Thanks For All the Fish
Benutzeravatar
tracer
Operator
Operator
Beiträge: 63851
Registriert: 18.08.2004 18:50:03
Wohnort: Kollmar
Has thanked: 5 times
Been thanked: 4 times
Kontaktdaten:

#5

Beitrag von tracer »

Ich verstehe zwar recht wenig von dem, was ihr schriebt, finde es aber klasse :)
Benutzeravatar
Richard
Beiträge: 5904
Registriert: 30.10.2004 09:28:12
Wohnort: Erde
Kontaktdaten:

#6

Beitrag von Richard »

naja guckt mal auf diese Seite ..... leider haben wir hier nicht so nen Bereich....

http://www.rclineforum.de/forum/thread. ... bb833ec938

ist zwar in Bascom aber mann braucht es nur umsetzen... da ich keine Hochsprache mehr lernen werde, will wird für meine Anwendungen Bascom herhalten müssen...

Ob der Code jetzt 0,012sec. verzögert läuft weils net sauber geproggt ist ist mir als Anwendner nussig....

Mein Prinzip: "funktionieren muss und es darf nix abfackeln da rest ist egal ;) ..." und ob ich 200Zeilen Code habe ist mri auch egal...

übrigens gibts auf dem Nachbarforum eineige Gute ideeansätze... von geblinke über einlese schalten..und auf manchen webseiten ein 40A Regler mit nen ATMega8 :) ... platinen kann ich mir selber fräsen für die anwendungen wirds reichen... somit habe ich keine externe kosten die anfallen....usw..

Richard
derzeit: Sim

______________________________________________________

My Home http://www.reverbnation.com/bbmmp


"Aufgeben gibts nicht..." :richard: ".....oft findet man den Sieg in der Niederlage......
Benutzeravatar
Heli_Crusher
Beiträge: 2721
Registriert: 19.06.2006 14:31:54
Wohnort: Wittlich
Kontaktdaten:

#7

Beitrag von Heli_Crusher »

Hallo Richard,

ich habe den Quellcode mal aus dem Post kopiert.

Wenn ich nachher nach hause komme, werde ich den mal in mein Bascom kopieren und mal antesten.

Mir geht es bei so einer Sache mehr um das Verstehen des Codes.
Bisher habe ich meistens bestehende Programme aus dem Internet so modifiziert, das die für mich gepasst haben.

Einige Sachen habe ich auch schon selbst geschrieben. Aber Interrupts habe ich dabei nie benutzt.

Im Anhang ist mal der Versuch von heute morgen.

Ist mit Programmers Notepad 2 geschrieben und noch ungetestet.

Sollte aber mit dem 1 MHz internen Takt klappen, wenn ich nicht zu viel falsch verstanden habe mit dem Interrupthandling.

Danke für eure Mitarbeit an meinem Problem / Projekt.

Michael
Dateianhänge
schaltkanal.c
Die ungetestete Version einer Auswertung für einen RC-Kanal mit WinAVR und dem ATmega8.
(2.59 KiB) 63-mal heruntergeladen
Tomahawk HT-CCPM & D-CCPM bestehend aus: 3 x HS 65MG an der TS, FS61BB am Heck, GY-401, R607FS FASST, Kontronik Jazz 40-6-18 Regler, 500TH Motor.
Jeweils ein 3DX500 und ein HDX500.
Sender: Futaba FF-9 (T9CP) mit TM-8
Status: R/C - Helifliegen wird wird wieder trainiert. Einweisung auf der Dynamic WT9 geht gut voran und ich hoffe Ende Januar allein damit fliegen zu dürfen.
Versichert: DMFV. (Zusatz 3)
Benutzeravatar
Richard
Beiträge: 5904
Registriert: 30.10.2004 09:28:12
Wohnort: Erde
Kontaktdaten:

#8

Beitrag von Richard »

Jo,

du sagst es... ich hab vieles einfach nur gemacht vor vielen Jahren warum das so war und weshalb es so funktioniert hat war mir damals egal..

als ich voriges Jahr das erste mal das AVR gestartet habe und mit Bascom in kontakt trat.. und ich viel gesurft hatte mit tips tricks usw. habe ich bemerkt das die "Logik" was dahinter steckt nicht alzu schwer ist... bei Turbo Pascal hab ich nie Verstanden warum wenn cih ne Schleife übergebe oder oder das Hauptprogramm das oder jenes macht... lag am alter oder eher am Wissensdurst..

Was mich fasziniert hat war das ich mit wenigen Befeheln etwas bewirkt habe und es auch gesehen habe "geblinke in verschiedene Variationen oder ein Servo bewegen nach meinen wünschen" ... Display Anzeige oder oder..

...sicherlich habe ich einige Programme übernommen und angepasst an meine Bedürfnisse, aber auch gelernt ... und werde auch weiter lernen nur halt nicht mehr C oder C++ usw.. ich habs zwar aber das ist mir zu Komplex gegenüber Bascom...

Entscheident für AVr war einfach die vielfalt an anwendungsbereichen von Atinny13 bis Atmega 168 oder oder ... ISP ich denke um das alles auszukosten ist leider ein Leben zu kurz....

Für mcih werden aber immer nur 3 Bereiche interessant bleiben: Blinkschaltungen , Selbstbauregler, und Modellbahnanwendungen für einen Kollegen.... vielleicht mal Datenlogger für Flieger -Heli's etc etc.. aber das ist noch weit entfernt...

Interr
upts habe cih selber noch keine verwendet, auch happerts bei mir mit den Timer funktionen starten ist ok bis wert XY auch ok aber dann übergabe auf anderen Funktionen ..naja ... *ggg* und ein Timer ist mal komfortabler als wait befehle...


Gruß
Richard
derzeit: Sim

______________________________________________________

My Home http://www.reverbnation.com/bbmmp


"Aufgeben gibts nicht..." :richard: ".....oft findet man den Sieg in der Niederlage......
MeisterEIT

#9

Beitrag von MeisterEIT »

moin,

zaehlerstand = (256 * hochbyte ) + niederbyte;

das ist sehr schlecht.

diese multiplikation kann schon viel zu lange dauern.
also


zaehlerstand = ( hochbyte << 8 ) + niederbyte;

und da man unsigned char shiftet muss man es erst casten.

also

zaehlerstand = ((( unsigned int ) hochbyte ) << 8 ) + (unsigned int)niederbyte;

grüße
wicky
Beiträge: 393
Registriert: 24.10.2004 23:53:47

#10

Beitrag von wicky »

Hallo Michael,

ich habe mir deinen Code angesehen.
Meiner Ansicht nach geht es mit diesem Konzept nicht eine brauchbare Auswertung zu machen.

Du solltest es folgerndermassen machen:

1. Nutze den Eingang INT0 (Einfacher Eingang OHNE Pullups/downs)

2. Programiere eine Int-Prozedur bei der du:
a. Steigende/fallende Flanke isoliertst
b. bei steigender Flanke startest du den 16 bit timer1 (Prescaler 1)
c. bei fallender Flanke stopst du den Timer und speiche den Wert in einer Globalen Variablen (dann timer reset und stoppen)

In der main loop schaust du dann nur noch nach dem aktuellen wert der
globalen Variablen und setzt die ausgänge dem entsprechend.
Wenn du willst kannst du ich der main loop noch eine gültigkeitsprüfung durchführen (timer >1,5ms und <2,5ms)

Ich hoffe das hilft dir

Gruss

Wicky
So Long, and Thanks For All the Fish
Benutzeravatar
Heli_Crusher
Beiträge: 2721
Registriert: 19.06.2006 14:31:54
Wohnort: Wittlich
Kontaktdaten:

#11

Beitrag von Heli_Crusher »

OK, mit dem Schieben gebe ich Dir recht... Hätte ich auch selbst drauf kommen können.

Hat jemand den Code schon einmal getestet ?

Wäre mal an einer Meldung dahingehend interessiert.

Das Beispiel, das ich gestern abend versucht hatte, hat immer nur Werte zwischen 10 und 54 ms ausgegeben.

Danke nochmal für jeden Tipp.

Ach so, das der Ausgang des Micros mit dem Code im Download etwa im 50 Hz flackert, wenn denn der Code klappt, weiß ich.

Sollte ja nur mal zum antesten sein.

Michael
Tomahawk HT-CCPM & D-CCPM bestehend aus: 3 x HS 65MG an der TS, FS61BB am Heck, GY-401, R607FS FASST, Kontronik Jazz 40-6-18 Regler, 500TH Motor.
Jeweils ein 3DX500 und ein HDX500.
Sender: Futaba FF-9 (T9CP) mit TM-8
Status: R/C - Helifliegen wird wird wieder trainiert. Einweisung auf der Dynamic WT9 geht gut voran und ich hoffe Ende Januar allein damit fliegen zu dürfen.
Versichert: DMFV. (Zusatz 3)
Antworten

Zurück zu „Klönschnack“