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
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.
ich habe WatchDogTimer beim Configuration und durch das Befehl Sleep ausgeschaltet, aber es ist nichts passiert. LED leuchtet imer weiter,blinkt nicht
ersetze das nop durch ein clrwdt mach den Test, da ich immer noch der Meinung bin, daß es ein WDT Problem is.
Sonst, wenn es nicht der WDT ist, bist du sicher, daß du die Led an Pin B1 angeschlossen hast ?
habe Dein Programm gerade auf nem 16F627A probiert. Klappt wunderbar! Nur die Includedatenen auf 16F627A geändert. Langes an, Kurzes aus
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
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.
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.
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
|
ich habe der interne Oscillator verwendet. Was meinst du mit Resetschaltung?
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?
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
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.
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?
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.
> ... 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.
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?
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.
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???
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?
>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.
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
Kann mir jemand bei meiner Schaltung helfen ich habe ein paar fehler weis aber nicht wie ich sie lösen soll.
Ich glaube da fehlt der y-Kondensator zwischen Pin 12 und 8.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.