www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Pic Programmierung LED blinken lassen


Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hermann U. (Firma: !www.pcb-devboards.de) (gera82)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Laut Simulation geht deine Code ;-) bilnkt am PORTB,1

Autor: Sabine Mühller (zizo)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
der Simulation funktioniert.
 Schaltungsplan wie folgt;

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sabine Mühller (zizo)
Datum:

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

Autor: Chris (Gast)
Datum:

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

Autor: Chris (Gast)
Datum:

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

Autor: Micha (Gast)
Datum:

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

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es hat nichts gebracht

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rene B. (yob) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hermann U. (Firma: !www.pcb-devboards.de) (gera82)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
W                            EQU     H'0000'
F                            EQU     H'0001'

;----- Register Files------------------------------------------------------

INDF                         EQU     H'0000'
TMR0                         EQU     H'0001'
PCL                          EQU     H'0002'
STATUS                       EQU     H'0003'
FSR                          EQU     H'0004'
PORTA                        EQU     H'0005'
PORTB                        EQU     H'0006'

INTCON                       EQU     H'000B'
OPTION_REG                   EQU     H'0081'
TRISA                        EQU     H'0085'
TRISB                        EQU     H'0086'
CMCON                        EQU     H'001F'
TIMER1            EQU    H'20'  
TIMER2               EQU    H'21'

;----- STATUS Bits --------------------------------------------------------
IRP                          EQU     H'0007'
RP1                          EQU     H'0006'
RP0                          EQU     H'0005'
NOT_TO                       EQU     H'0004'
NOT_PD                       EQU     H'0003'
Z                            EQU     H'0002'
DC                           EQU     H'0001'
C                            EQU     H'0000'


;==========================================================================
;
;       Configuration Bits
;
;==========================================================================

_BODEN_ON                    EQU     H'3FFF'
_BODEN_OFF                   EQU     H'3FBF'
_CP_ALL                      EQU     H'03FF'
_CP_75                       EQU     H'17FF'
_CP_50                       EQU     H'2BFF'
_CP_OFF                      EQU     H'3FFF'
_DATA_CP_ON                  EQU     H'3EFF'
_DATA_CP_OFF                 EQU     H'3FFF'
_PWRTE_OFF                   EQU     H'3FFF'
_PWRTE_ON                    EQU     H'3FF7'
_WDT_ON                      EQU     H'3FFF'
_WDT_OFF                     EQU     H'3FFB'
_LVP_ON                      EQU     H'3FFF'
_LVP_OFF                     EQU     H'3F7F'
_MCLRE_ON                    EQU     H'3FFF'
_MCLRE_OFF                   EQU     H'3FDF'
_ER_OSC_CLKOUT               EQU     H'3FFF'
_ER_OSC_NOCLKOUT             EQU     H'3FFE'
_INTRC_OSC_CLKOUT            EQU     H'3FFD'
_INTRC_OSC_NOCLKOUT          EQU     H'3FFC'
_EXTCLK_OSC                  EQU     H'3FEF'
_LP_OSC                      EQU     H'3FEC'
_XT_OSC                      EQU     H'3FED'
_HS_OSC                      EQU     H'3FEE'

  __CONFIG        _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC

      ORG    0
      GOTO   Beginn

DELAY_ROUTINE   MOVLW   D'250'         ;54 Generate approx 10mS delay at 4Mhz CLK
                MOVWF   TIMER2
DEL_LOOP1       MOVLW   D'250'         ;60  
                MOVWF   TIMER1
DEL_LOOP2        DECFSZ  TIMER1,F
                GOTO    DEL_LOOP2
                DECFSZ  TIMER2,F
                GOTO    DEL_LOOP1
        RETLW   0

Beginn      MOVLW  B'00000111'  ;Disable Comparator module's
        MOVWF  CMCON
      ;
        BSF    STATUS,RP0  ;RegBank 1 einschalten
        MOVLW  B'11010111'  ;Timer: Pull-Up; Flanke; Interner Takt; fallende Flanke; Timer0; durch 256 .
        MOVWF  OPTION_REG  ;Write the OPTION register.
      ;
        CLRF  INTCON    ;Disable interrupts
        MOVLW  B'11111101'
        MOVWF  TRISB    ;RB1ist Ausgang 
        
        BCF    STATUS,RP0  ;RegBank 0 einschalten

E2        bsf    PORTB,1
        CALL  DELAY_ROUTINE
        CALL  DELAY_ROUTINE
        bcf    PORTB,1
        CALL  DELAY_ROUTINE
        GOTO  E2
end

Autor: Sabine Mühller (zizo)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ich habe der interne Oscillator verwendet. Was meinst du mit 
Resetschaltung?

Autor: juppi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rene B. (yob) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rene B. (yob) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sabine Mühller (zizo)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Rene B. (yob) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die hilfe

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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???

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: was-willst-du (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes (Gast)
Datum:
Angehängte Dateien:

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

Autor: Johannes (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das war der Alte schaltplan hier ist der neue

Autor: Erich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist eine Datei mit Extension  .SchDoc  ???

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube da fehlt der y-Kondensator zwischen Pin 12 und 8.

Autor: Johannes (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Weis jemand ob ich VDD und VSS mit AVdd und AVss so verbinden darf.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.