Tip: PWM als externe klok
- login of registreer om te reageren
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:
TRISC = 0; // Configureer poort C als uitgang (in principe is enkel RC2 nodig) PR2 = 0; // Periode = 1Tcy CCPR1L = 0; // Aan-tijd = 0Tcy CCP1CON = 0b00101100; // Zet CCP1 in PWM-mode en voeg 0.5Tcy toe aan de aan-tijd T2CON = 0b00000100; // Schakel timer 2 in, vanaf nu begint de PWM
Voor klokken met frequentie 12MHz/(2*n+1) wordt dit:
TRISC = 0; PR2 = 2*n; CCPR1L = n; CCP1CON = 0b00101100; T2CON = 0b00000100;
Voor klokken met frequentie 12MHz/(2*n):
TRISC = 0; PR2 = 2*n-1; CCPR1L = n; CCP1CON = 0b00001100; T2CON = 0b00000100;

Uw winkelwagen
Deze misschien: http://www.cirrus.com/en/pubs/proDatasheet/CS4334-35-38-39_F5.pdf