
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
Hallo, habe das Programm nochmal ein bischen geändert! Da man ja nicht immer 8 Servos steuern muss und somit die anderen Ports "verliert" habe ich jetzt einen gemischten Betrieb von Port[9] bis Port [16] vorgesehen. Nun ist es möglich die Ports entweder als Servoport oder als Digitalausgang zu verwenden. Dabei ist es egal in welcher Reihenfolge die Port's belegt werden. Der zusätzlichen Programmcode ist in Fettschrift. Hier die Erweiterung von "ServoansteuerungV1.bas": ' Digitalerweiterung vom 30.05.2010: ' Der Byteport B (Port9 bis 16) kann jetzt auch für Digitale Ausgänge ' genutzt werden. Die entsprechenden Bit's können im Basicprogramm gesetzt ' werden. Ein gemischter Betrieb als Servo- oder Digital-Port ' ist somit möglich. ' --------------------------------------------------------------------------- ' Definition der Allgemeinen Variabeln ' --------------------------------------------------------------------------- ' Hinweis: ' Um die Servoports und Digitalports nicht zu "vermischen" sollten die ' entsprechenden Bit's aktiviert und deaktiviert werden! ' So kann ein unbeabsichtigter Aufruf über die BIT's verhindert werden! ' Bei Aufruf über das Byte unbedingt mit den Bits aufpassen!!!! ' Servo_Ports_aktive=&b00001111 <==> Digital_Ports_aktive=&b11110000 define Servo_Ports_aktive BYTE define Servo1 BIT[1] of Servo_Ports_aktive ' Servo an Port[9] aktivieren define Servo2 BIT[2] of Servo_Ports_aktive ' Servo an Port[10] aktivieren define Servo3 BIT[3] of Servo_Ports_aktive ' Servo an Port[11] aktivieren define Servo4 BIT[4] of Servo_Ports_aktive ' Servo an Port[12] aktivieren 'define Servo5 BIT[5] of Servo_Ports_aktive ' Servo an Port[13] aktivieren 'define Servo6 BIT[6] of Servo_Ports_aktive ' Servo an Port[14] aktivieren 'define Servo7 BIT[7] of Servo_Ports_aktive ' Servo an Port[15] aktivieren 'define Servo8 BIT[8] of Servo_Ports_aktive ' Servo an Port[16] aktivieren <b> 'neu hinzugekommen .... define Digital_Ports_aktive BYTE 'define Digital1 BIT[1] of Digital_Ports_aktive ' Port[9] EIN/AUS 'define Digital2 BIT[2] of Digital_Ports_aktive ' Port[10] EIN/AUS 'define Digital3 BIT[3] of Digital_Ports_aktive ' Port[11] EIN/AUS 'define Digital4 BIT[4] of Digital_Ports_aktive ' Port[12] EIN/AUS define Digital5 BIT[5] of Digital_Ports_aktive ' Port[13] EIN/AUS define Digital6 BIT[6] of Digital_Ports_aktive ' Port[14] EIN/AUS define Digital7 BIT[7] of Digital_Ports_aktive ' Port[15] EIN/AUS define Digital8 BIT[8] of Digital_Ports_aktive ' Port[16] EIN/AUS </b> ..... ..... ' --------------------------------------------------------------------------- ' Das Hauptprogramm ' --------------------------------------------------------------------------- Servo_Ports_aktive=0 'alle Servoports aus InitServo 'Initialisierung der Ports <b> Digital_Ports_aktive=0 'alle Digitalports auf LOW PortB_Digital 'Digitalports EIN/AUS </b> pause 50 #main #Hauptprogramm <b> '_____________________________________________________________ 'So können die Digitalen Ausgänge gesetzt und zurückgesetzt werden Digital5=on 'Port[13] = HIGH Digital6=off 'Port[14] = LOW Digital7=off 'Port[15] = LOW Digital8=off 'Port[16] = LOW '....oder auch so möglich. " !!! BIT's beachten !!! " 'Digital_Ports_aktive=&b00010000 PortB_Digital 'Digitalports EIN/AUS '_____________________________________________________________ </b> ..... ..... Servo2=on 'Servo 2 an ..... ..... <b> '_____________________________________________________________ 'Auch unmittelbar vor dem Aufruf einer Servopositionierung 'können die Digitalen Ausgänge gesetzt werden ohne die 'Digitalbearbeitung aufrufen zu müssen Digital5=off 'Port[13] = LOW Digital6=on 'Port[14] = HIGH Digital7=on 'Port[15] = HIGH Digital8=on 'Port[16] = HIGH '....oder auch so möglich. " !!! BIT's beachten !!! " 'Digital_Ports_aktive=&b11100000 'PortB_Digital 'Digitalports EIN/AUS '_____________________________________________________________ </b> 'Rechtsanschlag: ServoPositionAbsolut(1050,20) ..... ..... goto Hauptprogramm END Hier die Erweiterung vom eingebundenen Assemblerteil "servov1.iia": PROCEDURE ServoPositionsSignal(ZielPos) INLASM ..... ..... #ServoPositionBeginn 'Beginn des Signals ! lda Invert_Servo_PORT 'aktivierte Servoports laden; Signal=HIGH <b>! or Digital_Ports_aktive 'Abfrage der Digitalports auf HIGH or LOW</b> ! sta ServoPORT 'und hier setzen ..... ..... ! lda #&b00000000 'Alle Servos wieder auf OFF <b>! or Digital_Ports_aktive 'Abfrage der Digitalports auf HIGH or LOW</b> ! sta ServoPORT 'und hier setzen ..... ..... END PROCEDURE ' -------------------------------------------------------------------------- ' Servos Initialisieren PROCEDURE InitServo INLASM ! lda #&b00000000 'Alles auf LOW <b>! or Digital_Ports_aktive 'Digitalports auf HIGH or LOW</b> ! sta ServoPORT 'Alle Servoports auf LOW ..... ..... END PROCEDURE <b> 'Zusätzlicher Teil direkt nach "InitServo" einfügen ' -------------------------------------------------------------------------- ' Digitalports EIN (HIGH) oder AUS (LOW) PROCEDURE PortB_Digital INLASM ! lda #&b00000000 'Alles auf LOW ! or Digital_Ports_aktive 'Digitalports auf HIGH or LOW ! sta ServoPORT 'Alle Digitalports HIGH/LOW ! lda #&b11111111 'Alle Ports als Ausgang aktivieren ! sta ServoDDR 'Alle Digitalports auf Ausgang und HIGH or LOW ! nsa 'warten... ! nsa 'warten... ! nsa 'warten... ! rts 'Zurück END PROCEDURE ..... Bitte gebt mal Rückmeldung ob alles funzt! Viel Spass, Olaf |
| Antwort schreiben |