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






martes, 27 de octubre de 2009

Ejemplo 6 - Sensores infrarrojos


/* Autor: Jose Maria Quiroga
chispilinux@gmail.com
GNU-Electronica

RB7 A CD4052
RB6 B
RB5
RB4
RB3
RB2
RB1
RB0 INT

RC7 RX
RC6 TX
RC5 IN - LM562
RC4 SDA
RC3 SCL
RC2 CE PWM L293D
RC1 B
RC0 A

RA0 AN0
RA1 AN1
RA2 AN2
RA3 VRef +
RA4 LED
RA5 AN4 */

#include <pic16f873a.h>
#include <usart.h>
#include <adc.h>
typedef unsigned int word;
word at 0x2007 CONFIG = _XT_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _DEBUG_OFF & _CP_OFF;

#define CA RB7
#define CB RB6
#define LED RA4
#define IN RC5
#define MA RC0
#define MB RC1
#define CE RC2

void retardo50ms(int m);

void main() {
Configuracion();
ConfigUART();
ConfigADC();
PORTA=0;PORTB=0;PORTC=0;

while(1){
CA=0;CB=0;
if (IN==0){
retardo50ms(1);
if (IN==0)LED=0;
}else{
LED=1;
}
}
}


void Configuracion(){
TRISA=0b00101111;
TRISB=0b00000000;
TRISC=0b10100000;

INTCON=0b00000000;
T0CS = 0;
TMR0 = 0;
PSA = 0;
}


void retardo50ms(int m){
unsigned int i;
for (i=1;i<=m;i++) {
PS2=1; PS1=1; PS0=1;
T0IF = 0;
TMR0=255;
while(T0IF==0);
}
}

jueves, 22 de octubre de 2009

sábado, 26 de septiembre de 2009

SDCC Ejemplo 5 USART

Bueno aqui otro ejemplo que acabo de terminar sencillo n_n.


Para mandarle unos comando al pic desde python:

import serial

RS232 = serial.Serial('/dev/ttyUSB0', 1200, timeout=1)

print RS232.portstr
RS232.write(raw_input(':'))

try:
dato=ord(RS232.read())
print dato
dato=ord(RS232.read())
print dato
except:
print "No se recibio ningun dato"

RS232.close()


Programa en C para el pic, utiliza interrupciones para recibir los datos n_n.


#include <pic16f873a.h>

typedef unsigned int word;
word at 0x2007 CONFIG = _HS_OSC & _WDT_OFF & _LVP_OFF &_DEBUG_OFF & _CPD_OFF &_PWRTE_ON &_BODEN_ON;


unsigned char Serial_RX(void);
void Serial_TX(unsigned char);

void isr() interrupt 0 {
unsigned char aux;
if (RCIF==1){
switch(RCREG){
case 'A':RB0=1;break;
case 'B':RB0=0;break;
}
}
Serial_TX('K');
RCIF=0;
}

void main() {
TRISB=0x0;
TRISC=0b10000000;

TXSTA=0b00100000;
SPBRG=255;
PIE1=0b00100000;
RCSTA=0b10010000;
INTCON=0b11000000;

PORTB=0x0;
while(1);
}

unsigned char Serial_RX(){
while(RCIF==0);
return RCREG;
}

void Serial_TX(unsigned char a){
TXREG=a;
while (TRMT==0);
}

jueves, 24 de septiembre de 2009

SDCC Ejemplo 4 ADC

typedef unsigned int word;
word at 0x2007 CONFIG = _HS_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _DEBUG_OFF & _CP_OFF;


int LeerADC(int);

void main() {
unsigned int aux;
ADCON1=0b00000001; // Vref+ AN3
TRISA=0b11111111;
TRISB=0b00000000;
while(1){
aux = LeerADC(1);
PORTB = aux;
}
}


int LeerADC (int c){
switch(c) {
case 1:
ADCON0=0b01000001; //RA0 AN0
break;
case 2:
ADCON0=0b01001001; //RA1 AN1
break;
case 3:
ADCON0=0b01010001; //RA2 AN2
break;
case 4:
ADCON0=0b01100001; //RA5 AN4
break;
}
GO=1;
while(GO==0);
return ADRESH;
}

SDCC Ejemplo 3 Tmr0

/*Recuerden esto se genero con Piklab pongan el include segun su PIC, 20Mhz*/


typedef unsigned int word;
word at 0x2007 CONFIG = _HS_OSC & _WDT_OFF & _LVP_OFF &_DEBUG_OFF & _CPD_OFF &_PWRTE_ON &_BODEN_ON;

void delay_1ms(void);
void delay_100ms(void);

void main() {
int a;
TRISB= 0b00000000;
INTCON=0b00000000;

T0CS = 0;
TMR0 = 0;
PSA = 0;

while(1){
PORTB=0b11110000;
delay_100ms();
PORTB=0b11100000;
delay_100ms();
PORTB=0b11000000;
delay_100ms();
PORTB=0b10000000;
delay_100ms();
}
}
void delay_100ms(){
int a;
for (a=0;a<=100;a++){
delay_1ms();
}
}

void delay_1ms()
{
PS2=1; PS1=0; PS0=0;
T0IF = 0;
TMR0=100;
while(T0IF==0);
}

lunes, 21 de septiembre de 2009

SDCC Ejemplo 2 Interrupciones RB7-RB4

No se olviden poner el include segun su pic, este ejemplo trata sobre las interrupciones del portb.


void isr() interrupt 0 {
if (RBIF == 1){
if (RB7 == 0){
RB0=1;
}else if (RB6==0){
RB0=0;
}
}
RBIF=0;
}

void main() {
TRISB = 0b11110000;
/*Cambios en RB0-RB4*/
INTCON = 0b10001000;
OPTION_REG = 0b00000111;

PORTB=0;
while(1){
}
}

domingo, 20 de septiembre de 2009

SDCC Ejemplo 1

Falta el include que seria para el pic que tengamos en mi caso un 16f873 con un cristal de 20Mhz - pic16f873a.h todo desde piklab n_n

/* ----------------------------------------------------------------------- */
/* Bits de configuración: adapte los parámetros a su necesidad */
typedef unsigned int word;
word at 0x2007 CONFIG = _HS_OSC & _WDT_OFF & _LVP_OFF &_DEBUG_OFF & _CPD_OFF &_PWRTE_ON &_BODEN_ON;


void isr() interrupt 0 { /* rutina de servicio de interrupciones */
/* << agregue el código de interrupción >> */
}

int i;

void retardo (int);

void main() {

TRISA = 0b11111111;
TRISB = 0b00000000;

while(1) {
PORTB = i;
retardo(250);
i++;
}
}


void retardo(int c)
{
unsigned int a,b;
for (b=1;b<=c;b++){
for (a = 1; a <= 1000; a++);
}
}

gpsim -p p16f873a -s Ejemplo.cod

domingo, 9 de agosto de 2009

Hetalia Axis Power

Voy agregar una seccion anime-manga empezando con este anime que subio una amiga, trata sobre la guerra mundial contada de la mejor manera del anime vean n_n

Episodio 1
http://www.megavideo.com/?v=QNJLB5SL

Episodio 2
http://www.megavideo.com/?v=DB35OMX4

Episodio 3
http://www.megavideo.com/?v=SD246FP1

Episodio 4
http://www.megavideo.com/?v=HBK0N3NV

Episodio 5
http://www.megavideo.com/?v=WRVEXJFU

Episodio 6
http://www.megavideo.com/?v=RHFN74RW

Episodio 7
http://www.megavideo.com/?v=75WLYANC

Episodio 8
http://www.megavideo.com/?v=4LF75VJI

Episodio 9
http://www.megavideo.com/?v=0EXVABAH

Episodio 10
http://www.megavideo.com/?v=HZ2ZY8EA

Episodio 11
http://www.megavideo.com/?v=B2CO0CDD

Episodio 12
http://www.megavideo.com/?v=V467TUGF

Episodio 13
http://www.megavideo.com/?v=6Q7NB64H

Episodio 14
http://www.megavideo.com/?v=CSZQRYHG

Episodio 15
http://www.megavideo.com/?v=TWJMA8LW

Episodio 16
http://www.megavideo.com/?v=ADMLVAAN

Episodio 17
http://www.megavideo.com/?v=1967GV6E

Episodio 18
http://www.megavideo.com/?v=2WNYESG0

Episodio 19
http://www.megavideo.com/?v=HK12P7QG

Episodio 20
http://www.megavideo.com/?v=7QRRJ26C

Episodio 21
http://www.megavideo.com/?v=40LV9APD

Episodio 22
http://www.megavideo.com/?v=ZJ16KIUO

Episodio 23
http://www.megavideo.com/?v=K46MW7WH

Episodio 24


Episodio 25
http://www.megavideo.com/?v=H1NNDPIL

Episodio 26
http://www.megavideo.com/?v=2VEOD5ZP

domingo, 24 de mayo de 2009

lunes, 20 de abril de 2009

config de's kernel's ^^

Un link (favoritos) de debian official donde tenemos varios y varios config de los kernel's .....

http://merkel.debian.org/~jurij/

viernes, 17 de abril de 2009

para tener en cuenta - KERNEL -

Durante estos años el kernel de linux a crecido bastante, el soporte de protocolos y drivers es muy amplio y creeria completo ^^, a los curiosos como yo nos llama la atencion el soporte para experimentos que quiero decir bueno por ejemplo el RS232 desde la version 1.0 del kernel esta disponible xD pero bueno diran algunos se usaba para terminales, sii pero desde mi primer contacto que fue con el kernel 2.2.14 lo primero que aprendi a usar fue el puerto serie y el puerto paralelo para enchufar cosas :P, desde entonces se me hizo mas familiar por ejemplo el i2c.
Bueno aqui un par de cosas que me atraen del Kernel:
RS232, Parport, i2c, SPI, Amateur Radio Support, Bus CAN, IrDA, Pocket and portable adapters, USB, Joystick interface, Dallas's 1-wire support, Hardware Monitoring support, Watchdog Timer Support, GPIO, MIDI, Real Time Clock, etc xD

lunes, 6 de abril de 2009

El proyecto Player "Simulador de robot's"

Como savemos armar un robot cualquiera sea su genero (bipedo, gusano, a ruedas orugas etc) cuesta en estos tiempos un buen desembolso u_u.

El proyecto Player tiene un par de programas bastantes buenos comenzaremos con dos de ellos:

Stage simula una población de robots móviles, sensores y objetos en un mapa de bits de dos dimensiones, está diseñada para apoyar la investigación multi-agente en sistemas autónomos, por lo que proporciona un sencillo modelo informatico para emular cualquier dispositivo.

Player es un servidor de red para el control del robot, ofrece una sencilla interfaz para los sensores y actuadores. Lo bueno es que es compatible con un hardware de un robot de Pioneer ActivMedia creo.

Para instalar simplemente usamos el apt-get install stage xD, y con dpkg -L vemos que nos instalo
hay buenos ejemplos.

Podemos empezar con esto: robot-player /usr/share/stage/worlds/simple.cfg



de esta manera tenemos funcionando el servidor, lo unico que nos falta es que el robot se mueva tenemos otro ejemplo en: /usr/share/player/examples/libplayerc y el archivo "simple" que ya esta compilado nos dara una idea de lo que podemos hacer ....




Mas info: http://es.wikipedia.org/wiki/Player_(rob%C3%B3tica) xD

lunes, 23 de febrero de 2009

Serial desde C - termios.h




//Agregar los include string.h, stdio.h, stdlib.h, termios.h (principal) , unistd.h,fcntl.h
//sys/types.h, sys/stat.h, sys/ioctl.h, errno.h

#define Puerto "/dev/ttyUSB0"

int opencom;
struct termios oldtios;
struct termios newtios;
char comando[2];

int main(int argc, char **argv)
{

printf("RS232 Microchip chispi_pic:\n");

opencom=open(Puerto,O_RDWR | O_NOCTTY);
if(opencom<0){
fprintf(stderr, "Error: Could not open %s for reading/writing!\n",Puerto);
exit(-1);
}

//tcgetattr(opencom,&oldtios);

newtios.c_cflag=B1200 | CS8 | CLOCAL | CREAD;
newtios.c_iflag=IGNPAR;
newtios.c_oflag=0;
newtios.c_lflag=0; /*No canonico*/
newtios.c_line=0;
newtios.c_cc[VMIN]=1;
newtios.c_cc[VTIME]=0;

tcflush(opencom, TCIFLUSH);
tcsetattr(opencom,TCSANOW,&newtios);

scanf("%s",comando);

write(opencom,comando,2);
printf("\n");
close(opencom);
}


lunes, 12 de enero de 2009

Tarjeta CHIP

/*Lector de Tarjetas Chip */
/*Autor: Jose Maria Quiroga */
/*mail: chispilinux@gmail.com */



/*bit 7 busy 11 invertido I/O */
/* 6 ack 10 */
/* 5 paper ut 12 S/N */
/* 4 select in 13 */
/* 3 spare-error 15 */
/* */
/* 0 Reset 2 */
/* 1 Clock 3 */
/* 2 R/W 4 */

/* aqui ponga el include de cada uno stdio.h sys/io.h string.h*/
/* xD no me dejaa asi que bueno no tengo ganas de editar eso : P*/

#define PortDatos 888 /*0x378*/
#define PortStatus 889 /*0x379*/
#define PortControl 890 /*0x37a*/
/*----------------------------------------*/
void output(int,int);
int input(int);
/*----------------------------------------*/
void output(int dato,int Puerto)
{
ioperm(Puerto,1,1);
outb(dato,Puerto);
ioperm(Puerto,1,0);
}
/*----------------------------------------*/
int input(int Puerto)
{
int aux;
ioperm(Puerto,1,1);
aux=inb(Puerto);
ioperm(Puerto,1,0);
return(aux);
}
/*----------------------------------------*/
int Datos,aux,i,Cont,aux2;
char Vector[257];

main (int argc,char **argv)
{
system("clear");
FILE *Archivo;
/*Verifica si esta o no la Tarjeta*/

aux=input(PortStatus);

if (aux & 32)
printf("Inserte Tarjeta\n");
else
{
printf("Tarjeta Insertada\n");

/*Reset*/
output(0,PortDatos);
output(2,PortDatos); /*CLOCK*/
output(0,PortDatos);
output(1,PortDatos); /*RESET*/

/*Lectura de los 256 bits*/
for (i=1;i<257;i++)
{
Datos=input(PortStatus);

if (Datos & 128 )
Vector[i]='0';
else
Vector[i]='1';
output(3,PortDatos);
output(1,PortDatos);

}


/*Mostrando tarjeta*/

for (Cont=1;Cont<33;Cont++)
{
printf("%i ",Cont-1);
for (i=1+aux2;i<9+aux2;i++)
{
printf("%c",Vector[i]);
}
aux2=aux2+8;
printf("\n");
}


printf("Tipo de tarjeta:");
for (Cont=9;Cont<=16;Cont++){
printf("%c",Vector[Cont]);
}
printf("\n");

printf("Fabricante:");
for (Cont=33;Cont<=40;Cont++){
printf("%c",Vector[Cont]);
}
printf("\n");

printf("Numero de serie:");
for(Cont=41;Cont<=64;Cont++){
printf("%c",Vector[Cont]);
}
printf("\n");

printf("Cantidad de pulsos:");
for(Cont=65;Cont<=80;Cont++){
printf("%c",Vector[Cont]);
}
printf("\n");

printf("Codigo de pais:");
for(Cont=89;Cont<=96;Cont++){
printf("%c",Vector[Cont]);
}
printf("\n");
}
}

IRC

#freenode->#usljujuy

Seguidores

Eventos n_n

Tira Ecol Nano,Bilo y Luca

Archivo del blog