VPP, MCLR und VDD

Gast #2419519
Lesenswert?

Hallo Zusammen

Ich hab' ein kleines Problem und zwar:

Ich habe einen PIC16F767 und da geht etwas echt komisches von statten.
Er läuft mit dem internen Oszillator sprich er hat keinen externen 
Quarz, es werden lediglich 3 Outputs benutzt (3 CCP Module) und VDD ist 
an 5V angeschlossen, VSS an GND.
Allerdings blinken die 3 LED's, die damit angesteuert werden,(sehr 
unregelmässig -> manchmal leuchten sie gar nicht) und das obwohl die CCP 
Module ausgeschaltet sind und der Pin einfach auf '1' liegt.
Ich habe die Vermutung, ich habe etwas grundlegendes vergessen in der 
Beschaltung des PIC, den abgesehen von der beschriebenen Beschaltung ist 
der PIC völlig nackt. Eine Beispielbeschaltung habe ich nicht gefunden, 
das Datenblatt hat mich auch nicht wirklich weitergebracht und ich habe 
noch keine grosse Erfahrung bezüglich PIC's.
Nun ist mir folgendes aufgefallen: MCLR ist nur beschaltet, wenn der µC 
programmiert wird, ansonsten ist er nackt. Ich vermute der gehört auch 
noch irgendwie beschaltet, oder täusche ich mich da?

Ich hoffe sehr auf eure Hilfe, denn ich stehe am Rand der Verzweifelung 
:P

MFG
Dave
Gast #2419633
Lesenswert?

> Nun ist mir folgendes aufgefallen: MCLR ist nur beschaltet, wenn der µC
> programmiert wird, ansonsten ist er nackt. Ich vermute der gehört auch
> noch irgendwie beschaltet, oder täusche ich mich da?

Das höngt von der CONFIG ab, ob er als reset fungiert oder als I/O

Poste mal deine Schaltung und Dein komplettes ! Programm
Gast #2419644
Lesenswert?

Also das Programm ist noch sehr sehr knapp :-)
Eig. nur Config und LED einschalten:

#pragma config |= 0b.00.1001.1111.0000 // Config siehe Datenblatt Seite 
170

1
void main()
2

3
{
4

5
OSCCON = 0x45; // Interner Oszillator, 1Mhz    
6
TRISB = 0x00;  // Port B als Ausgang initialisiert
7
TRISC = 0x00;  // Port C als Ausgang initialisiert 
8

9
#define gruen PORTB.3
10
#define blau PORTC.2
11
#define rot PORTB.5
12

13
CCP1CON = 0x00;
14
CCP2CON = 0x00;
15
CCP3CON = 0x00;
16

17

18

19

20
while (1){
21

22

23
blau = 1;
24

25
}
26

27
}
Angehängte Dateien:
Gast #2419649
Lesenswert?

Flo schrieb:
> Pull-up an MCLR.

Ja, das hilft schon mal, Danke!
Nur hab ich jetzt noch ein Problem mit dem Clock irgendwie, der 
Prozessor wird verdammt heiss sobald er etwas zählen soll. (Beispiel: 
a++ -> funktioniert nicht -> Prozessor wird heiss.)

PS: Die X1 - X56 könnt ihr ignorieren, das is nur 'ne Stiftleiste die 
nicht verwendet wird im Moment.
Gast #2419661
Lesenswert?

Noch eine Bemerkung.. der PIC ist ein anderer in der Schaltung, er ist 
jedoch mehr oder weniger Pinkompatibel.

Der einzige Unterschied sind die CCP Register, die beim 767 auf Pin 13, 
Pin 26 und Pin 12 (resp. 24) liegen.
Gast #2419757
Lesenswert?

> OSCCON = 0x45; // Interner Oszillator, 1Mhz

warum hast du dann noch einen Quarz?

> Ich habe ein grundlegendes Problem, dass sich nicht mit einem Stütz-C
> beheben lässt.

Du ahnst gar nicht, was ein fehlends C alles bewirken kann
Gast #2419792
Lesenswert?

Config2 fehlt ganz. (CONFIG bitte im Quellcode besser lesbar, niemand 
will im Datenblatt nachschauen!.  Oder benutze die Klartext anweisungen 
vom Compiler.)

Pins auf Digital einstellen (tipp: ADCFG)

Den PIC sollte auf keinem fall zu warm werden.  Kurzschluss irgendwo?

MCLR beschaltung ist öfters zu finden (auch im Datenblatt 15.3).

Funktioniert die LED Beschaltung auch ohne PIC?
Gast #2419793
Lesenswert?

Also ich habe schon mal nichts gesagt von wegen Feinschliff und so, denn 
es macht sich eine spürbare Änderung bemerkbar. An dieser Stelle: Sorry!

Allerdings will der µC einfach nicht wie ich will, nach kurzzeitiger 
Funktionstüchtigkeit scheint er jetzt Zeitverzögerungen einfach zu 
ignorieren, sprich er läuft sie so schnell durch, dass sie nicht 
bemerkbar sind (auch bei extrem langsamen Quarz (31.25kHz) und sehr 
langer Zählschleife (zählen bis 32'000)..
Woran könnte das liegen?
Gast #2419801
Lesenswert?

PICfan schrieb:
> Config2 fehlt ganz.

Wo ist das Register zu finden? (Suche im DB hatt nichts ergeben.)

PICfan schrieb:
> (CONFIG bitte im Quellcode besser lesbar, niemand
> will im Datenblatt nachschauen!.  Oder benutze die Klartext anweisungen
> vom Compiler.)

Hast Recht, mein Fehler werde das beim nächsten mal machen.

PICfan schrieb:
> Den PIC sollte auf keinem fall zu warm werden.  Kurzschluss irgendwo?

Mit grosser Sicherheit auszuschliessen -> das verwundert mich ja so :P

PICfan schrieb:
> Funktioniert die LED Beschaltung auch ohne PIC?

Eindeutig ja.

PICfan schrieb:
> Pins auf Digital einstellen (tipp: ADCFG)

Habe ich ebenfalls nichts dazu gefunden..?
Gast #2419883
Lesenswert?

> ADCON0 und ADCON1

Stimmt.  Bin gerade am dsPIC33F und da heist es ADCFG.  Sorry.

CONFIG hat beim 16F767 2 addressen. Seite 170 und 171 im Datenblatt.

Welcher Compiler benutzt du?

Nochwas.  Im Main() hast du TRIS definiert, aber den zustand nicht 
(PORTB und PORTC).  d.h. Ausgangspegel ist undefiniert.
Gast #2420056
Lesenswert?

> Im Main() hast du TRIS definiert, aber den zustand nicht
> (PORTB und PORTC).  d.h. Ausgangspegel ist undefiniert.

Richtig, das fehlt noch:

PORTB = 0x00;  // Reset Port B
PORTC = 0x00;  // Reset Port C
Gast #2420270
Lesenswert?

dave_chappelle schrieb:
> Hm die Tipps sind gut gemeint, aber das ist eher Feinschliff.

Ja, das sehe ich ähnlich: Bei deiner Schaltung ist erstmal der 
Grobschliff angesagt.

Frage: Was passiert, wenn du einen verdammt schnell schaltenden Ausgang, 
der mindestens 25 mA ziehen kann (meistens können sie PIC's noch viel 
größere Ströme an ihren Pins schalten!), an einen Kondensator von 2..3 
nF anschließt und dann irgendeine schnelle Pulsfolge auf diesen Ausgang 
gibst?

Denk mal darüber nach, bis es dich nicht mehr wundert, daß man auf dem 
PIC Eier braten kann. Also: zwischen Portpin und Gate der Transistoren 
gehören Entkoppelwiderstände, ich würde mal sagen, 470 Ohm ist gerade 
richtig.

W.S.
Gast #2420272
Lesenswert?

Ja das mit dem Rücksetzen der Ports habe ich natürlich noch gemacht (hat 
einfach Rot, Grün und Blau geleuchtet vorher)
Die anderen Features werde ich mir morgen in Ruhe ansehen, danke erstmal 
für die Hilfe bis hier!
Gast #2420541
Lesenswert?

PICfan schrieb:
> Welcher Compiler benutzt du?

Ich benutze den CC5X Compiler für C.

W.S. schrieb:
> Also: zwischen Portpin und Gate der Transistoren
> gehören Entkoppelwiderstände, ich würde mal sagen, 470 Ohm ist gerade
> richtig.

Oke das nehme ich so zur Kenntnis -> habe ich gemacht.

PICfan schrieb:
> ADCON0 und ADCON1

Habe ich nun auch gemacht.

Also hier mal ein kleines Update
1
#pragma config |= 0b.10.1001.1111.0000 // Config siehe Datenblatt Seite 170
2
#pragma config_reg2 = 0b.11.1111.1111.1101 //Config2 siehe Datenblatt Seite 171
3

4

5

6

7

8

9

10

11
void main()
12

13
{
14

15
OSCCON = 0x4E; // Interner Oszillator, 1Mhz    
16
TRISB = 0x00;  // Port B als Ausgang initialisiert
17
TRISC = 0x00;  // Port C als Ausgang initialisiert 
18
TRISA = 0xFF;  // Port A als Eingang initialisiert
19
ADCON0 = 0x00;
20
ADCON1 = 0x0F;
21

22
#define gruen PORTB.3
23
#define blau PORTC.2
24
#define rot PORTB.5
25

26
CCP1CON = 0x00; //Capture-Compare Modul ausgeschaltet (TEST)
27
CCP2CON = 0x00; //Capture-Compare Modul ausgeschaltet (TEST)
28
CCP3CON = 0x00; //Capture-Compare Modul ausgeschaltet (TEST)
29

30
PORTB = 0x00; //Ausgang auf Low
31
PORTC = 0x00; //Ausgang auf Low
32

33
int counter = 0;
34
int reference = 150; //Zählvariabeln
35

36

37

38
while (1){
39

40

41
gruen = 1;
42

43
while (counter < reference){
44
    counter ++;
45
                    }
46
    counter = 0; 
47

48
gruen = 0;
49

50
while (counter < reference){
51
    counter ++;
52
                    }
53
    counter = 0; 
54

55
}
56

57
}

Und damit niemand nachlesen muss:

CONFIG:
INTERC Oscillator, PORTIO Funtction on OSC1, OSC2
WDT DISABLED
Power Up Times Disabled
MCLR pin Function is MCLR
Brow Out Reset Enabled
In Circuit Debugger Enabled RB6/RB7 are dedicated to the debugger
CCP2 is on RB3
Code Protection off

CONFIG2:
Fail Safe Clock Monitor Enabled
Internal/External Switchover mode disabled
Brown out Reset Software Enable bit enabled

Rest ist read as '1'

OSCCON:
Internal RC is used for system clock
Frequency is stable
Device is running from the primary system clock
Speed: 1Mhz
Gast #2425187
Lesenswert?

A. K. schrieb:
> Wo kommen die 5V her? Sind die wirklich zuverlässig und sauber?

Ja, die 5 Volt kommen vom Tischnetzteil, das vor ca. 3 Jahren gekauft 
wurde und stets zuverlässig funktioniert hat.
Zudem hat eine Betrachtung auf dem DSO einen sehr sehr sehr sehr 
minimalen Rippel ergeben.
Gast #2425239
Lesenswert?

Also das mit den "Schleifen als Verzögerung" ist ziemlich schlecht, 
erstens ist es nicht sehr zuverlässig und zweitens kann es sein dass der 
Compiler die wegoptimiert.

Deshalb:
- entweder die Timer Peripherie im PIC verwenden
- oder eine "Delay" Bibliothek verwenden, müsste der CC5X auch haben 
(bei C18 heißt sie delays.h)
Gast #2427844
Lesenswert?

felix schrieb:
> Also das mit den "Schleifen als Verzögerung" ist ziemlich schlecht,
> erstens ist es nicht sehr zuverlässig und zweitens kann es sein dass der
> Compiler die wegoptimiert.

Wäre auch meine Vermutung gewesen, hat allerdings bestens funktioniert 
mit dem PIC16F690 mit dem selben Compiler :S
Gast #2427852
Lesenswert?

Dann noch 'ne Frage:
Wie kann es sein, dass die Adresse des CONIFG Register im Header-File 
0x0118 ist und im Datenblatt 0x2007? Das Register 0x0118 existiert laut 
Datenblatt gar nicht -> grosse Verwirrung :P
Gast #2447718
Lesenswert?

Kurze Rückmeldung:

Habe es nun doch geschafft. Ob es am neuen µC lag oder an dem einen oder 
anderen anderst gesetzten Bit vermag ich nicht zu sagen hat irgendwann 
einfach funktioniert.

Sollte Interesse bestehen, lade ich natürlich gerne noch Bilder hoch 
wenn ich dann fertig bin inkl. Gehäuse und co. (kann aber noch n 
bisschen dauern :))

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren