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 Andrè, > > ist ja interessant, was man so alles an den Ports setzten kann, wenn man weiß wie. > > Wie bekomme ich denn z.B. den Port 8.0 wieder auf PWM gesetzt? > Wenn ich jetzt den Port 8.1 setzen will was benutze ich dann als Konstante? > > Kannst Du diese netten funktionen mal in deine SFR Datei mit einbauen? > > Danke Michael > > > 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. > >