- Labornetzteil AliExpress         
Ergebnis 1 bis 8 von 8

Thema: Mega 32: Interrrupt bei fallender UND steigender Flanke?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    22.05.2005
    Beiträge
    13

    Mega 32: Interrrupt bei fallender UND steigender Flanke?

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    wir bauen mit Hilfe des mega 32 eine Motorsteuerung. Und zwar haben wir einen Inkrementalgeber der über zwei Leitungen pro Umdrehung insgesamt 500 Inkremente ausgibt. Die zwei Signale sind praktisch zwei um 90 Grad verschobene Pulswellen.
    Dieser Inkrementalgeber wird dann von einem externen Motor angetrieben und wir möchten die im Mega32 ankommenden Inkremente benutzen, um einen anderen Schrittmotor, um genau die eingehende Anzahl an Inkrementen anzutreiben.
    Dazu müssen wir als erstes die zwei Pulswellen in eine umwandeln (s.u.), die wir dann am Ausgang ausgeben können.

    __--__--__-- Signal 1
    -__--__--__- Signal 2

    _-_-_-_-_-_- kombiniertes Signal am Ausgang


    Und da beginnen die Fragen...

    Ich dachte mir das ganze so, daß bei beiden Signale jeweils bei steigender und fallender Flanke ein Interrupt ausgelöst wird und in der Interruptroutine dann der Ausgang getoggelt wird.

    Allerdings weiss ich nicht wie und ob ich einen Interrupt so konfigurieren kann, daß er beide Flankenänderungen auslöst.
    Oder muss ich praktisch vier Interrupts programmieren und geht das mit dem Mega32 überhaupt

    Grüße
    Markus Fuchs

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Wo ist Problem ?

    Ich versuch erstmal ne kurze Antwort.


    Der M32 hat 3 Externe Interupts (Int0-2)
    Im Datenblatt unter "External Interrupts" ist alles beschrieben was du brauchst.
    Also auch das MCUCR (MCU Control register) welches festlegt ob nur bei bestimmten flanken oder allen ein Int. ausgelöst wird.

    Aus den Daten kannst du dir schnell alles zusammenstricken.
    Gruß
    Ratber

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    22.05.2005
    Beiträge
    13
    Hallo,

    danke für Deine Antwort. Ich hätte das Thema besser im Bascom Forum posten sollen. Mit Bascom kann ich ganz ok umgehen und habe auch eine funktionierende Motosteuerung programmiert. Aber bei den Register-geschichten im Datenblatt steige ich schnell aus.

    So wie ich das sehe, kann ich den Interrupt nur entweder bei steigender oder fallender Flanke auslösen. In dem Fall bräuchte ich also 4 Interrupts (je zwei für eine Leitung) und deshalb ein anderes board oder eine Erweiterung, richtig? Ist denn die Vorgehensweise, um aus den zwei Pulswellen eine zu machen überhaupt der richtige Ansatz?

    Gruß
    Markus Fuchs

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.09.2005
    Ort
    Osnabrücker Land
    Alter
    62
    Beiträge
    534
    ich weiß ja nicht, was Bascom kann, aber die beiden INTs vom Mega32 können jeweils auf beide Flanken reagieren. Beim 128 können dies nur die oberen 4 (ohne Gewähr).
    Ich kann mir keine Signatur leisten - bin selbständig!

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    @Electrofux

    danke für Deine Antwort.
    Dafür ist ein Forum ja da.


    Ich hätte das Thema besser im Bascom Forum posten sollen.
    Kann man immernoch dahin verschieben.
    Kein Akt.
    Sollen die faulen Moderatoren auch mal was tun *duckundwech*


    Aber bei den Register-geschichten im Datenblatt steige ich schnell aus.
    Das ist halb so kompliziert wie es aussieht.
    Klar,Bascom verleitet einen dazu sich es ganz bequem abnehmen zu lassen aber du wirst früher oder später noczh merken das es mit Bascom alleine nich ganz gehen wird.
    Zb. ist die Timerunterstützung bei etlichen Controllermodellen noch recht klapprig so ds man dort schnell die Register per Hand setzt.

    Zb. so (Codeschnipsel vom Attiny26)

    Code:
    ........
    Tccr1a = &B01010011   
    Tccr1b = &B10000101   
    Ocr1c = 255
    ........



    So wie ich das sehe, kann ich den Interrupt nur entweder bei steigender oder fallender Flanke auslösen. In dem Fall bräuchte ich also 4 Interrupts (je zwei für eine Leitung).........
    Nein du kannst mit besagtem Register jeden der Eingänge so beschalten das auf "jede" Flanke reagiert wird.



    @Vajk

    Ja,so ist auch mein Kenntnisstand.
    Im Zweifelsfalle aber lade ich mir das aktuelle Datenblatt bei Atmel sofern ich es noch nicht habe und schaue einfach nach.
    Dort steht eigentlich alles drinne was man zum jeweiligen controller wissen muß/kann/möchte usw.

    Mag sein daß das Datenblatt für den einen oder anderen etwas trocken ist aber irgendwann kommt man nicht daran vorbei wenn die Projekte größer/Komplexer werden.

    Bascom unterstützt wie gesagt nicht jeden Controller gleich.
    Da muß man sich eben etwas anstrengen.
    Gruß
    Ratber

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    @Ratber: Wenn du es zufällig weißt, sonst müßt ich es selbst austesten:
    Klappt es, in der ISR-Routine die edge-direction umzuschalten ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    22.05.2005
    Beiträge
    13
    @Ratber

    Also sehe ich das richtig, daß ich mit asm auf dem mega32 einen Interrupt so konfigurieren kann, daß er sowohl bei einer ansteigenden als auch bei der folgenden absteigenden Flanke auslöst (hast Du einen Code Schnipsel)?Bascom liefert ja nur die Optionen Low Level, falling und rising. Eine "both"-option gibt es nicht.

    @PicNick
    Die edge routine umstellen wäre natürlich eine Möglichkeit, das muß ich austesten.

    Grüße
    Markus Fuchs

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    @Picknick

    Wenn du es zufällig weißt, sonst müßt ich es selbst austesten:
    Klappt es, in der ISR-Routine die edge-direction umzuschalten ?
    Die Situation hatte ich noch nicht.

    Da es bei Registeränderungen innerhalb eine ISR immer etwas hakelig ist was die reaktionen des Controllers angeht kann ich nicht mal ansatzweise sagen ob es klappen könnte.

    Mußte einfach mal probieren (Werd ich bei Gelegenheit auch tun)


    @Electrofux

    Zur Möglichkeit :

    Ja,das geht wie gesagt.

    Zum codeschnipsel:


    Sorry aber ich habe mir wegen des oben angesprochenen Zustandes bei Bascom (Jeder Controller wird anders unterstützt) angewöhnt solche Sachen grundsätzlich in der dargestellten Weise zu erledigen (Register direkt setzen. ) so das ich dir nicht mit nem Schnipsel dienen kann der dir weiterhilft als das Beispiel da oben.

    Also beim M32 zb. für Int0 die Bits 0 und 1 (ISC00 und ISC01) des MCUCR auf 1 und 0 um bei jedem Flankenwechsel einen Interrupt auszulösen.
    (Datenblatt.Tabelle 35 beim Abschnitt External Interrupts)

    Ich kann dir nur nochmal nahelegen dich näher mit dem Datenblatt auseinanderzusetzen.
    Das ist enorm hilfreich und eröffnet mehr möglichkeiten als Bascom alleine.
    Gruß
    Ratber

Berechtigungen

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

12V Akku bauen