Форум по Роботика

Технически форум => Програмиране => Темата е започната от: IbT в Март 26, 2009, 07:34:34 pm

Титла: Помощ за С и 16F871
Публикувано от: IbT в Март 26, 2009, 07:34:34 pm
Седнах най-накрая да се мъча с програмата за самонасочващата система. Обаче съм стигнал до конфигурацията на контролера само. Използвам SourceBoost IDE и с него си генерирах повечето стойности на регистрите. Обаче гледам в дата-та на тоя контролер, че за да използвам АЦП-то трябва да задам кой канал да чете. Та ... въпросът ми е само по един канал ли може да чете. Понеже ще използвам прекъсване от АЦП-то как мога да му задам да работи и по 4-те канала.

П.С. Абсолютно начинаещ съм в пиковете и програмирането за тях, затова моля за по-разбрани отговори :) ... Иначе с програмиране на С (но за ПС) се оправям. Това е първият от поредица въпроси, но всичко с времето си. Трябва да почна отнякъде :)
Титла: Помощ за С и 16F871
Публикувано от: sv_shady в Март 26, 2009, 07:38:17 pm
Здравей :)
Ами ADC модулът, който мери напрежение, е един, но има 4, 8 или 10 канала (зависи от модела контролер). Ти можеш програмно да му казваш кой канал да мери, но не можеш всичките на веднъж. Примерно можеш в един цикъл for да въртиш един брояч от 0 до 3 и на всяко инкрементиране да измерваш напрежението на съответни канал. Така накрая ще си премерил и 4те напрежения.
Титла: Помощ за С и 16F871
Публикувано от: IbT в Март 26, 2009, 07:54:38 pm
Хммм ... и аз за вариант с цикъл се сетих, но мислех, че може няколко канала да меря :) Сега тъкмо сядам да го пиша, но май първо трябва да си намеря някакъв примерен сорс за LCD-то, че да мога да си визуализирам резултатите :)
Титла: Помощ за С и 16F871
Публикувано от: IbT в Март 26, 2009, 11:18:23 pm
Оправих се вече с дисплея. Сега наистина минавам към АЦП-то, но пак имам питанка. Ето какво пише в датата:
Цитат

CHS2:CHS0: Analog Channel Select bits
000 = Channel 0, (RA0/AN0)
010 = Channel 2, (RA2/AN2)
011 = Channel 3, (RA3/AN3)
100 = Channel 4, (RA5/AN4)
101 = Channel 5, (RE0/AN5)(1)
110 = Channel 6, (RE1/AN6)(1)
111 = Channel 7, (RE2/AN7)(1)

Ами на мен като ми трябва AN1 какво правя?
Титла: Помощ за С и 16F871
Публикувано от: tommyboy в Март 27, 2009, 11:04:02 am
Какъв ти е ЛЦД -то точно, аз се занимавам с графични и буквенно -цифрени ЛЦД.
Титла: Помощ за С и 16F871
Публикувано от: IbT в Март 27, 2009, 12:36:25 pm
LCD-то ми е HD44780. Аз с него почти се оправих. Намерих си примерен код и го преработих малко като за 1 и 2 ред задавам два масива char*. Не успях само да го накарам да ми изкарва променливи int, както и adresh и adresl се опитах, но и там е същото.
Титла: Помощ за С и 16F871
Публикувано от: sv_shady в Март 27, 2009, 08:35:34 pm
Ами това с AN1 e странно! Свали си ерата на даташийта да не е някаква грешка. Другия вариант е този 16F871 да е някакъв по странен... До сега не съм го ползвал, тък като е сравнително стар. Може би трябваше да се спреш на 16Ф877А или 16Ф876
Титла: Помощ за С и 16F871
Публикувано от: tommyboy в Март 27, 2009, 09:32:42 pm
Ами с АЦП като работиш трябва да се съобразиш колко ти е времето за дискретизация от това зависи на колко време ще проверяваш ADRESH/L
, има флаг за това ама пак си прочети даташийта.Друго трябва да се  конфигурира и разрядността на АЦП и подравняване на получената стойността от модула.
Титла: Помощ за С и 16F871
Публикувано от: IbT в Март 27, 2009, 10:18:38 pm
Проблема с LCD-to и стойността на adresh е, че този код, който съм намерил може на ми изкарва само char*, след няколко преработки го бях накарал int и adresh да ми ги изкарва с някакви гергелици. Иначе с char* нямам проблеми.
Титла: Помощ за С и 16F871
Публикувано от: tommyboy в Март 28, 2009, 12:57:06 pm
Аз на асемблер пиша и имам малко познания по С , и може би няма да съм ти много полезен .
Титла: Помощ за С и 16F871
Публикувано от: IbT в Март 28, 2009, 03:36:10 pm
Ами според мен проблемът е, че integer са 16 битови, а char - 8. Въпреки, че доколкото разбрах от хелпа на компилатора itoa() функцията преобразува integer в ASCII, което всъщност си е 8 бита. И все пак не мога да разбера защо не се получава. Функцията, която ми пише по дисплея, всъщност обходжда цялото съобщение и изпраща символите един по един. Просто функцията itoa() нещо ми бърка работата, но не мога да разбера. Това ми е засега единия проблем, а другият е, че искам да използва и AN1 (Канал 1), но по тази таблица съдя, че не мога. Според мен са пропуснали да го напишат и когато оправя дисплея ще го пробвам.
Титла: Помощ за С и 16F871
Публикувано от: sv_shady в Март 28, 2009, 10:07:52 pm
Ами използвай sprintf() Казваш му да принтира 16битовото число и му казваш в кой стринг (масив от чарове) и го пращаш него.
Попринцип itoa() връща указател към получения стринг. Това взел ли си го предвид ?
Титла: Помощ за С и 16F871
Публикувано от: IbT в Март 28, 2009, 10:47:11 pm
Перфектна работа свърши sprintf. sv_shady, много ти благодаря. Въобще не се бях сетил за нея, понеже повече на С++ съм програмирал и съвсем отскоро съм С (колкото и нелогично да звучи, но съм си почнал от С++ и общо взето заради контролерите минах на С). Продължавам напред и очаквайте скоро новият ми въпрос :)
Титла: Помощ за С и 16F871
Публикувано от: sv_shady в Март 28, 2009, 11:04:07 pm
Ами вече преобладават по-сериозни машини, които нямат проблем с обектно ориентирани езици като С++ и е нормално да си почнал от него :) И аз бях така, но С предоставя набор от много гъвкави, полезни и леки функции като sprintf() :)
Титла: Помощ за С и 16F871
Публикувано от: sv_shady в Март 28, 2009, 11:04:50 pm
Ами вече преобладават по-сериозни машини, които нямат проблем с обектно ориентирани езици като С++ и е нормално да си почнал от него :) И аз бях така, но С предоставя набор от много гъвкави, полезни и леки функции като sprintf() :)

А за AN1 мисля, че е грешка в даташийта защото си свалих най-новия от сайта на микрочип и си имаше AN1
Титла: Помощ за С и 16F871
Публикувано от: IbT в Март 29, 2009, 12:21:29 am
Именно за това избрах С вместо С++. Сега използвам boostc със SourceBoost IDE и съм доволен особено в комбинация с Porteus :) Иначе имам и BoostC++ компилатор, но мисля, че С-то ще ми е по-удобно. Имам и на Hi-Tech компилатор, но пък IDE-то им нещо не ми харесва.
Титла: Помощ за С и 16F871
Публикувано от: sv_shady в Март 29, 2009, 10:56:15 am
Аз лично ползвам CCS :) Купих си и техния дебъгер и ползвам пълноценно идето им, а пък и имат много подробна документация и примери :)
Титла: Помощ за С и 16F871
Публикувано от: IbT в Март 29, 2009, 11:22:25 am
Ами аз имам и техен компилатор, който си върви с MPLAB, но е пробна версия. Пък IDE-to на sourceboost ми харесва защото има и симулатор - доста опростен, но пак е нещо. Можеш да си включваш и разни плугини към контролера и да тестваш, но не е толкова мощен като Porteus.