I got a little atmega32u4 board
. Although I bought it for other project I couldn't keep from trying it as USB light sensor. As Erdem's poor man's version delays, here is result of 10 minutes work:
Except the mini board you need a sensor. I used an old photoresistor connected between ADC0 input and GND.
Firmware: Dean Camera's LUFA
, actually Demos/Device/ClassDriver/GenericHID
with only one function changed
Code: Select all
bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo,
uint8_t* const ReportID,
const uint8_t ReportType,
uint16_t* const ReportSize)
unsigned char* p= ReportData;
PORTF= 1; // weak pull up for photoresistor
ADMUX= _BV(REFS0); // measure ADC0 with Vcc as a reference
ADCSRA= _BV(ADEN) | _BV(ADSC) | _BV(ADIF) | 7; // prescale by 128
while (! bit_is_set(ADCSRA, ADIF));
p= ADCL, p= ADCH;
ADCSRA= 0; // ADC off
*ReportSize = 2;
I admit that data acquisition is not ideal, it needs some averaging.
I added libusb 0.1 code to read the light level and autobright worked same way as with serial connected sensor.
Of course no problems with startup
Now I need couple of days to clean the code for A-series and I'll commit it to svn.
BTW atmega32u4 has many PWM outputs - seems ideal as ambilight LED driver