|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 6:18 pm
MSP430G2XXX ADC10CTL питане.
| Автор |
Съобщение |
|
ГеоргиД
Ранг: Минаващ
Регистриран на: Пон Дек 14, 2015 3:36 am Мнения: 6
|
 MSP430G2XXX ADC10CTL питане.
Здравейте, изтеглих късата клеца и ми се падна МСП430 (а избора колко богат беше само...). Проекта е свободно избираем и съм решил да си направя 'робот' който бяга от препятствия. За целта се сдобих със шаси, L293D драйвър 2 сензора на Шарп GP2Y0A21, лънчпада на МСП заедно със 2553 и всичко започна ... управлението на моторите се случи сравнително бързо За направо използвам: P1DIR |= BIT0 + BIT1 + BIT2; P1OUT &= ~BIT0 + BIT1 + BIT2; //Left FORWARD P1OUT &= ~BIT1; P1OUT |= BIT0; P2DIR |= BIT0 + BIT1 + BIT2; P2OUT &= ~BIT0 + BIT1 + BIT2; // Right FORWARD P2OUT |= BIT2; P2OUT &= ~BIT1; Като когато се разменят P1OUT bit0/1 и P2OUT bit2/1 се въртят на обратно респективно моторите се спират когато енейбъл пина на драйвара гушне нулата. До тук добре обаче четенето на дата от тези сензори ми скъси живота, пробрах с вградено ADC10 обаче нещо изтървам може ли някой да удари рамо/идея/коментар ? Правя в общи линии това: #include "msp430g2553.h" long ADCDATA; long sensor_value; long distance; void main() { WDTCTL = WDTPW + WDTHOLD; // disable watch dog timer DCOCTL = CALDCO_16MHZ; // set internal oscillator at 16MHz BCSCTL1 = CALBC1_16MHZ; // set internal oscillator at 16MHz ADC10CTL0 = ADC10SHT_3 + SREF_1 + REFON + ADC10ON; //Sample-Hold time + max/min ref V + ON ADC10CTL1 = INCH_3; // Chanlle 3 + _delay_cycles(30); // ref V stabilization. while(1) { ADC10CTL0 |= ENC + ADC10SC; while (ADC10CTL1 & ADC10BUSY); ADCDATA = ADC10MEM; sensor_value = BIT3; distance = sensor_value / ADC10MEM; if( distance > 300) { P1DIR |= BIT0 + BIT1 + BIT2; P1OUT &= ~BIT0 + BIT1 + BIT2; Като за начало искам да се науча да го чета, един път успея ли моторите да ги спра ако има нещо близко ще се науча и да ги въртя на където пожелая в зависимост от показанията. Така, проблемът заради който пускам темата е, може би са 2 всъщност. 1. Променливата distance съм я изкопал ( https://acroname.com/articles/linearizi ... anger-data) - R(V-3) = 6787 -4(V-3). Или поне искам да е така, проблемът е че не знам КАК да прочета дата от сензора. sensor_value така зададено в кода излиза 8, когато се провери на дебъгера. ADC10MEM е 1023 което като се има в предвид напрежението е ок ? 2. Въобще правилно ли мисля концепцията че АЦП-то ще ми преобразува датата от сензора в зависимост от която франкенщайна ми ще се движи напред/назад или ще завива ? Благодаря на отзовали те се.
|
| Пон Дек 14, 2015 3:57 am |
|
 |
|
ike
Ранг: Форумен бог
Регистриран на: Пет Фев 04, 2005 9:59 pm Мнения: 6019 Местоположение: София
|
 Re: MSP430G2XXX ADC10CTL питане.
Този ред sensor_value = BIT3; какво прави?
_________________ Warriors of the Night, ASSEMBLER!!!
|
| Пон Дек 14, 2015 6:32 am |
|
 |
|
ГеоргиД
Ранг: Минаващ
Регистриран на: Пон Дек 14, 2015 3:36 am Мнения: 6
|
 Re: MSP430G2XXX ADC10CTL питане.
По принцип сензора ми е свързан на P1_BIT3, с този ред се мъча да накарам пустия датчик да ми даде някаква дата.
Така може да видиш, че в кода задавам ADC10CTL1 = INCH_3; // Chanel 3 не случайно е така, според ДШ на процесора:
P1.3/ General-purpose digital I/O pin ADC10CLK/ ADC10, conversion clock output(1) A3/ ADC10 analog input A3(1) VREF-/VEREF-/ ADC10 negative reference voltage (1) CA3/ Comparator_A+, CA3 input CAOUT Comparator_A+, output
Та мисля че ( не е задалжително да съм прав), че със sensor_value = BIT3; искам променливата да приема дата от датчика
|
| Пон Дек 14, 2015 10:27 am |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: MSP430G2XXX ADC10CTL питане.
Виж ADC10AE0, ADC10AE1 регистрите. Това са само 1-ци, или не работиш коректно с АЦП-то, или напрежението е по-голямо от макс. за конверсия.
|
| Пон Дек 14, 2015 2:29 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: MSP430G2XXX ADC10CTL питане.
Числото от ADC10MEM , разделено на 1024 и умножено по опорното на АЦП - дава напрежението във волтове, което мериш от сензора. Каква дистанция е това -гледаш описанието на сензора - колко волта на колко сантиметра отговарят - може с таблица, може с формула за линеаризация.апроксимация. Но първо трябва да разбереш какво искат да ти кажат на страницата https://acroname.com/articles/linearizi ... anger-data . Щото са ти дали някакви картинки за 10-битово АЦП, ама май не са казали какво е опорното.
|
| Пон Дек 14, 2015 2:40 pm |
|
 |
|
ГеоргиД
Ранг: Минаващ
Регистриран на: Пон Дек 14, 2015 3:36 am Мнения: 6
|
 Re: MSP430G2XXX ADC10CTL питане.
Хм, не разбирам 'това са само единици' :/
Напрежението не мисля, че е по голямо - самият датчик работи със VCC 5V, аутпут дата му е от 0.3V до 3.0V . МSP-то трябва да е на 3.3V въпреки, че е захранено чрез УСБ от ПС към него.
По вероятно е да не работя правилно с АЦП-то.... как се работи коректно с това ?
- Предния ти пост се е случил докато пиша моя, та опорното на АЦП-то не трябва ли е да REFON който съм специфицирал ? - референтното напрежение на АЦП-то ? - Това напрежение от сензора нали трябва да се запише в променлива за да мога да го използвам ? - За дистанция мисля да се измързелувам и да бъде следното примерно при напрежение от сензора 2V което е апроксимативно 12 сантима директно стоп машини и в зависимост кой сензор го е подал тези 2 волта да спира 2те колела, след което с противоположното да маневрира но за това има време.
Как изхода на сензора да го сложа вход на АЦП-то ?
|
| Пон Дек 14, 2015 2:50 pm |
|
 |
|
ГеоргиД
Ранг: Минаващ
Регистриран на: Пон Дек 14, 2015 3:36 am Мнения: 6
|
 Re: MSP430G2XXX ADC10CTL питане.
Опа, Стефан63 прав си.
На мен външното ми захранване е 5 волта (7805) а ако ползвам VCC за опорно на АЦП-то (5V) нещата нема да се случат - МСП по каталог е:
• Low Supply-Voltage Range: 1.8 V to 3.6 V
АЦП10 - по каталог е: Vcc analog supply voltage Min 2.2 Max 3.6 Analog input voltage Vcc=0 Min = 0 / Max = Vcc
Следващ въпрос идеи за правилна конверсия ?
|
| Пон Дек 14, 2015 4:13 pm |
|
 |
|
ike
Ранг: Форумен бог
Регистриран на: Пет Фев 04, 2005 9:59 pm Мнения: 6019 Местоположение: София
|
 Re: MSP430G2XXX ADC10CTL питане.
Значи първо се научи, как да мигаш светодиод и като задобрееш в това, пиши пак в тази тема да ти кажа от къде да си дръпнеш msp430 книга, workshop и примери на С и asm за твоя контролер. До тогава не свързвай нито датчици нито двигатели.
_________________ Warriors of the Night, ASSEMBLER!!!
|
| Пон Дек 14, 2015 7:01 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: MSP430G2XXX ADC10CTL питане.
Георги, шансът- някой точно в момента да работи с АЦП на мсп...2253 , да ти види темата и да ти отговори - клони към нула. Тези неща не се помнят, четеш ,разбираш ,пишеш , дебъгваш, после забравяш - работил съм с АЦП12 и АЦП16 на тая фамилия и не помня нищо конкретно. Или ползваш някакви готови библиотеки - в случая едва ли ще намериш, евентуално примери от сайта на ТИ. Сензорът ти има изход, закачил си го към пин на мсп-то. Следва да ориентираш тоя пин като вход, да го закачиш към АЦП-то - логически-ако има някой специален бит някъде.И -ако правилно схващам - да укажеш ,че точно тоя вход е аналогов - виж предния ми пост.
Явно си много в началото, мигането на светодиод е нормано начало, но може и с по-сложни проекти. Като за начало - слагай по един 300 омов резистор на всяка връзка, която правиш.Например -изхода на сензора го мини през 300 ома към входа на АЦПто. Така ,ако направиш входа на АЦПто -изход, нищо няма да ти изгори(вероятно). И на първо време - изключи тоя датчик, вклщчи един потенциометър и си подкарай АЦПто коректно.
|
| Пон Дек 14, 2015 8:50 pm |
|
 |
|
slav4o.com
Ранг: Форумен бог
Регистриран на: Нед Яну 01, 2012 8:04 pm Мнения: 2663 Местоположение: София / Велико Търново
|
 Re: MSP430G2XXX ADC10CTL питане.
Съвсем случайно съм работил с подобен контролер. Честно казано са калпазански . АЦП е доста неточно дават го 10 бита, но като че ли е 8 - последните 2 играят. Някъде в описанието също го пишеше. Аз го тълкувам като така MSP имат стандартни 2 вида АЦП модули 10 и 12 битови и по слабите покриват стандарта на 10 битовите, но най-слабите само покриват стандарта за да са съвместими. Така това не е толкова от значение. Иначе по спомен имаше и някаква особеност за да заработи АЦПто, ако не се сетнат в определен ред регистрите не тръгваше. ГеоргиД каква среда използваш за програмиране, енергия ?
|
| Пон Дек 14, 2015 9:26 pm |
|
 |
|
ike
Ранг: Форумен бог
Регистриран на: Пет Фев 04, 2005 9:59 pm Мнения: 6019 Местоположение: София
|
 Re: MSP430G2XXX ADC10CTL питане.
ADC си работи съвсем нормално, 10 бита не са несто непостижимо, те даже имат 16 битови делта-сигма MSP430F2013 http://www.ti.com/product/msp430f2013 . Ако ти играят много последните 2 бита филтрирай си добре входа и сложи овърсамплинг - има го вградено в ADC модула. ADC си работи нормално не трябва да се правят никакви магии, четеш дейташита и си тръгва. Просто тайната е, че с не можеш да прочетеш данните от сензора.
_________________ Warriors of the Night, ASSEMBLER!!!
|
| Пон Дек 14, 2015 10:10 pm |
|
 |
|
gicho
Ранг: Форумен бог
Регистриран на: Пон Мар 13, 2006 1:59 pm Мнения: 3867 Местоположение: Габрово
|
 Re: MSP430G2XXX ADC10CTL питане.
@ike - +1, има и с 24битови ацп-та. славчо, при подобни изказвания е хубаво да уточниш в какви условия си ги мерил - лаунчпад с обемен монтаж не става за тест. В datasheet-а си има характеристики, ако си открил несъответствие между твърденията на таксасците и реалността можеш да им пишеш да си коригират документацията. А стандарт за ацп-та няма, има различни характеристики. Достатъчно е да вадят някакви променящи се 10 бита и могат спокойно да пишат че им е 10 битово ацп-то, стига да не лъжат за грешките в меренето му.
|
| Вто Дек 15, 2015 11:25 am |
|
 |
|
slav4o.com
Ранг: Форумен бог
Регистриран на: Нед Яну 01, 2012 8:04 pm Мнения: 2663 Местоположение: София / Велико Търново
|
 Re: MSP430G2XXX ADC10CTL питане.
Launchpad със MSP430G2452 . Никакви варианти за семплинг клок не помогнаха. Независимо от референтното напрежение дали е външно, дали е Vdd или вътрешното 2.5 или 1.5V. Направи ми впечатление че имаше отклонение дори когато свързах аналоговия вход твърдо към маса. Използването на фукцията AnalogRead() в енергия не даде по-добри резултати. Също така изпробвах и вътрешния термодатчик, за да видя как се държи, но и неговите показания бяха такива. Не зная на какво се дължи всичко това. Със осцилоскоп видимо няма смущения по захранването и по другите сигнали. Лаунчпада е SMD само пиновете на портовете и контролера с цокъла са обемни.
|
| Вто Дек 15, 2015 1:43 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: MSP430G2XXX ADC10CTL питане.
преди 10-на дена се борих с адц12 на ф249 . шантаво си беше , мене ме интересуваше само термометъра - няколко часа отидоха да се сборя с всичките битове и битчета. има си за четене - залагат много неща и оттам трябва доста четене , докато съобразиш какво бъркаш. та с адц10 може да си се отказал преди да си познал верните комбинации 
|
| Вто Дек 15, 2015 10:37 pm |
|
 |
|
ГеоргиД
Ранг: Минаващ
Регистриран на: Пон Дек 14, 2015 3:36 am Мнения: 6
|
 Re: MSP430G2XXX ADC10CTL питане.
ike беше прав, поиграх си с потенциометър и диоди, за да разбера как работи сега е по лесно :]
|
| Съб Дек 19, 2015 4:44 am |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 1 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|