Einfach eine LED am PIC16F84A blinken lassen. Brauche Hilfe.
Hallo zusammen !
Ich weiß nicht mehr weiter, daher brauche ich ein bisschen Hilfe von euch.
Ich möchte eine LED am PIC16F84A zum leuchten bringen, bisher jedoch ohne Erfolg! Eingeladen habe ich das Lernbeispiel "Lauflicht" (lauf.hex) von sprut.
Im Simulator programm MiSim DE funktioniert es auch einwandfrei.
Auf meiner Platine bekomme ich es aber nicht zum laufen.
Um Fehler an meiner Platine etc. auszuschließen habe ich in letzter Konsequenz die Pins direkt verlötet. Leider leuchtet die LED auch hiermit nicht...
Irgendwie habe ich ein Problem mit dem richtigen Anschluss des PIC oder dem Keramikresonator (den ich schon mehrfach getauscht habe).
Es wäre schön, wenn ihr mir noch ein paar Tips geben könntet. Ich weiß nicht mehr weiter was ich noch probieren soll.
Folgenden Anschluss am PIC habe ich :
PIC16F84A liegt vor mir, die Einkerbung ist oben.
von links oben, nach unten Pin 1-9
von rechts unten, nach oben Pin 10 - 18.
(gem. Bild im Anhang)
Pin 5 (VSS), mit masse belegt.
Pin 14 (VDD), mit plus belegt.
Pin 15/16 (OSC1/OSC2), belegt mit äußeren Beinchen des Keramikresonators (CST 4,00, Reichelt), mittleres Beinchen auf Pin 5.
Außere Beinchen auch schon mal getauscht...LED leutet ebenfalls nicht.
Als Stromversorung habe ich 4 AA/Ni-Mh Batterien mit 1,2V, 23000mAh verwendet.
Das wars doch eigentlich schon mit der Belegung oder ?
Wenn ich nun eine LED (Spannung 2-3V) an den PIC löte z.B. plus mit Pin 9(RB3) und minus Pin 5 (VSS), müsste die doch irgendwann mal kurz leuchten. Wenn sie wegen der 5V durchbrennt wärs mir auch egal. Haupsache sie blitzt mal kurz, würde mich schon freuen.
Es tut sich aber nichts. Auch wenn ich ein Messgerät an Pin 5 (VSS) und Pin 9 (RB3) halte, läßt sich keine Spannung von ~5V messen egal wie lange ich warte.
Ich erwarte eigentlich, dass bei dem Lauflichtprogramm irgendwann kurz die Spannung zu messen ist... ist das falsch ?
Auch wenn ich Pin 5 (VSS) und Pin 4 (MCLR) kurz oder konstant miteinander verbinde tut sich nichts.
Ich vermute das Problem liegt an dem Keramikresonator. Aber was soll ich noch versuchen. Das Ding müsste doch eigentlich für das Lauflicht funktionieren ? Gibt es eine Möglichkeit die Funktion zu überprüfen ohne Ozilloskop ?
Das Programm von sprut sieht so aus (habe das fertige hex file geladen):
list p=16f84
;************************************************* *************
;*
;* Pinbelegung
;* ----------------------------------
;* PORTA: 0
;* 1
;* 2
;* 3
;* 4
;* PORTB: 0 LED
;* 1 LED
;* 2 LED
;* 3 LED
;* 4 LED
;* 5 LED
;* 6 LED
;* 7 LED
;*
;************************************************* *************
;
; sprut (zero) Bredendiek 05/2000 (mod. am 16.01.2002)
;
; Lauflicht am Port B
;
; Taktquelle: 4MHz
;
;************************************************* *************
; Includedatei für den 16F84 einbinden
;
#include <P16f84.INC>
;
; Configuration festlegen
;
; bis 4 MHz: Power on Timer, kein Watchdog, XT-Oscillator
__CONFIG _PWRTE_ON & _WDT_OFF & _XT_OSC
;
; ab 4 MHz: Power on Timer, kein Watchdog, HS-Oscillator
; __CONFIG _PWRTE_ON & _WDT_OFF & _HS_OSC
;
;************************************************* *************
; Variablennamen vergeben
;
loops Equ 0x22 ; Zähler für Warteschleife
loops2 Equ 0x23 ; Zähler für Warteschleife
;************************************************* *************
; los gehts mit dem Programm
; Port B auf Ausgabe stellen
Init
bsf STATUS, RP0 ; auf Bank 1 umschalten
movlw B'00000000' ; PortB alle output
movwf TRISB
bcf STATUS, RP0 ; auf Bank 0 zurückschalten
clrf PORTB ; alle LEDs ausschalten
; 1. LED einschalten
bsf PORTB,0 ; LED an RB0 einschalten
; Lauflicht
Loop
call Wait ; Wartezeit
rlf PORTB,f ; laufen zur nächsten LED
goto Loop
;************************************************* *********
; Warteschleife 250 ms
Wait
movlw D'250' ; 250 ms Pause
movwf loops
Wai
movlw .110 ; Zeitkonstante für 1ms
movwf loops2
Wai2 nop ;
nop
nop
nop
nop
nop
decfsz loops2, F ; 1 ms vorbei?
goto Wai2 ; nein, noch nicht
;
decfsz loops, F ; 250 ms vorbei?
goto Wai ; nein, noch nicht
retlw 0 ; das Warten hat ein Ende
end
Wäre für eure Hilfe sehr dankbar !
Ich weiß nicht, wie ich das Problem lösen kann.
Pin 4 (MCLR) über einen 10k Widerstand mit VDD (5V) verbinden!
Wenn Du diesen auf Masse legst löst DU einen Reset aus, verbindest Du VSS und MCLR ständig dann kann das nicht funktionieren, da dauernd resetet wird!
EDIT: Das Beispiel baut noch auf einen 16F84 auf, Du verwendest aber warschienlich einen 16F84A. Im Code deshalb noch ausbessern und neu kompilieren!
Lesezeichen