-
-
-
Grabar y leer dos bytes en EEprom
Funciones read_eeprom(address) y write_eeprom(address, byte)
void write_eeprom_16bits(int address, long* val){
int pLow, pHigh;
pLow = val;
pHigh = val>>8;
write_eeprom(address,pHigh);
delay_ms(12);
++address;
write_eeprom(address,plow);
delay_ms(12);
}
long read_eeprom_16bits(int address){
int pLow, pHigh;
long result;
pHigh = read_eeprom(address);
++address;
pLow = read_eeprom(address);
result=(pHigh<<8);
result+=pLow;
return result;
}
Esto no es mio, lo he sacado de aquí http://picmania.garcia-cuervo.net, porque me ha sido muy util
void write_eeprom_16bits(int address, long* val){
int pLow, pHigh;
pLow = val;
pHigh = val>>8;
write_eeprom(address,pHigh);
delay_ms(12);
++address;
write_eeprom(address,plow);
delay_ms(12);
}
long read_eeprom_16bits(int address){
int pLow, pHigh;
long result;
pHigh = read_eeprom(address);
++address;
pLow = read_eeprom(address);
result=(pHigh<<8);
result+=pLow;
return result;
}
Esto no es mio, lo he sacado de aquí http://picmania.garcia-cuervo.net, porque me ha sido muy util
Funcion para reloj digital HH:MM:SS basada en la interrupcion TMR0
//Hay que declarar esto en la funcion Main para que sea un segundo:
//setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); //timer0 konfiguratu
//-------------------------------------------------
#int_TIMER0
void TIMER0_isr(void)
{
if (ms<15){ // 15 veces para lograr un segundo, (no son milisegundos)
ms++;
}else{
ms=0;
if (s<59){
a0=1;
s++;
a0=0;
if(s%2==0){a4=1;}
if(s%2==1){a4=0;}
}else{
s=0;
if (m<59){
m++;
}else{
m=0;
if (h<23){
h++;
}else{
h=0;
}
}
}
}
//setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); //timer0 konfiguratu
//-------------------------------------------------
#int_TIMER0
void TIMER0_isr(void)
{
if (ms<15){ // 15 veces para lograr un segundo, (no son milisegundos)
ms++;
}else{
ms=0;
if (s<59){
a0=1;
s++;
a0=0;
if(s%2==0){a4=1;}
if(s%2==1){a4=0;}
}else{
s=0;
if (m<59){
m++;
}else{
m=0;
if (h<23){
h++;
}else{
h=0;
}
}
}
}
AP-876: Interfaz logica programable basada en PIC16F876
Muestra los datos al usuario por el puert B, a traves de una pantalla lcd de 16x2 y recibe datos por parte del mismo mediante un teclado matricial de 4x3.
Quedando libres los puertos A y C para el resto de funciones, comunicacion con otros microcontroladores, conversiones AD, pwm, secuencias y un largo etc.
Pese a haber experimentado varios errores de diseño, estos han podido ser solventados y el hardware es funcional.
El lo referente al software, han sido creados varios, de entre ellos el principal sistema
operativo, llamado SE (de Sistema Eragilea, en
euskera), del cual cabe mencionar que pese a sus
amplias posibilidades aun esta en desarrollo.
La placa ha sido fresada en el instituto lo que ha ayudado mucho en el avance del proyecto.Pero tambien se podria haber hecho mediante acidos.
Este video explica rapidamente el proyecto.
En este enlace pueden descargar todos los recursos Descargar documentacion.
Conclusion: Tenía que haberlo hecho para un pic 18, la memoria que ofrece la serie 16 es un escupitajo en el mar de Aral.
OA-INV-ASIM-741: Soporte modular para circuito amplificador inversor de salida asimetrica basado en el operacional 741
El soporte para circuito amplificador inversor de salida asimetrica basado en el operacional 741, es un extraño circuito diseñado para aplicaciones de sonido en combinacion con otros circuitos (Quiero una distorsion radical para mi piano!), sin embargo puede tener alguna otra aplicacion.
En la imagen de abajo puede apreciase la señal en la entrada y en la salida, como son atenuadas las partes (en este caso) positivas de la señal entrante no son amplificadas, en cambio si las negativas en una relacion aproximada de 1 a 5.
Descargar diseño , proteus y placas
En la imagen de abajo puede apreciase la señal en la entrada y en la salida, como son atenuadas las partes (en este caso) positivas de la señal entrante no son amplificadas, en cambio si las negativas en una relacion aproximada de 1 a 5.
Descargar diseño , proteus y placas
OA-INV-4558
En esta placa se hace uso de un chip que contiene dos amplificadores operacionales en su interior, el 4558.
Consta de dos circuitos con una alimentacion comun, ajustables ambos mediante potenciometros.
Descargar diseño
Consta de dos circuitos con una alimentacion comun, ajustables ambos mediante potenciometros.
Descargar diseño
OA-PB-741: Soporte modular para filtro pasa banda basado en el operacional 741
OA-PB-741: Soporte modular para filtro pasa banda basado en el operacional 741.
Como se puede apreciar puede ser calibrado con un pequeño potenciometro la placa no mide mas que 30x30mm
Descargar diseño
OA-INV-741-2: Soporte modular para amplificador operacional 741 en modo inversor (doble)
OA-INV-741-2: La placa consta de dos soportes para amplificador operacional 741 en modo inversor, regulables ambos por sus correspondientes potenciometros y dotados de sus patas de alimentacion tierra entrada y salida. Diseñadas para utilizar en conjunto con otros dispositivos.
Descargar diseño
Descargar diseño
SimplePic876: Soporte modular para pic16f876
Al igual que el SP-84,la construccion de este diseño responde a la necesidad de un soporte
minimamente solido para la integracion de un pic del mencionado modelo
en cualquer diseño mas o menos complejo que lo requiera.
En 28 x60 mm contiene lo minimo necesario para hacer funcionar un pic, Sockets para PORTA, PORTB y PORTC, Cristal de cuarzo, conexiones de puertos y alimentacion, regulador 7805 y un rudimentario filtro y a diferencia de su hermano menor, el SimplePic876 cuenta con un pulsador de reset.
Descargar diseño
En 28 x60 mm contiene lo minimo necesario para hacer funcionar un pic, Sockets para PORTA, PORTB y PORTC, Cristal de cuarzo, conexiones de puertos y alimentacion, regulador 7805 y un rudimentario filtro y a diferencia de su hermano menor, el SimplePic876 cuenta con un pulsador de reset.
Descargar diseño
SimplePic84:Soporte modular para pic16f84
La construccion de este diseño responde a la necesidad de un soporte minimamente solido para la integracion de un pic del mencionado modelo en cualquer diseño mas o menos complejo que lo requiera.
En escasos 28 x 47 mm contiene lo minimo necesario para hacer funcionar un pic, sockets para PORTA y PORTB, Cristal de cuarzo, conexiones de puertos y alimentacion, regulador 7805 y un rudimentario filtro .
Descargar proyecto en Proteus y Ares
En la imagen de la izquierda se puede ver una placa hecha con acidos. Y abajo un reloj de 4 digitos montado con una placa igual.
No se deje el lector asustar por lo precario de su apariencia, mas abajo un corto video mostrando un poco su funcionamiento, (por si quedaba alguna duda jaja).
En escasos 28 x 47 mm contiene lo minimo necesario para hacer funcionar un pic, sockets para PORTA y PORTB, Cristal de cuarzo, conexiones de puertos y alimentacion, regulador 7805 y un rudimentario filtro .
Descargar proyecto en Proteus y Ares
En la imagen de la izquierda se puede ver una placa hecha con acidos. Y abajo un reloj de 4 digitos montado con una placa igual.
No se deje el lector asustar por lo precario de su apariencia, mas abajo un corto video mostrando un poco su funcionamiento, (por si quedaba alguna duda jaja).
CCS PIC: Funcion para convertir cadena de caracteres en numero float
Usado para extraer caracteres pasar de char a float de un LCD lm16l y operar con ellos.
float get_complex_num(){
int s;
float result=0;
int xtract=0;
float mult;
float raw;
for (s=x-1;s>=1;s--){
xtract++;
if (xtract==1){mult=1;}
if (xtract==2){mult=10;}
if (xtract==3){mult=100;}
if (xtract==4){mult=1000;}
if (xtract==5){mult=10000;}
if (xtract==6){mult=100000;}
if (xtract==7){mult=1000000;}
if (xtract==8){mult=10000000;}
if (xtract==9){mult=100000000;}
if (xtract==10){mult=1000000000;}
if (xtract==11){mult=10000000000;}
raw=lcd_getc(s,2)-48;
result=(raw*mult)+result;
/*// zelan itten daben ikusteko!
printf(lcd_putc, "r-%f x->%i",result,x);
delay_ms(1500);*/
x--;
}
return result;
}
JCALC: Programa de calculo orientado a electronica
El programa esta hecho en Visual basic, aqui tienen el programa [Descargar exe]y los codigos fuente [Descargar codigo fuente VB6] si lo prefieren .
Advierto que el programa esta inacabado ya que no merecia la pena seguir adelante, pues el unico fin del programa era corregir mis ejercicios de clase y ya aprobe los examenes de esa asignatura.
Sin embargo me ha resultado ser bastante util despues.
A continuacion una lista de capacidades del programa y los calculos que se pueden realizar
-Redes RLC
-Calculos de resonancia
-Calculos de disipadores
-TMR0 y temporizaciones en pic16fxxx
-Mejora de factor de potencia en instalaciones monofasicas
-Mejora de factor de potencia en instalaciones trifasicas
-Suma de factores de potencia
-Indice de carga en transformadores
-Hallar valores nominales a partir del numero de espiras en bobinas de transformadores -Rendimiento y perdidas en transformadores
-Amplificador operacional calculos en modo inversor
-Amplificador operacional calculos en modo no inversor
-Amplificador operacional calculos en modo inversor con salida asimetrica
-Amplificador operacional calculos filtro pasa alto -Amplificador operacional calculos filtro pasa bajo
-Amplificador operacional calculos filtro pasa banda
-Calculos 555 oscilador astable, monostable y bistable
-Motores CC arranque Shunt, potencias y rendimiento
-Motores CC arranque Serie, potencias y rendimiento -Motores CC excitación compuesta larga -Motores CC excitación compuesta corta
-Graficos multiparametrales y graficar cualquier onda o funcion.
-Opcion multilenguaje via ficheros INI
No merece la pena seguirlo pero es util
A continuacion una lista de capacidades del programa y los calculos que se pueden realizar
-Redes RLC
-Calculos de resonancia
-Calculos de disipadores
-TMR0 y temporizaciones en pic16fxxx
-Mejora de factor de potencia en instalaciones monofasicas
-Mejora de factor de potencia en instalaciones trifasicas
-Suma de factores de potencia
-Indice de carga en transformadores
-Hallar valores nominales a partir del numero de espiras en bobinas de transformadores -Rendimiento y perdidas en transformadores
-Amplificador operacional calculos en modo inversor
-Amplificador operacional calculos en modo no inversor
-Amplificador operacional calculos en modo inversor con salida asimetrica
-Amplificador operacional calculos filtro pasa alto -Amplificador operacional calculos filtro pasa bajo
-Amplificador operacional calculos filtro pasa banda
-Calculos 555 oscilador astable, monostable y bistable
-Motores CC arranque Shunt, potencias y rendimiento
-Motores CC arranque Serie, potencias y rendimiento -Motores CC excitación compuesta larga -Motores CC excitación compuesta corta
-Graficos multiparametrales y graficar cualquier onda o funcion.
-Opcion multilenguaje via ficheros INI
No merece la pena seguirlo pero es util
J's Machines: Fresadora controlada desde PC a traves de puerto paralelo
Un simple y rudimentario plotter con motores de taladro a bateria y controlado
directamente desde pc usando visual basic, utiliza el 293 para controlar
los motores y un rudimentario pwm con un 555
El proyecto fue abandonado ya que si se requiere una minima precision, necesitaba mejores motores mejores ejes, en definitiva mejor infraestructura y material, vamos por falta de medios.
Pero ahi queda la idea y esta entrada como unico testigo de ella jaja.
El proyecto fue abandonado ya que si se requiere una minima precision, necesitaba mejores motores mejores ejes, en definitiva mejor infraestructura y material, vamos por falta de medios.
Pero ahi queda la idea y esta entrada como unico testigo de ella jaja.
WinCupl: Contador de 4 bits en PLD g22v10
Creado con WinCupl: Contador de 4 bits en PLD g22v10
auque suene arcaico aqui esta .
Su unica utilidad es orientativa por si alguien ha de hacer un codificador-decodificador con un pal
Descarga de archivos .pld, .jed y .dsn
JokinMicro, microcontrolador componente a componente
Bueno en primer lugar aclarar varios asuntos
La tabla de funcionamiento y estado de cada registro en cada microinstruccion es la siguiente. Hay dos principales de microinstrucciones:
De solo escritura: W, X
De solo lectura; Y, RO, I
De lectura y escritura: RA, STAT, OPT, OUSE, ADX, OU, ONEB, PCX
Bueno para agilizar el comprendimiento por parte del lector e aqui un pequeño glosario de los nombres de los registros
W: Acumulador primario.
X: Acumulador secundario
Y: Acumulador del resultado de la unidad aritmetico logica
STAT: Registro status
OPT: Registro option
PCX: Program Counter
I: Input port
OU: Output port
OUSE: Output selector
ONEB: One Bit Working Register, Registro utilizado para llevar a cabo operaciones de un bit en este sistema de 8 bites, no es mas que un enmascaramiento y multiplexacion de un dato. Trabajar con un bit requiere mas ciclos de maquina que trabajar con 1 byte, por lo tanto, no lo he usado mas que para algunas configuraciones en el registro STAT a OPT.
A continuación se muestra una tabla de la verdad de el estado de los registros durante la ejecución de cada microinstrucción.
A register type son los modulos ADX, OPT, RA, OUSE, STAT, ONEB
B register type son los modulos I, W, X , OU y L. [reset negado]
* RO se comporta como un modulo de tipo B sin reset
Continuara…
- Este diseño jamás sera montado y su obrar se limitara a ser simulado en el proteus ya que en nuestra era, todo esto, (y más,) cabe en un PIC, incluso de las gamas más bajas.
- Lo arcaico del diseño en cuanto a memorias se refiere se debe a que no tengo eeproms en la libreria del proteus, y ,bueno, como es un diseño protéico no le di mayor importancia.
- No hize instrucciones, porque solo lo hiba a programar yo y conozco bien las microinstrucciones. Y como a mi entender, las instrucciones son para facilitar la programacion al usuario, en este caso yo, decidi pasar de ello.
- Muchos comentarios, en los archivos .pld y y notas estan es euskera, que no e tenido tiempo de traducir, pero
- Puede descargar aqui programas de ejemplo y el manual [Descargar toda la documentacion sober JokinMicro]
Especificaciones [Por encima un poco]
Oharrak:- Anchura de un byte en bus de direccionamiento y bus de datos
- 29 microinstrucciones capacidad para realizar 64 operaciones aritmetico lógicas. (Precisamente las que nos ofrece la Unidad-Aritmetico-Lógica 74xx141)
- Direccionamiento literal o establecido por bus de datos.
- Byte 1 etik 256 Byterainoko irteera posibleak (OUt port SElector erabilita, diagraman soilik bat ageri)
- Capacidad de salida de datos desde un byte hasta 256 bytes, (utilizando la opcion OUtport SElector), (En el diagrama solo se muestra un byte de salida)
- Ez dira instrukzioak sortu merezi ez du eta, beraz, programaketa mikroinstrukzioen bidez egin beharra dago, baina oso sinplea da.
- Inoiz muntatu behar ez denez jokinmikroa amaitu barik dago, hainbat kagada dauz tartien-Carry eta beste hainbat flagen egoerak ezarri barik daude STATUS eta OPTION portetan-ROM eta RAM erabiltzea arkaikoa liteke baina ez dago EEPROMik nire proteusean.-GAL16v8 pld ak ez du ezertarako balio.
- Hona hemen diagrama,
La tabla de funcionamiento y estado de cada registro en cada microinstruccion es la siguiente. Hay dos principales de microinstrucciones:
- De modulo a Bus(de datos).
- De Bus(de datos) a modulo.
De solo escritura: W, X
De solo lectura; Y, RO, I
De lectura y escritura: RA, STAT, OPT, OUSE, ADX, OU, ONEB, PCX
Bueno para agilizar el comprendimiento por parte del lector e aqui un pequeño glosario de los nombres de los registros
W: Acumulador primario.
X: Acumulador secundario
Y: Acumulador del resultado de la unidad aritmetico logica
STAT: Registro status
OPT: Registro option
PCX: Program Counter
I: Input port
OU: Output port
OUSE: Output selector
ONEB: One Bit Working Register, Registro utilizado para llevar a cabo operaciones de un bit en este sistema de 8 bites, no es mas que un enmascaramiento y multiplexacion de un dato. Trabajar con un bit requiere mas ciclos de maquina que trabajar con 1 byte, por lo tanto, no lo he usado mas que para algunas configuraciones en el registro STAT a OPT.
A continuación se muestra una tabla de la verdad de el estado de los registros durante la ejecución de cada microinstrucción.
A register type son los modulos ADX, OPT, RA, OUSE, STAT, ONEB
B register type son los modulos I, W, X , OU y L. [reset negado]
* RO se comporta como un modulo de tipo B sin reset
Continuara…
Libreria LCDC.c para utilizar LCD lm16l a traves del PORTC
Libreria LCDC.c para utilizar LCD a traves del PORTC, modificada con
objetivo de utilizar interrupciones en PORTB, en el pic 16F877.
Library to use LCD LCDC.c through the PORTC, modified in order to use PORTB interruptions using the pic 16F877.
Es una modificacion de la libreria LCD.c que viene de serie
Descargar lcdc.c
Library to use LCD LCDC.c through the PORTC, modified in order to use PORTB interruptions using the pic 16F877.
Es una modificacion de la libreria LCD.c que viene de serie
Descargar lcdc.c
Libreria para teclado matricial 4×4 a traves de Puerto B haciendo uso de interrupcion RB
Usando PORTB para teclado matricial con interrupciones, no hay mas que copiar este archivo en la carpeta PICC/drivers yDescarga aqui el archivo jkbd.c
despues utilizarlo mediante include
///////////////////////////////////////////////////////////////////////////
//// jkbd.C ////
//// Driver for common 4×4 keypad modules ////
//// ////
//// kbd_init() Activa el rastreo EN PUERTO B RB0:RB3 ////
//// ////
//// getkey() Captura tecla pulsada a partir de la interrupcion por ////
//// cambio de estado en RB4:RB8 ////
//// ////
//// jkbd_getint(from,to,line) leer desde lcd numero decimal ////
//// de hasta 9 cifras y trasformar a int32 ////
//// para operar con el. ////
//// ////
//// ////
///////////////////////////////////////////////////////////////////////////////////////
//// El valor de trisB ha de ser 0xf0 ////
//// Un set_tris_b(0xf0); seria necesario en la funcion main ////
//// Libreria para uso de teclado matricial 4×4 2012 Made in Basque country
///////////////////////////////////////////////////////////////////////////////////////
#byte portb= 0×06
#byte porta= 0×05
#bit ra0=0×05.0
#bit ra1=0×05.1
#bit ra2=0×05.2
#bit ra3=0×05.3
#bit ra4=0×05.4
#bit ra5=0×05.5
#bit ra6=0×05.6
#bit ra7=0×05.7
#bit rb0=0×06.0
#bit rb1=0×06.1
#bit rb2=0×06.2
#bit rb3=0×06.3
#bit rb4=0×06.4
#bit rb5=0×06.5
#bit rb6=0×06.6
#bit rb7=0×06.7
int ink=0, inkc=0;
int s, n,num;
int ch=0;
int32 inkn=0;
void kbd_init(){// ciclo de rastreo de teclado a traves de nibble bajo de portb
while(1){
portb=0×01;
delay_ms(5);
portb=0×02;
delay_ms(5);
portb=0×04;
delay_ms(5);
portb=0×08;
delay_ms(5);
}
}
int getkey(){ // capturar caracter pulsado ¡formato char!
ink = (portb & 0xf0); // maskaratu
#asm
swapf ink,1; //nibbleak trukatu
#endasm
if (ink==0){
}else{
if (rb0==1){
if (ink==1){inkc=7;}
if (ink==2){inkc=8;}
if (ink==4){inkc=9;}
if (ink==8){inkc=15;}
}
if (rb1==1){
if (ink==1){inkc=4;}
if (ink==2){inkc=5;}
if (ink==4){inkc=6;}
if (ink==8){inkc=14;}
}
if (rb2==1){
if (ink==1){inkc=1;}
if (ink==2){inkc=2;}
if (ink==4){inkc=3;}
if (ink==8){inkc=13;}
}
if (rb3==1){
if (ink==1){inkc=10;}
if (ink==2){inkc=0;}
if (ink==4){inkc=11;}
if (ink==8){inkc=12;}
}
return inkc;
}
}
int32 jkbd_getint(from,to,line){// leer desde lcd numero decimal de hasta 9 cifras y trasformar a int32 para operar
int32 multx, mult=1;
inkn=0;
for (s=from-1;s>=to;s–){
ch= (lcd_getc(s,line)-48);
if (mult==1){multx=1;}
if (mult==2){multx=10;}
if (mult==3){multx=100;}
if (mult==4){multx=1000;}
if (mult==5){multx=10000;}
if (mult==6){multx=100000;}
if (mult==7){multx=1000000;}
if (mult==8){multx=10000000;}
if (mult==9){multx=100000000;}
inkn=inkn+(ch*multx);
mult++;
}
return inkn;
mult=1;
}
Suscribirse a:
Entradas (Atom)