-


-


-

Caracteres raros lcd lm16l

 Tabla de caracteres raros, la verdad es que no es muy practico pero en alguna ocasion la he usado.

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

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;
                        }
                }
      }
}

AP-876: Interfaz logica programable basada en PIC16F876

La interaz logica AP-876, se trata de un dispositivo basado en el microcontrolador pic16F876 que permite al usuario interactuar con cualquier sistema digital que funcione a velocidades de hasta 4 GHz.

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


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

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

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




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).














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

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.

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
  • 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,
    Jokinmikro diagram
    Jokinmikro esquema
Los nombres de los registros son nombrados en el resto de la siguiente forma, el ssiguiente diagrama es igual que el anterior, el fin de su publicacion responde a la necesidad de dejar claro al lector el nombre reducido que corresponde a cada registro.
Jokin mikro registers
Jokinmikro modules
La tabla de funcionamiento y estado de cada registro en cada microinstruccion es la siguiente.   Hay dos principales de microinstrucciones:
  1. De modulo a Bus(de datos).
  2. De Bus(de datos) a modulo.
El modulo puede ser cualquiera de los siguientes
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.
JokinMikro mikroinstructions
JokinMikro mikroinstructions
Funcionamiento modulos, mediante bus de control
Funcionamiento modulos, mediante bus de control
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

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 y
despues utilizarlo mediante include
Descarga aqui el archivo jkbd.c

///////////////////////////////////////////////////////////////////////////
//// 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;

}