Forum: Mikrocontroller und Digitale Elektronik VPP, MCLR und VDD


von dave_chappelle (Gast)


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

von 767 (Gast)


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

von Flo (Gast)


Lesenswert?

Pull-up an MCLR.

von dave_chappelle (Gast)


Angehängte Dateien:

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
}

von dave_chappelle (Gast)


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.

von dave_chappelle (Gast)


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.

von Torsten S. (torstensc)


Lesenswert?

Wie groß ist R5 bis R7 ?

von dave_chappelle (Gast)


Lesenswert?

Oh, ganz vergessen den Wert anzugeben.
Die sind alle 10k.

von Dietrich L. (dietrichl)


Lesenswert?

Und wo ist der/die Stützkondensator/en?
-> 100nF Kerko direkt am µC, ein größerer Elko bei den LEDs.

Gruß Dietrich

von dave_chappelle (Gast)


Lesenswert?

Dietrich L. schrieb:
> ein größerer Elko bei den LEDs.

Weshalb?

Also mein Problem ist: Der µC scheint keinen Taktgeber zu haben, ist der 
falsch initialisiert oder habe ich sonst was falsches gemacht?

von Dietrich L. (dietrichl)


Lesenswert?

dave_chappelle schrieb:
>> ein größerer Elko bei den LEDs.
>
> Weshalb?

Die LEDs sind die größten Stromverbraucher, da gibt es beim Schalten 
große Stromänderungen. Das sollte ein Elko zwischen +5V der LEDs und 
Source der FETS abpuffern. Eine Entkopplung der +5V des µC wäre auch 
nicht schlecht (kleiner Widerstand, Drossel).

Gruß Dietrich

von dave_chappelle (Gast)


Lesenswert?

Hm die Tipps sind gut gemeint, aber das ist eher Feinschliff.
Ich habe ein grundlegendes Problem, dass sich nicht mit einem Stütz-C 
beheben lässt.

von 767 (Gast)


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

von dave_chappelle (Gast)


Lesenswert?

767 schrieb:
> warum hast du dann noch einen Quarz?

Zum testen, ist jetzt wieder abgehängt.

Also ein 100nF C zwischen VDD und VSS?
Hm ist aber schon seltsam, dass der µC kurzzeitig so heiss wird, dass 
man darauf etwas kochen könnte.

von 767 (Gast)


Lesenswert?

> Also ein 100nF C zwischen VDD und VSS?

http://www.mikrocontroller.net/articles/AVR_Checkliste#Abblockkondensator.28en.29_ordnungsgem.C3.A4.C3.9F_installiert.3F

Das gilt für ALLE µC-Schaltungen, auch für PIC, TTL, CMOS ...

> Hm ist aber schon seltsam, dass der µC kurzzeitig so heiss wird, dass
> man darauf etwas kochen könnte.

funktioniert jetzt Deine Blinkerei ?

von PICfan (Gast)


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?

von dave_chappelle (Gast)


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?

von dave_chappelle (Gast)


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..?

von 767 (Gast)


Lesenswert?

> tipp: ADCFG

ADCON0 und ADCON1

CONFIG steht unter "special features of the cpu"

von PICfan (Gast)


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.

von usuru (Gast)


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

von W.S. (Gast)


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.

von dave_chappelle (Gast)


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!

von dave_chappelle (Gast)


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

von dave_chappelle (Gast)


Angehängte Dateien:

Lesenswert?

Und noch n Update von der Schaltung.. ich hab das Gefühl ich steh 
irgendwo wirklich voll auf der Leitung.

von dave_chappelle (Gast)


Lesenswert?

Kann mir wirklich niemand helfen?
Ihr seid wirklich ein bisschen meine letzte Hoffnung.

von (prx) A. K. (prx)


Lesenswert?

Wo kommen die 5V her? Sind die wirklich zuverlässig und sauber?

von dave_chappelle (Gast)


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.

von felix (Gast)


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)

von dave_chappelle (Gast)


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

von dave_chappelle (Gast)


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

von dave_chappelle (Gast)


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 :))

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.