Как стать автором
Обновить

Приступаем к работе с АЦП в микроконтроллерах семейства MSP430

Я заметил, что на Хабре совсем нет статей про микроконтроллеры семейства MSP430 от Texas Instruments. А зря. Они обладают рядом преимуществ, одно из которых — энергосбережение (по крайней мере этим очень гордится сам производитель), а еще, они легко программируются. Поэтому сегодня мы будем работать играться с отладочной платой MSP430G2 LaunchPad. Но сначала ответим на несколько вопросов.

Что мы будем делать?

Когда мы будем говорить в микрофон, МК будет зажигать светодиод. Но это еще не все. Мы сделаем всю эту конструкцию, работающей от батарейки, чтоб можно было похвастаться друзьям, на работе, или в других местах, где доступа к компьютеру не будет.

Что нам для этого понадобится?

Нам понадобится:

1) Сама плата MSP430G2 LaunchPad с микроконтроллером MSP430G2231 на борту.

image

2)Микрофон. Я откопал старый советский «Октава МД-201» 1982г.

image

3)Cтабилизатор напряжения (покупается, или собирается самостоятельно).

image

4) Батарейка на 9V.

Как мы это будем делать?

Теперь немножко углубимся в детали задачи. С микрофона идет сигнал на МК. А что дальше? Дальше МК обращается к темной стороне Силы и зажигает светодиод. Дальше МК с помощью встроенного 10-ти разрядного АЦП преобразует сигнал в код и отдает его нам. Мы сравниваем полученное значение с нужным нам и даем команду МК зажечь(потушить) светодиод. В нашем случае если сигнал выше 50мВ — зажигаем светодиод, ниже — тушим.

Прошивка

Пришло время прошить наш МК. Подключаем плату к компьютеру и с помощью IAR Embedded Workbench, или Code Composer заливаем следующий код:

#include "msp430g2231.h"

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // останавливаем сторожевой таймер
ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON; // включаем АЦП
ADC10CTL1 = INCH_1;
ADC10AE0 |= 0x02; // устанавливаем 1-ый пин как вход для АЦП (для микрофона)
P1DIR |= 0x01; // устанавливаем 0-ой пин на выход (для светодиода)

while (1) {
ADC10CTL0 |= ENC + ADC10SC; // включаем преобразование
if (ADC10MEM < 0x22) // сравниваем с 50 мВ
P1OUT &= ~0x01; // если меньше 50 мВ выключаем светодиод
else
P1OUT |= 0x01; // если больше 50 мВ включаем светодиод
}
}


В регистре ADC10MEM хранится полученный с микрофона сигнал. Откуда взялось значение 0x22?
(0.05/1.5)*1023 = 34,1. Где 0.05 — это наши 50 мВ, 1.5 — опорное напряжение АЦП, 1023 = (2^10) — 1, 10 — количество разрядов АЦП. Переведем полученное значение в 16-ричную систему и получим 0x22.

Соединяем проводки

Теперь соберем все воедино. Подключаем микрофон к 1-ому пину и к GND. Подключаем батарейку к стабилизатору, "+" стабилизатора подключаем к VCC пину, "-" к GND пину. Должен загореться зеленый светодиод питания. Выглядеть это будет примерно вот так:

image

Наслаждаемся результатом

http://www.youtube.com/watch?v=paXHUaHrmts
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.