Я работаю с AVI Attiny13, который запрограммирован arduino UNO по SPI.Attiny13 Частота часов и АЦП
Я нашел ядро для attiny13 и содержимое файла boards.txt следующим образом;
#attiny13.name=Attiny13 @ 128 KHz (internal watchdog oscillator)
#attiny13.upload.using=arduino:arduinoisp
# attiny13.upload.protocol=avrispv2
# attiny2313at1.upload.using=pololu
#attiny13.upload.maximum_size=1024
#attiny13.upload.speed=250 # important for not losing connection to a slow processor
#attiny13.bootloader.low_fuses=0x7B
#attiny13.bootloader.high_fuses=0xFF
#attiny13.bootloader.unlock_bits=0x3F
#attiny13.bootloader.lock_bits=0x3F
#attiny13.build.mcu=attiny13
#attiny13.build.f_cpu=128000
#attiny13.build.core=core13
########################
attiny13e.name=Attiny 13A standalone 9.6Mhz
attiny13e.upload.using=arduino:arduinoisp
attiny13e.upload.maximum_size=1024
attiny13e.upload.speed=19200
attiny13e.maximum_data_size=64
attiny13e.bootloader.low_fuses=0x7A
attiny13e.bootloader.high_fuses=0xFF
attiny13e.bootloader.path=empty
attiny13e.bootloader.file=empty
attiny13e.bootloader.unlock_bits=0xFF
attiny13e.bootloader.lock_bits=0xFF
attiny13e.build.mcu=attiny13
attiny13e.upload.tool=avrdude
attiny13e.build.f_cpu=9600000L
attiny13e.build.core=core13
Когда я программирования ATtiny13, я выбираю «Attiny 13А автономный 9.6Mhz» в качестве целевой платы.
Итак, я ожидаю, что он будет работать при 9,6 МГц.
Я установил регистр TCCR0B следующим образом, чтобы получить «Нет» предварительное деление частоты
TCCR0B |= _BV(CS00);
TCCR0B &= ~_BV(CS01);
TCCR0B &= ~_BV(CS02);
также установить режим ШИМ, как «Fast PWM» путем изменения регистра TCCR0A.
TCCR0A |= _BV(WGM00);
TCCR0A |= _BV(WGM01);
TCCR0A &= ~_BV(WGM02);
С этими настройками я должен получить частоту ШИМ 9.6Mhz/256 = 37,5 кГц. Однако, когда я подключаю выход PWM к MOSFET для управления и светодиодной полосы, я получаю и слышу жужжание из MOSFET.
Это побуждает меня думать, что мои часы не работают на частоте 9,6 МГц, поскольку 37,5 Гц не является слышимой частотой.
Итак, я сделал еще один быстрый поиск по теме тактовой частоты и нашел следующую веб-страницу;
https://www.avrprogrammers.com/howto/sysclk-prescaler
Если я не ошибусь, эта страница говорит, что моя тактовая частота делится на 8 по умолчанию.
Чтобы иметь возможность не делиться, мне нужно сбросить все биты.
Я сделал это и сбросил все бит CLKPS.
CLKPR = (1<<CLKPCE);
CLKPR = (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
Таким образом, в теории, я должен получить тактовую частоту 9.6Mhz с делителем 1.
Когда я использую все эти вышеупомянутые параметры, я больше не услышу жужжащий звук.
Однако на этот раз возникла еще одна проблема.
Я использую потенциометр для управления яркостью. При установке делителя часов на «1» поведение потенциометра изменилось. Аналоговый вход сразу не считывает значение, когда я повернул потенциометр, поэтому мне нужно немного повернуть его, чтобы получить минимальную яркость и достичь максимальной яркости, прежде чем я дойду до другого конца потенциометра. Итак, я считаю, что с ADC что-то не так.
Под заголовком Analog to Digital Converter я нашел следующую информацию;
По умолчанию, последовательное приближение схема требует частоту входного тактового между 50 кГц и 200 кГц, чтобы получить максимальное разрешение. Если требуется меньшее разрешение, чем 10 бит, частота входного тактового сигнала для АЦП может быть выше 200 кГц, чтобы получить более высокий показатель .
Итак, мои часы частота 9.6Mhz и мне нужно установить делитель между 9.6Mhz/20Khz = 48 и 9.6Mhz/50кГц = 192 для регистра ADCSRA. Я выбрал коэффициент деления 128, который требует установки всех трех бит ADPS2, ADPS1 и ADPS0.
ADCSRA != 1<< ADPS2;
ADCSRA != 1<< ADPS1;
ADCSRA != 1<< ADPS0;
Это должно установить все три бита и держать частоту АЦП между 50кГц - 200Khz.
Тем не менее, я по-прежнему получаю такое же поведение от потенциометра.
Где я ошибаюсь?
Вчера я работал на установке немного больше, и я понял, что проблема может быть связана с рабочим циклом I Я пишу в PWM. Когда я пишу, например, значение «5» в PWM командой analogWrite (output, 5), светодиоды вообще не светятся. Точно так же я достигаю максимальной яркости, например, около значения «200». Итак, я, вероятно, правильно читаю банк, в то время как PWM имеет какой-то диапазон из-за изменения тактовой частоты. Эти значения не являются точными значениями, я приводил примеры только для объяснения случая. Итак, любые идеи, что может быть неправильным с PWM? – user1449456