1/18/2007

Fuente de alimentación.

Tercer intento para escribir esta entrada. No termina de gustarme este sistema, pero bueno. A lo que iba.


En casa no dispongo de fuente de alimentación, pero había visto por algunas webs (Esta y esta, por ejemplo) como convertir una fuente de pc ATX en fuente de pruebas. Solución fantastica, especialmente si tienes alguna fuente muerta de asco, como era mi caso. Principal diferencia: la que yo tenia era AT, de un viejo 486, aunque salvo por el tema de encendido por soft, creo que todo lo demás es casi idéntico.


Como se explica en esos articulos, adaptar la fuente es muy sencillo: una vez abierta (Y descargados los condensadores antes, por si acaso. Que viendo el tamaño... puede salir una buena mascletá :) ) se coloca en uno de los cables de +5 Voltios (Rojos) una resitencia de carga. En mi caso, una de 10 ohms y 10 watts. Teniendo en cuenta que la va a recorrer medio amperio... mejor que sea así (10 Watts) que arriesgar con una de 5. En esos articulos se comenta el tema de colocarla pegada a la carcasa, para que refrigere. Personalmente, veo más lógico -y así lo hice- adosarla a los radiadores de los semiconductores de potencia. La gente rara vez se pilla las manos ajustando tanto algo que es importante, asi que supuse que algunos watts más no se notarian. Y de momento al menos así es. Una vez hecho esto, ya puede arrancar, ya que las smps (o fuentes conmutadas) no pueden funcionar sin carga. De normal, en el pc, es el disco duro quien hace de carga, pero para el caso sirve la resitencia. También le puse un led, principalmente porque en su dia costó una pasta, por ser medianamente buena, y una de las virtudes que tiene es que el ventilador ni se oye. Así que... mejor un simple led, y así no hay dudas sobre si está encendida.


una vez hecho eso, pueden sellarse los cables que sobran. Yo me quedé con un par de cables de masa (negros), de cara a poder tener caminos de retorno a masa diferentes para hipotéticos circuitos híbridos, pero sobretodo por si llego a conectar demasiadas cosas, tener margen para la corriente. Luego un par más de 5 voltios (rojos), que son los más utilizados en mi caso -no en vano la mayoria de lo que hago son temas digitales- , y luego uno de +12 (Amarillo), uno de -12 (Azul) y uno de -5 (blanco). No cogi el de 3'3 porque aunque no viene mal (sobretodo para los PICs LF) tengo reguladores externos de microchip y linear, y como total la potencia maxima está compartida entre las lineas de 5 y 3'3 (no así con la de 12, va al margen). hecho esto tenia +12, +5, 0, -5 y -12. No cortocircuitables, vaya, pero con tener un poco de cuidado... aun así quiero buscar algún circuito de protección. Ya veremos. El caso es que las fuentes de la universidad tienen algo muy util: una linea variable entre 0 y 30 Voltios, con 2 amperios de salida máxima. Yo no aspiraba a tanto, pero... teniendo +-12, con un simple divisor de tensión y un seguidor con op amps, ya tenia mi fuente variable, de modo que...



Como se puede apreciar, la resitencia r2 es de 2k, r1 de 180 omhs, y el potenciometro de 22k. De modo que en los extremos :

Potenciometro a 0 --> Por Millmann: [(12*180)+(-12*2000)]/2180= -10V (Aprox)

Potenciometro a 2k --> Nuevamente: [(12*22180)+(-12*2000)]/24180= 10V (Aprox)

En ambos casos da unas centésimas más, pero... tampoco necesito tanta precisión, además de que la salida no es nunca de +-12 Voltios. Esto es así porque de normal la placa base demanda unos 20 amperios, y ese consumo en la linea de 5 voltios hace subir el voltaje en la de 12. En este uso, al no haber tanta demanda, la linea de 12 voltios está realmente a unos 11'3. Otro detalle a comentar: para que la salida del seguidor tenga más potencia, y dado que uso unos TL084CN de Texas, de esos cuádruples, tengo cortocircuitadas las salidas de los 4, con la misma entrada. De este modo, pueden aportar cuatro veces la Io máxima de un sólo opamp.

En cuanto al consumo del divisor, está pensado para que apenas se note: 11mA máximo, menos de un mA de corriente mínima. A todo esto solo me que añadirle un micro para monitorizar el voltaje variable, y controlar un par de displays de 7 segmentos. Pero eso... otro dia.

También, de cara a estar lo mejor equipado posible, dentro de mi pobre enconomia estudiantil, tengo en mente ponerme con uno de estos dos osciloscopios basados en PICs para la adquisición de datos y procesado en el pc. Están el basado en PIC12F675, comunicado por RS232, y con 20 kilosamples por segundo máximo, si no me equivoco, y el basado en PIC18F2550, comunicado por usb, que llega hasta los 60 ksps. Además, combinando este con un MAX114 parece que se puede llegar a 1Megasample por segundo. Personalmente, para lo que hago en casa, más que suficiente. Así que... probablemente cuando pasen examenes, me ponga a ello...

1/07/2007

Números en ruso

Bueno, esto no es de ahora, pero... por si a alguien le sirve de algo lo posteo. Este año pasado hice primero de ruso en la escuela oficial de idiomas, y llevaba idea de hacer un programilla en builder para cojugar verbos. Al final, como no he seguido, lo he dejado de lado, pero aun conservo el que hice para saber como se esribian los números del 1 al 100. Escribiendo eso, el número, el programa devolvia en una label, y en un textbox, el número escrito correctamente.Realmente es muy sencillo, ya que la raiz es la misma para cada decena - salvo excepciones - y las terminaciones tambien. De modo que basicamente si era un número del 1 al 20 los tenia tal cual, pues eran "singulares", y si era posterior descomponia el numero en decenas y unidades, convertia cada cosa por su lado, y finalmente mostraba el resultado.

Podeis descargar el instalador de http://personales.upv.es/jetomad/setup.exe

La fuente necesaria para ver todos los caracteres en cirilico (Si no os saldrian cosas raras) es la "Bulgarian Courier". Si no recuerdo mal, iba incluida en el instalador.

Del mismo modo, creo que algun numero concreto fallaba al mostrarlo. En fin, como se puede comprobar era para "uso personal" xD.

El código fuente, por si a alguien le interesa...

//---------------------------------------------------------------------------

#include
#pragma hdrstop
#define A 192
#include "numeros.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Label2->Font->Name = "Bulgarian Courier";
Label2->Font->Size = 36;
Label2->Font->Color = clRed;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int numero, espacio=-1;
char letras[40];

numero = Edit1->Text.ToInt();

// Zona decenas...

if (numero == 100) {
letras[0]=209;
letras[1]=210+32;
letras[2]=206+32;
}
if ((numero/10)==9) {
letras[0]=196;
letras[1]=197+32;
letras[2]=194+32;
letras[3]=223+32;
letras[4]=205+32;
letras[5]=206+32;
letras[6]=209+32;
letras[7]=210+32;
letras[8]=206+32;
espacio=9;
}
if ((numero/10)==8) {
letras[0]=194;
letras[1]=206+32;
letras[2]=209+32;
letras[3]=197+32;
letras[4]=204+32;
letras[5]=220+32;
letras[6]=196+32;
letras[7]=197+32;
letras[8]=209+32;
letras[9]=223+32;
letras[10]=210+32;
espacio=11;
}

if ((numero/10)==7) {
letras[0]=209;
letras[1]=197+32;
letras[2]=204+32;
letras[3]=220+32;
letras[4]=196+32;
letras[5]=197+32;
letras[6]=209+32;
letras[7]=223+32;
letras[8]=210+32;
espacio=9;
}

if ((numero/10)==6) {
letras[0]=216;
letras[1]=197+32;
letras[2]=209+32;
letras[3]=220+32;
letras[4]=196+32;
letras[5]=197+32;
letras[6]=209+32;
letras[7]=223+32;
letras[8]=210+32;
espacio=9;
}

if ((numero/10)==5) {
letras[0]=207;
letras[1]=223+32;
letras[2]=210+32;
letras[3]=220+32;
letras[4]=196+32;
letras[5]=197+32;
letras[6]=209+32;
letras[7]=223+32;
letras[8]=210+32;
espacio=9;
}

if ((numero/10)==4) {
letras[0]=209;
letras[1]=206+32;
letras[2]=208+32;
letras[3]=206+32;
letras[4]=202+32;
espacio=5;
}

if ((numero/10)==3) {
letras[0]=210;
letras[1]=208+32;
letras[2]=200+32;
letras[3]=196+32;
letras[4]=214+32;
letras[5]=192+32;
letras[6]=210+32;
letras[7]=220+32;
espacio=8;
}

if (numero/10==2) {
letras[0]=196;
letras[1]=194+32;
letras[2]=192+32;
letras[3]=196+32;
letras[4]=214+32;
letras[5]=192+32;
letras[6]=210+32;
letras[7]=220+32;
espacio=8;
}

//zona del 1 al 19. Si hay espacio, pongo simbolo...
if (espacio!=-1) letras[espacio]=32;
//seguimos del 1 al 19...

if ((numero==1) || (numero%10==1)){
letras[espacio+1]=206;
letras[espacio+2]=196+32;
letras[espacio+3]=200+32;
letras[espacio+4]=205+32;
if (numero>10) espacio=espacio+4;
else espacio=3;
}

if ((numero==2) || (numero%10==2)){
letras[espacio+1]=196;
letras[espacio+2]=194+32;
letras[espacio+3]=192+32;
if (numero>10) espacio=espacio+3;
else espacio=2;
}

if ((numero==3) || (numero%10==3)){
letras[espacio+1]=210;
letras[espacio+2]=208+32;
letras[espacio+3]=200+32;
if (numero>10) espacio=espacio+3;
else espacio=2;
}

if ((numero==4) || (numero%10==4)){
letras[espacio+1]=215;
letras[espacio+2]=197+32;
letras[espacio+3]=210+32;
letras[espacio+4]=219+32;
letras[espacio+5]=208+32;
letras[espacio+6]=197+32;
if (numero>10) espacio=espacio+6;
else espacio=5;
}

if ((numero==5) || (numero%10==5)){
letras[espacio+1]=207;
letras[espacio+2]=223+32;
letras[espacio+3]=210+32;
letras[espacio+4]=220+32;
if (numero>10) espacio=espacio+4;
else espacio=3;
if (numero==15) espacio--;
}

if ((numero==6) || (numero%10==6)){
letras[espacio+1]=216;
letras[espacio+2]=197+32;
letras[espacio+3]=209+32;
letras[espacio+4]=220+32;
letras[espacio+5]=220+32;
if (numero>10) espacio=espacio+5;
else espacio=4;
}

if ((numero==7) || (numero%10==7)){
letras[espacio+1]=209;
letras[espacio+2]=197+32;
letras[espacio+3]=204+32;
letras[espacio+4]=220+32;
if (numero>10) espacio=espacio+4;
else espacio=3;
}

if ((numero==8) || (numero%10==8)){
letras[espacio+1]=194;
letras[espacio+2]=206+32;
letras[espacio+3]=209+32;
letras[espacio+4]=197+32;
letras[espacio+5]=204+32;
letras[espacio+6]=220+32;
if (numero>10) espacio=espacio+6;
else espacio=5;
}

if ((numero==9) || (numero%10==9)){
letras[espacio+1]=196;
letras[espacio+2]=197+32;
letras[espacio+3]=194+32;
letras[espacio+4]=223+32;
letras[espacio+5]=210+32;
letras[espacio+6]=220+32;
if (numero>10) espacio=espacio+6;
else espacio=5;
}

if (numero==10){
letras[espacio+1]=196;
letras[espacio+2]=197+32;
letras[espacio+3]=209+32;
letras[espacio+4]=223+32;
letras[espacio+5]=210+32;
letras[espacio+6]=220+32;
letras[espacio+7]=0;
}

if ((numero<20) && (numero>10)){
letras[espacio+1]=205+32;
letras[espacio+2]=192+32;
letras[espacio+3]=196+32;
letras[espacio+4]=214+32;
letras[espacio+5]=192+32;
letras[espacio+6]=210+32;
letras[espacio+7]=220+32;
espacio=espacio+7;
}
letras[espacio+1]=0;
if ((numero<1) || (numero>100)) {Label4->Caption = "Numero no valido";
Label2->Caption = "";}
else {Label2->Caption = letras;
Label4->Caption = "";}


}
//---------------------------------------------------------------------------