Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SD16A не пойму как он работает
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
pan Alex
Спецы кто поможет буду рад. Не могу разобраться с микроконтролером MSP430F4270. Программный UART реализовал хотя помучился(потому что исходный программный UART как-то криво работал). Сейчас проблема в другом не могу не как понять как работает это Дельта-сигма АЦП SD16A/ В ассемблерном коде, я на прерывание в ассемблере завел, в мой регистр правильно копируется, под IARом смотрел. А выхожу из прерывания, неправильное значение в регистре стоит, чего там случается понять совершенно не могу. До этого еще долго думал, почему на одном вход сидит один воль, там опора 1,2В. Ну я естественно сделал мост и с него смотрел, диф разница. Кручу резистор меняется, хотя смотрю на цешке, там нету диф. разницы. Я так и не понял почему. Ну меня волнует почему не копируется значение нормально не переносится. Хотя как я и говрил в ассемблерном коде отражает, тоже самое значение.
rezident
Местные телепаты еще с новогодних каникул не вышли. Где ваша схема и текст исходника?
Описание периферийных модулей читайте в User's Guide.
pan Alex
Вот как я настроил:
P6OUT = 0x00; // P6OUTs = 0
P6DIR = 0x00; //все ножки на ввод // Unused pins as outputs
P6SEL = 0x0f; // Select analog function

// Power-up bridge sensor
// SD16CTL = SD16XDIV_3 + SD16DIV_1 + SD16SSEL_2 + SD16REFON + SD16VMIDON;
SD16CTL = SD16DIV_1 + SD16SSEL_2 + SD16REFON + SD16VMIDON ;//
// Use ACLK for SD16//SD16XDIV_3 +
//Регистр упрваления модулем сигма дельта АЦП
//SD16XDIV_3 - SD16 2.Clock Divider Select /48
//SD16DIV_1 - SD16 Clock Divider Select /2 Делитель тактовой частоты модуля SD16
//Выбор источника тактирования модуля SD16 - ACLK --- SD16SSEL_2
//SD16REFON - Включение источника опорного напряжения
//SD16VMIDON - Включение буфера VMID
//Прерывание по переполнению запрещено

//Регистр управления х модуля АЦП SD16
// SD16CCTL0 = SD16SNGL + SD16BUF_1 + SD16OSR_1024 + SD16UNI + SD16DF;
SD16CCTL0 = 0;
SD16CCTL0 = SD16BUF_3 + SD16OSR_256+SD16IE+SD16DF ;// + SD16UNI;//+ SD16LSBACC;//SD16SNGL +
//SD16BUF_1 * SD16 High Imp. Input Buffer: Slow */
//SD16OSR_1024 - Степень передискретизации 1024
//SD16UNI SD16UNI (0x1000) /* SD16 Channel x Bipolar(0) / Unipolar(1) Mode */
//SD16SNGL - Выбор режима одиночного преобразования
// - Формат кода данных модуля SD16, 1- дополнительный до 2-х(SD16DF)

//Регистр управления х модуля АЦП SD16
SD16INCTL0 = SD16GAIN_1 + SD16INCH_1;
//SD16SNGL + SD16DF- этот бит был здесь
//SD16GAIN_2 - Выбор коэффициента усиления предварительного усилителя модуля SD16 Ку=4
//SD16INCH_0-Выбор входной дифференциальной пары модуля SD16, выбран Ах 0
//SD16INCH_1--Выбор входной дифференциальной пары модуля SD16, выбран Ах1
// 32x gain, channel pair A0 // Continuous conv., 2s compl.
SD16CCTL0 |= SD16SC;
SD16AE |= SD16AE1;

Цитата(rezident @ Feb 27 2010, 01:30) *
Где ваша схема и текст исходника?


Именно в этом месте нормально все считывает.
Объявил переменную как и положено в ассемблере
PUBLIC SD16data

SD16data DS 2

SD16_ISR
add &SD16IV, PC
reti
jmp ADOV
jmp ADM0
nop

ADM0
bic.w #SD16IFG,&SD16CCTL0
; oчистка флага
mov.w &SD16MEM0, SD16data;

;копирование результат в специальный регистр данных
reti
ADOV
bic.w #SD16OVIFG,&SD16CCTL0
bic.w #SD16IFG,&SD16CCTL0
; oчистка флага
reti//*/

А дальше при переходи в С++ часть программы какая-то ересь, пото пытался средствами с++ читать из этого же регистра, какая-то ерунда, читалась. И это ерунда как для меня нестранно была очень похоже на то что было записано до этого в регистр SD16data(при переходе как-то странно и неправильно конвертнулась)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.