Ich bräuchte Assembler hilfe.

Gast #1995508
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
Angehängte Dateien:
#1995859
Lesenswert?

Hallo,

soweit ich das sehe wird die Dauer des PWM-Signals mit einer 
Zählschleife eingelesen.
1
count_on:  clr  temp1      ; PWM 1
2
    sbis  PINB, PWM_IN1
3
    ldi  temp1, 0
4
    sbic  PINB, PWM_IN1
5
    ldi  temp1, 1
6
    add  on1cnt_l, temp1
7
    adc  on1cnt_h, temp2
und das 16 mal (zur Filterung)
am Ende der Messung wird der Zählwert deshalb wieder durch 16 geteilt
1
    lsr  on1cnt_h
2
    ror  on1cnt_l
3
    lsr  on1cnt_h
4
    ror  on1cnt_l
5
    lsr  on1cnt_h
6
    ror  on1cnt_l
7
    lsr  on1cnt_h
8
    ror  on1cnt_l

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

Sascha
Gast #1995928
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.
Gast #1996558
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?
#1996695
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.
1
....
2
    lsr  on1cnt_h
3
    ror  on1cnt_l
4

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

Sascha
Gast #1996868
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.
#1996878
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
Angehängte Dateien:
Gast #1996978
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren