21.12.2013 Views

Maskinnära programmering 6B2266

Maskinnära programmering 6B2266

Maskinnära programmering 6B2266

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Antag att vi har 4 MHz kristall och att vi behöver en 750 Hz samplingsklocka (tex för<br />

att uppdatera PWM-signalen). TIMER2:s prescaler är 1/1 och periodregistret<br />

PR2=255. ( Jämför med exemplet Varvtalsratt till LEGO-motorn ). PWMfrekvensen<br />

blir:<br />

10 6 /256 = 3906 Hz. För att få en 750 Hz samplingsklocka måste vi dela<br />

pwmfrekvensen med 5 med postscalern. 3906/5 = 750 Hz.<br />

Programmet kan provas genom att man kontrollerar att har en ton med frekvensen<br />

750/2 Hz på pinne RB0 och att man har en ton med frekvensen 3906 Hz från CCP1<br />

pinnen RB3.<br />

/* pwmclk.c sampleclock 750 Hz with TIMER2 and pwm 3000 Hz */<br />

#include "16F628.h"<br />

#include "int16Cxx.h"<br />

#pragma config |= 0x3ff0<br />

#pragma origin 4<br />

interrupt int_server( void )<br />

{<br />

int_save_registers<br />

if( TMR2IF == 1 ) /* test if it is the TMR2I-interrupt? */<br />

{ /* this time it's obvius that it is! */<br />

PORTB.0 = !PORTB.0; /* togle earphone, 750/2 Hz tone at RB0 */<br />

TMR2IF = 0; /* Reset TMR2IF-flag before leaving */<br />

}<br />

int_restore_registers<br />

}<br />

void main( void )<br />

{<br />

/* the main program */<br />

TRISB.0 = 0; /* RB0 output to earphone */<br />

PORTB.0 = 0;<br />

/* Settings CCP1 PWM-mode */<br />

PR2 = 255;<br />

/* 10 bit startup Duty 0b01111101.0.0 */<br />

CCPR1L = 127; /* startup value */<br />

/* CCP1X = 0 and CCP1Y = 0 later on in CCP1CON */<br />

TRISB.3 = 0; /* CCP1 is output (RB3-pin) 3000 Hz tone */<br />

T2CON = 0b0.0100.1.00;<br />

/* 0, 0100 (1:5 postscale), 1 (TMR2 on), 00 (1:1 prescale) */<br />

CCP1CON = 0b00.0.0.1111;<br />

/* --, 0 (CCP1X), 0 (CCP1Y), 1111 (PWMmode 11xx) */<br />

TMR2IE = 1; /* local enable */<br />

PEIE = 1; /* regional enable */<br />

GIE = 1; /* global enable */<br />

while( 1 ) nop(); /* main program has nothing to do ! */<br />

}<br />

45

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!