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 HGS, > > > laut Handbuch dachte ich, daß es möglich sein sollte, die PLM-Ports als normale Digitalausgänge > > zu verwenden. Auf den Fehler mit dem HIGH bei Ausgabe>Periodenlänge bin ich schon hier im Forum > > gestoßen, so geht's also nicht. > > Über PLM kan man leider nicht direkt 100% einstellen. > Wenn Du aber die maximale Periodenlänge und die kleinste Zeitbasis einstellst, > kannst Du so die PLM-Ports weitgehens als normale dig. Ausgänge benutzen. > D.h. folgendes: > <code>plm.settimebase(PLMChannel, plm.BASE_400); > plm.setperiod(PLMChannel, -1);//=65535</code> > > Um z.B. Relais anzusteuern, ist diese Lösung kein Problem. > > > Dann habe ich den Hinweis mit sfr.set_P8 gefunden. Das kriege ich > > aber auch nicht hin. Mein Quelltext sieht so aus: > > > > <code> > > PLMChannel=0; > > plm.settimebase(PLMChannel, plm.BASE_400); > > plm.setmode(PLMChannel, 0); > > plm.setperiod(PLMChannel, 100); > > loop > > { > > sfr.set_P8(sfr.get_P8() or 0b00000001); // PLM0 auf konstant high setzen > > WaitForKey(VK_Enter); > > sfr.set_P8(sfr.get_P8() and 0b11111110); // PLM0 auf konstant low setzen > > WaitForKey(VK_Enter); > > } > > </code> > > > > Hier sehe ich aber auf dem Oszi nur einen kurzen Puls, dann ist das Signal wieder dauerhaft auf LOW. > > Interessanterweise ist die Länge des zu sehenden Pulses nicht immer gleich. > > Mache ich da noch was falsch mit setmode oder setperiod, oder geht es gar nicht so? > > Das geht so natürlich nicht. > Du setzt zwar den Port per Hand auf High, aber Dir funkt die PLM-Zuweisung > von CAPCOM2 dazwischen. > Du mußt daher die erst die Zuweisung für den betreffenden Port aufheben. > Danach kannst Du diesen als I/O-Port benutzen. > Dazu muß man wissen, daß P8.0 die Bezeichnung CC16IO hat. (Entsprechend der Sonderfunktion) > Über das Capture-Compar-Mode-Register CCM4 (0xFF22) kann die (Sonder-)Funktion > der Ports P8.0-.3 bestimmt werden. (Siehe Manual zum C164CI) > > Mit folgender Funktion kannst Du aus P8.0 einen normalen I/O-Port machen: > <code> > inline function P8_0_IO() > { > inline vmcodes.VM_LOAD_IMMEDIATE_INT; > inline 0xFFF0; > inline vmcodes.VM_LOAD_ABSOLUTE_INT; > inline 0xFF22; > inline vmcodes.VM_AND; > inline vmcodes.VM_STORE_ABSOLUTE_INT; > inline 0xFF22; > } > </code> > P8.0 kann jetzt als normaler I/O-Port benutzt werden. > Allerdings sollten die Portansteuerungsroutinen so kurz, wie möglich sein: > <code> > inline function setP8_0() // Port setzen > { > inline vmcodes.VM_LOAD_IMMEDIATE_BYTE+0x0100; > inline vmcodes.VM_LOAD_ABSOLUTE_BYTE; > inline 0xFFD4; > inline vmcodes.VM_OR; > inline vmcodes.VM_STORE_ABSOLUTE_BYTE; > inline 0xFFD4; > } > > inline function clearP8_0() > { > inline vmcodes.VM_LOAD_IMMEDIATE_BYTE+0xFE00; > inline vmcodes.VM_LOAD_ABSOLUTE_BYTE; > inline 0xFFD4; > inline vmcodes.VM_AND; > inline vmcodes.VM_STORE_ABSOLUTE_BYTE; > inline 0xFFD4; > } > > inline function deactP8_0() //P8.0 als Eingang > { > inline vmcodes.VM_LOAD_IMMEDIATE_BYTE+0xFE00; > inline vmcodes.VM_LOAD_ABSOLUTE_BYTE; > inline 0xFFD6; > inline vmcodes.VM_AND; > inline vmcodes.VM_STORE_ABSOLUTE_BYTE; > inline 0xFFD6; > } > > inline function actP8_0() //P8.0 als Ausgang > { > inline vmcodes.VM_LOAD_IMMEDIATE_BYTE+0x0100; > inline vmcodes.VM_LOAD_ABSOLUTE_BYTE; > inline 0xFFD6; > inline vmcodes.VM_OR; > inline vmcodes.VM_STORE_ABSOLUTE_BYTE; > inline 0xFFD6; > } > > inline function OD_P8_0() //P8.0 als Open-Drain > { > inline vmcodes.VM_LOAD_IMMEDIATE_BYTE+0x0100; > inline vmcodes.VM_LOAD_ABSOLUTE_BYTE; > inline 0xF1D6; > inline vmcodes.VM_OR; > inline vmcodes.VM_STORE_ABSOLUTE_BYTE; > inline 0xF1D6; > } > > inline function PP_P8_0() //P8.0 als Push-Pull > { > inline vmcodes.VM_LOAD_IMMEDIATE_BYTE+0xFE00; > inline vmcodes.VM_LOAD_ABSOLUTE_BYTE; > inline 0xF1D6; > inline vmcodes.VM_AND; > inline vmcodes.VM_STORE_ABSOLUTE_BYTE; > inline 0xF1D6; > } > </code> > > Das sind jetzt die wichtigsten Funktionen. > Entsprechend kann man auch die anderen Ports von P8 umkonfigurieren. > Beim Ansprechen über mehrere Threads müssen die Funktionen gecaptured werden ! > > MfG André H.