PIC18F26J50: Oszillator konfiguration für USB und RTCC (low power)
Mittwoch, 23. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  PIC Mikrocontroller Allgemein  |  Schnittstellen (Allgemein)  |  PIC18F26J50: Oszillator konfiguration für USB und RTCC (low power) « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: PIC18F26J50: Oszillator konfiguration für USB und RTCC (low power)  (Gelesen 1310 mal)
 
Schoasch
Sr. Member
****
Offline Offline

Beiträge: 343



Profil anzeigen
« am: Dezember 05, 2010, 19:03:47 »

Hi,

Ich bastle gerade für meine DSLR einen kleinen Fernauslöser auf der Basis eines PIC18F26J50.
Das ganze soll im normalen Zustand über einen Uhrenquarz, bei möglichst geringer Stromaufnahme (darum ist auch der IR-Empfänger und das LCD abschaltbar),  laufen. Jedoch soll es auch möglich sein, eine neue Firmware über USB runter zu laden.

Jetzt ist mir leider aber bezüglich des Oszillators etwas nicht ganz klar. Im DAtenblatt steht ja, dass der gewählte Chip ja intern einen Oszillator für das USB Modul. Somit sollte es ja möglich sein, dass ich den PIC nur mit dem Uhrenquarz betreibe oder?

Habe ich es Richtig verstanden, dass dann der Uhrenquarz an T1OSO und T1OSI anschliessen muss?
Wie muss ich dann die Fuses setzen, damit das ganze so funktioniert, wie ich es will?

Anbei habe findet ihr den Schaltplan.

Ich hoffe, ihr könnt mir klarheit beschaffen.

mfg
Schoasch


* fernausloeser.png (40.26 KB, 1556x1065 - angeschaut 98 Mal.)
Gespeichert
Coltfisch
Sr. Member
****
Offline Offline

Beiträge: 496



Profil anzeigen WWW
« Antworten #1 am: Dezember 06, 2010, 10:46:31 »

Hi Schoasch,

Zitat von: Schoasch
Im DAtenblatt steht ja, dass der gewählte Chip ja intern einen Oszillator für das USB Modul. Somit sollte es ja möglich sein, dass ich den PIC nur mit dem Uhrenquarz betreibe oder?
Ja, das ist möglich. Zu beachten ist allerdings, dass die Genauigkeit des 8MHz INTOSC nur ausreicht, um die Low-Speed-USB-Spec sicher zu erfüllen, siehe auch Datenblatt:
Zitat von: Datenblatt
When the 8 MHz INTOSC is used with the 96 MHz PLL, it may be used to derive the USB module clock. The high accuracy of the INTOSC will allow the application to meet low-speed USB signal rate specifications.

Zitat
Habe ich es Richtig verstanden, dass dann der Uhrenquarz an T1OSO und T1OSI anschliessen muss?
Genau.

Zitat
Wie muss ich dann die Fuses setzen, damit das ganze so funktioniert, wie ich es will?
Mein Vorschlag:
Code:
PLLDIV = 2    // PLL-Prescaler: Divide by 2 (8 MHz oscillator input) 
OSC = INTOSCPLL // INTOSC with PLL enabled (S/W control), port function on RA6 and RA7, INTOSCPLL used by USB 
CPUDIV = OSC1 // No CPU system clock divide 
T1DIG = ON    // Secondary Oscillator clock source may be selected 
IESO = OFF    // Two-Speed Start-up disabled 
außerdem würde ich nicht den Low-Power-Modus des Timer1-Oszillators verwenden, da es sonst Probleme mit einem inkompatiblen Quarz geben könnte:
Code:
LPT1OSC = OFF // Timer1 oscillator configured for higher power operation

Nach dem Reset wird der PIC mit dem 8 MHz-INTOSC hochfahren, die PLL aber nicht automatisch aktiv sein. Die CPU wird daher mit 8 MHz getaktet werden. Über die SCS-Bits im OSCCON-Register kannst Du dann vom INTOSC auf den Timer1-Quarz umschalten (SCS = 0x01) und somit den den SEC_RUN-Stromsparmodus wechseln. Wichtig ist allerdings, dass der Timer1-Oszillator zu diesem Zeitpunkt bereits läuft! Dazu musst Du das T1OSCEN-Bit im Timer1-Kontrollregister setzen und warten (ein paar Millisekunden), bis der Timer1-Oszillator eingeschwungen ist.

Wenn Du USB verwenden möchtest, musst Du nach dem Reset daran denken die PLL zu aktivieren, damit das USB-Modul (und die CPU) die nötigen 48 MHz erhalten. Dazu das PLLEN-Bit im OSCTUNE-Register setzen und ein paar Millisekunden warten, bevor du das USB-Modul aktivierst.


Zitat
Anbei habe findet ihr den Schaltplan.
Ich habe mir den bislang nur oberflächlich angeschaut, vermisse aber die Abblockkondensatoren am PIC. Zudem wird bei den TSOP1138 ein größerer Kondensator zur Versorgungsspannungsfilterung empfohlen, 4,7 µF meines Wissens nach.
Schlimmer ist allerdings, dass der TSOP1138 auf 5V ausgelegt ist und mit den 3V wahrscheinlich keine brauchbaren Ergebnisse liefern wird. Geeigneter wäre hier ein TSOP348xx.

Gruß
Daniel
« Letzte Änderung: Dezember 06, 2010, 10:55:49 von Coltfisch » Gespeichert
Schoasch
Sr. Member
****
Offline Offline

Beiträge: 343



Profil anzeigen
« Antworten #2 am: Dezember 06, 2010, 23:15:09 »

Hi,

Vielen Dank.

Ich hab in der Eile echt ein paar Fehler rein gebaut  Verlegen. Danke für den Hinweis.

Ob ich nun Full-speed oder low-speed bei USB habe ist mir eigentlich relativ egal. Ich will ja die USB Schnittstelle ja nur fürs Firmware update benutzen (vorerst).
Weist du zufälligerweise ob der Bootloader mit Low-speed zurecht kommt oder ist das im Grunde egal? (Ich hab noch keine USB Erfahrung gemacht)

Warum sollte es denn Probleme mit inkompatiblen Quarzen geben?
Soweit ich das so gelesen habe, kann ich ja den Chip sogar in den Deep Sleep Modus schicken und dabei den Timer 1 laufen lassen. Resetieren tu ich das Gerät ja sowieso nie..bzw nur dann, wenn ich die Batterie wechsel.
Und da ich das Teile ja nur über die Batterie betreiben will, will ich es in den Stromsparensten Modus bringen.
Oder meinst du, dass ich in den unkritischen Schlafphasen den Quarz deaktiviere und den Timer über den internen Oszillator laufen lassen sollte?

Die PLL fürs USB Modul schalte ich dann nur ein, wenn es angeschlossen ist, was ich ja am Pin RC6 erkennen kann (Wobei mir da gerade auffällt, dass ich da einen Pulldown vergessen habe ;-))
Gespeichert
Coltfisch
Sr. Member
****
Offline Offline

Beiträge: 496



Profil anzeigen WWW
« Antworten #3 am: Dezember 07, 2010, 11:07:23 »

Zitat
Weist du zufälligerweise ob der Bootloader mit Low-speed zurecht kommt oder ist das im Grunde egal? (Ich hab noch keine USB Erfahrung gemacht)
Das lässt sich mit Sicherheit anpassen, aber für ein nichtkommerzielles Produkt ist es wohl okay, wenn die USB-Schnittstelle bei Fullspeed vom Timing her nicht 100%ig den USB-Specs entspricht Zwinkernd Wenn es dann zu Verbindungsabbrüchen beim Firmwareupdaten kommt, weißt Du ja woran es liegt...

Zitat
Warum sollte es denn Probleme mit inkompatiblen Quarzen geben?
Der Low-Power-Modus des Timer1-Quarz-Oszillators funktioniert nur problemlos, wenn der angeschlossene Quarz bestimmte Bedingungen erfüllt (CL,... bitte im Datenblatt nachlesen).

Zitat
Soweit ich das so gelesen habe, kann ich ja den Chip sogar in den Deep Sleep Modus schicken und dabei den Timer 1 laufen lassen.
Ja natürlich, das macht absolut Sinn. Bedenke aber, dass beim DeepSleep die Möglichkeiten zum Aufwecken des PICs eingeschränkt sind.

Zitat
Oder meinst du, dass ich in den unkritischen Schlafphasen den Quarz deaktiviere und den Timer über den internen Oszillator laufen lassen sollte?
Das kommt darauf an, ob Du tatsächlich eine RTC benötigst. Wenn nicht, solltest Du im DeepSleep-Modus natürlich alle Taktquellen abschalten -> geringstmögliche Stromaufnahme.

Wenn Du keine genaue RTC benötigst, wirst Du komplett ohne externen Quarz auskommen. Es ist ja auch ein interner RC-Oszillator mit ~31kHz vorhanden, dessen Genauigkeit aber nicht wirklich für eine RTC ausreicht. Dieser kann aber auch im DeepSleep-Modus weiterlaufen.

Wenn Du eine genaue RTC benötigst, solltest Du einen externen Uhrenquarz an Timer1 verwenden. Möglicherweise ist damit aber die Stromaufnahme geringfügig (einige µA) höher, als wenn Du den internen 31kHz-RC-Oszillator verwendest.
Da Dein OpAmp aber bereits konstant ~200µA + X verbraten wird, fällt der zusätzliche höhere Strombedarf eines externen Quarzes wohl nicht ins Gewicht.

An den Pin VDDCORE gehört übrigens ein 10µF Kondensator!!!
Und schau Dir im Datenblatt mal das Kapitel 21.6 "USB Power Modes" an. Willst Du den VUSB-Pin wirklich so verschaltet lassen?  Zwinkernd

Gruß
Daniel
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.036 Sekunden mit 18 Zugriffen.
 
Top! Top!