Forum: Mikrocontroller und Digitale Elektronik Pic Programmierung LED blinken lassen


von Sabine M. (zizo)


Lesenswert?

Hallo
Ich habe ein Pic 16F88 programmiert. ich will ein LED blinken lassen. 
Ich habe eine Schaltung mit LED zusammengebaut. Aber der LED binkt 
nicht, er leuchtet dauerhaft. Ich erkenne das Problem nicht, kann Jemand 
mir helfen?

#include <P16F88.inc>
LED equ 1
loops equ 0x25
loops2 equ 0x26


  org 0x0000
Mainloop
        bsf STATUS, RP0    ;Bank 1
    bcf TRISB, LED
    bcf STATUS, RP0    ;Bank 0
    bsf PORTB, LED  ;LED leuchtet
        call    WAIT            ; 250 ms warten
  bcf STATUS, RP0    ;Bank 0
    bcf PORTB, LED  ;LED leuchtet
        call    WAIT            ; 250 ms warten
        goto    Mainloop

;*******************************************************
; Warteschleife für 250 ms
WAIT
    bcf STATUS, RP0
        movlw   .250
        movwf   loops

; die top-Schleife verzögert 1 ms = 250 x 4µs
top     bcf STATUS, RP0
    movlw   .250

        movwf   loops2
; die top2-Schleife verzögert 4 Takte = 4 µs
top2    nop
        decfsz  loops2, F
        goto    top2
        decfsz  loops, F
        goto    top
        retlw   .0

        end

von Hermann U. (Firma: www.pcb-devboards.de) (gera82)


Lesenswert?

Laut Simulation geht deine Code ;-) bilnkt am PORTB,1

von Sabine M. (zizo)


Angehängte Dateien:

Lesenswert?

der Simulation funktioniert.
 Schaltungsplan wie folgt;

von Chris (Gast)


Lesenswert?

Könnte es sein, daß der WatchDogTimer eingeschalten ist, und weil du
ihn nicht refresht, der greift, einen Reset auslöst, und damit nie 
weiter
als das erste Wait kommt. Das wäre die Erklärung des Fehlverhaltens.

von Sabine M. (zizo)


Lesenswert?

ich habe WatchDogTimer beim Configuration und durch das Befehl Sleep 
ausgeschaltet, aber es ist nichts passiert. LED leuchtet imer 
weiter,blinkt nicht

von Chris (Gast)


Lesenswert?

ersetze das nop durch ein clrwdt mach den Test, da ich immer noch der 
Meinung bin, daß es ein WDT Problem is.

von Chris (Gast)


Lesenswert?

Sonst, wenn es nicht der WDT ist, bist du sicher, daß du die Led an Pin
B1 angeschlossen hast ?

von Micha (Gast)


Lesenswert?

habe Dein Programm gerade auf nem 16F627A probiert.
Klappt wunderbar! Nur die Includedatenen auf 16F627A geändert.
Langes an, Kurzes aus

von Sabine M. (zizo)


Lesenswert?

es hat nichts gebracht

von Sabine M. (zizo)


Lesenswert?

ich bin mir sicher dass der LED auf pin B1, von der Pic habe ich nur 
dieses Pin verwendet, das heißt alle andere Pins sind als Eingang

von Rene B. (yob) Benutzerseite


Lesenswert?

Guten Abend Alex,

hast du einmal die restlichen Ausgänge des Portb deines PIC's gemessen?
Poste doch bitte mal einen richtigen Schaltplan deines Aufaues!

Was für einen Quarz verwendest du? Welche Stützkondensatoren (von den 
Quarzbeinchen gegen Masse) hast du eingesetzt? Resetbeschaltung?

Grüße Yob.

von Hermann U. (Firma: www.pcb-devboards.de) (gera82)


Lesenswert?

Mess mal mit Multimeter, oder Probier andere Ports,  die Simulation geht 
mit PIC16F88..wie isch schon sagte.

Probier mal richtig, also mit _Config und Initialisierung.

von Micha (Gast)


Lesenswert?

Habe eben nen komischen Efekt gehabt mit deinem Programm. Hast Du die 
Dioden von Plus an den Port? also brauchst du zum Leuchten deiner LED 
Logisch null am Port?

Ist komisch, denn dein Prog geht wirklich manchmal nicht! bei mir 
manschmal garnicht erst an. Wenn ich aber den Quarz berühre, dann blinkt 
die Diode ca. 2 s an und 1/2 s aus. Lönte mit dem fehlenden Konfig 
zusammenhängen.

Anbei nen Blinkrogramm aus meiner Zeit (16F627A) ---> ohne Quarz 
anfassen
1
W                            EQU     H'0000'
2
F                            EQU     H'0001'
3
4
;----- Register Files------------------------------------------------------
5
6
INDF                         EQU     H'0000'
7
TMR0                         EQU     H'0001'
8
PCL                          EQU     H'0002'
9
STATUS                       EQU     H'0003'
10
FSR                          EQU     H'0004'
11
PORTA                        EQU     H'0005'
12
PORTB                        EQU     H'0006'
13
14
INTCON                       EQU     H'000B'
15
OPTION_REG                   EQU     H'0081'
16
TRISA                        EQU     H'0085'
17
TRISB                        EQU     H'0086'
18
CMCON                        EQU     H'001F'
19
TIMER1            EQU    H'20'  
20
TIMER2               EQU    H'21'
21
22
;----- STATUS Bits --------------------------------------------------------
23
IRP                          EQU     H'0007'
24
RP1                          EQU     H'0006'
25
RP0                          EQU     H'0005'
26
NOT_TO                       EQU     H'0004'
27
NOT_PD                       EQU     H'0003'
28
Z                            EQU     H'0002'
29
DC                           EQU     H'0001'
30
C                            EQU     H'0000'
31
32
33
;==========================================================================
34
;
35
;       Configuration Bits
36
;
37
;==========================================================================
38
39
_BODEN_ON                    EQU     H'3FFF'
40
_BODEN_OFF                   EQU     H'3FBF'
41
_CP_ALL                      EQU     H'03FF'
42
_CP_75                       EQU     H'17FF'
43
_CP_50                       EQU     H'2BFF'
44
_CP_OFF                      EQU     H'3FFF'
45
_DATA_CP_ON                  EQU     H'3EFF'
46
_DATA_CP_OFF                 EQU     H'3FFF'
47
_PWRTE_OFF                   EQU     H'3FFF'
48
_PWRTE_ON                    EQU     H'3FF7'
49
_WDT_ON                      EQU     H'3FFF'
50
_WDT_OFF                     EQU     H'3FFB'
51
_LVP_ON                      EQU     H'3FFF'
52
_LVP_OFF                     EQU     H'3F7F'
53
_MCLRE_ON                    EQU     H'3FFF'
54
_MCLRE_OFF                   EQU     H'3FDF'
55
_ER_OSC_CLKOUT               EQU     H'3FFF'
56
_ER_OSC_NOCLKOUT             EQU     H'3FFE'
57
_INTRC_OSC_CLKOUT            EQU     H'3FFD'
58
_INTRC_OSC_NOCLKOUT          EQU     H'3FFC'
59
_EXTCLK_OSC                  EQU     H'3FEF'
60
_LP_OSC                      EQU     H'3FEC'
61
_XT_OSC                      EQU     H'3FED'
62
_HS_OSC                      EQU     H'3FEE'
63
64
  __CONFIG        _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC
65
66
      ORG    0
67
      GOTO   Beginn
68
69
DELAY_ROUTINE   MOVLW   D'250'         ;54 Generate approx 10mS delay at 4Mhz CLK
70
                MOVWF   TIMER2
71
DEL_LOOP1       MOVLW   D'250'         ;60  
72
                MOVWF   TIMER1
73
DEL_LOOP2        DECFSZ  TIMER1,F
74
                GOTO    DEL_LOOP2
75
                DECFSZ  TIMER2,F
76
                GOTO    DEL_LOOP1
77
        RETLW   0
78
79
Beginn      MOVLW  B'00000111'  ;Disable Comparator module's
80
        MOVWF  CMCON
81
      ;
82
        BSF    STATUS,RP0  ;RegBank 1 einschalten
83
        MOVLW  B'11010111'  ;Timer: Pull-Up; Flanke; Interner Takt; fallende Flanke; Timer0; durch 256 .
84
        MOVWF  OPTION_REG  ;Write the OPTION register.
85
      ;
86
        CLRF  INTCON    ;Disable interrupts
87
        MOVLW  B'11111101'
88
        MOVWF  TRISB    ;RB1ist Ausgang 
89
        
90
        BCF    STATUS,RP0  ;RegBank 0 einschalten
91
92
E2        bsf    PORTB,1
93
        CALL  DELAY_ROUTINE
94
        CALL  DELAY_ROUTINE
95
        bcf    PORTB,1
96
        CALL  DELAY_ROUTINE
97
        GOTO  E2
98
end

von Sabine M. (zizo)


Angehängte Dateien:

Lesenswert?

ich habe der interne Oscillator verwendet. Was meinst du mit 
Resetschaltung?

von juppi (Gast)


Lesenswert?

org 0x0000
Mainloop
        bsf STATUS, RP0    ;Bank 1
    bcf TRISB, LED
xxxxxxx
   bcf STATUS, RP0    ;Bank 0
    bsf PORTB, LED  ;LED leuchtet
        call    WAIT            ; 250 ms warten
  bcf STATUS, RP0    ;Bank 0
    bcf PORTB, LED  ;LED leuchtet
        call    WAIT            ; 250 ms warten
        goto    xxxxxxx

Könnte es das sein?

von Micha (Gast)


Lesenswert?

Habe mir den ganzen beitrag nochmal durchgelesen. Sleep zum WDT 
ausschalten?
Sleep versetetzt den PIC in Wartezustand, dann passiert nichts mehr, 
wenn du natürlich die LED einschaltest und dann Sleep ausführst, bleibt 
er da natürlich stehen.

WDT zurücksetzen: clrwdt
WDT abschalten:

bsf STATUS,RP0
movlw B'00000111'
movwf OPTION_REG
bcf STATUS,RP0

von Rene B. (yob) Benutzerseite


Lesenswert?

Dein PIC 16F88 besitzt einen Reseteingang -> PIN: MCLR , welcher Low 
aktiv ist d.h. wenn am Reseteingang eine 0 (Masse oder undefiniertes 
Potenzial) anliegt wird dein Mikrocontroller immer wieder zurückgestzt. 
Der Reseteingang ist über einen Pull-Up Widerstand auf 1 zulegen, also 
z.B. einen 10kohm Widerstand zwischen 5V & Reseteingang MCLR, damit MCLR 
auf 1 liegt.

In deinem Programm fehlt die eindeutige Configuration von wichtigen 
Registern.

->

"__CONFIG        _BODEN_OFF & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & 
_WDT_OFF & _LVP_OFF & _MCLRE_OFF & _XT_OSC"

-> muss noch entsprechend angepasst werden

Du hast geschrieben das du den internen Oszilator verwendest. Leider 
muss ich dir da wiedersprechen, du benutzt den externen Oszilator! Wieso 
das?
Du musst laut Datenblatt dem PIC erst sagen welchen Oszilator du 
verwendest für deinen Systemtakt, was in deinem Quellcode jedoch nicht 
steht.

Bedenke auch das der interne Oszilator einen maximalen Takt von 8Mhz 
besitzt d.h. 8Mhz/4=2Mhz ; 1/2Mhz=500ns pro Taktzyklus oder je nach wahl 
noch langsamer.

-> Datenblatt -> Abschnitt Oszilatoren 4.5.1-2 & Special Function 
Register

Verwendest du eventuell einen Sprut-Brenner zum beschreiben des PIC's ?


Grüße Yob.

von Sabine M. (zizo)


Lesenswert?

Danke schön Micha und Rene B für die hilfe, Ich habe jetzt das Problem 
gefunden.
Die Spannung wird an meine Testplatine mit Spannungsteiler versorgt, 
diese erzeugt 6V 1500 mA DC, dann gibt es eine Spannungsregler 7805, 
dadurch bekomme ich 5V Spannung. Wenn ich diese Spannungsteiler 
anschließe blinkt der LED nicht.(leucht dauerhaft)
Ich habe eine 9V Batterie angeschlossen. der LED blinkt.
aber ich habe nicht ganz verstanden warum, liegt das vielleicht an der 
Stromstärker 1500 mA?

von Rene B. (yob) Benutzerseite


Lesenswert?

Kannst du die gesamte Beschaltung bitte mal aufzeichnen. Ich kann dir 
ehrlich gesagt nicht mehr ganz folgen, weil du immer nur Bruchstücke 
beschreibst.

Ich gehe jetzt davon aus das dein Programm, deine Config__ 
funktionieren,
wobei ich nicht ales nachvollziehen kann, soweit der Stand der Dinge.

Wie mir scheint hattest du ein Problem beim Schaltungsaufbau. Hier geht 
ohne Schaltplan wenig, außer man besitzt eine magische Glasskugel ^^. Es 
klingt zumindest nach einem Masseproblem d.h. keine feste Masse, gleiche 
Masse an PIC, LED, Spannungsteiler.

Grüße Yob.

von Dieter W. (dds5)


Lesenswert?

> ... diese erzeugt 6V 1500 mA DC, dann gibt es eine Spannungsregler
> 7805, dadurch bekomme ich 5V Spannung.

Das wird nicht funktionieren. Der braucht 7805 mindestens 7V, besser 
7,5V am Eingang um auf 5V regeln zu können.

von Sabine M. (zizo)


Angehängte Dateien:

Lesenswert?

Hallo
ja bei 6V bekomme ich als Ausgangsspannung von der 7805 genau 4,8V. Ich 
habe die Eingangspannung hoch gedreht, das heißt auf 7,5V eingestellt. 
Der Ausgangpannung ist 5,04V geworden. aber der LED blinkt trozdem 
nicht, nur wenn ich statt der Netzgerät ein Batterie 9V verwende. 
Übrigins ich habe der Netzgrät auf 9V eingestellt aber klappt das nur 
für paar Sekunden wenn ich der Netzgerät von der Steckdose ziehe.Weiß 
jemand warum?

von Rene B. (yob) Benutzerseite


Lesenswert?

Dein Aufbau ist nach dem Schaltplan ok. Um Spannungspitzen am 
Reseteingang zuverhindern ist ein minimaler Widerstand von 1kohm 
zwischen MCLR & VDD einzusetzen. Diese Spannungsspitzen können von 
deinem Netzteil 6V/1,5A kommen, wenn dieses ein Schaltnetzteil ist. Das 
fällt mir jetzt noch als mögliche Ursache ein. Ansonsten hat dein 
Netzteil generell ein Potenzialproblem (eventuell wird am Ausgang eine 
virtuelle Masse verwendet), dies kannst du ohne zerlegen des Netzteils 
nicht prüfen.

Ich nehme an es handelt sich um ein fertiges Steckernetzteil, da 
brauchst du wohl ein Neues. Am besten wäre ein stabilisiertes Netzteil, 
da gibt es auch schon gute Steckernetzteile für ca. 15-20€ .

Schönen Abend noch.

Yob.

von Sabine M. (zizo)


Lesenswert?

Danke für die hilfe

von Micha (Gast)


Lesenswert?

Geht jetzt alles?
Wenn ich richtig gelesen habe, wird die 7,5 V Eingangspannunung für den 
7805 mit einem Spannungsteiler aus Widerständen(?) gemacht. reicht der 
Strom???
Der 7805 ist nicht gerade günstig im Wirkungsgrad, selbst wenn der PIC 
(ca, 20mA) + LED (20mA)=40mA *ca.50% Verlust, nicht viel brauchen. Bei 
Eingang 15V, also Teiler 1/1 bräuchte man bei R=U/I -> 7,5V/60mA=125 Ohm 
und das wäre das Maximum eher kleiner. Der Widerstand müßte dann aber 
für U*I=7,5V*60mA=0,5W.

Bei nur 15 V Eingang ganz schön viel oder???

von Sabine M. (zizo)


Lesenswert?

Hallo Micha,es tut mir Leid ich habe nicht gut augedrukt, Ich habe keine 
Spannungsteiler aus Wiederstäden vwewendet, sondern habe ich eine 
Spannungs-Netzgerät verwendet der wird dierkt an der Steckdose gesteckt 
und erzeugt 7,5 V Spannung mit 1200mA .  Ich  habe bemerkt wenn ich mit 
meinem Finger die Masse berühre dann blinkt es,wenn nicht leuchtet 
dauerhaft, wenn ich statt der Netzgrät 9V Batterie verwende dann Blinkt 
es. Ich glaube die Ursache dass die 1200 mA zuviel ist.oder?

von was-willst-du (Gast)


Lesenswert?

>Ich  habe bemerkt wenn ich mit meinem Finger die Masse berühre dann blinkt >es, 
...
>Ich glaube die Ursache dass die 1200 mA zuviel ist.oder?

Denk mal logisch, Deinen beiden Aussagen müßten den Schluß zulassen, das 
Dein Finger 1200mA vernichten kann. Irre Feature. Sowas brauch ich auch.

von Gast (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich hab mit dem PIC16F88 Schwierigkeiten.

Bis jetzt hat der noch keinen mux von sich gegeben nun dacht ich mir 
versuch ich dieses Beispiel mal aber bis jetzt ist da auch nichts 
passiert.
Die Schaltuung hab ich 1:1 nach gebaut. Der ASM-Code von oben kopiert + 
Config. ist im Anhang. Beim erzeugen und Brennen werden keine Fehler 
entdeckt.
Ich hab es auch schon mit einem externen Oszillator versucht leider ohne 
erfolg. Daher möcht ich auch gern wissen, ob folgende config dafür 
geht?:

__CONFIG    _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & 
_WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & 
_PWRTE_ON & _WDT_OFF & _HS_OSC

__CONFIG    _CONFIG2, _IESO_OFF & _FCMEN_OFF

Ich hoffe das mir da jemand helfen kann (Kaputt sollte er ja noch nicht 
seinda er zum ersten mal verwendet wurde auserdem wird er ja auch vom 
Brenner erkannt).

vielen Dank für eure Hilfe

von Johannes (Gast)


Angehängte Dateien:

Lesenswert?

Kann mir jemand bei meiner Schaltung helfen ich habe ein
paar fehler weis aber nicht wie ich sie lösen soll.

von Johannes (Gast)


Angehängte Dateien:

Lesenswert?

Das war der Alte schaltplan hier ist der neue

von Erich (Gast)


Lesenswert?

Was ist eine Datei mit Extension  .SchDoc  ???

von Thomas (Gast)


Lesenswert?

Ich glaube da fehlt der y-Kondensator zwischen Pin 12 und 8.

von Johannes (Gast)


Angehängte Dateien:

Lesenswert?

Weis jemand ob ich VDD und VSS mit AVdd und AVss so verbinden darf.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.