- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 4 von 4

Thema: AD-Wert addieren, PWM ausgeben

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    27.08.2006
    Beiträge
    53

    AD-Wert addieren, PWM ausgeben

    Anzeige

    Praxistest und DIY Projekte
    Ich habe am PIC 2 analoge Werte anliegen, die ich im internen AD-Wandler umwandle. Diese 2 AD-Werte gebe ich an den PWM Ausgängen des PIC’s aus.

    Das Programm sieht ungefähr so aus:

    ad_holen1
    pwm_ausgabe1

    ad_holen2
    pwm_ausgabe2

    Nun möchte ich die 2 AD-Werte addieren und an dem PWM-Ausgang1 ausgeben. Ich kann ja diese 2 Werte nicht einfach addieren, da ich dann wahrscheinlich Probleme mit der Größe des Registers habe. Die Größe eines AD-Wertes ist 8-Bit.

    Habt Ihr einen Vorschlag, wie man das am besten machen kann?

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Hessibaby
    Registriert seit
    20.11.2003
    Ort
    Gelsenkirchen
    Alter
    72
    Beiträge
    1.601
    Wenn Du zwei 8 bit Werte addierst, kann das Ergebnis maximal 9 bit groß sein, das neunte bit ist bei den meisten CPU´s das carry- (übertrag) bzw. overflowbit, das man über eine Interruptserviceroutine abfangen kann. Im Klartext wenn 1 & 2 =512 dann PWM maximal.
    Eine andere Möglichkeit ist es Nibbles zu bilden d.h. Du nimmst von beiden Werten erst die unteren 4 bit, addierst diese, dann die oberen 4 bit, und den eventuellen Übertrag aus der ersten Operation, addieren.
    Ob Deine Hochsprachen das Unterstützen weiß ich nicht, in Assembler geht das aber, nicht easy, aber dennoch.
    Gruß Hartmut

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.10.2004
    Ort
    ferd. Waldmüllerg. 7/2
    Alter
    39
    Beiträge
    456
    Hum, wieso sollte das nicht einfach gehen? Das einzige was dir passieren kann ist, dass du bei der Addition das Carry-Bit gesetzt bekommst, mehr aber auch nicht.

    Code:
        movfw ADRESL        ;lade die 2. Messung in W
        addwf ADC_OLDL,        ; Addiere diese in die 1. Messung
        sknc (oder btfsc STATUS,C)        ; overflow in den 9. bit testen
        incf ADC_OLDH,f        ; ja, dann den H-Register um 1 erhöhen
    
        movfw ADRESH        ; High-Register laden
        addwf ADC_OLDH,f        ; hinzuaddieren, speichern in GPR
    Und in den Registern ADC_OLDL+H sind die Werte der Addition enthalten. Einen Überlauf im High-Byte kann es nicht geben, da der ADC vom PIC maximal 10Bit beträgt, also hat man noch 6 bit Buffer in den high-Register.

    Die Frage, ob du dann bei einem überlauf in den 11. Bit den Wert (was ja für einen 10-Bit ADC als 0 erscheint) in den ADC schreiben kannst ist einfach mit einem "btfsc ADC_OLDH,3" abfrage gelöst werden.

    Ach, ja, nehme an, dass du dich für die besagten Operationen oben in den richtigen Bank angewählt hast, bevor du mit der Addition beginnst .
    Bei Fragen, melden
    MfG
    Mobius

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    27.08.2006
    Beiträge
    53
    Danke Mobius für deine Antwort. Die werde ich mal dieses Wochenende ausprobieren


    @Hessibaby

    deinen ersten Vorschlag habe ich schon simuliert, und es funktioniert. Danke für deine Hilfe

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress