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

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

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.
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB