Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Interrupt Kategorie: Programmierung (von Andreas - 25.03.2004 15:59)
Als Antwort auf Re: Interrupt von Henner5 - 25.03.2004 15:01
Ich nutze:
C164CI-ControllerBoard, OSOPT_V2
Danke für deine schnelle Antwort! Geht aber nicht.

Ich sehe keine Möglichkeit wie ich die getcount Funktion
für meine Zwecke nutzen kann.
Wie gesagt, ich hab einen Inkrementalgeber mit zwei Spuren.  
(A und B) Ich muss ja die Richtung erkennen, in die das Handrad
gedreht wird. Die Zähler laufen ja immer vorwärts....
Ich hab mir gedacht, dass ich die Interrupts auf A auslösen lasse
bei der Flanke von High auf Low und dann brauch ich nur auf dem
anderen Kanal nachzusehen, ob der gerade high ist.
Wenn ja -> zähle vorwärts   wenn net -> rückwärts
Das wär alles..........
Ich versuchs mal die Wechsel zwischen high und low
zu skizzieren:

Vorwärts:
A: ___/--------_______/----------_______
B:_/---------______/----------_________

Rückwärts:
A:_/---------_______/----------_________
B:___/-----------_______/----------_______

Hoffentlich kann man das mit verschiedenen Schriftarten erkennen

Ich brauch dafür aber immer noch die Werte für Segment
und Offset für die function hook....

> Hallochen,
> ich glaube Du machst Dir das Leben unnötig schwer. Die Ports P1H0 .. P1H3 sind von Haus aus
> interruptsensibel und auch sehr schnell. Du kommst mit den Standardroutinen problemlos an die
> Zählerstände:
>
> //-----------------------------------------------------------------------
> const P1H0 = 8;
> const eingang = P1H0;
>
> ....
> ....
> function handrad () returns int
>   {
>      int i, ticks;
>      ticks = 0;                                  // die Anzahl ist zunächst = 0
>      i = ports.getcount(eingang);        // alte Zählerstände verwerfen
>      do
>         {
>            sleep 500;                           // 1/2 Sekunde auf die Bedienung des Handrads warten
>            i = ports.getcount(eingang);  // i = mit der jetzt eingegangenen Zahl laden, Puffer ist leer
>            ticks = ticks + i;                  // inkrementbildung
>         } while (i != 0);                        // wenn 1/2 Sekunde keine Eingabe,  dann ERBSE
>      return ticks;                              // Ã?bergabe an die Funktion
>   };
> //--------------------------------------------------------------------
>
> Schreib mir mal bitte ob's gefungxt hat
> tschüss
> Hendrik
>
> > Hallo!
> >
> > Ich arbeite mich erst seit drei Wochen in der Materie der C2 ein.
> >
> > Ich hab folgendes Problem:
> > Ich will einen Inkrementalgeber mit 2 Spuren als Handrad zur Eingabe
> > mit dem C2 zählen. Das Modul inkremental.zip (V1.1) will ich nicht
> > verwenden, weil ich nicht noch mehr Platinen bzw. HW im Gehäuse
> > unterbringen kann und will. Bisher hab ichs mit Polling versucht und
> > das klappt ganz gut. Nur zu schnelle Umdrehungen bekommt die
> > C2 nicht mit. Daher will ichs nun doch mit Interrupt probieren.
> > Dazu gibts ja bekanntlich die function hook.
> > Nur wo bekomm ich bei der Standart Entwicklungsumgebung der
> > C2 die Werte für segment und offset her?
> > Da muss doch der Compiler eine Liste erstellen, aber die find ich
> > nicht. Auch bei euch im Forum hab ich dazu nichts dazu gefunden..
> >
> > Vielen Dank im Vorraus!


    Antwort schreiben


Antworten:

Re: Interrupt (von Thomas - 25.03.2004 19:07)
    Re: Interrupt (von Cris - 26.03.2004 6:39)
        Re: Interrupt (von thomas - 12.04.2004 23:13)
            Re: Interrupt (von André H. - 17.04.2004 14:19)
    Re: Interrupt (von Andreas - 25.03.2004 20:51)
        Re: Interrupt (von Henner5 - 26.03.2004 10:09)
            Re: Interrupt (von Andreas - 26.03.2004 19:33)
                Re: Interrupt (von Henner5 - 29.03.2004 18:18)
                    Re: Interrupt (von Andreas - 1.04.2004 9:46)
                       Re: Interrupt (von Henner5 - 3.04.2004 11:33)