CLC- Programmierung

Begonnen von PICkel, 07.05.2023, 15:23:40 CEST

Vorheriges Thema - Nächstes Thema

PICkel

Es gibt eine Reihe von PICs mit "Configurable Logic Cell" (CLC), und ich wollte schon lange mal damit experimentieren.

Der große Vorteil dieser CLCs ist, dass sie unabhängig vom Prozessortakt arbeiten (z.B. bis 45MHz beim PIC16F1503 und beim PIC16F1713), ohne dabei Programmlaufzeit zu beanspruchen.

Als Einstieg habe ich ein CLC-Modul als D-FlipFlop für einen Frequenzteiler 1:2 konfiguriert. Zur Verfügung standen ein PIC16F1503 (2xCLC) und ein 16F1713 (4xCLC), die Wahl fiel auf den 16F1713 wegen der umfangreichen Möglichkeiten der Pinzuordnung (Peripheral Pin Select / PPS).

Zur Funktion: Der Takteingang ist an PORTA.4, der per D-FF 1:2 heruntergeteilte Takt wird an PORTA.0 ausgegeben. Zusätzlich wird der invertierte Ausgangstakt (CLC1OUT) zurückgeführt an GATE2.
Das uC-Programm besteht eigentlich nur aus dem Setzen der ANSEL- und TRIS-Register sowie diverser CLC-Register. Danach geht es in eine Dauerschleife ohne weitere Aktivitäten und könnte genausogut in den SLEEP-Modus versetzt werden.

Im Anhang findet Ihr 2 Bilder: Die CLC-Konfiguration "CLC_D_FF_Teiler_1zu2.jpg" und einen Screenshot vom Ein- und Ausgangssignal an RA4 und RA0.
Weiterhin ein zip-File mit "CLC_D_FF_Teiler_1zu2.bas", das man in den CLC Designer laden kann und das dazugehörige mikroBASIC- Programm "CLC_D_FF.mbas" sowie ein Makro für DigitalWorks.

Und wer das Simulationstool "DigitalWorks" installiert hat, kann mal die Datei "Teiler_mit_D-FF.dwm" laden, welche o.g. Funktion simuliert. Mit "Run" oder Taste "F9" wird die Simulation gestartet.

Viel Spaß beim Ausprobieren!

PICkel
(Bald gibt's noch ein CLC-Beispiel für eine Encoder- Auswertung)

CLC_D_FF_Teiler_1zu2.jpg    D_FF_Teiler_1zu2.jpg    Teiler_mit_D-FF.zip   

Peter

Interessant. Habe es direkt mal heruntergeladen.
Werde damit mal ein paar Versuche machen und schauen wie man damit
zurechtkommt. Direkt mal in MikroBasic einbinden. Mal schauen ob ich einen
geeigneten Controller noch habe.
Hinter leg den Link doch in der Link-Sammlung. Dann findet ihn jeder direkt.




PICkel

Hallo,

nach der ersten Beschäftigung mit CLC als Frequenzteiler wird es Zeit, ein interessanteres Thema anzugehen: Die Abfrage eines Quadratur- Encoders. Das habe ich bisher schon mehrmals erfolgreich als reine Softwarelösung mittels zyklischer Abfrage (Polling) realisiert. Eine Lösung mit CLC ist aber effektiver, weil bei dieser Lösung die Encoder- Abfrage quasi "nebenbei" erfolgt. Man kann zwar auch per Interrupt einen Pegelwechsel am Encoder-Pin A detektieren und die Drehrichtung softwaremäßig feststellen, mit der CLC-Lösung erhält man aber sofort die Angabe der Drehrichtung.
Die Konfiguration erfolgte wieder mit Hilfe des CLC- Designers.
Die Bilder der CLC-Konfiguration und die Beschaltung des Encoders seht Ihr auf den Bildern. Dazu das Konfigurationsfile für den CLC-Designer Rotary_Encoder_16F1713.bas und das mikroBASIC-Programm Encoder.mbas im ZIP-File.
Damit die Beschreibung nicht den Rahmen dieses Beitrags sprengt, befindet sich für alle, die es interessiert, ein ausführlicher Text in der Anlage.

Gruß
PICkel

Encoder_CLC1.jpg  Encoder_CLC2.jpg  Schaltung.png
Auswertung Quadraturencoder.pdf
Encoder.zip


PICkel

Anmerkung, bitte beachten:
Habe gerade gemerkt, dass ich in Encoder.mbas schon CLCxCON von 0x95 auf 0x9D (steigende und fallende Flanke) geändert habe. Siehe PDF ganz unten.
Die Konfigurationsdatei Rotary_Encoder_16F1713.bas enthält noch die Einstellung für den Interrupt nur auf die steigende Flanke. 

PICkel

Schnellantwort

Achtung: In diesem Thema wurde seit 120 Tagen nichts mehr geschrieben.
Wenn Sie nicht absolut sicher sind, dass Sie hier antworten möchten, starten Sie ein neues Thema.

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