-
Quellcode Richtig??
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
-
Hallo Andreas,
wieso hast du den Verdacht, daß die Software falsch programmiert ist?!
So eine Behauptung würde ich nicht so schnell aufstellen wenn auf der Hompage geschrieben steht, daß die Schaltung schon seit einiger Zeit beim Entwickler im Einsatz ist. Kontrollier nochmal deine Schaltung und prüfe, ob der Quarz beim Empfänger überhaupt schwingt. Hast du die PICs auch richtig gebrannt (Konfiguration)?
Gruß,
SIGINT
-
Ja, der Quarz schwingt.
Ich habes mit einen Ozil nachgemessen. Und wenn ich mit einer IR-LED über den TSOP gehe bzw. diese schnel ein-aus- schalte, dann gehen die einelnen 4-Kanäle auch an und aus.
Ich Schaltungen sich auch richtig, da ich sie endlose mal nachgeschaut habe.
Was hilfreich wäre, wenn du mir einen anderen einfachen brenner sagenkönntest (Den Brenner von der Website habe ich schon nachgebaut, sonst musste ich mal den Brenner 3 von www.sprut.de aufbauen) und wie ich beim PIC 12F629 die Taktgeber einstellung machnen musste.
MFG
Andreas
-
Hallo!
Ich habe auch den Verdacht, dass die Software fehlerhaft ist. Dass sie beim Author funktioniert, bedeutet noch nicht, dass die publiezierte Quellkoden denen beim Author eingesetzten entsprechen. Es könnte sein, dass er noch Änderungen vorgenommen hat, die nicht in Quellkoden eingetragen sind. Als ich mit PICs angefangen habe, habe ich sehr oft nichtfunktionierende Software vom Internet runtergeladen.
Mir fällt vor allem ein, dass die PICs nicht initialisiert sind (z.B. on change interrupt beim Sender) und in der ISR der Befehl "retfie" fehlt. Am besten wäre, direkt mit dem Autor ein Kontakt aufzunehmen bzw. die Software neu schreiben, da die Fehlersuche in "fremden" Quellkoden (ohne Programmablaufdiagram) meistens länger dauert.
MfG
-
Das habe ich ja schon gemacht, ihn zu kontaktieren, aber ohne Erfolg.
5 E-Mails habe ich an ihn geschickt, aber ohne Antwort.
-
Es scheint also, dass wenn du dich wirklich mit PICs beschäftigen und viel eigene Projekte realisieren willst, musst du leider Assembler lernen. :)
Für Einsteiger wurde in Wiki ein Artikel geschrieben, mit der Hoffnung, dass es damit leichter wird.
https://www.roboternetz.de/wissen/in.../PIC_Assembler
MfG
-
Ja, das habe ich mir auch schon gedacht.
Nur dies mal eben so zu können ist auch nicht leicht.
-
Wenn das Programmieren schneller und einfacher gehen sollte, könntest du auch PICs in C bzw. BASIC programmieren. Ein Programm ins PIC brennen, kannst Du schon! :)
Also viel Spass und Erfolg!
MfG
-
Aber könnt mir den nicht hier bei einer helfen???
Ich habe eh noch einen PIC12F629 zu Hause und dann kann ich mit deisem mal ein Schaltung erstellen.
MFG
Andreas
bitte!!!! :cry:
-
Was für eine Art Hilfe benötigst du denn?