Микроконтролери и електроника
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 ]
Заглавие: 

Цитат:
Една и съща задача за PIC, ако се напише на asm и после на 'C' еднакво място ли се заема от програмната памет ?!?!?


Това зависи както от програмиста, така и от С-компилатора, а и от самия алгоритъм. Но по принцип, писането на асемблер дава по компактен код, но това не е предимство като се отчете времето за написване на програмата и това, че контролера обикновено има достатъчно флаш. Най-големият гърч при асемблера (IMHO) е настройката на регистрите за съответната периферия. Не се чуди, а започвай С-то.

Цитат:
Тъй като ми трябва да измервам импулси по 5-6 us, и едва смогвам на asm (затова вдигам честотата, че процесора се бави) ако същото напиша на 'C' дали ще смогва пика ?!?!?


Въпросът ти е некоректен, защото не си уточнил каква разделителна способност и грешка те устройва.

Автор:  Комбинатор [ Съб Окт 13, 2007 5:08 pm ]
Заглавие: 

В никакъв случай не се отказвай от асемблера.
Има случай, когато трябва да гониш времена и цикли , едновременно да следиш
и да испълняваш задачи тогава C-то е напълно безполезно.

Автор:  Desert Leo [ Съб Окт 13, 2007 5:58 pm ]
Заглавие: 

Ако се окаже, че:
Цитат:
C-то е напълно безполезно
тогава най-напред се сменя програмиста :wink:
Ако времената са толкова критични се сменя контролера.

Автор:  Комбинатор [ Нед Окт 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 ]
Заглавие: 

Комбинаторе, не вземай шегата толкова навътре :wink:
Аз не отхвърлям асемблера, но пак казвам, че ако нещата са толкова критични откъм време, дори точния брой цикли няма да те спаси, защото реалния свят е друг. Например, времетраенето на цикъла в зависимост от температурата. Затова, ако пишейки на С имаш подобен проблем, не мисли, че с асемблер ще го оправиш. По-добре преосмисли нещата още веднъж и ако трябва използвай по-бърз процесор и съответна периферия.
.

Автор:  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 ]
Заглавие: 

Комбинатор написа:
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

И ти наричаш това... програмиране??? :)

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/