Как поменять местами синюю и желтую линии ШИМ на осциллографе не меняя электрическую схему? На PD6 (OC0A) необходим ШИМ
Нужен режим в котором можно изменить скважность, а соответственно и выдаваемую мощность шим с шагом в 5%. Частота ШИМ должна быть более 20 кГц. В следующем коде эти условия соблюдены для лапы OC0B:
Код:
$regfile = "m88def.dat" $crystal = 8000000 Ddrd = &B01100000 ' конфигурируем ножки OC0A и OC0B на выход '------------------------------------------------------------------------------------------- 'Настраиваем регистр Tccr0a Tccr0a.com0a1 = 0 Tccr0a.com0a0 = 0 'биты com0a1 и com0a0 настройка лапы OC0A '00 = Oc0a Отключен От Порта. '01 = Toggle OC0A по совпадению. Также WGM02 должен быть = 0 иначе Oc0a Отключен От Порта??? '10 = Clear OC0A по совпадению (non-inverting mode). '11 = Set OC0A по совпадению (inverting mode). Tccr0a.com0b1 = 1 Tccr0a.com0b0 = 0 'биты com0b1 и com0b0 тоже самое что и предыдущие, только для лапы OC0B Tccr0b.wgm02 = 1 Tccr0a.wgm01 = 0 Tccr0a.wgm00 = 1 'биты wgm02, wgm01 wgm00 определяют режим генерации: ' _____________________________________________ '|код| режим | Макс | обновление | TOV Flag| '| | таймера| значение| OCRx | Set on | '|___|________|_________|____________|_________| '|000| норм | FF | немедленное| MAX | '|001|PWM PC* | FF | TOP | Bottom |* '|010| CTC** | OCRA***| немедленное| MAX | '|011|Fast PWM| FF | Bottom | MAX | '|101|PWM PC* | OCRA***| TOP | Bottom | '|111|Fast PWM| OCRA***| Bottom | TOP | '|100|Reserved| - | - | - | '|110|Reserved| - | - | - | ' --------------------------------------------- '* PWM PC = PWM Phase Correct управление скважностью '**CTC=Clear Timer on Compare Match '*** ШИМ работает при условии Ocr0a >= Ocr0b. Причем Ocr0a задает количество шагов(0-255). А Ocr0b увеличивается и при его увеличении до Ocr0a идет прерывание. '1. MAX = 0xFF '2. BOTTOM = 0x00 'Настраиваем регистр Tccr0b биты: FOC0A FOC0B – – WGM02 CS02 CS01 CS00 ' бит foc0a и foc0b Force Output Compare A Tccr0b.foc0a = 0 Tccr0b.foc0b = 0 'биты CS02 CS01 CS00 являются делителем ' ------------------------------------------------------ '|код| делитель | '|------------------------------------------------------| '|000| таймер остановлен | '|001| /1 | '|010| /8 | '|011| /64 | '|100| /256 | '|101| /1024 | '|110| внешний генератор на Т0 прерывание по спаду | '|111| внешний генератор на Т0 прерывание по нарастанию | ' ------------------------------------------------------ Tccr0b.cs02 = 0 Tccr0b.cs01 = 0 Tccr0b.cs00 = 1 'Теперь зададим скважность и шкалу Do Ocr0a = 20 'шкала ШИМ 0..255 чем больше, тем ниже частота но более плавные ступени Ocr0b = 5 'коэффициент заполнения 0..Ocr0a Delay : Delay Loop 'текущее значение 8битного таймера счетчика можно прочитать из регистра TCNT0. Например х=TCNT0 или TCNT0 = х ''Регистр Timsk0 биты: – – – – – OCIE0B OCIE0A TOIE0 'Timsk0.ocie0b = 1 'Timer/Counter Output Compare Match B Interrupt Enable 'Timsk0.ocie0a = 1 'Timer/Counter0 Output Compare Match A Interrupt Enable 'Timsk0.toie0 = 0 ' Timer/Counter0 Overflow Interrupt Enable '' Регистр TIFR0 биты: – – – – – OCF0B OCF0A TOV0 'Tifr0.ocf0b = 0 ' Timer/Counter 0 Output Compare B Match Flag 'Tifr0.ocf0a = 1 'Timer/Counter 0 Output Compare A Match Flag 'Tifr0.tov0 = 0 'TOV0: Timer/Counter0 Overflow Flag