Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2013, 12:41   #1
Irin_a
Новичок
Джуниор
 
Регистрация: 20.04.2013
Сообщений: 6
По умолчанию Программирование микроконтроллера

Добрый день!

Нужно отредактировать и дополнить код, чтобы на сенсорном узле с микрофоном, который присоединен к компьютеру загорелся и мигал диод, если микрофон будет улавливать какой-нибудь звук. Программа компилируется, ошибок не выдаёт, но когда загружаю в микроконтроллер, диод не мигает. Не могу придумать, где ошибка ...

#include "io430.h"
#include "in430.h" //_NOP()
#include "stdint.h"

volatile uint16_t mic_data;
volatile uint8_t min = 0;

int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

ADC10AE0 |= 0x01; //(enable A0) P2.0 ADC option select
P1DIR |= 0x01;//Set P1.0 to output direction

BCSCTL1 = DIVA_3; // ACLK = 1.5 kHz
BCSCTL3 = LFXT1S_2; // Set VLOCLK (12 kHz)
ADC10CTL1 = INCH_0 + ADC10DIV_3; // A0
ADC10CTL0=SREF_1 + ADC10SHT_3 + REFON + ADC10ON +ADC10IE;


if (CALBC1_1MHZ == 0xFF || CALDCO_1MHZ == 0xFF)
{
while(1); // If calibration constants erased
// do not load, trap CPU!!
}
DCOCTL = CALDCO_1MHZ; // Set DCO to 1 MHz

for (;; )
{

}
//return 0;
}

#pragma vector=ADC10_VECTOR
__interrupt void ADC10ISR(void)
{
if (min <= 60)
mic_data = ADC10MEM;
else
_NOP();
if (mic_data > 512)
P1OUT |= 0x01; // Set P1.0 LED on
else
P1OUT &= ~0x01; // Clear P1.0 LED off
ADC10CTL0 |= ENC + ADC10SC; // Sampling/Conversion start

}
Irin_a вне форума Ответить с цитированием
Старый 20.04.2013, 13:07   #2
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Вы в каждом разделе будете тему создавать? Спамер что ли?
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 20.04.2013, 13:09   #3
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Что за контроллер? MSP какой-нибудь?
И что происходит при прерывании? Что в ADC10MEM?

Upd.
А почему запуск АЦП происходит после считывания данных из ADC10MEM?

Upd. 2
//А направление портов не надо конфигурировать перед тем, как светодиод зажигать?
Так, этот вопрос пока снимается, там вроде выше есть это дело, я проглядел.

Upd. 3
И вообще, почему светодиод должен мигать при таком коде? Не пойму..
Кстати, прерывание-то это вообще произойдет? Учитывая, где происходит запуск АЦП, я не уверен..
Μολὼν λαβέ

Последний раз редактировалось alexander13; 20.04.2013 в 13:24.
alexander13 вне форума Ответить с цитированием
Старый 20.04.2013, 13:18   #4
Irin_a
Новичок
Джуниор
 
Регистрация: 20.04.2013
Сообщений: 6
По умолчанию

нет, просто не знала в какой раздел лучше разместить тему.
Irin_a вне форума Ответить с цитированием
Старый 20.04.2013, 13:23   #5
Irin_a
Новичок
Джуниор
 
Регистрация: 20.04.2013
Сообщений: 6
По умолчанию

да, микроконтроллер MSP430.

ADC10MEM - по задумке должно быть так: если микрофон улавливает звук, то в память заполняется, и если в память что-то поступает, то диод реагирует и начинает мигать.

//про направление портов честно говоря я не знаю, я только всё это начала изучать ...


потому что, если порог шума будет превышать заданный - 512, то АЦП только тогда начнёт срабатывать ...

Последний раз редактировалось Irin_a; 20.04.2013 в 13:30.
Irin_a вне форума Ответить с цитированием
Старый 20.04.2013, 13:29   #6
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Цитата:
Сообщение от Irin_a Посмотреть сообщение

ADC10MEM - по задумке должно быть так: если микрофон улавливает звук, то в память заполняется, и если в память что-то поступает, то диод реагирует и начинает мигать.
Брр.. Что-то Вы не то говорите..
А зачем
Код:
if (mic_data > 512)
?
Есть какой-то порог по уровню звука или что?
И совсем непонятно зачем
Код:
if (min <= 60)
mic_data = ADC10MEM;
По-моему, должно быть что-то типа
Код:
... //в main
while (1) //это вместо for (;;)
{
   ADC10CTL0 |= ENC + ADC10SC; 
   //какая-нибудь задержка
}
... 
__interrupt void ADC10ISR(void)
{
mic_data = ADC10MEM; //Дальше используйте mic_data как Вам нужно
...
P1OUT ^= 0x01;
}
Какой функций задержка реализуется я, честно говоря, не знаю.. Никогда с такими контроллерами дела не имел.

Upd.
И это все при условии, что у Вас там выше все сконфигурировано правильно.. Мне читать даташит и проверять ну очень не хочется.

Upd. 2
Хорошо, вопрос по порогу шума снимается. Но все остальные комментарии в силе.
Кстати, Вы все еще не ответили, что там по факту в регистре ADC10MEM (Вы можете это посмотреть? Отладчик есть?) и происходит ли вообще прерывание?
Μολὼν λαβέ

Последний раз редактировалось alexander13; 20.04.2013 в 13:37.
alexander13 вне форума Ответить с цитированием
Старый 20.04.2013, 13:46   #7
Irin_a
Новичок
Джуниор
 
Регистрация: 20.04.2013
Сообщений: 6
По умолчанию

ADC10MEM - изначально там не должно быть ничего.
я сейчас пробую переделать код ...

диод просто горит, но не мигает

Последний раз редактировалось Irin_a; 20.04.2013 в 13:50.
Irin_a вне форума Ответить с цитированием
Старый 20.04.2013, 13:51   #8
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Цитата:
Сообщение от Irin_a Посмотреть сообщение
диод просто горит, но не мигает
Может он просто очень часто мигает?
Задержку Вы добавили?
Μολὼν λαβέ
alexander13 вне форума Ответить с цитированием
Старый 20.04.2013, 13:56   #9
Irin_a
Новичок
Джуниор
 
Регистрация: 20.04.2013
Сообщений: 6
По умолчанию

нет, нет, не мигает.

там же должна быть спец. функция для задержки?
Irin_a вне форума Ответить с цитированием
Старый 20.04.2013, 13:58   #10
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Цитата:
Сообщение от Irin_a Посмотреть сообщение
нет, нет, не мигает.

там же должна быть спец. функция для задержки?
А Вы как это определяете? На глаз? Очень интересно...

Вам что, в гугл совсем лень залезть? Функция __delay_cycles(). Как пользоваться ей разберетесь сами, надеюсь?
Μολὼν λαβέ
alexander13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PCI FDD программирование микроконтроллера scriptolog Компьютерное железо 6 25.11.2012 20:08
Программирование микроконтроллера ros.pro Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 15 26.05.2012 23:45
программирование микроконтроллера мк51 Nulled_ Фриланс 1 16.10.2009 21:02
программирование микроконтроллера МК51 Nulled_ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 11.10.2009 13:25