| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Конфигуриращи битове - проблем!?! http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=4920 |
Страница 1 от 1 |
| Автор: | me40 [ Съб Окт 06, 2007 4:37 pm ] |
| Заглавие: | Конфигуриращи битове - проблем!?! |
Здравейте, Защо с 10mhz кварц не мога да пусна PIC18F на 40 mhz? (т.е. работи си все на 10) Според документацията : FOSC2:FOSC0: Oscillator Selection bits 111 = RC oscillator w/ OSC2 configured as RA6 110 = HS oscillator with PLL enabled/Clock frequency = (4 x FOSC) 101 = EC oscillator w/ OSC2 configured as RA6 100 = EC oscillator w/ OSC2 configured as divide-by-4 clock output 011 = RC oscillator 010 = HS oscillator 001 = XT oscillator 000 = LP oscillator би трябвало с този ред в конфигуриращите битове по долу да стане __CONFIG H'300001', B'110' Когато включа таймер1 с външна честота за еталон (пр. 32.768 khz) и същевременно засичам препълване на таймер0 (настроен по вътрешен такт) , таймер 1 показва едни и същи резултати с PLL и без PLL при 10 mhz. Неможах да намеря отговора и затова се обръщам към Вас. btw.. като четох документацията пробвах примерно да защитя кода чрез CONFIG5L - резултат пак нямаше. Само от конфигуриращите битове ли зависи включването на PLL-a (и защита от четене) или има и още нещо, което пропускам ???? Ще бъда благодарен на смислени отговори |
|
| Автор: | Ки4о [ Съб Окт 06, 2007 5:02 pm ] | |||||||||
| Заглавие: | ||||||||||
Аз ще бъда благодарен ако започнеш да упоменаваш за кой точно процесор имаш в предвид! Ето ти пример за 18F448 : __CONFIG _CONFIG1H,_OSCS_ON_1H & _XT_OSC_1H __CONFIG _CONFIG2L,_BOR_OFF_2L & _PWRT_OFF_2L __CONFIG _CONFIG2H,_WDT_OFF_2H & _WDTPS_128_2H __CONFIG _CONFIG4L,_STVR_OFF_4L __CONFIG _CONFIG5L,_CP0_OFF_5L & _CP1_OFF_5L Пример за 18F4550: #include <18F4550.h> #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN На какъв език и за какъв чип и компилатор ти трябва конфигурацията? |
||||||||||
| Автор: | me40 [ Съб Окт 06, 2007 5:05 pm ] |
| Заглавие: | |
Благодаря Кичо ! Става въпрос за PIC18F452. Пиша на asm и използвам MPLAB. |
|
| Автор: | Gogo [ Съб Окт 06, 2007 6:04 pm ] |
| Заглавие: | |
Прочети този пост: http://mcu-bg.com/mcu_site/viewtopic.php?t=1107&start=0 |
|
| Автор: | me40 [ Съб Окт 06, 2007 8:51 pm ] |
| Заглавие: | |
Благодаря на Ки40 и Gogo. В крайна сметка стана само по този начин: CONFIG OSC = HSPLL CONFIG OSCS = ON CONFIG PWRT = ON CONFIG BOR = OFF CONFIG WDT = OFF CONFIG WDTPS = 32 CONFIG CCP2MUX = OFF CONFIG STVR = ON CONFIG LVP = OFF CONFIG DEBUG = OFF CONFIG CP0 = ON CONFIG CP1 = ON CONFIG CP2 = ON CONFIG CP3 = ON CONFIG CPB = ON CONFIG CPD = OFF CONFIG WRT0 = OFF CONFIG WRT1 = OFF CONFIG WRT2 = OFF CONFIG WRT3 = OFF CONFIG WRTB = ON CONFIG WRTC = ON CONFIG WRTD = OFF CONFIG EBTR0 = OFF CONFIG EBTR1 = OFF CONFIG EBTR2 = OFF CONFIG EBTR3 = OFF CONFIG EBTRB = OFF По този начин въобще не се конфигурира пика: (дали нещо става при компилацията...незнам засега нямам нужният опит !?!?! __CONFIG _CONFIG1H,_OSCS_ON_1H & _XT_OSC_1H __CONFIG _CONFIG2L,_BOR_OFF_2L & _PWRT_OFF_2L __CONFIG _CONFIG2H,_WDT_OFF_2H & _WDTPS_128_2H __CONFIG _CONFIG4L,_STVR_OFF_4L __CONFIG _CONFIG5L,_CP0_OFF_5L & _CP1_OFF_5L При промяна на _XT_OSC_1H се конфигурира, но на 10 mhz. Наистина всички препоръчват 'C' за 18FXX2, ама като съм учил 1 семестър само асемблер и това то. После 10-на години въобще не съм се занимавал с нещо подобно и затова тръгнах на asm. Това което съм започнал ще го изкарам на asm, но следващото ...дълбоко се съмнявам (освен ако не е да паля светодиоди Искам да попитам по напредналите , а и не само. Една и съща задача за PIC, ако се напише на asm и после на 'C' еднакво място ли се заема от програмната памет ?!?!? И съответно това , което ме интересува: Тъй като ми трябва да измервам импулси по 5-6 us, и едва смогвам на asm (затова вдигам честотата, че процесора се бави) ако същото напиша на 'C' дали ще смогва пика ?!?!? |
|
| Автор: | Ки4о [ Съб Окт 06, 2007 9:28 pm ] |
| Заглавие: | |
__CONFIG" АААААА"_CONFIG1H,_OSCS_ON_1H & _XT_OSC_1H на мястото на " АААААА"_ трябва да има интервал,предполагам че си го написал слято и за това не тръгва. Сложи си един външен кристал на 38 или 40 MHz и ползвай Capture на таймера и ще смогнеш да измерваш времеинтервала.Не че със вътрешната PLLняма да стане,ама аз си предпочитам външния кристал |
|
| Автор: | me40 [ Съб Окт 06, 2007 9:46 pm ] |
| Заглавие: | |
Не е проблема в интервала. СОРСА СЕ КОМПИЛИРА БЕЗ ГРЕШКА. Ако не сложа интервал или каквото и да е друго MPLABa ще изреве за грешка и няма да получа хекс файла. Примерно за защитата на пика ако напиша: __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L или __CONFIG _CONFIG5L, _CP0_ON_5L & _CP1_ON_5L & _CP2_ON_5L & _CP3_ON_5L Все се чете. (уж защитен) Или пък за PLL-a. Пак компилира се , записвам, пускам , но на 10mhz. Иначе си прав за външният кристал ама като нямам в събота след обяд и неделя, та реших да пробвам с PLL-a, па като се запъна....... |
|
| Автор: | Desert Leo [ Нед Окт 07, 2007 9:45 am ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
Това зависи както от програмиста, така и от С-компилатора, а и от самия алгоритъм. Но по принцип, писането на асемблер дава по компактен код, но това не е предимство като се отчете времето за написване на програмата и това, че контролера обикновено има достатъчно флаш. Най-големият гърч при асемблера (IMHO) е настройката на регистрите за съответната периферия. Не се чуди, а започвай С-то.
Въпросът ти е некоректен, защото не си уточнил каква разделителна способност и грешка те устройва. |
|||||||||||||||||||
| Автор: | Комбинатор [ Съб Окт 13, 2007 5:08 pm ] |
| Заглавие: | |
В никакъв случай не се отказвай от асемблера. Има случай, когато трябва да гониш времена и цикли , едновременно да следиш и да испълняваш задачи тогава C-то е напълно безполезно. |
|
| Автор: | Desert Leo [ Съб Окт 13, 2007 5:58 pm ] | |||||||||
| Заглавие: | ||||||||||
Ако се окаже, че:
Ако времената са толкова критични се сменя контролера. |
||||||||||
| Автор: | Комбинатор [ Нед Окт 14, 2007 8:50 am ] |
| Заглавие: | |
тогава най-напред се сменя програмиста Добре , например как на C мога да напиша следното: (който и да е процесор на ATMEL с AVR studio) SBRC PORTB , 0 //Skip if Bit in I/O Register is Cleared goto six_ciklA goto six_ciklB six_cklA: nop //точно 6 цикъла nop //или какъвто и да е код , но да се изпълнява за 6 цикъла nop nop nop goto cont_3 six_cklB: nop //точно 6 цикъла nop nop nop nop goto cont_3 Давам този пример, като най-елементарна конструкция от този тип. Ако имаме още по едно разклонение на логиката с точно сметнати цикли в тях, как може да се постигне това в C. Предполагам с много добро познаване на начина по койти компилатора замества изразите от C с асемблерните думи , но това не е моя случай.А предполагам и на повечето начинаещи. По принцип компенсирам незнанието си с повече труд.А и не вярвам някои да постигне повече без перфектно познаване на асемблер. |
|
| Автор: | Desert Leo [ Нед Окт 14, 2007 12:32 pm ] |
| Заглавие: | |
Комбинаторе, не вземай шегата толкова навътре Аз не отхвърлям асемблера, но пак казвам, че ако нещата са толкова критични откъм време, дори точния брой цикли няма да те спаси, защото реалния свят е друг. Например, времетраенето на цикъла в зависимост от температурата. Затова, ако пишейки на С имаш подобен проблем, не мисли, че с асемблер ще го оправиш. По-добре преосмисли нещата още веднъж и ако трябва използвай по-бърз процесор и съответна периферия. . |
|
| Автор: | Yanek [ Нед Окт 14, 2007 1:05 pm ] |
| Заглавие: | |
Моите наблюдения са, че като цяло, особено при по-сложни (?!) задачи С компилатора се представя много по-добре. Или по-скоро оптимизатора му. Не че всеки средно опитен програмист не би могъл да напише такъв код, особено ако следва правилата на оптимизатора, но този код става изключително труден за четене и промяна. Докато компилатора според оптимизацията добавяйки дори 1 допълнителна ключова дума в кода, може да промени изцяло цели блокове с цел оптимизация по място или бързина. А и въпроса не е С или асемблер. В повечето проекти не се налага употребата на асемблер. Но ако се наложи какъв е проблема да използваш. Или пък ако пишеш основно на асемблер можеш използваш С функции. Такъв е момента да кажем при разни математически изчисления в ПИК-а. Защо да се трепеш да пишеш килобайти на асм, като може да се напише с 1 ред на С и да го използваш като библиотечна функция. Само трябва да се съобразиш с конюнктурата на компилатора. |
|
| Автор: | Wise [ Нед Окт 14, 2007 3:37 pm ] |
| Заглавие: | |
//офтопик //само за да сме коректни.... SBRC не е SBIC , но така или иначе - и двете се изпълняват за 1 или 2 цикъла!! т.е. не е еднакво времето трябва още 1 NOP // |
|
| Автор: | Zdrav [ Нед Окт 14, 2007 7:01 pm ] | |||||||||
| Заглавие: | ||||||||||
И ти наричаш това... програмиране??? |
||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|