Forum: Mikrocontroller und Digitale Elektronik Doppelbelegung an PIC 16F690


von gordon51freeman (Gast)


Lesenswert?

Hallo Zusammen.
Seit neuestem versuche ich mich an den PIC's, da ich ich finde, dass das 
Beherrschen der Programmierung dieser uC so seine Vorteile mit sich 
bringt.

Ich habe nun aber eine Frage zur Doppel-/ resp. Dreifachbelegung des 
16F690.
Auf dem Datenblatt (Seite 4) lese ich, dass die 2 Eingänge für den 
externen Quarz auch als normale I/O Pins verwendet werden können.. Wie 
soll das den funktionieren?

MFG
Gordon

von Lehrmann M. (ubimbo)


Lesenswert?

Stichwort Configbits. Je nachdem welche Taktquelle du auswählst, stehen 
dir die Pins zur Verfügung oder eben nicht. Wenn du internen Oszillator 
wählst, hast du die IOs, wenn du ext. Quarz nimmst halt nicht.

von gordon51freeman (Gast)


Lesenswert?

Ach so..
Habe bis jetzt mit Prozessoren von SilLabs und Keil uV gearbeitet da 
geht die ganze Portinitialisierung etwas anders..
Wenn ich also PortA konfigurieren will, so dass alle Bits (ausser 4 und 
5) Ausgänge sind, dann nehme ich einfach "TRISA = 0b.0001.1000"  ?
Oder beeinträchtigt das den Clockeingang?

Bin ehrlich gesagt etwas überfordert mit dem MPLAB..

von Alex B. (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite


Lesenswert?

gordon51freeman schrieb:
> "TRISA = 0b.0001.1000"

Korrekt. Solange du nicht in einem der Config-Register die beiden 
CLK-Pins auf "GPIO" umstellst kannst du aber genauso gut auch TRISA = 
0b.0000.0000 schreiben (die Konfiguration als CLK-I/O hat eine höhere 
Priorität als die Konfiguration der Datenrichtung bei GPIO).

Gruß,
Alex

P.S. Für alle Atmel-Anhänger: Beim PIC steht 0 in der datadirection für 
output, 1 für input.

von Stefan (Gast)


Lesenswert?

Du mußt den Clockeingang auf interner Oszillator
stellen, sonst kommt da der externe Quarz dran.
Und kannst die Ports nicht für Ausgänge benutzen.

von gordon51freeman (Gast)


Lesenswert?

Danke @ Alex Bürgel so was wollte ich hören :)
D.h. ich muss den Quarzeingang auch noch setzen?
Oder kann ich mir das sparen?

von Michael S. (rbs_phoenix)


Lesenswert?

Lehrmann Michael schrieb:
> Je nachdem welche Taktquelle du auswählst, stehen
> dir die Pins zur Verfügung oder eben nicht.

richtig

Lehrmann Michael schrieb:
> Wenn du internen Oszillator
> wählst, hast du die IOs, wenn du ext. Quarz nimmst halt nicht.

Nicht ganz richtig bzw. nicht zwingend. Du kannst auch den Internen 
Oscillator nehmen und den CLKOUT als Clock-Out benutzen, dass dort halt 
der Interne Oscillator dran hängt.


gordon51freeman schrieb:
> Wenn ich also PortA konfigurieren will, so dass alle Bits (ausser 4 und
> 5) Ausgänge sind, dann nehme ich einfach "TRISA = 0b.0001.1000"  ?

Bedenke, du hast da zwar das 4. und 5. Bit als Eingang gesetzt. Es ist 
aber PORTA.3 und PORTA.4, da das alles von 0 bis 7 geht und nicht von 
1-8.

Dazu bedenke die "PIC-Falle", dass PORTA.4 ein open-Drain PIN ist.


Alex Bürgel schrieb:
> Beim PIC steht 0 in der datadirection für
> output, 1 für input.

Find ich persönlich auch besser, da die Null aussieht wie ein O und die 
Eins wie ein I^^


gordon51freeman schrieb:
> D.h. ich muss den Quarzeingang auch noch setzen?

Wie meinst du das mit setzen? Wenn du einen Externen Quarz dranmachen 
willst, musst du bei der Config HS oder dementsprechendes auswählen. 
Wenn nicht, musst du gucken ob du die Pins als IO brauchst. 
Dementsprechend musst du dann die Config nehmen.

von gordon51freeman (Gast)


Lesenswert?

Oke das war jetzt ziemlich viel Antwort, danke dafür erstmal.
Ja, das mit dem bit 3 -> Pin 4 ist mir natürlich bewusst, habe mich 
vielleicht etwas ungünstig ausgedrückt.

Kennst du grade den Befehl für die Config des Quarzes? ich habe noch 
nicht sooo den Durchblick mit den ganzen Registern..

von Michael S. (rbs_phoenix)


Lesenswert?

In was programmierst du denn? C, ASM, oder noch was anderes?
Und als was willst du das benutzen. Internen Oscillator mit beiden PINS 
als IO? Wenn du einen Quarz benutzen willst, welche Frequenz. Oder doch 
ein RC-Glied?

edit: Hier übrigends die Liste, wie der Oscillator gewählt wird:
111 = RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on 
RA5/OSC1/CLKIN
110 = RCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on 
RA5/OSC1/CLKIN
101 = INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin,
I/O function on RA5/OSC1/CLKIN
100 = INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin,
I/O function on RA5/OSC1/CLKIN
011 = EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN
010 = HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and 
RA5/OSC1/CLKIN
001 = XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and 
RA5/OSC1/CLKIN
000 = LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and 
RA5/OSC1/CLKIN

von gordon51freeman (Gast)


Lesenswert?

Ich programmiere in C.
Danke, die Liste habe ich bereits gefunden habe auch schon das OSCCON 
Register gesetzt.
Ich habe einen externen Oszillator angeschlossen (Quarz) mit 6Mhz.
Die beiden Pins brauche ich nicht ich will nur den Oszillator daran 
angeschlossen haben.

EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN

habe ich gewählt ich weiss jedoch nicht, wie ich das "CONFIG" register 
zu setzen habe das im Datenblatt beschrieben wird?
Im Header File ist dieses Register nicht zu finden, obwohl es im 
Datenblatt ausführlich beschrieben wird (S. 195)..

von Frank K. (fchk)


Lesenswert?

gordon51freeman schrieb:

> habe ich gewählt ich weiss jedoch nicht, wie ich das "CONFIG" register
> zu setzen habe das im Datenblatt beschrieben wird?
> Im Header File ist dieses Register nicht zu finden, obwohl es im
> Datenblatt ausführlich beschrieben wird (S. 195)..

Das Config-Register (es können auch mehrere sein), ist ein Wort am Ende 
des Flashes, das geladen wird, noch bevor der Prozessor losläuft. 
AVR-Freunde kennen etwas ähnliches unter dem Begriff "Fuses".

Schau ins Handbuch Deines C-Compilers, wie Du die Konfiguration setzen 
kannst. Das ist von Compiler zu Compiler unterschiedlich. Beim Microchip 
C18 ist es z.B. ein oder mehrere #pragma config, andere haben spezielle 
globale Variablen dafür. Lesen bildet.

fchk

von gordon51freeman (Gast)


Lesenswert?

Oke habe jetzt herausgefunden, dass das config register im main 
aufgeführt werden muss als #pragma config = 0b.***..
Werde mal schauen, was ich da alles brauche und was nicht.

von gordon51freeman (Gast)


Lesenswert?

Ich komme nun doch nicht mehr weiter.
Ich habe leider keine Ahnung, was für den ganz gewöhnlichen Gebrauch 
eines PIC bei der config nötig ist, wenn ich einen externen Quarz 
angeschlossen habe?

bit 13-12 Reserved: Reserved bits. Do Not Use.
bit 11 FCMEN: Fail-Safe Clock Monitor Enabled bit
1 = Fail-Safe Clock Monitor is enabled
0 = Fail-Safe Clock Monitor is disabled
bit 10 IESO: Internal External Switchover bit
1 = Internal External Switchover mode is enabled
0 = Internal External Switchover mode is disabled
bit 9-8 BOREN<1:0>: Brown-out Reset Selection bits(1)
11 = BOR enabled
10 = BOR enabled during operation and disabled in Sleep
01 = BOR controlled by SBOREN bit of the PCON register
00 = BOR disabled
bit 7 CPD: Data Code Protection bit(2)
1 = Data memory code protection is disabled
0 = Data memory code protection is enabled
bit 6 CP: Code Protection bit(2)
1 = Program memory code protection is disabled
0 = Program memory code protection is enabled
bit 5 MCLRE: MCLR Pin Function Select bit(3)
1 = MCLR pin function is MCLR
0 = MCLR pin function is digital input, MCLR internally tied to VDD
bit 4 PWRTE: Power-up Timer Enable bit
1 = PWRT disabled
0 = PWRT enabled
bit 3 WDTE: Watchdog Timer Enable bit
1 = WDT enabled
0 = WDT disabled
bit 2-0 FOSC<2:0>: Oscillator Selection bits
111 = RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on 
RA5/OSC1/CLKIN
110 = RCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on 
RA5/OSC1/CLKIN
101 = INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O 
function on
RA5/OSC1/CLKIN
100 = INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O 
function on
RA5/OSC1/CLKIN
011 = EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN
010 = HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and 
RA5/OSC1/CLKIN
001 = XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and 
RA5/OSC1/CLKIN
000 = LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and 
RA5/OSC1/CLKIN

Kann mir irgendjemand damit weiterhelfen?

von Frank K. (fchk)


Lesenswert?

gordon51freeman schrieb:
> Ich komme nun doch nicht mehr weiter.
> Ich habe leider keine Ahnung, was für den ganz gewöhnlichen Gebrauch
> eines PIC bei der config nötig ist, wenn ich einen externen Quarz
> angeschlossen habe?
>
> bit 13-12 Reserved: Reserved bits. Do Not Use.
steht ja da. Nicht benutzen. Schau im Datenblatt des Prozessors nach, ob 
Du die Bits auf 0 oder 1 setzen musst.

> bit 11 FCMEN: Fail-Safe Clock Monitor Enabled bit
> 1 = Fail-Safe Clock Monitor is enabled
> 0 = Fail-Safe Clock Monitor is disabled
Überwachung des Quarzoszillators auf Ausfall. Kannst Du an lassen -> 1

> bit 10 IESO: Internal External Switchover bit
> 1 = Internal External Switchover mode is enabled
> 0 = Internal External Switchover mode is disabled
siehe Datenblatt, kannst Du auf 1 setzen

> bit 9-8 BOREN<1:0>: Brown-out Reset Selection bits(1)
> 11 = BOR enabled
> 10 = BOR enabled during operation and disabled in Sleep
> 01 = BOR controlled by SBOREN bit of the PCON register
> 00 = BOR disabled
Versorgungsspannungsüberwachung, kannst Du auf 11 lassen

> bit 7 CPD: Data Code Protection bit(2)
> 1 = Data memory code protection is disabled
> 0 = Data memory code protection is enabled
brauchst Du nicht -> 1

> bit 6 CP: Code Protection bit(2)
> 1 = Program memory code protection is disabled
> 0 = Program memory code protection is enabled
brauchst Du nicht -> 1

> bit 5 MCLRE: MCLR Pin Function Select bit(3)
> 1 = MCLR pin function is MCLR
> 0 = MCLR pin function is digital input, MCLR internally tied to VDD
MCLR solltest Du nicht für was anderes benutzen, wenn es nicht unbedingt 
nötig ist -> 1

> bit 4 PWRTE: Power-up Timer Enable bit
> 1 = PWRT disabled
> 0 = PWRT enabled
müßte ich jetzt nachlesen, ich denke, das brauchst Du nicht -> 1

> bit 3 WDTE: Watchdog Timer Enable bit
> 1 = WDT enabled
> 0 = WDT disabled
brauchst Du nicht -> 0

> bit 2-0 FOSC<2:0>: Oscillator Selection bits
> 111 = RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on
> RA5/OSC1/CLKIN
> 110 = RCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on
> RA5/OSC1/CLKIN
> 101 = INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O
> function on
> RA5/OSC1/CLKIN
> 100 = INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O
> function on
> RA5/OSC1/CLKIN
> 011 = EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN
> 010 = HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and
> RA5/OSC1/CLKIN
> 001 = XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and
> RA5/OSC1/CLKIN
> 000 = LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and
> RA5/OSC1/CLKIN
Normaler Quarz: HS -> 010

von gordon51freeman (Gast)


Lesenswert?

Vielen Dank, dass du dir die Zeit genommen hast.
Jetzt funktioniert es wie es sollte :)

MFG
Gordon

von Michael S. (rbs_phoenix)


Lesenswert?

gordon51freeman schrieb:
> Ich habe einen externen Oszillator angeschlossen (Quarz) mit 6Mhz.
> Die beiden Pins brauche ich nicht ich will nur den Oszillator daran
> angeschlossen haben.
>
> EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN

Ab 4 MHz solltest/musst du laut Datenblatt Seite 241 den HS Modus 
nehmen. Ein Quarz wird an beide Pins angeschlossen, also ein beinchen an 
OSC1 und das andere an OSC2. Dazu an jeden Pin ein kleinen Kondensator 
(ca 20pF) und es sollte laufen. Da dein Quarz beide Pins braucht, kannst 
du die beiden Pins als IO vergessen. Der EC Modus ist für eine externe 
Takterzeugung und muss meines wissens ein Rechteck sein. Du kannst mit 
deinem Quarz und ein paar andere Bauteile (u.A. ein Schmitt-Trigger) so 
ein Signal erzeugen, das macht aber ansich keinen Sinn, da mehr 
Bauteile. Wenn du den IO mehr unbedingt brauchst, würde ich eher einen 
größeren Pin nehmen, anstatt solch einer Schaltung (oder gleich den 
internen Oscillator nehmen).
Gut gebrauchen kann man sowas, wenn man einen PIC mit internem 
Oscillator hat und den Clock-Out benutzt, um andere PICs mit dem 
gleichen Clock laufen zu lassen.

Frank K. schrieb:
>> bit 4 PWRTE: Power-up Timer Enable bit
>> 1 = PWRT disabled
>> 0 = PWRT enabled
> müßte ich jetzt nachlesen, ich denke, das brauchst Du nicht -> 1

Da wartet der PIC eine kleine Zeit, damit Vdd und der Takt stabil und 
voll da sind.

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.