avr: set ADLAR bit in ADC to get a value scaled to 16-bit
Этот коммит содержится в:
родитель
40f834d58f
коммит
de694b5857
2 изменённых файлов: 7 добавлений и 5 удалений
|
@ -19,7 +19,7 @@ func main() {
|
|||
|
||||
for {
|
||||
val := sensor.Get()
|
||||
if val < 512 {
|
||||
if val < 0x8000 {
|
||||
led.Low()
|
||||
} else {
|
||||
led.High()
|
||||
|
|
|
@ -149,13 +149,15 @@ func (a ADC) Configure() {
|
|||
return // no pin specific setup on AVR machine.
|
||||
}
|
||||
|
||||
// Get returns the current value of a ADC pin. The AVR will return a 10bit value ranging
|
||||
// from 0-1023.
|
||||
// Get returns the current value of a ADC pin, in the range 0..0xffff. The AVR
|
||||
// has an ADC of 10 bits precision so the lower 6 bits will be zero.
|
||||
func (a ADC) Get() uint16 {
|
||||
// set the analog reference (high two bits of ADMUX) and select the
|
||||
// channel (low 4 bits), masked to only turn on one ADC at a time.
|
||||
// this also sets ADLAR (left-adjust result) to 0 (the default).
|
||||
*avr.ADMUX = avr.RegValue(avr.ADMUX_REFS0 | (a.Pin & 0x07))
|
||||
// set the ADLAR bit (left-adjusted result) to get a value scaled to 16
|
||||
// bits. This has the same effect as shifting the return value left by 6
|
||||
// bits.
|
||||
*avr.ADMUX = avr.RegValue(avr.ADMUX_REFS0 | avr.ADMUX_ADLAR | (a.Pin & 0x07))
|
||||
|
||||
// start the conversion
|
||||
*avr.ADCSRA |= avr.ADCSRA_ADSC
|
||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче