• Martes 1 de Julio de 2025, 16:30

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - carmamezo

Páginas: 1 2 3 [4] 5 6 ... 10
76
Programación en C / Re: Nuevo Con Smbus
« en: Jueves 21 de Septiembre de 2006, 12:34 »
Citar
Entonces ahora tengo el problema de como interpretar los datos del smbus
Pues tendrás que leer el pdf que está en la página que mencioné en el anterior post.
Debes tener en cuenta que el SMBus está basado en el protocolo I2C, y creo que los PIC tienen integrado un bus I2C (o algo así)...
En cuanto a convertir la información, en el documento se explica el formato de las tramas usadas en el bus SMBus, puedes sacar de cada trama lo que te interesa y enviarlo mediante RS-232, lo mismo cuando quieras enviar información desde RS-232 hacia SMBus.  El pic basicamente se debe encargar de transformar los datos.
Citar
que microchip escojer
Pues supongo que un PIC16F873 será más que suficiente, además necesitarás un circuito tipo MAX232 para hacer la conversión de niveles TTL a niveles RS-232, no es necesario usar ningún interfaz para la conexión con SMBus pues utiliza niveles TTL.

No tengo experiencia con este bus, asi que no puedo ayudarte más, de todas formas ya  te digo que toda la información está en el documento.

Un saludo y suerte.  :lightsabre:

77
Hardware / Re: Grabador De Dvd Lg
« en: Jueves 21 de Septiembre de 2006, 10:33 »
Hola de nuevo,
pues de verdad amigo que sólo se me ocurre que se pueda deber a la protección de tipo region....
Aqui te dejo algunos links a programas que teoricamente eliminan las protecciones:
DVD Region+CSS Free
Cuesta 40$ pero creo que todos aqui sabemos cómo conseguirlo "de prueba" mediante una mulita electrónica....

Además podrías buscar firmware para la grabadora que te permita hacer el lector region free...
Aqui tienes una herramienta que te da información sobre tu grabadora y te indica el número de regiones que le restan...
Drive Region Info

Y aqui te dejo otra herramienta que te permite quitar protecciones de los programas más usados:
DVD Genie
Ambos han sido sacados de una gran página dedicada al mundo DVD y el rippeo...
Doom9
Además está en Español.

Puede que te interese además leer lo que viene en la siguiente página (sacada de un enlace del DVD Genie):
FAQ

En fin, veamos si con estas herramientas consigues algo y nos cuentas...

Un saludo.  :lightsabre:

78
Programación en C / Re: Nuevo Con Smbus
« en: Miércoles 20 de Septiembre de 2006, 10:06 »
Hola,
No comprendo muy bien tu pregunta... lo que quieres es realizar un interfaz SMBus - serial RS232 ????

Pues suerte.... la cosa es complicada, aqui te dejo un enlace a las comunicaciones SMBus...  SMBus

Si lo que quieres es leer la temperatura de la CPU, en mi opinion vas por muy mal camino, la cosa es más sencilla (que no mucho más).  Se puede leer la temperatura de la CPU mediante llamadas a las instrucciones Inport y Outport, claro que todo esto conlleva una serie de problemas.... Quizás te interese un hilo que abrí en el apartado de programación en C/C++, en él se explica cómo leer la temperatura de un Chip SuperIO del tipo IT8712, es exportable a un chip Winbond y por supuesto se puede utilizar para leer la temperatura de cualquier tipo de chip IT87xx.
Además de la temperatura se pueden leer los voltajes, rpm de los ventiladores, cambiar los PWM....

El hilo es el siguiente: Lectura de temperatura

79
Hardware / Re: Grabador De Dvd Lg
« en: Miércoles 20 de Septiembre de 2006, 09:52 »
Hola a todos,
si el DVD puedes leerlo en un reproductor, puedes leerlo en tu PC.  Eso seguro, ahora bien, no sé muy bien a que te refieres cuando dices que no lo lees.
Si fuera un DVD normal, debería contener dos directorios en el interior, uno que será el Video_TS y otro que será el Audio_TS (creo).
Quizás estén ocultos, prueba a ver los archivos ocultos a ver si los encuentras con el explorador de windows.  Luego utiliza el magnifico programa (DVDshrink) para realizar la copia, digo magnífico porque es muy sencillo de utilizar y funciona muy bien.

Si aún así no consigues ver nada en su interior.... pues es una incógnita... Tal vez se deba a la codificación de tipo Region.  Los DVDs tienen un sistema de codificación que impide que los DVDs de un lugar del mundo puedan ser reproducidos en otro lugar (aunque esta protección creo que sólo afecta a los reproductores, no a los ordenadores).
Por la red hay infinidad de herramientas para realizar "Region free", que permite que el DVD pueda ser reproducido en cualquier sitio.  De hecho el DVDShrink permite hacer copias region free.

En fin, ya nos contarás si lo resuelves.
suerte y un saludo.  :lightsabre:

80
Windows / Re: ¿cómo Deshabilitar Los Mensajes Sin Leer?
« en: Lunes 18 de Septiembre de 2006, 09:35 »
Prueba lo siguiente:

inicio -> ejecutar -> regedit

Busca la siguiente clave:
HKEY_CURRENT_USER\Software\Microsoft\windows\CurrentVersion\Unreadmail

Si la tienes tendrás que poner a 0 la siguiente clave:
MessageCount

Espero que te sirva de ayuda, Un saludo.  :lightsabre:

81
C/C++ / Re: Consulta Sobre La Ejecucion De Dos Programas
« en: Lunes 18 de Septiembre de 2006, 09:26 »
Lo primero sería saber si cuando se refiere a que tiene un programa en MS-DOS se refiere a que el programa corre en modo consola o realmente es un programa MS-DOS puro corriendo en un OS monotarea... En fin, sea como sea, yo lo que entiendo es que el amigo quiere pasar argumentos a un programa y recibir los resultados.
Si el programa es un servidor de correo o algo así y funciona mediante Telnet, pues la solución sería usar Sockets como bien ha indicado Tonilope.
Si ambos programas han sido programados por él mismo, lo más fácil sería usar las herramientas de comunicación entre procesos típicas de windows (siempre que use este SO...) como son la memoria compartida, buzones (mailboxes)...
Si uno de los programas no ha sido programado por él mismo, pues toca trabajar, puedes utilizar la función system() para llamar al programa y pasarle argumentos, pero si este programa deja los resultados en la consola, la cosa se complica, pues no es fácil leer lo que hay en la consola...  También podrías usar la función CreateProcess() de la API de windows...
En fin, todo esto son divagaciones, hasta que no aclares completamente tu pregunta será difícil ayudarte.

Un saludo.  :lightsabre:

82
La taberna del BIT / Re: Sueldo De Un Programador
« en: Miércoles 6 de Septiembre de 2006, 12:14 »
Hola a todos,
en España normalmente los sueldos van acordes al título que tengas.  Al menos esto importa a la hora de ser contratado por primera vez.  Una vez que dispongas de un curriculum extenso con mucha experiencia los títulos son cada vez menos importantes y la experiencia importa más.  De todas formas el título que dispongas marca un poco el sueldo base, a partir de ahí, según experiencia y valía puedes ganar más.

De todas formas puedo decir casi con total seguridad que es difícil encontrar un trabajador sin título universitario que gane más que otro con un título realizando ambos un trabajo parecido.

Un ejemplo, el sueldo típico de un:

Ingeniero técnico (carrera de 3 años de duración) es de unos 25.000€ brutos al año (a esto hay que quitarle lo que se lleva hacienda, el seguro....) lo que son unos 31.604,96 US dolares.

Ingeniero superior (carrera de 5 años de duración) es de unos 28.000€ brutos anuales, unos 35.397,55 US dolares.

En fin, esto es el sueldo base de un ingeniero más o menos.  Hablo de ingenieros pues no sé a cuánto ascenderá el sueldo de un programador.  De todas formas ya os puedo decir que es menor,  la única manera de ganar mucho dinero como programador suele ser entrando en una gran compañía de software, cosa que en España es difícil de encontrar.

Lo teneis más fácil los que vivis cerca de los EEUU.... es un decir....

De todas formas como bien se ha dicho antes, hay que tener en cuenta el precio de vivir en cada país, en Inglaterra los sueldos son más altos pero también lo es el modo de vida....

Lo mejor... conocer a Bill Gates y que te haga directivo de algo en Microsoft, porque al final los que más ganan no son los trabajadores sino los jefes.  B)

Un saludo.  :hola:

83
C/C++ / Re: Leer La Temperatura Del Pc
« en: Jueves 17 de Agosto de 2006, 21:32 »
Que yo sepa los fabricantes de placas base no aportan ninguna librería ni driver para conseguir esta información, dan programas que hacen lecturas pero no dicen cómo consiguen esos programas la información....  Yo he tenido que leer mucha información para linux, en concreto el programa lmsensors y sus códigos fuentes para poder ir sacando información...

Bueno, finalizando con el tema.

El SuperIO chip ITE funciona de la siguiente manera:
- El chip dispone de dos registros, el primero se encuentra en la posición 0x05h + base de direcciones, el segundo se encuentra en la 0x06h + la base de direcciones.

- Vale, la base de direcciones cambia según qué parámetros queramos leer/escribir, pero para acceder a los registros base (los primeros...) es una única y está localizada en la dirección 0x29h.

Por tanto los registros donde leer/escribir al comienzo son los siguientes:
0x29+0x05=0x2e
0x29+0x06=0x2f

Un ejemplo, si queremos leer el registro 0x12h del ITE al comienzo, tendremos que hacer lo siguiente:
Código: Text
  1.  
  2. PortOut(0x2e,0x12);//le indicamos que queremos realizar algo con el registro 0x12
  3. res=PortIn(0x2f);//el chip nos deja el registro solicitado en la dirección contigua para que hagamos con él lo que queramos, en este caso leerlo
  4.  
  5.  
Si lo que queremos es escribir en el registro 0x12h un valor:
Código: Text
  1.  
  2. PortOut(0x2e,0x12);
  3. PortOut(0x2f,valor);
  4.  
  5.  
Pues una vez que sabemos cómo funciona la comunicación... lo demás es seguir el manual...

PASO 1: INICIALIZAR LAS COMUNICACIONES.

Para inicializar las comunicaciones con el chip hay que enviar una serie de bytes al primer registro antes comentado:
Código: Text
  1.  
  2. //Inicializacion del ITE
  3. PortOut(0x2e,0x87);
  4. PortOut(0x2e,0x01);
  5. PortOut(0x2e,0x55);
  6. PortOut(0x2e,0x55);
  7.  
  8.  
Esto no es cosa mia... biene en el manual.  Y no se debe olvidar acabar las comunicaciones al final del programa enviando un dos a la misma dirección:
Código: Text
  1.  
  2. //Finalizar ITE
  3. PortOut(0x2e,0x02);
  4.  
  5.  


PASO 2: COMPROBAR QUE EL CHIP ES UN ITE8712.

Ningún problema, el fabricante deja un par de registros de lectura, el 0x20 y el 0x21 donde se encuentran dos valores hexadecimales:
0x20 contiene un 0x87
y
0x21 contiene un 0x12
Justamente los números de nuestro chip.

Pues vamos a realizar la comprobación, y ya de paso creo un par de funciones genéricas para leer y escribir bytes en registros del ITE (ya vereis por qué las hago genéricas (con la base variable) más adelante):
Código: Text
  1.  
  2. unsigned char LeeITE8712(unsigned short base, unsigned char registro)
  3. {
  4. PortOut(base+0x05,registro);
  5. return PortIn(base+0x06);
  6. }
  7.  
  8.  
  9. void EscribeITE8712(unsigned short base, unsigned char registro, unsigned char valor)
  10. {
  11. PortOut(base+0x05,registro);
  12. PortOut(base+0x06,valor);
  13. }
  14.  
  15.  
  16. //ahora comprobamos si el chip es un ITE
  17. int CompruebaITE8712()
  18. {
  19. if(LeeITE8712(0x29,0x20)==0x87 && LeeITE8712(0x29,0x21)==0x12)
  20. return 1;
  21. else
  22. return 0;
  23. }
  24.  
  25.  
Pues ya está, si la función nos devuelve un 1, es que el chip es un ITE8712.


PASO 3: LEER/ESCRIBIR REGISTROS.

Antes que nada hay que saber que este chip tiene una serie de LDNs, y la mayoría de registros sólo pueden ser accedidos desde el LDN adecuado.  
LDN (cualquiera) : podemos acceder a los registros comunes como el ID del chip (0x20 y 0x21), al configuration select (0x07)...
LDN 0: aqui están los registros del controlador del floppy disk
LDN 1: puerto serie 1
LDN 2: puerto serie 2
LDN 3: puerto paralelo
LDN 4: registros del environment
LDN 5: keyboard
LDN 6: mouse
LDN 7: configuracion GPIO
LDN 8: puerto MIDI
LDN 9: puerto de juegos
LDN 10: IR

Hay que leer el manual y consultar en qué LDN está el registro que me interesa.  En este caso todos los registros relacionados con el "environment" (temperaturas, fans, vins...) están en el LDN 4.  Y ¿qué significa esto? pues que la dirección base 0x29 ya no nos sirve, por eso antes hice las funciones con la base variable.
En la dirección 0x29 están los registros básicos para comenzar a usar el chip. Pero no los verdaderamente interesantes.

Para poder seleccionar otro LDN hay que escribir el valor del LDN deseado en el registro 0x07 aún con la base inicial 0x29 (claro, sino menudo negocio).
Luego se debe comprobar que está activado realizando una lectura del registro 0x30 y si este registro vale 1, es que nuestro chip tiene iniciado el servicio que queremos (en este caso el environment):
Código: Text
  1.  
  2. //Cambiamos el LDN al 4 escribiendo un 4 en el registro 7
  3. EscribeITE8712(0x29,0x07,0x04);
  4. //Ahora comprobamos si ese servicio está activo
  5. if(LeeITE8712(0x29,0x30)==0)
  6. printf("La cagamos... El servivio no está activo");
  7. else
  8. printf("Vamos bien.");
  9.  
  10.  
Se puede escribir también este registro, asi que si el servicio no está iniciado supongo que se podrá iniciar escribiendo un 1 en el registro 0x30...

Pues si hemos tenido éxito, ya podremos conseguir nuestro propósito, que no es más que conocer la dirección base de todos los registros de la función de environment.

Para ello lo único que hay que hacer es leer un registro concreto, bueno, mejor dicho dos registros...  Las direcciones de los dispositivos de este tipo son de 16bits... Para saber la nueva dirección base hay que leer los registros 0x60 y 0x61 y generar con ellos una dirección.  Se podría hacer una función como las anteriores encargada de leer dos bytes, pero bueno:
Código: Text
  1.  
  2. //actualizamos la base de direcciones
  3. nueva_dir_base=LeeITE8712(0x29,0x60)<<8 | LeeITE8712(0x29,0x61);
  4.  
  5.  
Y ya está, ya tenemos la nueva dirección base, una vez que tenemos esta dirección a leer/escribir los registros que nos interesan del LDN 4.

Un ejemplo para finalizar, se trata de un programa completo usando las funciones de la io.dll que comenté en el primer post para realizar la tarea de leer las tres temperaturas que este chip puede leer:
Código: Text
  1.  
  2. #include <windows.h>
  3. #include <stdio.h>
  4.  
  5. //llamamos a la librería creada por el amigo del IO
  6. #include "io.h"
  7.  
  8.  
  9. //creamos una funcion que lee registros del IT8712
  10. unsigned char LeeIT8712(unsigned short base,unsigned char registro)
  11. {
  12.   PortOut(base+0x05,registro);
  13.   return ( PortIn(base+0x06) );
  14. }
  15.  
  16. //creamos una función que lee dos registros contiguos del IT8712
  17. unsigned short LeeWordIT8712(unsigned short base,unsigned char registro)
  18. {
  19.   return( LeeIT8712(base,registro)<<8 | LeeIT8712(base,registro+1) );
  20. }
  21.  
  22. //creamos una función que escribe bytes en registros del IT8712
  23. void EscribeIT8712(unsigned short base,unsigned char registro, unsigned char valor)
  24. {
  25.     PortOut(base+0x05,registro);
  26.     PortOut(base+0x06,valor);
  27. }
  28.  
  29. //creamos una función que escribe dos bytes en registros contiguos del IT8712
  30. void EscribeWordIT8712(unsigned short base,unsigned char registro, unsigned short valor)
  31. {
  32.   EscribeIT8712(base,registro,(unsigned char)(valor>>8));
  33.   EscribeIT8712(base,registro+1,(unsigned char)(valor&0xff));
  34. }
  35.  
  36.  
  37. //creamos una función que nos finaliza la comunicación
  38. void FinalizaIT8712(void)
  39. {
  40.   PortOut(0x2e,0x02);
  41. }
  42.  
  43.  
  44. //creamos una función que nos inicia y comprueba el chip
  45. int IniciaIT8712()
  46. {
  47.   PortOut(0x2e,0x87);//estos datos vienen predefinidos en el data sheet
  48.   PortOut(0x2e,0x01);
  49.   PortOut(0x2e,0x55);
  50.   PortOut(0x2e,0x55);
  51.  
  52.   //nos garantizamos el fin de las comunicaciones con el chip al terminar
  53.   atexit(FinalizaIT8712);
  54.  
  55.   if(LeeIT8712(0x29,0x20)==0x87 && LeeIT8712(0x29,0x21)==0x12)
  56.     return 1;
  57.   else
  58.     return 0;
  59. }
  60.  
  61.  
  62. void main()
  63. {
  64.   unsigned short dir_base=0x29;
  65.   int res,i;
  66.  
  67.  
  68.  
  69.   if(LoadIODLL() == 0 && IsDriverInstalled()==0)
  70.   {
  71.     printf("\n\t\aERROR inicializando driver.");
  72.     getch();
  73.     exit(1);
  74.   }
  75.  
  76.   //iniciamos el IT8712
  77.   if(IniciaIT8712()==0)
  78.   {
  79.     printf("\n\t\aEl chip IT8712 no se encuentra instalado.");
  80.     getch();
  81.     exit(2);
  82.   }
  83.  
  84.  
  85.   //cambiamos el LDN a 4
  86.   EscribeIT8712(dir_base,0x07,0x04);
  87.  
  88.   //comprobamos que el servicio está activo
  89.   if (LeeIT8712(dir_base,0x30)==0)
  90.     //si no está activo lo activamos
  91.     EscribeIT8712(dir_base,0x30,0x01);
  92.  
  93.   //leemos la nueva dirección base
  94.   dir_base=LeeWordIT8712(dir_base,0x60);
  95.  
  96.   //Ya estamos, a leer las 3 temperaturas que en este caso están en
  97.   //los registros 0x29,0x30 y 0x31 respectivamente
  98.  
  99.    while(!_kbhit())
  100.    {
  101.      system("Cls");
  102.      for(i=0;i<3;i++)
  103.        printf("\n\tTemp %d: %d",i+1,LeeIT8712(dir_base,0x29+(unsigned char)i));
  104.  
  105.      //hacemos una pausa de 1s pq las temperaturas tardan en actualizarse
  106.      Sleep(1000);
  107.    }
  108. }
  109.  
  110.  
  111.  

Pues nada más que añadir, espero que os sirva de mucha ayuda, sabed que yo he dedicado muchas horas de mi amada vida para conseguir esta miguita de información así que aprobecharla bien.

Por cierto, para los que esto les parezca poco, también se pueden hacer lecturas de la temperatura de los discos duros.... aprobechando la función SMART que tienen ahora, pero esto es mucho más sencillo, se puede realizar mediante llamadas a las rutinas de la API de windows....

Un saludo a todos  :lightsabre:

 :hola:

84
C/C++ / Re: Leer La Temperatura Del Pc
« en: Jueves 17 de Agosto de 2006, 19:41 »
En el caso de mi placa se puede saber la temperatura del procesador y de la placa base.

85
C/C++ / Re: Leer La Temperatura Del Pc
« en: Jueves 17 de Agosto de 2006, 08:56 »
También se pueden controlar las rpm de los ventiladores mediante PWM y visualizar las medidas de tensión que llegan de la fuente de alimentación.
Además se puede configurar el chip para que varíe la velocidad del ventilador según la temperatura...
También se puede controlar la configuración de los puertos serie, paralelo, Irda...
En fin hay un sinfin de registros, depende de las posibilidades de cada chip...

Eternal Idol:

Se que el uso de las instrucciones de entrada/salida de puertos de esta manera no es demasiado correcta... por llamarlo de alguna forma... si conoces otro sistema que permita la utilización de estas instrucciones de forma más correcta, no dudes en comunicármelo.

Cuando vuelva a casa comentaré cómo leer los distintos registros del chip...

86
C/C++ / Leer La Temperatura Del Pc
« en: Miércoles 16 de Agosto de 2006, 21:12 »
Primero, hola a todos  :hola:

Hace ya mucho tiempo que comencé un hilo sobre este tema.... la posibilidad de leer la temperatura de la placa base (motherboard) mediante un programa en C.  Por lo que sé no es una simple curiosidad que yo tengo sino que hay bastante gente que le interesa esta información...  
Por aquel entonces quería hacer un proyecto para la universidad, ahora que ya estoy trabajando tengo más tiempo para perder en estas cositas, así que lo que fué un proyecto inacabado se ha convertido en un objetivo de pura cabezonería

Bueno, ultimamente he retomado mis indagaciones y parece que he conseguido lo imposible...  POR FIN LEO LAS TEMPERATURAS!!!!  :comp:

Bien, el tema es bastante espeso, así que iré posteando todas mis averiguaciones sobre este hilo, si a los moderadores no les importa.  :rolleyes:

Ahora mismo estoy peleandome con las lecturas de Voltajes y velocidades de los ventiladores...  Iré posteando todo lo que saco.

Antes de que nadie se alegre demasiado he de decir que tan sólo funciona con placas base que tengan el Super IO chip ITE8712... Mirad el manual de la placa base o bajaros algún programa que sondee el hardware de vuestro sistema para comprobar qué tipo de SuperIO chip teneis.

La idea de este hilo es que cada uno vaya haciendo averiguaciones con su propia placa (y su propio IO chip) y así lo que ha empezado siendo una cuestión de cabezonería se convierta en todo un proyecto...

Por internet no hay demasiada información al respecto, así que voy a contar todo lo que he logrado y sobre todo cómo lo he logrado... :smartass:
Al fin y al cabo compartir es vivir y si puedo arrojar luz sobre este tema tan oscuro pues mejor que mejor... :D


No tengo todo el tiempo que necesitaría para escribir todo así que voy a ir escribiendo poco a poco en distintos mensajes...

PASOS PREVIOS:
--------------------
- Primero y antes que nada debemos saber un par de cosas sobre cómo funcionan las placas base, sobre todo cómo son capaces de darnos esa información que aparece en la bios en la parte de hardware monitor:
   
En nuestra placa base hay una serie de sensores montados, miden la temperatura del micro, de la placa, del chipset, miden las revoluciones de los ventiladores y permiten modificar su velocidad mediante PWM (modulación por ancho de pulso), miden las temperaturas que llegan al micro... +5v, -5v, +12v, -12v, +3,3v...

Bueno pues todos estos elementos suelen estar conectados a un chip llamado SuperIO chip, que se encarga de además de realizar estas tareas manejar los puertos serie y paralelo, los infrarojos, lectura de tarjetas de memoria...
Esto es, se encargan de controlar todo lo que es IO (entradas/salidas) de nuestro PC.

- Una vez dicho esto, el segundo paso será conocer el tipo de SuperIO chip que tiene nuestra placa base (si es que lo tiene), hay bastantes marcas y cada marca tiene un monton de modelos distintos:
Ali,ITE,National Semi Conductor (NS), SIS, SMC, Winbond...

Los más conocidos sin duda son los ITE y los Winbond.  Si vuestra placa es de cierta calidad seguro que los llevan.

Para poder saber qué tipo de SuperIOchip teneis, lo mejor es o bien leer el manual de vuestra placa o bien bajaros un programa que os lo diga.
Os recomiendo que os bajeis el programa Speedfan está realizado por un tal Alfredo Milani y es gratuito.  Además os servirá para comprobar si el programa que hacemos hace las mediciones correctamente o no.


- Bueno pues los pasos previos están dados.... ahora queda sin duda lo más dificil...
¿¿¿ Cómo se accede a los registros de estos SuperIO chips ???? pues esta es la gran pregunta sin respuesta.... Hasta ahora. :P

Vale, pues para poder comunicarnos con estos SuperIOchips hace falta usar las instrucciones Inp() y Outp(), que permiten hacer lecturas/escrituras en puertos.

**1er problema, estas instrucciones a partir de windows NT son privilegiadas y tan sólo los programas con un nivel de privilegio adecuado pueden usarlas, así que si estais usando windows NT, 2000, xp la cosa se complica.  Pero no pasa nada...
Tan sólo los drivers pueden realizar llamadas a estas instrucciones.

SOLUCION:
Aqui hay varias soluciones...
Necesitamos una dll, que nos permita hacer llamadas a un .sys de nuestro sistema que se encargue de ofrecernos una serie de funciones para lectura/escritura de los puertos.

Yo he encontrado dos, ambas gratuitas siempre y cuando no vayamos a hacer negocio con ellas (como es mi caso).
La primera es la CanIO.dll y CanIO.sys.  De CanSOFT, bueno, son canadienses como se nota...  Esta dll era la que usaba el MBM (mother board monitor) creo, un pedazo de programa donde los haya que desgraciadamente ha dejado de ser actualizado.
La librería puede ser descargada de aqui.

La segunda posibilidad es la que yo he usado finalmente, se trata de una dll llamada io.dll, que se encarga de llamar al io.sys de nuestro sistema y nos ofrece un monton de funciones para lectura/escritura de los puertos.
La podeis descargar de aqui.
Además esta última cuenta con unos archivos para compilar junto con nuestro programa y que nos facilitan mucho las cosas... están en varios lenguajes....


Bueno, hasta aqui por hoy, que se me hace tarde.
El próximo día hablaré de cómo se inicia esta dll y de cómo se inician las comunicaciones con el SuperIOchip....


Para los que están muy interesados.... deberes para casa!!!!  :devil:
Buscad y rebuscad por internet las especificaciones de vuestro SuperIOchip, esta es la clave del éxito, no hay más....
Para los que teneis un SuperIO chip de ITE... aqui os dejo un enlace a los documentos necesarios para conseguir nuestro objetivo.  Seguramente que aunque vuestro chip no sea el mismo funcionará de forma parecida...

Por cierto mi placa base es una ASUS A8NSLI DELUXE, si la teneis, ya sabeis que SuperIO chip teneis.

Un saludo.  :lightsabre:

87
Programación de Aplicaciones para Dispositivos / Re: Dsp
« en: Sábado 12 de Agosto de 2006, 19:13 »
Bueno pues puedes programarlo en ensamblador.... o en C.
Me decanto más por el C (más bien C++), sobre todo si quieres hacer tratamiento de imágenes, si buscas bien seguro que encuentras rutinas en C para estos DSPs que puedan serte de utilidad.

¿El compilador?, pues si no me equivoco para C era el CodeComposer y para ensamblador era SDI24xASM, pero ese era para el DSP TSM320F24X que yo usaba...

En cuanto a qué hardware necesitas... pues depende de cómo quieras cargar la imagen, directamente desde una cámara o mediante un bus de datos, mediante el puerto serie/paralelo, mediante TCP/IP...
Vamos, que depende de lo que quieras hacer.

Un saludo.

88
Hardware / Re: Memoria Ram.
« en: Sábado 5 de Agosto de 2006, 14:54 »
Te recomiendo mantener la frecuencia a 400MHz y desechar la memoria de 266MHz.
512MB de RAM siguen siendo suficientes para los SOs actuales, además seguramente que tu placa base cuente con Dual Channel, y este sistema funciona unicamente con memorias iguales dispuestas convenientemente en cada canal (el funcionamiento es el siguiente, la suma de memorias en un canal tiene que ser igual a la suma de memorias en el otro canal), esto es, necesitas una pareja de memorias clónicas (misma marca, misma latencia, misma capacidad...) para conseguir el máximo rendimiento.
Si algún día quieres aumentar  tu memoria puedes comprar nuevos slots de 512MB y colocarlos en ambos canales.
El precio hoy en día no es muy alto... al menos donde yo vivo... :whistling:

En fin, esta es mi humilde opinion.

Un saludo.  :lightsabre:

89
Soluciones de Hard y Soft / Re: Insoladora
« en: Jueves 3 de Agosto de 2006, 09:29 »
Hola a todos!!!
Pues yo si que me hice una insoladora casera!!!
Usé lámparas de luz negra (son lámparas UVA) las que se usan para ponerse morenita la gente... :lol:  
Tienen la ventaja de insolar muy rápidamente, unos 8mins es más que suficiente.
Tienen la desventaja de ser muy caras...

Yo usé dos tubos de unos 20cm, y la verdad es que funciona perfectamente.

Un saludo. :lightsabre:

90
Microcontroladores / Re: 16f88 Y Max232
« en: Domingo 30 de Julio de 2006, 18:38 »
Pues creo que si, es necesario para convertir las señales TTL a niveles RS-232.  Yo lo he usado y va muy bien...  Claro que yo programé el PIC en C con el CCS picc compiler.
Para usar la comunicación serie con ese compilador basta con incluir lo siguiente en la cabecera:

#use delay (clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

Por supuesto esto cambiará dependiendo del reloj de cuarzo que uses y los pines que desees usar para enviar y recibir los datos así como la velocidad de envío.

Una vez realizada esta configuración, lo único que debes hacer es llamar a printf() o putc()... o cualquier otra función para envio de datos por el puerto serie, puedes llamar a scanf(), getc()... para recivir datos.

En cuanto al hardware, aqui tienes una página sacada del google:
Max232

Espero que te sirva de ayuda.
 :lightsabre:

91
Matlab / Re: Transformar Señal Del Tiempo A La Frecuencia
« en: Viernes 28 de Julio de 2006, 14:05 »
Perdon, se me olvidó incluir lo siguiente en la llamada a la función fft:
fft (h,1024);

1024 son los puntos devueltos por la fft...
Lo puse así para que se pareciera a lo que querías hacer, variará según los puntos devueltos por la fft.

Lo de la frecuencia es simplemente un vector de puntos que coincidan con las muestras obtenidas de la señal:
Si hemos muestreado a 1000Hz, pues por Nyquist sabemos que la frecuencia de la señal muestreada variará entre 0 y 500Hz.  

Si lo has muestreado a 500Hz, pues tu vector de salida de frecuencia irá de 0 a 250Hz.

y para equiespaciar este vector de frecuencias basta con multiplicar el vector de frecuencia que va de 0 a 250 (si muestreas a 500Hz) por la frecuencia de muestreo y dividirlo por el número de muestras.

Un saludo.

92
Matlab / Re: Transformar Señal Del Tiempo A La Frecuencia
« en: Lunes 24 de Julio de 2006, 16:20 »
Bueno, si no recuerdo mal, la transformada de fourier devuelve un espectro de frecuencias positivas y negativas.
Esto es, la primera mitad del array de puntos devueltos por la fft es el correspondiente a las frecuencias positivas, el valor del medio es el correspondiente a una frecuencia de 0Hz y la segunda mitad del array es la parte correspondiente a frecuencias negativas....  Por tanto sólo interesa la primera mitad del array.
Además hay que realizar una serie de cálculos para poder visualizar correctamente la amplitud de los picos que corresponden a la frecuencia de la señal.  Prueba con lo siguiente:
Vamos a muestrear una señal con varias componentes (una de 50Hz y otra de 20Hz) a una frecuencia de 1000Hz.

t=[0:0.001:1];
h=2*sin(2*pi*50*t)+5*sin(2*pi*20*t);

H=fft(h);
ptos=H.*conj(H)/1024;
frec=1000*(0:512)/1024;
plot(frec,ptos(1:513));


Y teoricamente deberían aparecer dos picos bastante pronunciados a las frecuencias de 50 y 20Hz respectivamente.
Espero que te sirva de ayuda...
Y espero que esté bien el ejemplo....

93
C/C++ / Re: Problemilla Con Sockets
« en: Jueves 20 de Julio de 2006, 09:19 »
direccion es de tipo sockaddr_in no sockaddr.
No puedes hacer una conversión de tipo cast entre dos estructuras incompatibles.

Saludos.

94
C/C++ / Re: Puerto Serie Win32 Api
« en: Martes 18 de Julio de 2006, 09:29 »
Pues no sé cómo será en el Dev C++ pero en Visual Studio basta con añadir la librería de cabecera windows.h.
Eso es todo.

Seguramente has leido la ayuda de c# en MSDN, mira a ver este link:
MSDN
A partir de este link busca el resto de funciones necesarias...
Windows 2k y XP permite usar el puerto serie mediante la API como si de un fichero se tratara.

95
Hardware / Re: Y Si Pierdo Mi Bios?
« en: Miércoles 12 de Julio de 2006, 16:10 »
pues a mi me da que estos chips no los venden en las tiendas... me da que son full custom, o sea que los fabrican exclusivamente para los fabricantes de placas según sus necesidades.
Alguna empresa dedicada a los CPLDs o así como Xilinx o alguno de estos les harán los chips a medida o sino habrá algún fabricante especializado en estos chips.
Me da que va a ser encontrar estos chips por ahi... :D

Un saludo.
 :lightsabre:

96
Hardware / Re: Y Si Pierdo Mi Bios?
« en: Miércoles 12 de Julio de 2006, 11:34 »
Pues hombre si quitas la bios y la borras seguramente que la has liado... ahora las placas bases vienen con un chip que puede ser actualizado, pero siempre queda el chip soporte grabado de fábrica y que mantiene la configuración por defecto...
Quieres hacer tu propia bios... suerte, ya nos contarás como te las arreglas...
La verdad es que si yo hago eso mi siguiente paso sería tirar la placa a la basura y comprarme otra  :D .

Un saludo... y yo que tu ni me acercaría al chip.
 :lightsabre:

97
C/C++ / Re: Vector Por Valor
« en: Miércoles 12 de Julio de 2006, 11:03 »
Tampoco.
Los arrays bidimensionales se deben pasar igualmente por referencia no por valor.  
Esa manera de definirlos permite su uso dentro de la función como arreglo y no como puntero pues la gente suele tener problemas utilizando apuntadores de apuntadores...  Al final tanto asterisco vuelve loca a la gente, sobre todo porque hay que ser muy consciente de la prioridad de los operadores...:
no es lo mismo *a+1 que *(a+1)...
*a+1 = a[0] + 1;
*(a+1) = a[1];
En fin que resulta más fácil usar a[1] que *(a+1) y ya no te digo si te metes con arrays de varias dimensiones, hasta yo sudo con los punteros de punteros y de vez en cuando me lio... :lol:
Creo que era algo así... lo voy a hacer sin compilador así que si meto la pata que alguien me lo corrija sin dudarlo:
a[2][5] = *(*(a+2)+5);

Un saludo.
 :lightsabre:

98
C/C++ / Re: Vector Por Valor
« en: Lunes 10 de Julio de 2006, 16:19 »
No se puede, un vector o array sólo puede pasarse a una función mediante su dirección, si quieres pasarle el valor de sus elementos deberás hacerlo pasándole uno a uno cada uno de los valores.
Un saludo.

99
Programación en C / Re: Bucle De Control Para Dspic30f
« en: Viernes 7 de Julio de 2006, 14:05 »
Supongo que te refieres a programar un controlador PID, el proceso es el siguiente:
Haces una interrupción que se ejecute cada t ms:

- Lees el valor del elemento a controlar: rk (temperatura, nivel...)
- Valor de salida:

   e(t) = r(t) - sp
   Etotal = Etotal + e(t)

   y(t) = Kc * e(t) + ki * Etotal + kd * ( e(t) - e (t-1) )

   e(t-1) = e(t)

FIN.

Esto sería un bucle de control de un PID, el controlador más famoso de la industria.
Los parámetros son los siguientes:
- e(t) es el error que hay en cada ciclo, el valor del elemento a controlar menos el valor real del elemento.
- r(t) es el valor medido del elemento, el valor que tiene realmente.
- sp es el set-point, el valor al que queremos llegar.
- Etotal es el sumatorio de los errores, es un termino que valdrá 0 al principio y se irá incrementando con cada ciclo, debes tener en cuenta posibles desbordamientos del mismo, pues al principio este valor es grande y aunque con cada ciclo el error decae es cierto que se sigue sumando.  A este mecanismo se le denomina anti-windup, por eso es mejor usar la parte integral sólo cuando el valor logrado es muy cercano al valor que se busca.
- y(t) es el valor de salida de tu controlador, la acción a realizar sobre el sistema.
- kc es la ganancia proporcional del controlador.
- ki es la gananacia integral del controlador.
- kd es la ganancia derivativa.
Estas tres constantes las deberás seleccionar con cuidado para que el sistema no se inestabilice y sea lo suficientemente rápido... a esto se denomina sintonización del PID.

Un ejemplo sería el control de la temperatura de un recinto, contamos con un calentador (una resistencia) y un sensor de temperatura.  r(t) será el valor que nos da el sensor e y(t) será la intensidad eléctrica que aplicaremos a la resistencia.  Conociendo la temperatura que proporcionamos dependiendo de la intensidad que circula por esa resistencia, ya tendriamos hecho el PID, sólo nos quedaría hacer una simple regla de tres para pasar y(t) que estará expresada en unidades de temperatura (ºC, K, F...) a amperios necesarios para conseguir esa temperatura con esa resistencia.
Una vez hecho basta sintonizar el PID para conseguir un comportamiento óptimo.

Espero que te sirva de ayuda.
Un saludo.  :lightsabre:

100
Hardware / Re: Que Diferencia Hay ?
« en: Viernes 7 de Julio de 2006, 13:24 »
Hola a todos...
Pues bien, según tengo entendido y estudiado los procesadores con arquitectura CISC son los que se usan actualmente, es una tecnología "antigua".  Hoy en día está demostrado que el juego de instrucciones reducida RISC da unos resultados mejores de rendimiento... Me explico,
la tecnología CISC reduce el número de instrucciones pues en cada instrucción se realizan muchas microinstrucciones, pero esto conlleva una caida del rendimiento pues la unidad de control necesita desentramar cada instrucción en muchas microinstrucciones.
Las instrucciones RISC no deben ser descompuestas en microinstrucciones y por tanto se ejecutan más rápido...  Según estudios, las instrucciones RISC aunque sean más se ejecutan más rápido.
Por qué entonces Intel y AMD no las usan?? pues por mantener la compatibilidad ascendente con sus procesadores precedentes, que se basan todos en la arquitectura 386 que utiliza instrucciones CISC.  Puedes encontrar procesadores con juego de instrucciones RISC, pero no son los más famosos.

Un saludo.  :lightsabre:

Páginas: 1 2 3 [4] 5 6 ... 10