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
> 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
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
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.
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.
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?
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
> 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
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.
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?
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?
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..?
> 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.
> 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
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.
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!
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
voidmain()
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
intcounter=0;
34
intreference=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
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.
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)
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
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
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 :))