www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ich bräuchte Assembler hilfe.


Autor: kabu (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir für meinen DF4 Heli den PWM-->PPM Konverter (unten) 
nachgebaut (Attiny13)
Damit kann ich an dem Alten Empfänger mit Konverter.
Brushless regler inkl.BL_Motoren anschließen.
Funktioniert Top!
 Aber ich habe einen zu starken Motor.
 Der Heli fliegt mit 25% Gasanschlag.
 Wie kann ich das in der Originalen Soft (6ms) so ändern das er nur die 
hälfte annimmt
 Compiler usw habe ich.Ich habe auch schon was selbergeschrieben aber 
nur in C.
 Von ASM habe ich keinen blassen schimmer.
 Kann ich den Wert den der Attiny von Eingang (ist doch ein ADC)kriegt, 
nicht einfach durch 2 teilen lassen?(PWM ist von 0-5V)
 Dann würde er doch die Leistung runterregeln!??
 Und ich hätte einen fliegenden Heli bei Halbgas.
 Oder ist die Summe die der ADC mißt 255?Dann würde auch ein immer -100 
auch gehen.
In C kriegt er ja bei einer rev5V doch 1024 als wert.
Aber das ist in Assembler wohl anders.
Komplette Dateien.
 http://home.versanet.de/~b-konze/koax_he..._bl-koax_01.zip

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Source ist IMHO kein ADC verhanden, sondern zwei eingehende PWM 
Signale und zwei ausgehende PPM Signale. Fernsteuersignale sind für mich 
unbekanntes Gebiet. Hast du schon versucht mit dem dem Autor zu reden, 
ob der die gewünschte Anpassung macht bzw. ob es vom Programmprinzip her 
überhaupt machbar ist?

Autor: kabu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan B. schrieb:
> Hast du schon versucht mit dem dem Autor zu reden

Ne noch nicht.
Da ich dachte des es einfach nur ein wert wie bei der ADC messung sei!

Den Code verstehe ich daher ja auch nicht. ;(

Autor: Sascha Weber (sascha_w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

soweit ich das sehe wird die Dauer des PWM-Signals mit einer 
Zählschleife eingelesen.
count_on:  clr  temp1      ; PWM 1
    sbis  PINB, PWM_IN1
    ldi  temp1, 0
    sbic  PINB, PWM_IN1
    ldi  temp1, 1
    add  on1cnt_l, temp1
    adc  on1cnt_h, temp2

und das 16 mal (zur Filterung)
am Ende der Messung wird der Zählwert deshalb wieder durch 16 geteilt
    lsr  on1cnt_h
    ror  on1cnt_l
    lsr  on1cnt_h
    ror  on1cnt_l
    lsr  on1cnt_h
    ror  on1cnt_l
    lsr  on1cnt_h
    ror  on1cnt_l

du könntest probehalber einfach noch eine weitere Division durch 2 
ergänzen,
    lsr  on1cnt_h
    ror  on1cnt_l
und somit den Messwert der PWM halbieren.
Natürlich auch für die 2. PWM on2cnt_l/on2cnt_h

Sascha

Autor: kabu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du meinst das ich es so aussehen lassen soll?

    lsr  on1cnt_h
    ror  on1cnt_l
    lsr  on1cnt_h
    ror  on1cnt_l
    lsr  on1cnt_h
    ror  on1cnt_l
    lsr  on1cnt_h
    ror  on1cnt_l
    lsr  on1cnt_h
    ror  on1cnt_l

So Langsam kapier ich was der Code macht.
Natürlich nur wenn es für PMW1 ist.

Autor: Sascha Weber (sascha_w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
genau so.

Sascha

Autor: kabu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jepp!!
auf jedenall geht das softwaremäßig
Nun habe ich ein wenig zu wenigleistung.
Er fliegt/schwebt gut aber beim abfangen ein wenig zu wenig.
Das Heck arbeitet so wie es endlich soll.Da ich im guten Teillast liege.
Kann einer den Code ein bischen erklären.
Damit ich anhaltpunkte habe wohin ich googeln kann.
Ich will ihn ja auch verstehen.

Mit der änderung wurde probiert den eingang zu halbieren.
Geht aber wir kommt das ansprechen ein wenig grob vor.
Kann man den Ausgangswert nicht auch Teilen?
Mal sehen was besser ist.
Wie würde ein drittel oder vierteln aussehen?

Autor: Sascha Weber (sascha_w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kabu schrieb:
> Mit der änderung wurde probiert den eingang zu halbieren.
> Geht aber wir kommt das ansprechen ein wenig grob vor.
das kommt daher, das mit der Halbierung natürlich auch die Auflösung 
halbiert wird

> Kann man den Ausgangswert nicht auch Teilen?
sicher, aber wie sieht das PPM-Signal aus - da bin ich gerade überfragt

> Mal sehen was besser ist.
> Wie würde ein drittel oder vierteln aussehen?
das nützt doch nichts, denn dann wird die Ausgangsleistung und auch die 
Auflösung noch viel kleiner.

Alternativ bleibt noch eine Subtraktion, damit verschiebst du den 
Regelbereich nur, aber die Auflösung bleibt erhalten. Allerdings wird 
der untere Bereich abgeschnitten.
....
    lsr  on1cnt_h
    ror  on1cnt_l

    mov  temp1, on1cnt_l
;;neuer Code
    subi  temp1,xxx          ;Festwert subtrahieren
    brcc  cnv_on1sub         ;wenn negativ
    clr   temp1              ;dann =NULL
cnv_on1sub:
;;[END] neuer Code
    subi  temp1, -10
    mov  ppm1, temp1
....
für xxx mal einen entsprechenden Wert testen (0..255)
Es reicht dann natürlich den Kanal für den Hauptrotor so anzupassen.

Sascha

Autor: kabu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das im unterren Berreich was abgeschnitten wird macht nix.

Ich habe jetzt mal einiges kompiliert und
Das beste mit
    subi  temp1,1          ;Festwert subtrahieren
 gekriegt.
Das ist noch ein wenig zu wenig leistung
Kann der Wert der Teilung Kommas beinhalten?

Ich habe nochmal versucht mit der

cnv_PWM2PPM:  ldi  temp1, low  (-150*16)
    ldi  temp2, high (-150*16)

und die 16 variiren lassen von
9-16
Mit 9 Würde ich sagen die hälfte an Leistung.
11 noch ein wenig schlapp..
und mit 13 genau richtig.
So würde ich es lassen außer das sich
on2cnt_l
Nun auch ändert.
Das ist aber noch nicht so schlimm da
Der Heckmotor noch ein Bürsten Motor ist und und vom Empfänger den Strom 
kriegt.

Autor: Sascha Weber (sascha_w)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
kabu schrieb:
> Ich habe nochmal versucht mit der
>
> cnv_PWM2PPM:  ldi  temp1, low  (-150*16)
>     ldi  temp2, high (-150*16)
>
> und die 16 variiren lassen von
> 9-16
> Mit 9 Würde ich sagen die hälfte an Leistung.
> 11 noch ein wenig schlapp..
> und mit 13 genau richtig.
> So würde ich es lassen außer das sich
> on2cnt_l
> Nun auch ändert.
du könnetest die beiden PWM's auch getrennt zählen
siehe Anhang ...

Sascha

Autor: kabu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe das mal so kompiliert.
Geht natürlich ;)
Den anderen Port konnte ich nicht Testen.Aber ich vertrau dir mal.
Das wird bestimmt mit 100% leistung Laufen.
Aber so geht das richtig gut freu!!!!

Gelernt habe ich auch was.
Das ich besser bei meinen Linux skripte bleibe ;)
Assembler ist echt ne eigende Welt.
Cool wie du dir das so aus den Ärmel schütteln kannst Respekt!!!

Habe vielen dank das ich das so vorgekaut gekriegt habe.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.