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


von kabu (Gast)


Angehängte Dateien:

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

von Stefan B. (stefan) Benutzerseite


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?

von kabu (Gast)


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. ;(

von Sascha W. (sascha_w)


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

von kabu (Gast)


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.

von Sascha W. (sascha_w)


Lesenswert?

genau so.

Sascha

von kabu (Gast)


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?

von Sascha W. (sascha_w)


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

von kabu (Gast)


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.

von Sascha W. (sascha_w)


Angehängte Dateien:

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

von kabu (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.