Documente Academic
Documente Profesional
Documente Cultură
Dados de 16 bits
Instrues de 24 bits.
Registradores 16 x 16 de uso geral Arquitetura Harvard Modificada
programa
MEMRIA
dados. Permite acesso direto no programa da memria. O espao endereado por um valor de 24 bits oriundos do Contador de Programa (PC) de 16 bits, ou tabela de operao no espao de dados.
FRC Oscilador
PERIFRICOS
#include <dsp.h>
BWRP_WRPROTECT_OFF ) _FSS( RSS_NO_RAM & SSS_NO_FLASH & SWRP_WRPROTECT_OFF ) _FGS( GSS_OFF & GWRP_OFF ) _FOSCSEL(IESO_OFF & FNOSC_PRIPLL) _FOSC( FCKSM_CSDCMD & POSCMD_XT ) _FWDT( FWDTEN_OFF ) _FPOR( FPWRT_PWR128 )
#define
#define
#define #define fractional
PLL 6.25 // Mximo PLL Fos 8000000 // 8MHz oscillator Fcy (Fos*PLL)/2 // Ciclo de Mquina F_SAMPLE 20000 buffer_adc; contador; saida; entrada;
unsigned int
unsigned int
unsigned int
struct{ unsigned BIT0:1; unsigned BIT1:1; unsigned BIT2:1; unsigned BIT3:1; unsigned BIT4:1; unsigned BIT5:1; unsigned BIT6:1; unsigned BIT7:1; }FLAGS_bits;
void Init_Tmr3(void);
void Init_ADC12(void);
void DAC_init(void); void MCP4922_DAC(unsigned int dado_dac, unsigned
char canal_dac);
#define SDI_DAC
#define TRIS_SDI_DAC
#define BT1 #define TRIS_BT1
TRISDbits.TRISD10
#define OUT1
#define TRIS_OUT1
#define DATA_PIN_7 #define DATA_PIN_6
#define DATA_PIN_5 #define DATA_PIN_4 #define TRIS_DATA_PIN_7 #define TRIS_DATA_PIN_6 #define TRIS_DATA_PIN_5 #define TRIS_DATA_PIN_4 #define E_PIN #define RS_PIN #define TRIS_E #define TRIS_RS
LATGbits.LATG13 LATGbits.LATG12 TRISGbits.TRISG15 TRISGbits.TRISG14 TRISGbits.TRISG13 TRISGbits.TRISG12 LATBbits.LATB11 LATBbits.LATB10 TRISBbits.TRISB11 TRISBbits.TRISB10
#define CS_DAC
#define LDAC
#define SHDN #define SCK_DAC #define SDO_DAC #define TRIS_SCK_DAC #define TRIS_SDO_DAC #define TRIS_CS_DAC
#define TRIS_LDAC
#define TRIS_SHDN
LATGbits.LATG9 LATCbits.LATC2 LATCbits.LATC1 LATGbits.LATG6 LATGbits.LATG8 TRISGbits.TRISG6 TRISGbits.TRISG8 TRISGbits.TRISG9 TRISCbits.TRISC2 TRISCbits.TRISC1
// Amostragem controlada pelo Timer // Controle de incio de amostragem: ao fim de // cada converso // Modo de operao 12-bit // No se aplica no modo 12-bit (amostragem // simultnea)
// Incio do Buffer sempre no endereo // Relativo Zero // Controle de Varredura ligado // No se aplica no modo 12-bit
Internas
//AD1CON3 Register AD1CON3bits.ADRC=0; // ADC Clock derivado do Clock do sistema AD1CON3bits.ADCS =7; // ADC Conversion Clock // Tad=(Tcy/2)*(ADCS+1)= (1/8M)*8 = 1us (1MHz) // ADC Conversion Time for 12-bit Tc=14*Tad = 14us // ADC Conversion Time for 10-bit Tc=12*Tad = 12us
//AD1CHS0: A/D Input Select Register AD1CHS0bits.CH0SA=0; AD1CHS0bits.CH0NA=0; // MUXA +ve input selection (AIN0) for CH0 // MUXA -ve input selection (Vref-) for CH0
//AD1CHS123: A/D Input Select Register AD1CHS123bits.CH123SA=0; // MUXA +ve input selection (AIN0) for CH1 AD1CHS123bits.CH123NA=0; // MUXA -ve input selection (Vref-) for CH1
//AD1CSSH/AD1CSSL: A/D Input Scan Selection Register AD1CSSH = 0x0000; AD1CSSL = 0x0002;// Seleo de Bits de Varredura (Scan) AIN0-AIN5: somente // AN1
//AD1PCFGH/AD1PCFGL: Port Configuration Register AD1PCFGL=0xFFFF; AD1PCFGH=0xFFFF; AD1PCFGLbits.PCFG1 = 0; // AN1 como entrada analgica
void Init_Tmr3(void) { T3CONbits.TON = 0; TMR3 = 0x0000; //PRx = (Fcy/Pre Scale) * Tempo //Pre Scaler = 1:1 //Tempo = 1/taxa de amostragem PR3 = Fcy / F_SAMPLE; // Acerta prescaler para freq. de amostragem IFS0bits.T3IF = 0; IEC0bits.T3IE = 0; //Start Timer 3 T3CONbits.TON = 1; }
void DAC_init(void)
SPI2STATbits.SPIEN = 0; SPI2CON1bits.PPRE = 3; SPI2CON1bits.SPRE = 6; SPI2CON1bits.MSTEN = 1; SPI2CON1bits.CKP = 0; SPI2CON1bits.CKE = 0; SPI2CON1bits.SMP = 1; SPI2CON1bits.MODE16 = 1; SPI2CON1bits.DISSDO = 0; SPI2CON1bits.DISSCK = 0; SPI2STATbits.SPIEN = 1; LDAC = 0; Zero) SHDN = 1; Zero) }
// Desabilita controlador SPI // Primary Pre-scale Clock 4:1 // Secondary Pre-scale Clock 1:1 // SPI em modo Master (Gera Clock) // Modo 0,0 - Clock em Idle = 0 // Modo 0,0 - Data em Idle = 0 // Data In amostrado no fim do bit // Modo 16 bit // Pino com Data do controlador SPI // Pino com Clock do controlador SPI // Habilita controlador SPI // Mantem Load DAC em Um (ativo em // Mantem Shutdown em Um (ativo em
void MCP4922_DAC(unsigned int dado_dac, unsigned char canal_dac) { if(canal_dac == 0) dado_dac |= 0x7000; else dado_dac |= 0xF000; CS_DAC = 0; // Inicializa comunicao SPI SPI2BUF = dado_dac; // Dado dado_dac = SPI2BUF; // Leitura do buffer necessria para a limpeza do // bit SPIRBF while(!SPI2STATbits.SPIRBF); CS_DAC = 1; // Finaliza comunicao SPI }
// Limpa o flag de
interrupo OUT1=0; }
TRIS_BT1=1; TRIS_OUT1=0;
DAC MCP4922
for(;;) {
if(FLAGS_bits.BIT0) { if (!BT1)
{ saida=entrada*5; } else { saida=entrada; FLAGS_bits.BIT0=0; } // Ganho 5.
}
} }