Отговори на тема  [ 10 мнения ] 
msp430g2553 ADC10 въпроси 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Окт 16, 2013 7:37 pm
Мнения: 8
Мнение msp430g2553 ADC10 въпроси
Здравейте, играя си със мсп-то да видим какво съм научил от университета та към въпроса, искам с потенциометър да регулирам яркостта с която свети диода, всичко през мсп-то, обаче имам малко self-объркване, Output-a на ADC-то трябва да е Input на потенциометъра ли ?


Код:
#include <msp430G2553.h>
#define LED0 BIT0
unsigned int value;
void ConfigureADC(void)
{
   ADC10CTL1 = INCH_5 + ADC10DIV_2; // 5ti kanal na ADC-to + ADC10 Clock Divider Select Bit: 2 //
   ADC10CTL0 = SREF_0 + ADC10SHT_3 + ADC10ON + ADC10IE; // Vcc + Vss as reff voltage (ADC10 Reference Select Bit: 0 +64 x ADC10CLKs
   // + ADC10 On/Enable  + ADC10IE //
   ADC10AE0 |= BIT5; // Analog enable//
}
int main(void) {
    WDTCTL = WDTPW | WDTHOLD;   // Stop watchdog timer
   BCSCTL1 = CALBC1_1MHZ; // calibrates
   DCOCTL    = CALDCO_1MHZ; // calibrates
   BCSCTL2 &= ~(DIVS_3);  // SMCLK = DCO = 1MHZ
   P1DIR |= BIT0; // P1.0 output P1.5 input
   P1SEL |= BIT5;  // ADC input pin 1.5
   P1OUT &= ~(LED0);
      ConfigureADC();
      __enable_interrupt();
   while(1)
   {
      __delay_cycles(1000); // ADC Ref to settle
      ADC10CTL0 |= ENC + ADC10SC; // conversation start
//      __bis_SR_register(CPUOFF + GIE); // LPM0 with interruts
      value = ADC10MEM;
  if (value > 511);
{
   P1OUT &= ~(LED0);
   P1OUT |= LED0;
      }
   }
}
//ADC10 ISR
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
__bis_SR_register_on_exit(CPUOFF);
}


Общо взето така си ги представям нещата ама не се случва в реалния свят :)


Чет Май 29, 2014 2:05 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: msp430g2553 ADC10 въпроси
За да регулираш яркостта, трябва това "value = ADC10MEM;" от това value става индекс на масив, защото светодиодите светят много нелинейно. Числото от масива го зареждаш в таймер работещ в PWM режим.

1. Конфигурираш ядрото, ADC, таймера, входовете и изходите.
2. Прочиташ ADC
3. От прочетеното ADC взимаш стойност от масив(таблица)
4. С тази стойност зареждаш PWM.
5. Отиваш на 2

_________________
Warriors of the Night, ASSEMBLER!!!


Чет Май 29, 2014 2:20 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: msp430g2553 ADC10 въпроси
Цитат:
Output-a на ADC-то трябва да е Input на потенциометъра ли ?

Да, IKE ти е казал как се прави.
С дебъгера виж АЦП какви стойности ти дава в двете крайни положения на потенциометъра. Да речем 0 и 511.
Тази ти програма не прави нищо друго, така че истинското PWM можеш да го прескочиш на този етап.
Четеш АЦП, умножаваш по 2 ,запомняш някъде това число "А" (0..1022).Стартираш АЦП-то. Всичко това става за няколко такта. Палиш светодиода и правиш дилей "А" цикъла, угасяш диода и правиш дилей (1023-"А") . Пак отиващ към четене на АЦП.

После почваш да четеш за PWM.


Чет Май 29, 2014 2:41 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Окт 16, 2013 7:37 pm
Мнения: 8
Мнение Re: msp430g2553 ADC10 въпроси
ike написа:
За да регулираш яркостта, трябва това "value = ADC10MEM;" от това value става индекс на масив, защото светодиодите светят много нелинейно. Числото от масива го зареждаш в таймер работещ в PWM режим.

1. Конфигурираш ядрото, ADC, таймера, входовете и изходите.
2. Прочиташ ADC
3. От прочетеното ADC взимаш стойност от масив(таблица)
4. С тази стойност зареждаш PWM.
5. Отиваш на 2



Под ядрото имаш в предвид, MCU-то предполагам, ADC съм съчинил горе долу някаква конфигурация, I/O ми е горе долу понаправен.

Как да направя value индекс на масив ?


Чет Май 29, 2014 4:21 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение Re: msp430g2553 ADC10 въпроси
Като гледам са ти казали как се прави, ама са пропуснали да ти кажат, че програмата ти е леко сбъркана. Отделно входа на АЦП-то трябва да свързано към изхода на потенциометъра, т.е. и понятията ти са объкани. Обаче ако не знаеш как се прави индекс към масив е още рано да ти обясняваме какво точно си объркал в програмата - трябва малко четене преди това :). Въпреки това ще направя опит да ти кажа - първо въобще няма да ти проверявам дали конфигурациите на регистрите са ти правилни, защото трябва да тръгна да чета дейташита, а няма време за това. Основното обаче е, че след като стартираш АЦП-то не можеш просто на следващия ред да опитваш да четеш какво е измерило, защото то още няма да го е направило. Затова или вкарай закъснение между стартирането на ацп-то и четенето на резултата, което да е по-голямо от времето на преобразуване или ползвай прекъсването за това. Сега като гледам просто преспиваш контролера в прекъсването и ако няма какво да го събуди той просто си стои там. Така че имаш два проблема - тайминга след стартирането на ацп-то и успиването в прекъсването. Махни всички спанета, за да си сигурен, че първо меренето работи и премести четенето на ацп-то в прекъсването му. Също така трябва да нулираш флага на прекъсванията, когато влизаш в тях, защото иначе се получава един безкраен цикъл на влизане/излизане в/от прекъсване. Това е достатъчно проста програма, за да имаш толкова грижи и това показва, че ти липсва малко теоритична подготовка, т.е. четене :D .


Чет Май 29, 2014 5:38 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: msp430g2553 ADC10 въпроси
При тези контролери автоматично се нулира флага при прекъсване и трябва специално да го вкючиш, ако искаш да живееш рисковано.

_________________
Warriors of the Night, ASSEMBLER!!!


Чет Май 29, 2014 8:41 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: msp430g2553 ADC10 въпроси
Димитър ти го е написал коректно - ако изместиш закъснението да е между стартирането на АЦП и четенето - ще се приближиш още една идея до описаната поредица.
Това закъснение има странен коментар - копи/пейст отнякъде. Предполагам, това закъснение е нужно еднократно след конфигурирането на АЦП. В безкрайния цикъл закъснение по принцип не е нужно - процесорът стартира АЦП, влиза в режим LPM0 (редът ,който ти е изключен//)и чака прекъсване да го събуди. Прекъсването е от АЦП,няма друго прекъсване, процедурата на прекъсване само събужда контролера. Според чаршафа е достатъчно.
Дори без корекции на главния цикъл би трябвало да върви - ако конфигурациите са верни. Но все пак тоя дилей и изключения режим LPM0
сочат ,че нещо не върви коректно - не е конфигурирано правилно.


Чет Май 29, 2014 9:04 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: msp430g2553 ADC10 въпроси
Примера най-вероятно е от copy/paste от http://www.ti.com/lit/zip/slac485
иначе проблема му е че
Код:
if (value > 511);
{
   P1OUT &= ~(LED0);
   P1OUT |= LED0;
      }

неизвесно защо, не иска да прави PWM от таблица. За това и е коментирал редове, които му трябват.

_________________
Warriors of the Night, ASSEMBLER!!!


Чет Май 29, 2014 10:01 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: msp430g2553 ADC10 въпроси
E ,човекът иска да светне светодиод, малко по-сложно , но си е задача "моят бърви блинк-лед". Ти го пращаш да чете таймери и т.н, пишеш му за нелинейности на светенето... Трябва някаква по-проста идея, ковто да не го плаши.


Чет Май 29, 2014 10:09 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: msp430g2553 ADC10 въпроси
Цитат:
искам с потенциометър да регулирам яркостта с която свети диода

Грешката е вярна. Ще прочете примерите от http://www.ti.com/lit/zip/slac485 , ще ги комбинира и е готов.

_________________
Warriors of the Night, ASSEMBLER!!!


Чет Май 29, 2014 10:14 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 10 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 4 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни