Autor Tema: PC FAN Controller con TFT 1,8" EDITADO 16-4-13  (Leído 14370 veces)

0 Usuarios y 4 Visitantes están viendo este tema.

Desconectado martin12as

  • PIC10
  • *
  • Mensajes: 36
Re: CPU FAN Controller con TFT 1,8" EDITADO
« Respuesta #30 en: 20 de Septiembre de 2013, 21:30:16 »

te agradezco mucho, me podrías dar una breve explicación de como funciona? por cada rpm envia un pulso? o como es?

al controlar un ventilador con una salida pwm, la señal que proviene del cable del tacometro del ventilador se vé  afectada así que hay que filtrar
la señal, cosa que hacen el diodo,condensador y la resistencia
el inversor, sólo lo uso para llevar el estado bajo a 0v y así evitar interferencias
sí pusieras un osciloscopio el el anodo del diodo perfectamente verías los pulsos del tacometro, pero el estado bajo de ese punto serían los 0.6v
de la polarización del diodo, cosa que podría llevar a producir errores de lectura
después, sólo falta habilitar la interrupción en el pic, que sume a cada pulso, y cada segundo hacer el calculo

quedo super claro, la verdad te agradezco bastante, cuando tenga el proyecto terminado lo voy a mostrar en el foro

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: CPU FAN Controller con TFT 1,8" EDITADO
« Respuesta #31 en: 20 de Septiembre de 2013, 21:48:01 »

te agradezco mucho, me podrías dar una breve explicación de como funciona? por cada rpm envia un pulso? o como es?

al controlar un ventilador con una salida pwm, la señal que proviene del cable del tacometro del ventilador se vé  afectada así que hay que filtrar
la señal, cosa que hacen el diodo,condensador y la resistencia
el inversor, sólo lo uso para llevar el estado bajo a 0v y así evitar interferencias
sí pusieras un osciloscopio el el anodo del diodo perfectamente verías los pulsos del tacometro, pero el estado bajo de ese punto serían los 0.6v
de la polarización del diodo, cosa que podría llevar a producir errores de lectura
después, sólo falta habilitar la interrupción en el pic, que sume a cada pulso, y cada segundo hacer el calculo

quedo super claro, la verdad te agradezco bastante, cuando tenga el proyecto terminado lo voy a mostrar en el foro

me gustaria verlo... actualmente estoy mirando lo de conectar por usb el circuito y hacer lo que tu querias hacer, obtener la informacion de los sensores de la cpu gpu hdd para no tener que incorporar ningun sensor externo.... la verdad es que no saco ni un valor desde el pc a ve si hay suerte y comprendo como va
un saludo y suerte
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado martin12as

  • PIC10
  • *
  • Mensajes: 36
Re: CPU FAN Controller con TFT 1,8" EDITADO
« Respuesta #32 en: 27 de Septiembre de 2013, 01:24:00 »

te agradezco mucho, me podrías dar una breve explicación de como funciona? por cada rpm envia un pulso? o como es?

al controlar un ventilador con una salida pwm, la señal que proviene del cable del tacometro del ventilador se vé  afectada así que hay que filtrar
la señal, cosa que hacen el diodo,condensador y la resistencia
el inversor, sólo lo uso para llevar el estado bajo a 0v y así evitar interferencias
sí pusieras un osciloscopio el el anodo del diodo perfectamente verías los pulsos del tacometro, pero el estado bajo de ese punto serían los 0.6v
de la polarización del diodo, cosa que podría llevar a producir errores de lectura
después, sólo falta habilitar la interrupción en el pic, que sume a cada pulso, y cada segundo hacer el calculo

quedo super claro, la verdad te agradezco bastante, cuando tenga el proyecto terminado lo voy a mostrar en el foro

me gustaria verlo... actualmente estoy mirando lo de conectar por usb el circuito y hacer lo que tu querias hacer, obtener la informacion de los sensores de la cpu gpu hdd para no tener que incorporar ningun sensor externo.... la verdad es que no saco ni un valor desde el pc a ve si hay suerte y comprendo como va
un saludo y suerte

espero que tengas mas suerte que yo, hasta ahora eh buscado información por millones de lugares y no logro acceder a los sensores del cpu, motherboard, gpu, etc, lo unico que me puede llegar a servir son los archivos de linux donde se guarda la información de los sensores, cada sensor tiene un archivo propio y basta con leer ese archivo para conocer la temperatura, en windows no pude hacer nada todavía.

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: PC FAN Controller con TFT 1,8" EDITADO 16-4-13
« Respuesta #33 en: 27 de Septiembre de 2013, 05:53:57 »
Con el visual basic .net se puede sacar las temperaturas de la cpu, gpu y hdd
en youtube hay un ejemplo muy fácil para obtener lab temperatura de la cpu con vb.net pero a mi no me funciona, parece ser que el hardware tiene que ser compatible

Tocara probar en otro pc a ver sí siendo compatible, me funciona
aquí un ejemplo de como leer temperatura hdd
« Última modificación: 27 de Septiembre de 2013, 06:58:02 por ppyote »
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado proaudio

  • PIC10
  • *
  • Mensajes: 16
Re: PC FAN Controller con TFT 1,8" EDITADO 16-4-13
« Respuesta #34 en: 04 de Octubre de 2013, 05:58:07 »
@ppyote antes que nada quiero agradecerte por el aporte de tu librería!!! Como te había comentado estoy tratando de controlar el display con un PIC24. Tengo el display funcionando con el 18F2550 con tu librería pero la configuración del PIC24 es un tanto mas complicada, además sería mas eficiente comunicarlo por hardware (cosa que intento hacer con tu librería, pero me falta la señal de data_command ya que el compilador me da error de parámetro inválido).

Para aclarar un poco:

1- tu librería funciona por software y no puedo pasarla a funcionar por hardware por el error del compilador. Con esta configuración, el compilador se lo traga, pero no puedo agregar lo del data_command, por lo tanto no funciona

#use spi(FORCE_HW,SPI1,bits=8,enable=pin_a5,stream=tft_comando)
#use spi(FORCE_HW,SPI1,bits=8,enable=pin_a5,stream=tft_dato)
#use spi(FORCE_HW,SPI1,bits=16,enable=pin_a5,stream=tft_dato_16)

2- "Adapté" la librería para el PIC24 por software en CCS

#define clock pin_d0
#define sda   pin_d1
#define cs    pin_d3
#define data_command  pin_d2

#use spi(baud=921600,bits=8,mode=0,do=sda,clk=clock,enable=cs,load=data_command,LOAD_ACTIVE=1,stream=tft_comando)
#use spi(baud=921600,bits=8,mode=0,do=sda,clk=clock,enable=cs,load=data_command,LOAD_ACTIVE=0,stream=tft_dato)
#use spi(baud=921600,bits=16,mode=0,do=sda,clk=clock,enable=cs,load=data_command,LOAD_ACTIVE=0,stream=tft_dato_16)

esto funciona, pero es muy lento.

3- además de hacerlo funcionar por hardware, tengo que hacerlo en el compilador C30, ya que el resto del código está en ese compilador (tal vez sea mas fácil pasar todo al CCS que pasar esto a C30?)

Alguna orientación que puedan darme?

Muchas gracias! cualquier comentario me ayudaría :)

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: PC FAN Controller con TFT 1,8" EDITADO 16-4-13
« Respuesta #35 en: 04 de Octubre de 2013, 06:18:10 »
proaudio si se puede, de echo, yo primeramente lo hice trabajar por hardware pero por necesidades fisicas del pic lo tuve que hacer por software
cuando llege de trabajar te digo como puedes hacerlo
un saludo
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado proaudio

  • PIC10
  • *
  • Mensajes: 16
Re: PC FAN Controller con TFT 1,8" EDITADO 16-4-13
« Respuesta #36 en: 04 de Octubre de 2013, 06:24:33 »
Genial!!! gracias!!

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: PC FAN Controller con TFT 1,8" EDITADO 16-4-13
« Respuesta #37 en: 04 de Octubre de 2013, 07:34:40 »
para utilizar la comunicacion spi por hardware solo tienes que hacer 2 funciones, una para enviar el valor en modo datos y otra en modo comandos habilitando el pin del tft AO...
lo que te recomendaria es hacer otras funciones para enviar datos y comandos en modo de 16 bits, de este modo mejoraras la cantidad de instrucciones que utilizara el ucontrolador....

aqui abajo te pongo la forma de enviar en modo de 8bits los datos/comandos por hardware a la TFT

void enviar_dato(int8 data)
{
    output_low(pin_AO);
    spi_write(data);
}

void enviar_comando(int8 data)
{
    output_high(pin_AO);
    spi_write(data);
}

pienso que no tendras problemas en adaptar a c30
un saludo
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado proaudio

  • PIC10
  • *
  • Mensajes: 16
Re: PC FAN Controller con TFT 1,8" EDITADO 16-4-13
« Respuesta #38 en: 04 de Octubre de 2013, 08:27:42 »
Muchas gracias ppyote.

Pero acaso esas funciones no están ya?

void  write_command(int8 c)
{
   spi_xfer(tft_comando,c);
}

void  write_data(int8 d)
{
   spi_xfer(tft_dato,d);
}
void Write_data16(int16 dato)
{
spi_xfer(tft_dato_16,Dato);
}

Lo que hice fue agregarles el cambio de estado del pin_4 donde debe estar el data_command, y quedó así:

void  write_command(int8 c)
{
   output_high(pin_b4);
   spi_xfer(tft_comando,c);
}

void  write_data(int8 d)
{
   output_low(pin_b4);
   spi_xfer(tft_dato,d);
}
void Write_data16(int16 dato)
{
 output_low(pin_b4);
spi_xfer(tft_dato_16,Dato);
}

pero en la pantalla aparece ruido y parpadea un poco loco. Voy ciego con esto... :(


Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: PC FAN Controller con TFT 1,8" EDITADO 16-4-13
« Respuesta #39 en: 04 de Octubre de 2013, 10:00:48 »
El spi_xfer es para comunicar la tft y el pic en modo spi por software, el spi_write es para comunicar en modo hardware que era lo que querías, no?
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado proaudio

  • PIC10
  • *
  • Mensajes: 16
Re: PC FAN Controller con TFT 1,8" EDITADO 16-4-13
« Respuesta #40 en: 04 de Octubre de 2013, 13:57:58 »
Perdón, no me di cuenta de eso y tampoco sabía que los comandos eran diferentes, pero ahora veo que el formato de spi write es spi_write(data), con lo cual no puedo decirle que stream utilizar. Habría que inicializar cada vez que voy a transmitir un dato? O sea, dentro de la función write_command, write_data y write_data 16 inicializar con el correspondiente stream?

Gracias! Un abrazo!

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: PC FAN Controller con TFT 1,8" EDITADO 16-4-13
« Respuesta #41 en: 04 de Octubre de 2013, 14:31:36 »
#define data_command  pin_d2

#use spi(baud=921600,bits=8,mode=0,do=sda,clk=clock,enable=cs,load=data_command,LOAD_ACTIVE=1,stream=tft_comando)
#use spi(baud=921600,bits=8,mode=0,do=sda,clk=clock,enable=cs,load=data_command,LOAD_ACTIVE=0,stream=tft_dato)
#use spi(baud=921600,bits=16,mode=0,do=sda,clk=clock,enable=cs,load=data_command,LOAD_ACTIVE=0,stream=tft_dato_16)

mira los tipos de envíos que realizo usando diferentes streams

En el primer caso, activo el pin data_commamd con la opción ( load=data_command,LOAD_ACTIVE=1)
Que lo que hace es poner a 1 el pin_d2 para indicar que voy a enviar un valor en forma de comando, para que el tft sepa que registro vamos a escribir

 los otros dos casos, al poner a 0 el pin definido como data_commamd lo que le digo a la tft es el valor que quiero escribir en la dirección de registro que antes hemos enviado con el tipo de stream de arriba
estos dos casos se diferencian en que uno envía 8 bits y el otro 16

en el caso de usar la comunicación spi por hardware lo que debes hacer es antes que nada cambiar el estado del pin data_comand para después enviar el valor, sí el pin está en alto direccionas el valor de registro y sí está en bajo, escribe el valor
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado proaudio

  • PIC10
  • *
  • Mensajes: 16
Re: PC FAN Controller con TFT 1,8" EDITADO 16-4-13
« Respuesta #42 en: 05 de Octubre de 2013, 11:44:05 »
Hola! gracias ppyote nuevamente por tu ayuda!!! El comportamiento de esto me tiene un tanto desorientado.
La opción ENABLE no me da ninguna señal, así que la genero de la misma forma que con el data_command, y al menos a grandes rasgos, en el osciloscopio se ve igual que con la versión por software.

Así va quedando la cosa:

#use spi(FORCE_HW,SPI1,bits=8,stream=tft_comando)
#use spi(FORCE_HW,SPI1,bits=8,stream=tft_dato)
#use spi(FORCE_HW,SPI1,bits=16,stream=tft_dato_16)

void  write_command(int8 c)
{
   output_low(pin_a5);      // Enable
   output_low(pin_b4);      // Data_command
   spi_write(c);
   output_high(pin_a5);

}

void  write_data(int8 d)
{
   output_low(pin_a5);
   output_high(pin_b4);
        spi_write(d);
   output_high(pin_a5);
}

void write_data16(int16 dato)
{
   output_low(pin_a5);
   output_high(pin_b4);
   spi_write(Dato);
   output_high(pin_a5);
}

Así, esto tampoco funciona... por lo que me surge la duda: en el manual de CCS figura "spi_write (8 bits data)"... que pasa con los datos de 16 bits?
Para esto, se me ocurrió inicializar dentro de cada función así:

void  write_command(int8 c)
{
   #use spi(FORCE_HW,SPI1,bits=8,stream=tft_comando)
   output_low(pin_a5);      // Enable
   output_low(pin_b4);      // Data_command
   spi_write(c);
   output_high(pin_a5);

}

void  write_data(int8 d)
{
   #use spi(FORCE_HW,SPI1,bits=8,stream=tft_dato)
   output_low(pin_a5);
   output_high(pin_b4);
        spi_write(d);
   output_high(pin_a5);
}

void write_data16(int16 dato)
{
   #use spi(FORCE_HW,SPI1,bits=16,stream=tft_dato_16)
   output_low(pin_a5);
   output_high(pin_b4);
   spi_write(Dato);
   output_high(pin_a5);
}

Pero no hay ninguna diferencia... la pantalla sigue en blanco. Se me ocurre que hay que dividir en dos el dato de 16 bits y transmitirlo en dos partes... estoy desvariando?

Un saludo!

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: PC FAN Controller con TFT 1,8" EDITADO 16-4-13
« Respuesta #43 en: 07 de Octubre de 2013, 18:00:43 »
a ver... te estas armando un lio con la comunicacion spi.... la comunicacion puede ser de dos formas diferentes, por hardware que es el ucontrolador el que se encarga de enviar y recibir datos mediante spi sin necesidad de ocupar tanto espacio en la rom a demas de ser mas rapida en algunas ocasiones y despues esta la comunicacion por software, que es el compilador ccs que genera un codigo para poder emular la comunicacion mediante pines del pic que no estan adamptados por hardware

para comunicar con protocolo spi por software se configura asi:
#use spi(baud=921600,bits=8,mode=0,do=sda,clk=clock,enable=cs,load=data_command,LOAD_ACTIVE=1,stream=tft_comando)
#use spi(baud=921600,bits=8,mode=0,do=sda,clk=clock,enable=cs,load=data_command,LOAD_ACTIVE=0,stream=tft_dato)
#use spi(baud=921600,bits=16,mode=0,do=sda,clk=clock,enable=cs,load=data_command,LOAD_ACTIVE=0,stream=tft_dato_16)

asi como las instrucciones mediante software que son:
spi_xfer(data)
spi_xfer(stream, data)
spi_xfer(stream, data, bits)
result = spi_xfer(data)
result = spi_xfer(stream, data)
result = spi_xfer(stream, data, bits)

por otro lado el pic puede utilizar para comunicarse mediante el hardware que tiene preparado .... para configurarlo se usa esto....

setup_spi (mode)
y las instrucciones spi_write(data_out)  y spi_read(data_in)

por eso mira bien que estas confundiendo y mezclando los dos tipos de comunicacion , entre la realizada por software y la de hardware
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado proaudio

  • PIC10
  • *
  • Mensajes: 16
Re: PC FAN Controller con TFT 1,8" EDITADO 16-4-13
« Respuesta #44 en: 08 de Octubre de 2013, 09:34:05 »
Bueno, bueno, bueno!!!!   :-/ al fin le da por funcionar!!!!  Gracias, gracias, gracias!!!!! Ahora, el manual del CCS es una p... m... dicen la mitad de las cosas.. (en algún sitio deberían explicar un poco mas completo...creo yo). Por suerte encontré una rutina para poder dividir los datos de 16 bits ya que el spi_write solo transmite de a 8 bits, pero el manual no dice nada mas!!! La rutina, por si a alguien le interesa es:

spi_write(make8(data, 1));   // Send MSB
spi_write(make8(data, 0));   // Send LSB

Bueno, ya hemos avanzado una buena parte... ahora a seguir peleando con el PIC24, que en paralelo iba trabajando, pero sin resultados positivos. El problema ahí es el timing de las señales Enable y Data_command... quiero hacerlas durar lo que dura la transmisión, pero si pongo un delay (por ejemplo) el tiempo mínimo de retardo son 100 microsegundos, lo cual es mucho... y si uso los famosos Nop(), tengo que poner un montón e igualmente va como el c....

Bueno, no quiero abusar, pero si se te ocurre algún consejo, estaré eternamente agradecido. Un saludo!
« Última modificación: 08 de Octubre de 2013, 09:46:14 por proaudio »