sábado, 19 de diciembre de 2009

Usando Gafix CASIO CFX

Gafix un programa para comunicarnos con nuestra calculadora casio cfx, como por ejemplo casio cfx 9850g plus, esta escrito en gtk y utiliza las librerias libcafix, todo esta disponible en sourceforge.
En el siguiente sitio encontraran mas informacion bastante interesante http://spiderpixel.co.uk/caspro/index.html programas y documentacion de varias calculadoras.




viernes, 18 de diciembre de 2009

PWM con pic 16F87x - SDCC


void pwm(unsigned int ciclo, unsigned char aux){
//250 Hz - 4Mhz valor del periodo
PR2 = 0b11111001; // 249
//Ciclo de trabajo
CCPR1L = ciclo; //249-100% 124-50%
//Prescaler 16, Timer 2 off
T2CON = 0b00000011 ;
//Modo PWM
CCP1CON = 0b00001100 ; // 8bit

if (aux=='1'){
TMR2ON=1;
}else if(aux=='0'){
TMR2ON=0;
}
}

Hasta ahora funciona bien n_n asi que bueno modificare con el tiempo...
para el motor que estoy usando de una lectora de CD los 250Hz le vino como anillo al dedo xD
pwm(124,1) seria el valor de los ciclos de trabajo y el uno para avilitar el PWM desde el
registro T2CON. Mas info para los calculos vean la hoja de datos de microchip donde en una tabla
nos indica los minimos y maximos en que puede trabajar el pwm segun el cristal empleado.

martes, 15 de diciembre de 2009

freemat - Funciones para calcular tiempos TMR0

El siguiente codigo lo extraje de http://www.iearobotics.com/ un excelente sitio de microcontroladores pic con manuales cursos ejemplos.

El codigo calcula el valor del registro TMR0 y de su prescaler para configurarlo y poder generar notas musicales, ingresamos el valor del cristal y la frecuencia que queremos generar. Los scripts estan para matlab asi que hize unos cambios para que funcionen en freemat.




function TMR0=timer0_TMR0_frec(FOSC,frecuencia)
DIV=[2,4,8,16,32,64,128,256];
PS=[000,001,010,011,100,101,110,111];
Duracion = 1/(2*frecuencia)*1000000;
TMR0=256-timer0_ticks(FOSC,Duracion);
frec = 1000000./(2*timer0_Duracion(FOSC,Duracion));
Error = frecuencia-frec;
for i=1:length(TMR0)
if TMR0(i)<256 && TMR0(i)>=0
printf ('TMR0= %d, PS2:0= %03d, Div= %3d, Frec= %.1f Hz, Error= %.2f Hz\n', TMR0(i), PS(i), DIV(i), frec(i), Error(i));
end
end



function Dur=timer0_Duracion(FOSC,Duracion)
DIV=[2,4,8,16,32,64,128,256];
N=timer0_ticks(20,Duracion);
Dur = N.*(4*DIV/FOSC);



function N=timer0_ticks(FOSC,Duracion)
DIV = [2 4 8 16 32 64 128 256];
N = round(FOSC*Duracion./(4*DIV));
for i=1:length(N)
if N(i)>255
N(i)=NaN;
end
end



function TMR0=timer0_TMR0(FOSC,t)
DIV=[2,4,8,16,32,64,128,256];
PS=[000,001,010,011,100,101,110,111];
TMR0=256-timer0_ticks(FOSC,t);
tc=timer0_Duracion(FOSC,t);
Error = t - tc;

for i=1:length(TMR0)
if TMR0(i)<256 && TMR0(i)>=0
printf ('T0INI= %3d, PS2:0= %03d, Div= %3d, tc= %.1f us, Error= %.2f us\n',
TMR0(i),PS(i), DIV(i), tc(i),Error(i));
end
end






IRC

#freenode->#usljujuy

Seguidores

Eventos n_n

Tira Ecol Nano,Bilo y Luca