PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Quellcode Richtig??



ELW 2
10.02.2008, 09:53
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:


;**********************************************
; *
; 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:

;**********************************************
; *
; 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/index.php?page=pic_fernbedienung

SIGINT
10.02.2008, 11:28
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

ELW 2
10.02.2008, 11:59
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

PICture
10.02.2008, 14:18
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

ELW 2
10.02.2008, 16:50
Das habe ich ja schon gemacht, ihn zu kontaktieren, aber ohne Erfolg.
5 E-Mails habe ich an ihn geschickt, aber ohne Antwort.

PICture
10.02.2008, 17:23
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/index.php/PIC_Assembler

MfG

ELW 2
10.02.2008, 21:06
Ja, das habe ich mir auch schon gedacht.
Nur dies mal eben so zu können ist auch nicht leicht.

PICture
10.02.2008, 21:47
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

ELW 2
12.02.2008, 14:09
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:

T.J.
12.02.2008, 14:15
Was für eine Art Hilfe benötigst du denn?

ELW 2
13.02.2008, 19:41
Das mir vielcht einer sagt, was ich im Quellcode ändern müsste, damit der der "Normal" anforderung entspricht.

MFG
Andreas

Enrock
14.02.2008, 10:59
Servus,

also ich habe den Code jetzt auch nur grob überfolgen und mir sind ebenfalls ein paar Unstimmigkeiten aufgefallen, die PICture bereits erwähnt hat.
Ersten: Fehlt die Initialisierung des PICs und zweitens fehlt nach der Interrupt Routine der Befehlt "retfie"! Das Ganze mag vielleicht auch so funktionieren aber sinnvoll ist das nicht.

Woher weißt du denn das der Empfänger funktioniert.

Ich habe keine Erfahrung mit dem genannten PIC. Aber ich habe vielleicht eine Idee. In der Schaltung ist Pin 4 offen. Dieser Pin ist laut Datenblatt auch der negierte MCLR. Hast mal geschaut ob der PIC überhaupt was macht und nicht ständig in einer reset Endlosschleife verweilt. Ich habe jetzt nicht mehr im Code geschaut, wie du den Port definiert hast aber ist vielleicht ein Anfang. Häng doch einfach mal PIN4 auf HIGH also VDD.

Wie schaut es mit der Config des PICs aus? Wie hast du diese eingestellt. Versuch doch einfach mal eine LED an einen PORT zu hängen und zu schauen ob sich überhaupt was tut.

Ansonsten hilft wohl nur sich mit der Materie auseinander zu setzen. Auch die Kommentare vom Autor sind wenig ergiebig.

Gruß

ELW 2
15.02.2008, 20:24
Wenn ich z.B eine IR LED an einen NE555 anschliese, dann reagiert der Empfänger hierdrauf. Alos die Perts gehen aus und wieder an.