Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo Andreas, > > soweit ich Deine Frage und die verschiedensten Beiträge in diesem Forum verstehe, > gibt es folgende Probleme: > > 1. Grundsätzlich sind CC2-Programme nicht für Interruptroutinen nutzbar! > (Grund: CC2-Programme werden nur virtuell ausgeführt; das bedeutet sie liegen in einer nur vom > Betriebssystem der CC2 lesbaren Form vor) > > 2. Eine Interruptroutine muß mit Hilfe des Tasking-Compilers entweder in C oder in Assembler > geschrieben werden. > (Hierzu gibt es einige Infos auf der CD der CC2) > > 3. Wie werden Werte zwischen dem CC2-Programm und der Interruptroutine übergeben. In > Deinem Fall: "links" oder "rechts" und die Anzahl Pulse. > > Ich stehe momentan vor dem gleichen Problem; allerdings kommt bei mir noch erschwerend hinzu, > daß von der Interruptroutine aus Assemblerroutinen im OS_OPT bzw. anderen Modulen (I2CCOM) > aufgerufen werden müssen. > > Auf Grund von Problem Nr. 1) gibt es nicht die Notwendigkeit Segment und Offset eines CC2- > Programms zu erfahren (die gibt es so nicht). > > Beim Lösen des Problems Nr. 2) erhältst Du neben dem HEX-File (dem Programmcode, der zur > CC2 übertragen werden muß) auch ein .lst-File, in dem Segment und Offset angegeben sind. > Das Segment ist normalerweise immer 3000h. > > Zur Lösung von Problem Nr. 3) gibt es einige Hinweise auf der CD der CC2 und auch im Buch > "Messen, Steuern und Regeln mit der C-Control II". Allerdings finde ich das alles nicht so > dargestellt, daß man das gleich verwenden kann. Und das was ich bisher zu diesem Thema in > diesem Forum gelesen habe war auch nicht unbedingt eine Hilfe. Anscheinend wollen diejenigen, > die wissen wie es geht, nicht so richtig raus mit der Sprache. > > Mehr kann ich dazu erst einmal nicht sagen, weil ich auch keine praktischen Erfahrungen > vorweisen kann. > > Tschüß und viel Erfolg, > Thomas > > > 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!