Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Gemischter Betrieb: Servoport und/oder Digitalausgang Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Olaf - 30.05.2010 13:30)
 Als Antwort auf Bis zu 8 Servos mit Open-Makro steuern von Olaf - 24.05.2010 21:15
Olaf nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro
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

Bisherige Antworten: