- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 23 von 23

Thema: Abfrage in Assembler

  1. #21
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.10.2004
    Ort
    Nordschwarzwald
    Alter
    42
    Beiträge
    506
    Anzeige

    E-Bike
    Zitat Zitat von Anonymous
    Interrupts...

    wenn man Interrupts verwendet, ist es kein Problem auf steigende oder fallende Flanken zu detektieren (kann man im Datenblatt bzw. im User Guide nachlesen).

    ansonsten hat unser lieber Gast schon gesagt wie es geht:

    Du pollst den Pin (d.h. fragst ihn ständig ab) und speicherst den Status des Pins im RAM. Dann nimmst du den aktuellen Wert am PIN und vergleichst ihn mit dem vorherigen (im RAM abgelegten) Wert. Wenn die gleich sind, gabs keine Änderung, bedeutet: Flanken gibt es nur wenn sich was ändert.
    => Wahrheitstabelle:

    Xalt | Xneu | Resultat (Änderung?)
    0 | 0 | keine Änderung (0)
    0 | 1 | steigende Flanke (1)
    1 | 0 | fallende Flanke (1)
    1 | 1 | keine Änderung (0)

    und diese Wahrheitstabelle entspricht der für XOR (XOR= Exklusiv-Oder).
    D.h. du kannst mittels XOR schnell überprüfen, ob sich was geändert hat.
    Wenn sich nichts geändert hat, dann wieder den Wert auslesen und wieder XOR, wenn sich nichts geändert hat... (usw.)
    Vorteil von der Verwendung von XOR: gegenüber der Methode durch subtrahieren und auf das Zero-Flag schauen: Es geht sehr viel schneller...
    Wenn sich was ändert, dann hast du eine Flanke (entweder fallend oder steigend).
    D.h. du gehst jetzt hin und speicherst den Wert im RAM als Xalt zwischen (denn es kann ja immer der böse Timer-Interrupr kommen und dein pollen unterbrechen). Dann brauchst du nur noch schaun, ob dein Xalt ne 1 ist (dann wars vorher ne 0) oder ne 0 (dann wars vorher ne 1). Daraus kannst du dann ablesen welche Flanke es war.
    Und mittels btfsc kannst du dann das Bit Xalt prüfen und schauen, wohin du springen musst (d.h. welcher Programmabschnitt ausgeführt werden muss).

    So, aber eigentlich will ich dir nicht alle Arbeit abnehmen und du sollst dir selber auch ein paar Gedanken machen...

    Daher les einfach mal das Datenblatt durch (vielleicht nicht das ganze, aber zumindest die dich betreffenden Teile).

    Und du solltest dir überlegen, was du mittels Interrupts machen willst, und was du per Schleife machen willst (also pollen). Überleg dir das mal und schreib es hier hin. Ich sag dir dann schon, wenns falsch ist
    ^^mein Beitrag; der Beitrag von "Gast" dort oben aber nicht...

    so langsam sollte ich jetzt auf allen 3 von mir genutzten Rechnern eingeloggt sein

  2. #22
    Gast
    Wenn es eine Änderung gegeben hat, geht der wert vom Port nach "VORHER" für die nächste abfrage (schleife)

    Du kannst auch zwei Schleifen machen, eine lauert auf "1", die andere auf "0".

    MAIN
    clrf PORTx

    WAIT_1
    btfsc PORTx, pin-Nr
    b WAIT_2
    incf TIMER_low
    b WAIT_1
    WAIT_2
    btfss PORTx, pin-Nr
    b gotcha
    incf TIMER_hi
    b WAIT_2
    gotcha ; pin is jetzt wieder auf LOW
    ; work out counter-values
    b MAIN ; auf ein neues

    die Counter-Werte hängen jetzt natürlich von der Befehlsanzahl etc. ab,
    aber viel kürzer wird das ganze wohl nicht gehen.

  3. #23
    Benutzer Stammmitglied
    Registriert seit
    09.08.2004
    Alter
    47
    Beiträge
    77
    Hi Gast Nr.2,

    habe schon vor einigen wochen versucht einen interrupt für den timer zu nehmen, aber ich bekam es einfach nicht hin.
    deswegen habe ich mich entschlossen, zu versuchen alles ohne interrupts zu machen, sondern nur durch schleifen und anderem kram.

    durch deine erklärung weiss ich nun was der Gast Nr.1 meinte.
    danke dafür ^^.

    Danke Leute
    Bin zulangsam mit Tippen gewesen und habs nich gemerkt das ihr was geschrieben habt.
    Danke Nochmal an Gast der da auch nen Code reingesetzt hat Dankedankedanke
    ihr seid wirklich eine Große hilfe ^^

    Gruß
    D.Stolarek
    ---

Seite 3 von 3 ErsteErste 123

Berechtigungen

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

Solar Speicher und Akkus Tests