пятница, 1 июня 2012 г.

Подключение пьезодинамика (buzzer) к МК AVR

Сегодня потратил часок времени на проблему подключения пищалки от компьютера к МК AVR. Суть проблемы - практически неслышное пищание даже на расстоянии 10см. Я перепробовал разные методы: и обычное включение "нога-buzzer-земля", и подключение к 2 ногам с попеременной подачей на них 01 и 10, и подключение через транзистор разными способами. Все равно пищало тихо.

В итоге проблема была в излишне частом дрыгании ногами. МК у меня работал на частоте 8МГц, а между установкой и снятием напряжения с ноги я ставил всего 10-15 NOP-ов..
Когда я написал простую функцию задержки на 0xFF циклов и таким образом сильно снизил частоту ШИМ, динамик звонко запищал!

Получившийся код ниже

cmd_beep:
push temp
ldi temp, 0x01 ; длительность писка
  cmd_beep_loop:
  dec temp
push temp
ldi temp, 0xFF
  cmd_beep_loop2:
    SBI BUZZER_PORT, BUZZER_PIN
rcall delay
    CBI  BUZZER _PORT, BUZZER_PIN
rcall delay
  dec temp
cpi temp, 0x00
brne cmd_beep_loop2
pop temp
cpi temp, 0x00
brne cmd_beep_loop
pop temp
ret

delay:
push temp
ldi temp, 0xFF
  delay_loop:
  dec temp
cpi temp, 0x00
brne delay_loop
pop temp
ret

Комментариев нет:

Отправить комментарий