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
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 | }
|
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.
Und wo ist der/die Stützkondensator/en? -> 100nF Kerko direkt am µC, ein größerer Elko bei den LEDs. Gruß Dietrich
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
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.
> 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.
> 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 ?
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..?
> tipp: ADCFG
ADCON0 und ADCON1
CONFIG steht unter "special features of the cpu"
> 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 | 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
Und noch n Update von der Schaltung.. ich hab das Gefühl ich steh irgendwo wirklich voll auf der Leitung.
Kann mir wirklich niemand helfen? Ihr seid wirklich ein bisschen meine letzte Hoffnung.
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 :))
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.