Tip: PWM als externe klok

4 replies [Last post]
jdemeyer
Offline
Member since: 2009-10-27

Als je een IC op je Dwengo-bord wil aansluiten die een klok nodig heeft, dan kan je de PWM-uitgang gebruiken van de PIC om die klok te genereren. Je kiest dan altijd voor een PWM met een "duty cycle" van 50%. De PWM-module kan klokken genereren met een frequentie die een deler is van 12MHz, dus bv. 12MHz, 6MHz, 4MHz, 3MHz, 2.4MHz,... We gebruiken de PWM-functionaliteit die ingebouwd is in de PIC, we hebben dus geen interrupts of zo nodig.

De PWM-periode is een veelvoud van Tcy, de periode waarmee instructies uitgevoerd worden op de PIC. Op het Dwengo-bord is Tcy=4/(48MHz)=1/(12MHz)=83ns. De tijd dat het PWM-signaal op "aan" staat kan uitgedrukt worden in veelvouden van 0.25Tcy, het is dus mogelijk om een PWM-signaal te maken dat 0.5Tcy "aan" is en 0.5Tcy "uit" is. Dit geeft dan een klok van 12MHz.

In de onderstaande code gebruiken we de CCP1-module, met uitgang op RC2. De periode van de PWM wordt geregeld door Timer2, de periode is (1+PR2)*Tcy (als we de 1:1 prescaler gebruiken). De "aan"-tijd is CCPR1L*Tcy + (bits 5:4 van CCP1CON)*Tcy/4.

Volgende code zorgt ervoor dat er een 12MHz klok op uitgang RC2 komt:

  1. TRISC = 0; // Configureer poort C als uitgang (in principe is enkel RC2 nodig)
  2. PR2 = 0; // Periode = 1Tcy
  3. CCPR1L = 0; // Aan-tijd = 0Tcy
  4. CCP1CON = 0b00101100; // Zet CCP1 in PWM-mode en voeg 0.5Tcy toe aan de aan-tijd
  5. T2CON = 0b00000100; // Schakel timer 2 in, vanaf nu begint de PWM

Voor klokken met frequentie 12MHz/(2*n+1) wordt dit:

  1. TRISC = 0;
  2. PR2 = 2*n;
  3. CCPR1L = n;
  4. CCP1CON = 0b00101100;
  5. T2CON = 0b00000100;

Voor klokken met frequentie 12MHz/(2*n):

  1. TRISC = 0;
  2. PR2 = 2*n-1;
  3. CCPR1L = n;
  4. CCP1CON = 0b00001100;
  5. T2CON = 0b00000100;
Karel
Offline
Member since: 2009-04-17

Dag Jeroen

Welk IC wil je aansluiten?

Karel

jdemeyer
Offline
Member since: 2009-10-27
Karel
Offline
Member since: 2009-04-17

Ziet er tof uit. Zou je dan de MCLK genereren met PWM-module en de LRCK met behulp van een timer?

jdemeyer
Offline
Member since: 2009-10-27

MCLK met PWM
SCLK van de EUSART-module (seriële poort).
LRCK met een teller vertrekkend van SCLK

of zoiets, ik heb het nog niet volledig uitgewerkt...