타이머를 이용한 스피커 제어

gurumong의 이미지

타이머의 인터럽트를 이용해서 스피커를 제어하려고 합니다
PC에서 구현하려는게 아니라 8051에서 구현하려고하는데요
그런데 막상 구현하려니 의문점이 생기는데요

만약 1000Hz의 소리를 내려고 한다면...어떤식으로 구현해야 바른것일까요?

1. 타이머의 인터럽트를 초당 2000번 발생시키고 인터럽트가 발생하면 스피커가 ON이면 OFF, OFF이면 ON한다 (이전 상태 반전)
2. 타이머의 인터럽트를 초당 1000번 발생시키고 인터럽트가 발생하면 스피커를 ON하고 곧바로 OFF 시킨다

어느 방법이나 스피커로의 출력이 1초에 1000번 발생하게 되는데요
처음에 2번의 방법을 생각했으나 스피커를 켜고나서 끄는 동안의 시간이 CPU의 동작 속도에 따라서
그 시간이 짧거나 길거나 불규칙 할꺼 같아서 잘 모르지만 어떤!? 문제가 생기지 않을까 생각되었거든요
그래서 생각해낸게 1번의 방법인데...보통 타이머로 구현할시에 어떤 방법을 사용하게 되나요?

grassman의 이미지

8051에서 빠르게 인터럽트를 처리할 수 있기는 하지만 최악의 경우 1초에 22000번까지 인터럽트를 발생시키는게 좋다고는 볼 수 없겠네요. 다른 일을 하지 않는다면 busy waiting으로 구현하는 편이 좋다고 생각합니다. 그리고 어쩔 수 없이 인터럽트를 사용한다면 1번이 좋을 것 같습니다. 2번의 경우 원하는 소리가 나오지 않을 가능성이 높습니다.

newmania의 이미지

pulse 로 가능한 것이 아닙니다. 따라서 1000Hz 이상으로 sample 을 출력해야합니다. 정현파의 구간구간값을 증가/감소해야겠지요. 만약 1000Hz 로 만들어야만 한다면 외부 회로에 적당한 capacitor 와 resistance 를 달아서 bipolar 형태의 원하는 signal 로 만들어주면 됩니다. 하지만 기왕 구현하시는 김에 많이 사용되는 audio sampling rate 과 sample bits 중에 적당한 것을 골라서 진행하시는 것이 더 좋을 듯 합니다. 예를 들면 8000Hz(반드시 1000Hz라면 어쩔 수 없고요) 8bit Mono 정도....입니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.