estoy tratando de generar una señal analógica usando el circuito de foto y dac adjunto Cuando simulo usar Proteus, la señal no hace un ciclo completo. Pensé que la imagen se restablece después de 24 ms, así que hago que el timer0 interrumpa 50u en lugar de 100u, luego la señal se reinicia después de 12us ¿Puede alguien ayudarme en eso? la señal es [vo = 2,5 + 1,5 sin (2 pi 25 t) + 0,5 sen (2 pi 1000 t) ts = 100 nosotros t = 0: 40 ms]
#include"pic18f4520.h"
#pragma config WDT = OFF
unsigned char k = 0;
unsigned char m = 401;
unsigned char signal[] = {128,144,155,156,148,134,120,112,113,124,140,156,167,168,160,146,132,124,125, 136,152,168,178,179,171,
157,143,135,136,147,163,179,189,190,182,168,154,146,147,157,173,189,199,200,1 92,178,164,155,156,166,
182,198,208,209,201,186,172,164,164,174,190,206,216,217,208,193,179,170,171,1 81,196,212,222,222,214,
199,184,175,176,186,201,216,226,226,217,203,188,179,179,189,204,219,229,229,220,205,190,180,180,190,
205,220,229,229,220,205,189,180,180,189,204,219,228,228,218,203,187,178,177,186,201,216,225,224,214,
199,183,174,173,182,196,211,220,219,209,193,178,168,167,176,190,204,213,212,202,186,171,160,160,168,
182,196,205,204,194,178,162,152,151,159,173,187,196,195,184,168,152,142,141,149,163,177,185,184,174,
157,141,131,130,138,152,166,174,173,162,146,130,119,118,126,140,154,162,161,150,134,118,107,106,114,
128,142,150,149,138,122,106,95,94,102,116,130,138,137,126,110,94,83,82,90,104,118,126,125,115,
99,82,72,71,79,93,107,115,114,104,88,72,61,60,69,83,97,105,104,94,78,62,52,51,60,
74,88,96,96,85,70,54,44,43,52,66,80,89,88,78,63,47,37,36,45,60,74,83,82,73,
57,42,32,31,40,55,70,79,78,69,53,38,28,28,37,52,67,76,76,67,51,36,27,27,36,
51,66,76,76,66,51,36,27,27,37,52,67,77,77,68,53,39,30,30,40,55,70,80,81,72,
57,42,34,34,44,60,75,85,86,77,63,48,39,40,50,66,82,92,92,84,70,55,47,48,58,
74,90,100,101,92,78,64,56,57,67,83,99,109,110,102,88,74,66,67,77,93,109,120,121,113,
99,85,77,78,88,104,120,131,132,124,110,96,88,89,100,116,132,143,144,136,122,108,100,101,112,128};
//unsigned char signal[] = { 128, 217, 255, 217, 128, 37, 0, 37 };
void InitTimer0()
{
T08BIT = 1; //8bit mode
T0CS = 0;
PSA = 0;
T0PS2 = 0; T0PS1 = 0; T0PS0 = 1;
TMR0L = 5;
TMR0H = 0xFC;
TMR0IF = 0;
TMR0ON = 1;
T0IE = 1;
GIE = 1;
}
void interrupt timer( void )
{
GIE = 0;
if( TMR0IF ){
TMR0L = 0x17; ///T=0,02496
TMR0H = 0xFC;
TMR0IF = 0;
//i?lem
k++;
LATC = signal[k];
if( k == 401)
{TMR0ON = 0;
LATC = 0;
}
}
GIE = 1;
}
void main(void)
{
InitTimer0();
TRISC = 0x00;
LATC = signal[k];
while(1){
}
}