Could have been simpler still. You can read the internal temperature of the ATiny85 [1]. You can also get the ATiny85 to speak USB and even be flashed via USB via the micronucleus bootloader [2].
I did try the internal temperature sensor, but it didn't measure the ambient temperature. I have read that if you set the ATtiny85 to sleep mode for some time, it will converge to ambient temperature, but it would take too long to validate, and I didn't want to go down another rabbit hole.
USB Bootloader is interesting, but I already had a few ISP loaders. You can make an ISP loader with Arduino as well. [1]
> I did try the internal temperature sensor, but it didn't measure the ambient temperature. I have read that if you set the ATtiny85 to sleep mode for some time, it will converge to ambient temperature, but it would take too long to validate, and I didn't want to go down another rabbit hole.
It's kind of better than ambient, it would reach the temperature of the GPU if thermally coupled. The sleep-mode thing would just be a case of lots of micro sleeps to discount the temperature of the chip, could have even under-clocked too.
> USB Bootloader is interesting, but I already had a few ISP loaders. You can make an ISP loader with Arduino as well.
The benefit of USB is being able to get debug data from the fan controller as it runs, and be able to re-flash it whilst in the PC by attached to an internal USB bus.
This way you could also log out what the GPU reports, vs what you measure, vs what the ATtiny85 measures.
I have been wanting a PWM controller for my Tesla cards in my workstation. Currently I open the case and manually turn up their fan speed when I’m going to use them, and turn it back down afterward. What I would like, but am not very interested in spending the time on, is a microcontroller that controls the fan speed based on messages it gets over serial from a script running on the host that tells it what speed to run based on GPU temperature. When I first set it up, I also placed thermistors that the microcontroller could use as a fallback if it doesn’t receive commands.
Seems like something similar should already exist, but I haven’t been able to find anything that is a close enough fit.
I have a pretty custom GPU cooling setup on a few machines (I run ML workloads locally and I want stuff to be quiet).
Couple of gotchas that I ran across. I found that on Linux, desktop PC fan control support is pretty abysmal. The sensor library that everyone relies on, lm_sensors, is semi-abandoned and didn't recognize sensors on my relatively popular, 7 year old ATX motherboard and GPU. It also requires having Perl installed.
About GPU cooling in particular - modern NVidia cards in particular seem to have a built-in minimum of 30% fan speed when controlling them manually. The connectors are also a different, smaller connector (perhaps a JST PH?).
7 comments
[ 3.1 ms ] story [ 24.0 ms ] thread[1] https://andrey.mikhalchuk.com/2011/06/20/reading-attiny85452...
[2] https://github.com/micronucleus/micronucleus
USB Bootloader is interesting, but I already had a few ISP loaders. You can make an ISP loader with Arduino as well. [1]
[1] https://docs.arduino.cc/built-in-examples/arduino-isp/Arduin...
It's kind of better than ambient, it would reach the temperature of the GPU if thermally coupled. The sleep-mode thing would just be a case of lots of micro sleeps to discount the temperature of the chip, could have even under-clocked too.
> USB Bootloader is interesting, but I already had a few ISP loaders. You can make an ISP loader with Arduino as well.
The benefit of USB is being able to get debug data from the fan controller as it runs, and be able to re-flash it whilst in the PC by attached to an internal USB bus.
This way you could also log out what the GPU reports, vs what you measure, vs what the ATtiny85 measures.
GitHub: https://github.com/Colahall/tiny85fancontrol/tree/main/schem... Codeberg: https://codeberg.org/Colahall/tiny85fancontrol/src/branch/ma...
Seems like something similar should already exist, but I haven’t been able to find anything that is a close enough fit.
Couple of gotchas that I ran across. I found that on Linux, desktop PC fan control support is pretty abysmal. The sensor library that everyone relies on, lm_sensors, is semi-abandoned and didn't recognize sensors on my relatively popular, 7 year old ATX motherboard and GPU. It also requires having Perl installed.
About GPU cooling in particular - modern NVidia cards in particular seem to have a built-in minimum of 30% fan speed when controlling them manually. The connectors are also a different, smaller connector (perhaps a JST PH?).