Antworten

Einschränkungen: 8 pro Beitrag (8 verbleibend), maximale Gesamtgröße 8,79 MB, maximale Individualgröße 1 MB
Entfernen Sie den Haken der Dateianhänge, die gelöscht werden sollen
Klicken Sie hier oder ziehen Sie Dateien hierher, um sie anzuhängen.
Anhänge und andere Optionen
Verifizierung:
Bitte lassen Sie dieses Feld leer:
Geben Sie die Buchstaben aus dem Bild ein
Buchstaben anhören / Neues Bild laden

Geben Sie die Buchstaben aus dem Bild ein:

Tastenkürzel: Alt+S Beitrag schreiben oder Alt+P für Vorschau

Zusammenfassung

Autor pic18
 - 14.06.2025, 12:44:17 CEST
ich denke der LFINTOSC wird im Sleep-Modus abgeschaltet, wenn kein Watchdog eingeschaltet ist.

18.3 Sleep Mode
The Power-Managed Sleep mode in the
PIC18(L)F1XK22 devices is identical to the legacy
Sleep mode offered in all other PIC microcontroller
devices. It is entered by clearing the IDLEN bit of the
OSCCON register and executing the SLEEP instruction.
This shuts down the selected oscillator (Figure 18-1)
and all clock source status bits are cleared.
Entering the Sleep mode from either Run or Idle mode
does not require a clock switch. This is because no
clocks are needed once the controller has entered
Sleep. If the WDT is selected, the LFINTOSC source
will continue to operate. If the Timer1 oscillator is
enabled, it will also continue to run.
When a wake event occurs in Sleep mode (by interrupt,
Reset or WDT time-out), the device will not be clocked
until the clock source selected by the SCS<1:0> bits
becomes ready (see Figure 18-2), or it will be clocked
from the internal oscillator block if either the Two-Speed
Start-up or the Fail-Safe Clock Monitor are enabled
(see Section 23.0 "Special Features of the CPU"). In
either case, the OSTS bit is set when the primary clock
is providing the device clocks. The IDLEN and SCS bits
are not affected by the wake-up
Autor picass
 - 14.06.2025, 10:05:33 CEST
Kleiner Nachtrag, rsp. kleine Korrekturen zu obigen Darstellungen.
Nach Beginn der ersten "1"-Phase und dem Sprung im Prog nach vorne vor die Sleep-Routine beginnt das Schlummern nicht erst in der nächsten "0"-Flanke des Timers, sondern natürlich schon in der noch anliegenden "1"-Flanke. Und dann: die Bezeichnung "ca. 26 Cycles" steht sinnbildlich nur für die dafür notwendige Zeit. Tatsächlich wird in der Schlummerphase ja gerade nichts "gecycled", jedenfalls nichts Programm-Mäßiges.
Jetzt könnte man noch drüber grübeln, ob während der Schlummerphase tatsächlich auch der interne Oszi gestoppt wird und sich quasi per Schalter-Umlegen von jetzt auf gleich wieder in Betrieb nehmen lässt, oder ob der Interne immer durch läuft. Vom Ergebnis nach außen hin ist es egal, aber falls jemand da was weiß....?
Grüße, picass
Autor picass
 - 13.06.2025, 18:40:52 CEST
Der Rechteckgenerator ließ sich echt einfach erstellen: es gibt ja den guten, alten LM555. Der kann auch im Micro-Sekunden-Bereich!
Und nu' isses amtlich: Der PIC18F14K22 in seiner Einstellung auf den LFINTOSC, also den laaaangsamen internen Oszi, kommt extrem jählings aus dem Schlummermodus ans Laufen. Er braucht dafür keine 1.024 Takte, er braucht auch keine 20 Takte, er braucht nix Takte: auf die Plätze und schon ist er ein gutes Dutzend Cyclen weiter!

Die Testanordnung: Der PIC "rennt" mit 31.250 Herz! Der LM555 erzeugt eine astabile 1:1 Rechteck-Impulsfolge. Eine positive Flanke triggert den INT2 des PIC, also den Interrupt an Port A,2 . Im Prog wird dann der IRQ wie üblich ausgeschaltet, eine LED eingeschaltet, ein paar NOPs folgen, um auf 6 Cyclen zu kommen und dann gehts im Programm ab nach vorne und direkt vor die Schlummer-Routine. Erst die LED aus, dann - is klar - den IRQ enablen und in der "0"-Flanke des LM555 hebt das Schlummern an....., bis zu dessen positiver Flanke. Und das ist dann die Schleife.
Hat super geklappt. Auch Grundlagen-Forschung - hüstel, wenn der Ausdruck erlaubt ist - kann Spass bereiten.
Grüße, picass
wakeup1.jpgwakeup2.jpgwakeup3.jpgwakeup.txt
Die LED-"1"-Zeit ergibt genau 6 Cyclen.
Autor picass
 - 12.06.2025, 11:47:11 CEST
@Cobra
Hatte gerade schon ein feine Skizze erstellt, welche die Einbettung einer Sleep- und deren Aufwachzeit in den Takt eines externen Taktgenerators anzeigte. Mithilfe von einer LED, die am Anfang und nach dem Ende des Schlummmerns gesetzt, bzw. gelöscht würde, könnte auf einem Oszi dann die Zeit für das Aufwachen heraus gefiltert werden. Das würde auch funktionieren. Aber..... dann kam mal wieder ein Blick ins Datenblatt und nu' schätze ich die Situation anders ein.
Deine abgebildeten ersten 3 Zeilen gehören zu den Ausführungen über das "Clock-Switching". Dazu gehört auch eine Abhandlung über "Two-Speed Start-up-Mode". Letzteres beschreibt diese Situation: Ein PIC wird mit externem Oszi (z.B. Quarz) betrieben und es soll aus Stromspargründen gelegentlich der Sleepmodus benutzt werden. Andererseits ist Zeit kostbar und die 1.024 Takte, welche nach dem Aufwecksignal fällig werden, um wieder auf full-speed zu kommen, sind zu kostbar, um ungenutzt zu bleiben. Also wurde der "2-Geschwindigkeiten Startmodus" erfunden. Und das geht nach dessen Konfigurierung so: nach dem Schlummer versucht sich der High-Speed-Takt mit dem Warmlaufen über 1.024 Takte, aber trotzdem wird sofort nach dem Ende des Schlummers die reguläre Programmausführung begonnen, indem auf den Takt des internen Oszis, des LFINTOSC, umgeschaltet wird, also der mit seinen 31.250 Hz. Mit diesem "Handbremsen-Takt" wird also vollwertig das Programm wieder aufgenommen und sobald diese 1.024-Takt-Zeit rum ist, wird umgewitscht auf den rasenden, externen Takt. Tolle Technik.

Das kann aber selbstredend nur dann funktionieren, wenn der interne Oszi nach dem Sleepen nicht auch 1.024 Takte oder ähnlich benötigt. Aber der ist nach dem Sleepen offenkundig komplett da und voll einsetzbar. Langer Rede, kurzer Sinn: der LFTINTOSC hat demnach mit einer Aufweckzeit nichts am Hut, der muss entsprechend immer durchlaufen oder aber ist nach einem eigenen Stopp sofort wieder am Werk - aus einem Diagramm könnte man, wenn man so will, exakt 4 Takte, also einen Cyclus raus lesen an Verzögerung, rsp. Syncronisation.
Ob ich das mit dem oben angesprochen Test noch ausführe, hängt davon ab, ob sich einfach und schnell ein Rechteckgenerator mit 32 µS Taktzeit bauen lässt. Aber erst mal gehe ich davon aus, dass diese Aufweckzeit für den LFINTOSC nicht gilt.
Grüße, picass
Autor picass
 - 11.06.2025, 17:12:12 CEST
Ach, Cobra, ach..... du wirst weiter hoffen müssen!

So wie ich das interpretiere, gibt das wieder nur einen eindeutigen Hinweis auf die Start-up-time des externen Oszis.

Vielleicht gibt es ja die Möglichkeit, eine kleine Testroutine zu erstellen, welche das Aufwachen aus Schlummer in einer Schleife und in definierten Abständen immer erneut auslöst, sodass man mit einem Oszi die Chance hätte, aus dem "0" / "1" - Gewimmel was raus zu lesen. Vielleicht einen Timer-Interrupt auslösen. Räusper...., hatte ich noch nicht. :-[ Naja, danke fürs Erste.
Grüße, picass
Autor ^Cobra
 - 11.06.2025, 14:04:37 CEST
Hi picass
habe im Datenblatt des 18F1XK22 das gefunden: (Seite 21)

Sleep/POR LFINTOSC
HFINTOSC
Oscillator Warm-up Delay (TWARM )

und dann gaaaaaaanz unten auf seite 342
Wake-up from Sleep Start-up Time 5us typisch  8us max bei  VDD = 2.0V, -40°C to +85°C
gilt aber auch so bei VDD 5V
musst also mit 8 us gerechnen. 
Wobei dann noch die Frage ist ob du ein PowerON reset usw. aktiv hast. 
übrigens steht da auch sowas nettet:
* These parameters are characterized but not tested.

Hoffe hilft dir bisschen weiter.
Autor picass
 - 11.06.2025, 11:40:21 CEST
Wärme diesen Fred wieder auf, weil es themenmäßig hier so perfekt reinpasst.
Aktuell ging es "eigentlich" um das Entprellen eines Schalters, tatsächlich wichtig ist letztlich aber die Aufweckzeit aus dem Schlummer-Modus - im Datenblatt als "wake-up from sleep" genannt, wenn der fraglich PIC nicht im externem Oszillator befeuert wird, sondern mit internem Oszi. Da kommen dann wieder meine geliebten 31,5 kHz ins Spiel, welcher der LFINTOSC - also der Low-Frequency Internal Oszillator - ermöglicht.

Bei externem Oszi werden 1.024 Schwingungen z.B. des Quarzes nötig zum Aufwachen. Wie isses nun bei dem LFINTOSC ? Ist der etwa beim Wechsel des digitalen Signals eines Portpins von jetzt auf gleich zur Aufnahme seiner weiteren Programm-Abarbeitung in der Lage? Im Datenblatt kann ich da nichts finden.
Hauptgrund für die Anfrage ist tatsächlich nicht die Entprell-Übung eines Schalters, sondern die im Moment vorliegende Nicht-Übernahme des Portzustandes, welcher geweckt hatte. Anders gesagt: wenn mehrere Weckereignisse möglich sind wie z.B. Wecken an mehreren Portpinnen, dann muss der Port abgefragt werden (z.B. movf PORTA,0 und movwf WECKER). Dieses Abspeichern des Port-Status in eine Variable klappt nicht, obwohl es der Sprut z.B. genauso auch getan hatte. Aber bitte erst die Frage der Aufweckzeit für den LFINTOSC beantworten.
Grüße, picass
Autor ^Cobra
 - 02.04.2023, 14:07:20 CEST
Ah da was mein Fehler Danke 
Autor PICkel
 - 02.04.2023, 13:28:25 CEST
Passt schon:

Überschlagsrechnung mit glatt 10MHz (nicht mHz= Millihertz!):
1 MHz:  1us/Schwingung
10 MHz: 0,1us/Schwingung

OST zählt 1024 Schwingungen ab: 0,1 us*1024 = 102,4us = ca. 0,1ms

Gruß
PICkel
Autor ^Cobra
 - 02.04.2023, 13:17:42 CEST
Ich lese mir das durch und denke, kann ich (mal wieder) nicht rechnen?
Eine Schwingung ist doch bei 10,24mhz
1/10240000 =0,00000009765625s

Das in sind doch dann 0,00009765ms und somit 0,09765us.

Was habe ich übersehen, nicht verstanden? 
🡱 🡳