;Hardware-Tester für Riegel-Platinen/ Schlösser ;Dies ist ein Bestandteil vom Sourcecode für eine Anlage mit mehreren zeitgesteuerten Schließfächern für mehrere User. (gedacht als Diätschloss) ;gehackte Variante von der Riegel-File Version Srv16, um die Riegelplatine zu testen und die Servo-Auf und Zu Werte für das individuelle Schloss auszutesten, ; sowie die Funktion der Lichtschranke zu prüfen. ;Die Grundstruktur des Programmtimings musste intakt gelassen werden, damit man die Werte für die Servos hinterher in das richtige Programm übertragen kann. ;mit dieser Software erfüllt das Schloss keine Funktion. ; Man braucht ein Oszilloskop oder wenigstens ein Multimeter und eine LED mit Vorwiderstand zum Aufstecken auf den ICsp-Port (RB7) ;um hiermit die Hardware zu prüfen. ; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX LIST P=PIC18F1320 #include P18F1320.inc ;Config-Einstellungen: __CONFIG _CONFIG1H, _IESO_OFF_1H & _FSCM_OFF_1H & _INTIO2_OSC_1H __CONFIG _CONFIG2L, _PWRT_ON_2L & _BOR_OFF_2L & _BORV_27_2L __CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_32K_2H __CONFIG _CONFIG3H, _MCLRE_OFF_3H __CONFIG _CONFIG4L, _DEBUG_OFF_4L & _LVP_OFF_4L & _STVR_ON_4L __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L __CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H __CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L __CONFIG _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H __CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L __CONFIG _CONFIG7H, _EBTRB_OFF_7H ;---------------------------------- ; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;Definitionen für Test: ;(Zahlen einsetzen bzw. unerwünschtes mit Semikolon deaktivieren.) ;1.Servopositionen, werden später-notfalls Schloßindividuell- in die Originalfile kopiert. ;sind natürlich manchmal je nach Servomarke und Typ verschieden. ;50g-Graupner Servo ;auftreten kann mit dem alten goßen schweren grauen Graupner Servo zwischen 20 und 84 = rechts-Links fast Anschlag. ; Aber kein Platz dafür im Gehäuse.(Kühlschrank-Schloss Nr.1) Hebel verbiegt nur. ;blaues Servo "SG90": ;blaues Servo "SG90": Maximal 73 (74 ist Anschlag) ;minimal 16 (15 ist Anschlag) ; Das blaue Servo macht dabei nur eine ca 180-Grad Drehung. #DEFINE ZuWert D'73' ; D'85' ;Wert für Riegelstellung "ZU" Std84 #DEFINE Aufwert D'16' ; D'81' ; STD81 #DEFINE StellWert D'60' ;D'81' ;Startposition, nur bei Init muß irgendwo zwischen den beiden anderen Werten (inclusive) liegen. ;also eben im zulässigen Bewegungsbereich des Servos. #DEFINE schnellBlinken ;wenn mit Scope oder optischen Verfahren (led) geprüft wird Toggel-Frequenz 6 Hz sonst (Multimetermessung) alle 4 Sekunden Umschaltung ;---------------------------------------------------------------------------- ;es darf immer nur einer der folgenden Test definiert sein, sonst gibts Unklarheiten: ;#DEFINE AllePortsRechteck ;gibt auf alle Ports Rechtecksignal ausser auf MCLR,Pin denn der lässt sich nicht auf Ausgang schalten. ;#DEFINE ServoUBtoggeln ;schaltet die Betriebsspannung für das Servo ein und aus. alle 4Sekunden. (Je nach #DEFINE schnellBlinken) ;#DEFINE ServoSignalLeitgTest ;Rechtecksignal auf Servo-Signalleitung.(Tempo je nach "#DEFINE schnellBlinken" oder nicht) ;#DEFINE ServoAuf ;Das Servo versucht die dem "AufWert" entsprechende Stellung einzunehmen. ;#DEFINE ServoZu ;Das Servo versucht die dem "ZuWert" entsprechende Stellung einzunehmen. ;#DEFINE Servohinundher ;Das Servo versucht zwischen den beiden Werten/Positionen hin und her zu schwenken. ;#DEFINE TXLeitgToggeln ;Die Usart-Leitung für Tx (also die, mit der der Riegelcontroller sendet) bekommt ein Rechtecksignal. ;#DEFINE RXLeitgToggeln ;Die Usart-Leitung für Rx (also die, von der der Riegelcontroller empfängt) bekommt ein Rechtecksignal. ;#DEFINE LEDEinundaus ;Die LED-Katode kriegt abwechselnd NullVolt = Strom und Tristate.(Tempo je nach "#DEFINE schnellBlinken" oder nicht) ;#DEFINE PTransistEinundaus ;Phototransistor kriegt abwechselnd NullVolt und Tristate.(Tempo je nach "#DEFINE schnellBlinken" oder nicht) ;#DEFINE LischrMessEingTest ;Der Lichtschranken-Mess-Eingang wird auf Ausgang geschaltet und kriegt ein Rechtecksignal. #DEFINE LischrTestDiplayLEDPoB7 ;bunte Led an ICSp-Port blinkt, wenn Lichtschranke optischen Kontakt hat. ;Der Lichtblitz an der Lichtschranke selbst ist so kurz, dass er auch mit IR-Sichtgeräten kaum zu sehen ist. ;------------------------------------------------------------------------------ ;REGISTER ; Die meisten Flags der Register FlagReg1-3 sind beim Test ausser Funktion. Die Zuteilung gehört zum eigentlichen Riegel-Controller Programm: FlagReg1 EQU D'0' ;FlagReg1,0 ;Das Lichtschranken einschalt-Bit ;FlagReg1,1 Das Lischra-Mess-Bit ;FlagReg1,2 ; 0= Servoport inhibieren, bis Signalklarheit herrscht. ;FlagReg1,3 ; Lichtschranken-Status-Bit 1= Lochblech ist drin,Riegel vielleicht. 0= Riegel ist offen / Tür offen ;FlagReg1,4 ;0= kein Servo-Signal ohne neuen Stellwert seit POR ;FlagReg1,5 ;0=Aufsoll-Bit ;1=ZuSoll-Bit (je nach dem Zuletzt vom Usart empfangenen Befehl.)(StehenderBefehlFlag) ;FlagReg1,6 ;Abstandhalte Toggel- Bit für TX -Usart ;FlagReg1,7 ;1=Anfrage bezüglich Schloßstatus wurde gestellt,aber noch nicht beantwortet.0= erledigt.(beantwortet) FlagReg2 EQU D'1' ;FlagReg2,0 ;Usart-busy-Flag 1= USART busy ,d.h. besonders busy: im Datenaustauschmodus. ;FlagReg2,1 ;F1,3-ValiditätsBit F2,1=1 d.h. der Wert der Lichtschr.Status-Bit 1,3 wurde zuletzt aktualisiert,nicht abgefragt. ;FlagReg2,2 ;Lischraschnellbit 1=25 Hz Abfragefrequenz.(wenn geschlossen werden soll) 0=4,16 Hz ;FlagReg2,3 ein Teilerflag ;FlagReg2,4 frei ;FlagReg2,5 ; 1= bestätigte Schließung."safe" 0= die Schließung wurde nicht befohlen, oder hatte keine Zeit, sich abzuspielen. ;FlagReg2,6 ;Befehlkonstanz-Flag 1= Auf bzw.Zu-Befehl hat sich laut F1,5 seit einer Sekunde nicht geändert. ;FlagReg2,7 FlagReg3 EQU D'2' ;FlagReg3,0 ;FlagReg3,1 ;FlagReg3,2 ;AuftrotzZu-Flag. 1= AuftrotzZu 0= Zu und zu. Lischra / Bestätigung ;FlagReg3,3 ;FlagReg3,4 ;FlagReg3,5 ;FlagReg3,6 ;FlagReg3,7 ;Test Flags: FlagReg4 EQU D'3' ;FlagReg4,0 1= Lichtschranken-komplett-Test-Bit. F4.0=1 ist Voraussetzung für F5.6 schaltet F4,5 und F4,6 ab. und umgekehrt. ; F4,0 ist selbst kein Test schaltet aber erst die ganze ISR4 ein.normale Lischra/Riegel Koordinierung. ;FlagReg4,1 Servospannungs-Test-Bit 1= on ;FlagReg4,2 Servo-abwechselnde Stellung Test-Bit ;FlagReg4,3 Servo Stellung auf-Bit ;FlagReg4,4 Servo Stellung zu Bit ;FlagReg4,5 Lischra-Led-dauer-ein-aus Blink- Bit ;FlagReg4,6 Lischra Phototr.-dauer- Rechteck: Low/tristate - ein Bit ;FlagReg4,7 BlinkFrequenzbit für F4,5und 4,6 5,0 5,1 5,2 ;F4,7 = 0 = ca 3Hz Oszi/LED-IR-Sichtgerät Test mit bunter Led+Vorwid. -------F4,7 = 1= 0,2 Hz (Multimeter) FlagReg5 EQU D'4' ;FlagReg5,0 1= Rechteckausgabe ausschließlich auf TX-Leitung ;FlagReg5,1 1= Rechteckausgabe ausschließlich auf RX-Leitung ausnahmsweise als Ausgang zum Messen. ;FlagReg5,2 1= Servosignalleitung -dauer-Rechteck langsam unbedingt ;FlagReg5,3 Lischra Messwertport auf Ausgang--Rechteck. ;FlagReg5,4 Einfach alle Ports auf Ausgang Rechteck zwangsschalten. Einfachster Kontakt-Test. Tempo gemäß F4,7 ;FlagReg5,5 LED blitzt mit 10Hz /10ms, Phototransistor eingeschaltet,Messport auf Tristate. schaltet ab:F4,0 4,5 4,6 5,3 5,4 ;FlagReg5,6 1= Lichtschranken -End-Test: 1x öffnen -schließen - öffnen, wenn Blech eingesteckt.Reset wenn raus.setzt F4,0 ;FlagReg5,7 FlagReg6 EQU D'5' ;FlagReg6,0 Test ;FlagReg6,1 Test ;FlagReg6,2 TestRiegel ;FlagReg6,3 ;FlagReg6,4 ;FlagReg6,5 ;FlagReg6,6 ;FlagReg6,7 ; Die meisten Register sind beim Test ausser Funktion. Die Zuteilung gehört zum eigentlichen Riegel-Controller Programm: CBLOCK D'6' UsartAblFlgReg1 ;set = aktiviert und noch unverbraucht UsartAblFlgReg2 ;set = aktiviert und noch unverbraucht CodInPuReg1 CodInPuReg2 CodInPuReg3 CodInPuReg4 CodInPuReg5 CodInPuReg6 UsartTimOutTimReg Slotverdünner CodOutPuReg1 CodOutPuReg2 CodOutPuReg3 CodOutPuReg4 AnfBefInPuReg IntVertReg RechReg1 RechReg2 FuenfzgHzReg FuenfzgHzBReg StellcountReg StellWertReg ;die Zahl hier drin bestimmt die Länge des 1-2 ms- Servoimpulses ProtoStellWertReg ZufZahlReg AeussZufZahlReg LischTimReg MechanikVerzTimReg ProtoQuittSendReg RCPuReg Test6HzReg Test025HzReg ENDC ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;Programm:---Programm:---Programm:---Programm:---Programm:---Programm:---Programm:---Programm:--- ;jeder Befehl verbraucht zwei Speicheradressen, zweizeilige Befehle sogar 4! (PIC18) org 0x00 CALL INIT,0 MainLoop GOTO MainLoop ;Provisor. Hauptschleife ;---------------------------------------------------------------- org 0x08 IntvecH NOP GOTO ISRH ;--------------------------------------------- org 0x16 NOP IntvecL NOP ;-------------------------------------------------- org 0x56 ISRH NOP ;der Intio2 läuft auf 8 Mhz und wird auch nicht durch den Prescaler reduziert. Instr.Freq also =2Mhz MOVLW D'197' ;hier 32khz Interrupt-Frequenz von (20 000 Hz 160 )einstellen ADDWF TMR0L,F,0 ;32khz=197 (fill up, also 256-197=59 ist relevante Zahl) BCF INTCON,2,0 ;Timer Flag zurücksetzen BTFSS FlagReg2,0,0 ;Usart-busy-Flag 1= USART busy ,d.h. besonders busy im Datenaustauschmodus. BRA FUFFLos MOVLW D'106' SUBWF TMR0L,F,0 ;Doublette:BCF T0CON,3,0 ;0=prescaler verdoppeln (PSA) -Zusammen gibt das ~330 Instructions pro cycle statt ~62 u.SlotTempoangleichung an Zentralgerät. BRA Interruptverteilung;Wenn der Usart läuft gibts überhaupt nichts 50hzliches. (achtg ev. Störungen im Stellwert.!!!!!!) ;32000Hz : 640 =50 Hz ;1:32000Hz x 64 =2ms d.h. 32 Servostufen zwischen 1 und 2ms(PWM bringt auch nicht mehr Prescaler zu klein) FUFFLos DECFSZ FuenfzgHzReg ,F,0 ;an F2,0 gekoppelt:BSF T0CON,3,0 ;1=prescaler wieder auf normal(PSA) nur 60Icy/Slot BRA FuffEnde Movlw D'10' MOVWF FuenfzgHzReg ,0 DECFSZ FuenfzgHzBReg ,F,0 BRA FuffEnde Movlw D'64' MOVWF FuenfzgHzBReg ,0 ;ev. den 50HzSlot vom Interruptverteiler ausnehemen, da schon viel Zeit verbraucht.!!!!!!!!!!!!!!?? ;hier steht 50 Hertzliches: BTFSS FlagReg1,4,0 ;0= kein Servo-Signal ohne neuen Stellwert seit POR BRA FufBereitIn BTFSC FlagReg1,2,0 ; 0= Servoport inhibieren, bis Signalklarheit herrscht. BSF PORTA,0,0 ;;!!!ServosignalStartflanke Servoport inhibieren, bis Signalklarheit herrscht. FufBereitIn CLRF StellcountReg,0 ;------------ INCF MechanikVerzTimReg,F,0 ;Hochzählen bis Begrenzung 50 =1Sekunde MOVLW D'50' ; Zum Starten der Verzögerung Register clearen und F2,6clearen. CPFSLT MechanikVerzTimReg ,0 MOVWF MechanikVerzTimReg,0 CPFSLT MechanikVerzTimReg ,0 BSF FlagReg2,6,0 ;Befehlkonstanz-Flag 1= Auf bzw.Zu-Befehl hat sich laut F1,5 seit einer Sekunde nicht geändert. ;------ BTG FlagReg2,3,0 BTFSS FlagReg2,3,0 BRA FuffEnde ;Reduzierung auf 25 Hz, zum Stromsparen BTFSC FlagReg2,2,0 ;Lischraschnellbit 1=25 Hz (wenn geschlossen werden soll) 0=4,16 Hz BRA FufBereit2 DECFSZ LischTimReg,F,0 BRA FuffEnde MOVLW D'6' ;25/6= 4,1666 Hz MOVWF LischTimReg ,0 FufBereit2 BTFSC FlagReg4,0,0 ; Lichtschranken-Test-Bit!!!!!!!!!!!!!!!!!!!!!!!!HACK--Hardware-Test--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! BSF FlagReg1,0,0 ;Das Lichtschranken einschalt-Bit 25-Hz-lich. bzw.4,16hzlich ;Ende 50 Hertzliches FuffEnde Nop INCF StellcountReg ,F,0 MOVF StellWertReg,W,0 CPFSGT StellcountReg ,0 BRA StellEnde BTFSs FlagReg6,1,0;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!iNHIBIT ZU tESTZWECKEN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! BCF PORTA,0,0 DECF StellcountReg ,F,0 StellEnde NOP ;----------------- Interruptverteilung INCF IntVertReg,F,0 ;Rundzähler für Slot -Auswahl MOVLW D'4' CPFSGT IntVertReg,0 BRA IntWahl IntWahl2 MOVLW D'1' MOVWF IntVertReg,0 BRA IntWahl IntWahl MOVFF IntVertReg, RechReg2 ;bei noch mehr Interrupt-Slots empfiehlt sich eine Tabelle, um Rechenzeit zu sparen DCFSNZ RechReg2,F,0 BRA ISR1 DCFSNZ RechReg2,F,0 GOTO ISR2 DCFSNZ RechReg2,F,0 GOTO ISR3 DCFSNZ RechReg2,F,0 GOTO ISR4 BRA IntWahl2 ;falls einmal bei Interruptverteilung z.B. 255 im IntVertReg stand, geht es statt Absturz nach ISR1 ;------------------- ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ISR1 MOVFF TMR3L , ZufZahlReg;!!!!!!!!!!!!! CLRF TBLPTRU,0 CLRF TBLPTRH,0 BTFSC TMR3H,0,0 BRA ZufGen4 MOVFF AeussZufZahlReg , TBLPTRL BRA ZufGen5 ZufGen4 MOVFF TMR3L , TBLPTRL ZufGen5 TBLRD* BTFSC TMR3H,1,0 BRA ZufGen2 BSF T3CON,4,0 BTFSC TABLAT,7,0 BCF T3CON,4,0 BSF T3CON,5,0 BTFSC TABLAT,6,0 BCF T3CON,5,0 BRA ZufGen3 ZufGen2 BSF T3CON,4,0 BTFSC TABLAT,5,0 BCF T3CON,4,0 BSF T3CON,5,0 BTFSC TABLAT,3,0 BCF T3CON,5,0 ; BRA ZufGen3 ZufGen3 MOVF TMR3L ,W,0 XORWF AeussZufZahlReg ,F,0 Retfie 0 ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;ISR2 Hardware - Tests (war mal Usart-Slot) ISR2 BTFSC FlagReg2,0,0 ;Usart-busy-Flag: 1= USART busy ,d.h. besonders busy im Datenaustauschmodus. BRA ISR2c ;Im Servomode und also auch für den ständigen Adressempfang muß die Slot-Frequenz noch heruntergeteilt werden: Die Slots sind kürzer. DECFSZ Slotverdünner ,F,0 ;zur ungefähren Anpassung an die ungefähr 1500Hz Slotfrequenz im Zentralgerät. BRA ISR2Knoten2 MOVLW D'5' MOVWF Slotverdünner ,0 ; da z.T.nur 1 Empfang/Sendung pro Slot möglich. ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;eventuell statt zu brennen, Tests später umschaltbar machen. ifdef AllePortsRechteck BSF FlagReg5,4,0 ;1= alle ports auf Rechteck-Ausgang. (ausser Mclr, der geht ja nicht.) else BCF FlagReg5,4,0 endif ifdef schnellBlinken BCF FlagReg4,7,0 else BSF FlagReg4,7,0 endif ifdef ServoUBtoggeln BSF FlagReg4,1,0 else BCF FlagReg4,1,0 endif ifdef Servohinundher BSF FlagReg4,2,0 else BCF FlagReg4,2,0 endif ifdef ServoAuf BSF FlagReg4,3,0 else BCF FlagReg4,3,0 endif ifdef ServoZu BSF FlagReg4,4,0 else BCF FlagReg4,4,0 endif ifdef LEDEinundaus BSF FlagReg4,5,0 ;1= Lischra-Led-dauer-ein-aus Blink- Bit else BCF FlagReg4,5,0 ;1= Lischra-Led-dauer-ein-aus Blink- Bit endif ifdef PTransistEinundaus BSF FlagReg4,6,0 ;1= Lischra Phototr.-dauer- ein-aus: (Low/tristate) else BCF FlagReg4,6,0 ;1= Lischra Phototr.-dauer- ein-aus: (Low/tristate) endif ifdef TXLeitgToggeln BSF FlagReg5,0,0 ;1= Rechteckausgabe ausschließlich auf TX-Leitung. else BCF FlagReg5,0,0 ;1= Rechteckausgabe ausschließlich auf TX-Leitung. endif ifdef RXLeitgToggeln BSF FlagReg5,1,0 ;1= Rechteckausgabe ausschließlich auf RX-Leitung. else BCF FlagReg5,1,0 ;1= Rechteckausgabe ausschließlich auf RX-Leitung. endif ifdef ServoSignalLeitgTest BSF FlagReg5,2,0 ; 1= Servosignalleitung -dauer-Rechteck unbedingt else BCF FlagReg5,2,0 ; 1= Servosignalleitung -dauer-Rechteck unbedingt endif ifdef LischrMessEingTest BSF FlagReg5,3,0 ; ; 1= Lischra Messwert-In-port auf Ausgang--Rechteck else BCF FlagReg5,3,0 ; ; 1= Lischra Messwert-In-port auf Ausgang--Rechteck endif ifdef LischrTestDiplayLEDPoB7 ; 1= IR-LED blitzt mit ca 10Hz Phototransistor ist eingeschaltet. Wenn Signal ankommt, wird PORT B7 (ICSP-Data) getoggelt. BSF FlagReg5,5,0 ; Wenn an ICSP Stecker eine LED ( mit ca220R) aufgesteckert wird, kann eine Lichtschranken-Kopplung durch Blinken erkannt werden. else BCF FlagReg5,5,0 endif ;Beginn des Slots mit ca1500 Hz. ;Blinkfrequenzeinstellungen für Tests: Decfsz Test6HzReg ,F,0 BRA ISR2c ;Und schon sind wir bei ca5,9Hz BTFSS FlagReg4,7,0 BRA ISR2Freq1 Decfsz Test025HzReg ,F,0 BRA ISR2c MOVLW D'24' MOVWF Test025HzReg ,0 ISR2Freq1 BTG FlagReg6,0,0 ;--------------------------------------- ;alternative Tests abfragen gegenseitige Ausschlüsse und Einstellungen Start-Flags prüfen: ISR2c NOP ;weiter mit 1500Hz BTFSS FlagReg5,4,0 ;1= alle ports auf Rechteck-Ausgang. (ausser Mclr, der geht ja nicht.) BRA ISR2d MOVLW B'10000000' ;in dem Fall alle abschalten, ausser selbst und Rechteckfrequenzbit. ANDWF FlagReg4,F,0 MOVLW B'00010000' ANDWF FlagReg5,F,0 BSF FlagReg6,1,0 ;um das zusätzliche Toggeln des Servo-port durch 50Hz-Steuerung zu verhindern. BCF FlagReg1,2,0 CLRF TRISA,0 CLRF TRISB,0 BTFSC FlagReg6,0,0 BRA ISR2c2 CLRF PORTA,0 CLRF PORTB,0 BRA ISR2Z ISR2c2 SETF PORTA,0 SETF PORTB,0 BRA ISR2Z ;---------------------------------- ISR2d BTFSS FlagReg4,1,0 ;Servo-UB ein und aus BRA ISR2e CLRF FlagReg5,0 BCF TRISB,5,0 BTFSC FlagReg6,0,0 BRA ISR2d2 BCF PORTB,5,0 ;Portb,5 =0 schaltet die UB für die Rudermaschine ausn. BRA ISR2Z ISR2d2 BSF PORTB,5,0 ;Portb,5 =1 schaltet die UB für die Rudermaschine ein. BRA ISR2Z ISR2e MOVLW B'00011100' ;3 versch. servotests: Servo hin und her, Stellung auf, stellung zu ANDWF FlagReg4,W,0 BZ ISR2f CLRF FlagReg5,0 BCF FlagReg4,0,0 ;damit die Lichtschrankensteuerung nicht dazwischen stört. BSF FlagReg1,4,0;Servosignal-enable, muß abgeschaltet werden BSF FlagReg1,2,0;Servosignal-enable, muß abgeschaltet werden BCF FlagReg6,1,0 ;Porta-Blockierung von allePorts-Test aufheben. BCF TRISA,0,0 ;schaltet den Servosignal-Port an BCF TRISB,5,0 BSF PORTB,5,0 ;Portb,5 =1 schaltet die UB für die Rudermaschine ein. BTFSS FlagReg4,3,0 ;Servo auf BRA ISR2e3 MOVLW Aufwert MOVWF StellWertReg ,0 BRA ISR2Z ISR2e3 BTFSS FlagReg4,4,0 ;Servo zu BRA ISR2e4 MOVLW ZuWert MOVWF StellWertReg ,0 BRA ISR2Z ISR2e4 BTFSC FlagReg6,0,0 ;also F4,2=1;Servo hin und her BRA ISR2e2 MOVLW Aufwert MOVWF StellWertReg ,0 BRA ISR2Z ISR2e2 MOVLW ZuWert MOVWF StellWertReg ,0 BRA ISR2Z ISR2f BTFSS FlagReg4,5,0 ;1= Lischra-Led-dauer-ein-aus (Low/tristate) Blink- Bit BRA ISR2g MOVLW B'10100000' ;in dem Fall alle abschalten, ausser selbst und Rechteckfrequenzbit. ANDWF FlagReg4,F,0 CLRF FlagReg5,0 BCF PORTA,3,0 BTFSC FlagReg6,0,0 BRA ISR2f2 BSF TRISA,3,0 BRA ISR2Z ISR2f2 BCF TRISA,3,0 BRA ISR2Z ISR2g BTFSS FlagReg4,6,0 ;1= Lischra Phototr.-dauer- ein-aus: (Low/tristate) BRA ISR2h MOVLW B'11000000' ;in dem Fall alle abschalten, ausser selbst und Rechteckfrequenzbit. ANDWF FlagReg4,F,0 CLRF FlagReg5,0 BCF PORTA,4,0 BTFSC FlagReg6,0,0 BRA ISR2g2 BSF TRISA,4,0 BRA ISR2Z ISR2g2 BCF TRISA,4,0 BRA ISR2Z ISR2h BTFSS FlagReg5,0,0 ;1= Rechteckausgabe ausschließlich auf TX-Leitung. Messen gegenseitiger Kurzschlüsse BRA ISR2i MOVLW B'10000000' ;in dem Fall alle abschalten, ausser selbst und Rechteckfrequenzbit. ANDWF FlagReg4,F,0 MOVLW B'00000001' ANDWF FlagReg5,F,0 BCF TRISB,1,0 BTFSC FlagReg6,0,0 BRA ISR2h2 BSF PORTB,1,0 BRA ISR2Z ISR2h2 BCF PORTB,1,0 BRA ISR2Z ISR2i BTFSS FlagReg5,1,0 ; 1= Rechteckausgabe ausschließlich auf RX-Leitung ausnahmsweise als Ausgang zum Messen gegenseitiger Kurzschlüsse. BRA ISR2j MOVLW B'10000000' ;in dem Fall alle abschalten, ausser selbst und Rechteckfrequenzbit. ANDWF FlagReg4,F,0 MOVLW B'00000010' ANDWF FlagReg5,F,0 BCF TRISB,4,0 BTFSC FlagReg6,0,0 BRA ISR2i2 BSF PORTB,4,0 BRA ISR2Z ISR2i2 BCF PORTB,4,0 BRA ISR2Z ISR2j BTFSS FlagReg5,2,0 ; 1= Servosignalleitung -dauer-Rechteck langsam unbedingt BRA ISR2k MOVLW B'10000010' ;in dem Fall alle abschalten, ausser selbst,Servospannungsbit und Rechteckfrequenzbit. ANDWF FlagReg4,F,0 MOVLW B'00000100' ANDWF FlagReg5,F,0 BSF FlagReg6,1,0 ;um das zusätzliche Toggeln des Servo-port durch 50Hz-Steuerung zu verhindern. BCF FlagReg1,2,0 BCF TRISA,0,0 BTFSC FlagReg6,0,0 BRA ISR2j2 BSF PORTA,0,0 BRA ISR2Z ISR2j2 BCF PORTA,0,0 BRA ISR2Z ISR2k BTFSS FlagReg5,3,0 ; 1= Lischra Messwert-In-port auf Ausgang--Rechteck BRA ISR2l MOVLW B'10000000' ;in dem Fall alle abschalten, ausser selbst und Rechteckfrequenzbit. ANDWF FlagReg4,F,0 MOVLW B'00001000' ANDWF FlagReg5,F,0 BCF TRISA,2,0 BTFSC FlagReg6,0,0 BRA ISR2k2 BSF PORTA,2,0 BRA ISR2Z ISR2k2 BCF PORTA,2,0 BRA ISR2Z ISR2l BTFSS FlagReg5,5,0 ; 1= LED blitzt mit ca 10Hz /10ms, Phototransistor eingeschaltet,Messport auf Tristate. BRA ISR2m BCF FlagReg4,0,0 ;damit die Lichtschrankensteuerung nicht dazwischen stört. BCF FlagReg4,7,0 ;es muß schon schnell blinken BSF TRISA,2,0 ;Messport auf Tristate BCF TRISB,7,0 ; LED-Stecker auf ICSP-Port BTFSS FlagReg6,0,0 BRA ISR2l2 BSF FlagReg6,2,0 ;Riegel setzen BCF TRISA,3,0 ;LED einschalten BCF PORTA,3,0 BCF TRISA,4,0 ;Phototransistor ein BCF PORTA,4,0 ;Phototransistor eingeschaltet BCF FlagReg6,0,0 ;muß hier erledigt gesetzt werden.(einmal-Vorgang sichern) BRA ISR2Z ISR2l2 BTFSS FlagReg6,2,0 BRA ISR2Z BCF FlagReg6,2,0 ;Riegel erledigt Btfss PORTA,2,0 ;Phototransistor abfragen BTG PORTB,7,0 ;Display z.B. mit LED-Stecker auf ICSP-Port BSF TRISA,4,0 ;Phototransistor ausschalten BSF TRISA,3,0 ;LED ausschalten BRA ISR2Z ISR2m NOP BTFSS FlagReg5,6,0 ; 1= Lichtschranken -End-Test: 1x öffnen -schließen - öffnen, wenn Blech eingesteckt.Reset wenn raus.setzt F4,0 BRA ISR2n ;Dieser Test ist noch nicht programmiert und eigentlich überflüssig zum Testen der Hardware. Nur zur Demo ganz nett. ISR2n NOP ISR2Z BRA ISR2Knoten2 ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ISR2Knoten2 NOP ISR2Ende Retfie 0 ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ISR3 RETFIE 0 ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;1Slot= Platz für ein Programm mit bis zu ca 60 2-Mhz Rechenschritten.Sind es mehr, muß 1 Slot Abstand gehalten werden. ; bei insgesamt ca 120 Schritten, geht das Timing kaputt, wenn der nächste Interrupt kommt, bevor der letzte ;wenigstens den Timing-Zähler weitersetzen konnte. ;ISR4 War mal LichtschrankenMessung ; BTFSS FlagReg1,0,0 ;Das Lichtschranken einschalt-Bit nur 25 Hz gesettet ISR4 RETFIE 0 ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR-- ;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR-- ;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR-- ;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR-- ;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR-- ;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR-- ;ENDE ISR--;ENDE ISR--;ENDE ISR--;ENDE ISR-- ;ENDE ISR--;ENDE ISR--;ENDE ISR-- ;ENDE ISR--;ENDE ISR-- ;ENDE ISR-- ;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT-- ;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT-- ;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT-- ;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT--;XXX INIT-- INIT MOVLW B'01110010' MOVWF OSCCON,0 MOVLW B'11001000' ;Voreinstellungen für 20khz - Timer - Interrupt MOVWF T0CON,0 BCF INTCON,2,0 ;TMR0 IntFlag BSF INTCON2,2,0 ;Priority Bit Timer0 set = HighPri BSF RCON,7,0 ;Prioritäterei einschalten MOVLW B'01101101' ;Pin1 =An0 als Digital Port sowie jetzt An2,3,5,6 als digital. alle anderen Ad-Ports vorläufig als Analog MOVWF ADCON1,0 ; Pin2 /AN1 soll analoger Eingang.!!! BCF TRISA,0,0 ;Digitalout an Servo Interruptmethode ; BSF TRISA,1,0 ;analog input z.Zt oohne Aufgabe. SETF TRISB,0;Regelmäßige Voreinstellung, Ausnahmen ggf. gesondert. CLRF PORTB,0 BCF PORTA,0,0 ;Servoausgang erstmal auf Null, damit sich nicht das geringste bewegt,ehe Befehl. ;wegen Reset: Alle GPRs der ACCESS-Bank clearen: ResetGPRs MOVLW UsartAblFlgReg1 ;ja, MOVLW,nicht movf,!!! weil erste Nummer in der zu clearenden Registerliste MOVWF FSR0L,0 MOVLW D'0' MOVWF FSR0H,0 MOVLW D'127' ResetGPRs2 CLRF POSTINC0 CPFSGT FSR0L,0 BRA ResetGPRs2 ;-------------- CLRF FlagReg1,0 CLRF FlagReg2,0 CLRF FlagReg3,0 CLRF FlagReg4,0 CLRF FlagReg5,0 ;-------------------------------- MOVLB D'0' ; Bank abklären. ;----------------- ;Zufallsgenerator: CLRF T3CON ,0 BSF T3CON,0,0 ;einschalten. BCF EECON1,6,0 ;vom ConfigReg wegzeigen !!! BCF EECON1,7,0 ;aufs EEprom zeigen: Der Zufallsgenerator liest nur, was im Flash steht. Nur fürs Schreiben (access)wäre es nötig, aufs Flash zu zeigen:(BSF) ;--------------------------------------- MOVLW D'6' MOVWF LischTimReg ,0 ;damit schlägt er beim DECFSZ sofort an statt von 255 runtergezählt zu werden, was das öffnen 10 Sec verzögern würde. (resetwert=6) ;da vor dem öffnen ja die Lichtschranke verifiziert werden muß. ;------------------------- ;Init Einstellungen für USART ;überreste nach Hack: BSF TRISB,1,0 ;TX USART BSF TRISB,4,0 ;RX USART MOVLW D'5' ;Zur Anpassung UsartSlot (ISR2 oberer Teil) an die 1500 Hz Slotfrequenz des Zentralgerätes. MOVWF Slotverdünner ,0 ; da z.T.nur 1 Empfang/Sendung pro Slot möglich. ;für Tests (Hack) MOVLW D'24' MOVWF Test025HzReg ,0 ;------------------- ;Ende Usart Voreinstellungen MOVLW StellWert ; (ein Aufwert, an der Grenze. sollte aber nicht zur Geltung kommen, außer im Fehlerfalle die Hebelverbiegung verhindern.) MOVWF StellWertReg Movlw D'10' MOVWF FuenfzgHzReg ,0 Movlw D'64' MOVWF FuenfzgHzBReg ,0 ;-------------------------------------------------------- BCF PORTB,5,0 ;Motorstrom aus BSF TRISB,5,0 MOVLW B'11100000' MOVWF INTCON,0 ;Interrupts enablen RETURN 0 END