Hallo alle zusammen!
Ich habe mir eine 4-Kanal IR Fernbedinung nachgebaut. Diese Funktieoniert aber immer noch nicht. Der Empfänger geht aber der Sender nicht richtig. Jetzt habe ich den Verdacht das der Quellcode falsch ist, bzw. falschprogrammiert ist. Ich habe keine Ahnung von Assembler.
Des wegen die Frage, sieht einer von euch einen Fehler?
Wäre schön wenn mir helfen könnte, da die Bauteile sehr teuer wahren.
MFG
Andreas
Sender:
Code:
Code:
;**********************************************
; *
; sender.asm - 4-Kanal-Fernbedienung - Sender *
; *
;**********************************************
; *
; (c) 2003 by Kai Uwe Schmidt *
; *
;**********************************************
list p=12F629
include <p12f629.inc>
d1 EQU 0x20
d2 EQU 0x21
d3 EQU 0x22
w_temp EQU 0x23
status_temp EQU 0x24
org 0x00
clrf PCLATH
goto main
org 0x04
movwf w_temp
swapf STATUS, w
bcf STATUS, RP0
movwf status_temp
bsf STATUS, RP0 ; Bank 1
bcf INTCON, 7 ; Alle Interrupts aus
bcf STATUS, RP0 ; Bank 0
btfss GPIO, 0
goto kanal1
btfss GPIO, 1
goto kanal2
btfss GPIO, 2
goto kanal3
btfss GPIO, 4
goto kanal4
swapf status_temp, w
movwf STATUS
swapf w_temp, f
swapf w_temp, w
goto main
Delay_1s movlw 0x07
movwf d1
movlw 0x2F
movwf d2
movlw 0x03
movwf d3
Delay_0 decfsz d1, f
goto $+2
decfsz d2, f
goto $+2
decfsz d3, f
goto Delay_0
goto $+1
goto $+1
goto $+1
return
send_ir bsf GPIO, 5
goto $+1
goto $+1
goto $+1
goto $+1
goto $+1
goto $+1
bcf GPIO, 5
goto $+1
goto $+1
goto $+1
goto $+1
decfsz d1, f
goto send_ir ; 40 KHz Burst
call Delay_1s ; 1 s Pause
return
main bcf STATUS, RP0 ; Bank 0
clrf GPIO
movlw 0x07
movwf CMCON ; GP0..GP2 digital input
bsf STATUS, RP0 ; Bank 1
movlw B'00010111'
movwf TRISIO ; GP5 Ausgang, GP0..GP4 Eingang
bcf STATUS, RP0 ; Bank 0
bsf GPIO, 5
bcf GPIO, 5
bsf STATUS, RP0 ; Bank 1
bcf INTCON, 7
clrf INTCON
bsf INTCON, 3
movlw B'00010111'
movwf IOC
bsf INTCON, 7 ; GPIO Interrupt On Change
bcf STATUS, RP0 ; Bank 0
loop sleep
nop
goto loop
kanal1 movlw 0x56
movwf d1
call send_ir ; 8 * 255
goto main
kanal2 movlw 0x7F
movwf d1
call send_ir ; 12 * 255
goto main
kanal3 movlw 0xA8
movwf d1
call send_ir ; 16 * 255
goto main
kanal4 movlw 0xD1
movwf d1
call send_ir ; 20 * 255
goto main
goto main
end
und der
Empfänger:
Code:
Code:
;**********************************************
; *
; sender.asm - 4-Kanal-Fernbedienung - Sender *
; *
;**********************************************
; *
; (c) 2003 by Kai Uwe Schmidt *
; *
;**********************************************
list p=12F629
include <p12f629.inc>
d1 EQU 0x20
d2 EQU 0x21
d3 EQU 0x22
w_temp EQU 0x23
status_temp EQU 0x24
org 0x00
clrf PCLATH
goto main
org 0x04
movwf w_temp
swapf STATUS, w
bcf STATUS, RP0
movwf status_temp
bsf STATUS, RP0 ; Bank 1
bcf INTCON, 7 ; Alle Interrupts aus
bcf STATUS, RP0 ; Bank 0
btfss GPIO, 0
goto kanal1
btfss GPIO, 1
goto kanal2
btfss GPIO, 2
goto kanal3
btfss GPIO, 4
goto kanal4
swapf status_temp, w
movwf STATUS
swapf w_temp, f
swapf w_temp, w
goto main
Delay_1s movlw 0x07
movwf d1
movlw 0x2F
movwf d2
movlw 0x03
movwf d3
Delay_0 decfsz d1, f
goto $+2
decfsz d2, f
goto $+2
decfsz d3, f
goto Delay_0
goto $+1
goto $+1
goto $+1
return
send_ir bsf GPIO, 5
goto $+1
goto $+1
goto $+1
goto $+1
goto $+1
goto $+1
bcf GPIO, 5
goto $+1
goto $+1
goto $+1
goto $+1
decfsz d1, f
goto send_ir ; 40 KHz Burst
call Delay_1s ; 1 s Pause
return
main bcf STATUS, RP0 ; Bank 0
clrf GPIO
movlw 0x07
movwf CMCON ; GP0..GP2 digital input
bsf STATUS, RP0 ; Bank 1
movlw B'00010111'
movwf TRISIO ; GP5 Ausgang, GP0..GP4 Eingang
bcf STATUS, RP0 ; Bank 0
bsf GPIO, 5
bcf GPIO, 5
bsf STATUS, RP0 ; Bank 1
bcf INTCON, 7
clrf INTCON
bsf INTCON, 3
movlw B'00010111'
movwf IOC
bsf INTCON, 7 ; GPIO Interrupt On Change
bcf STATUS, RP0 ; Bank 0
loop sleep
nop
goto loop
kanal1 movlw 0x56
movwf d1
call send_ir ; 8 * 255
goto main
kanal2 movlw 0x7F
movwf d1
call send_ir ; 12 * 255
goto main
kanal3 movlw 0xA8
movwf d1
call send_ir ; 16 * 255
goto main
kanal4 movlw 0xD1
movwf d1
call send_ir ; 20 * 255
goto main
goto main
end
Hier ist der Link (Seite ganz unten!)
http://elektronik.kai-uwe-schmidt.de..._fernbedienung
Lesezeichen