- Labornetzteil AliExpress         
Ergebnis 1 bis 8 von 8

Thema: Vergleich in ASM, wenn gleich oder größer gehe zu....

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    14.12.2004
    Beiträge
    71

    Vergleich in ASM, wenn gleich oder größer gehe zu....

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    habe ein kleines Programm geschrieben um einen DC-Motor der belastet wird etwas mehr Saft per PWM zu geben damit dieser in der Drehzahl nicht so stark abfällt.

    Leider funktioniert das irgendwie nicht. Ich messe Jeweils die Spannung an der Stromquelle und einmal direkt am Motor so das das Kabel als Shunt fungiert. Es entsteht auch eine messbare Differenz dieser beiden Signale. Wie nutze ich diese aber um meine PWM-Rate zu erhöhen. Ich habe mal das Programm etwas vereinfacht dargestellt und einige Teile die funktionieren weggelassen.

    main:
    rcall ADWandlung1.....;Ergebniss in temp
    rcall ADWandlung2.....;Ergebniss in temp2
    sub temp, temp2....... ;Differenz steht in temp
    out portc, temp......... ;Zur Kontroll eausgabe am PortC
    ldi temp3,126............ ;Schwellwert
    cp temp, temp3......... ;Vergleiche temp mit Schwellwert
    brge hochsetzen....... ;wenn temp gleich oder größer temp3 gehe zu Routine die PWM-Wert erhöht
    rjmp main

    hochsetzen:
    ldi pwm, 120
    rcall PWMübergabe....;Übergebe 120 an PWM-Einheit um Drehzahlverlust auszugleichen, normalwert ist 60
    rjmp main

    Edit: Im AVR-Studio kann ich das simulieren lassen und es funktioniert auch das die Hochsetzroutine angesprungen wird wenn die Differenz höher ist. Wenn ich im Programm den Wert von 126 auf 128 ändere dreht sich der Motor auch schneller. Wenns aber auf 126 steht und ich ihn abbremse passiert ncihts obwohl ich am PortC sehe das die dDifferenz höher wird.

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Beim AD-Wandeln kommen doch normalerweise 10-Bit raus. Dein "sub" is aber doch nur ein Byte. das gibt doch Streß mit dem Vorzeichen ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Du könntest die Werte nach 16 Bit expandieren zum Vergleich:
    temp= r25:r24
    temp2= r19:r18
    r0=0

    Code:
    	clr r0
    	lds r24, temp
    	clr r25
    	lds r18, temp2
    	sub r24, r18
    	sbc r25, r0
    	cpi r24, 126
    	cpc r25, r0
    	brlt 0f
    	; temp-temp2 >= 126
    0:
    Disclaimer: none. Sue me.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    14.12.2004
    Beiträge
    71
    ich habe das ADLAR Bit gesezt so das ich die oberen 8Bit des 10Bit-ADC-Ergebniss in ADCH habe. Ich arbeite also nur mit 8 Bits.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Nein, tust du nicht. Bei der Subtraktion kann ein Übertrag auftreten. Du brauchst also 9 Bit. Oder kannst du sicherstellen, daß in ADCH nur Werte von 0..127 stehen?
    Disclaimer: none. Sue me.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    14.12.2004
    Beiträge
    71
    Signal A ist größer als Signal B
    dann dürfte doch bei sub Signal A, Signal B kein Übertrag auftreten.
    Ist das der Fall wenn Signal B größer als A ist das es dann so rausläuft
    128-140= -12 also 12 plus gesetzes Negativ-Flag?

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    nein, -12 (0x0C) => 0xF4
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Bist du sicher, daß A immer größer ist als B. Nicht in der Theorie, sondern in der Praxis (Rauschen, etc.) Und ein Vergleich wie oben ist doch net so kompliziert, oder sind die Handvoll asm-Instruktionen schon zu viel?
    Disclaimer: none. Sue me.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad