| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Проблем на начинаещия http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=13314 |
Страница 1 от 1 |
| Автор: | pencho [ Съб Ное 01, 2014 1:49 pm ] |
| Заглавие: | Проблем на начинаещия |
Здравейте, от 2 дни се уча да програмирам контролери на MikroC , като ги симулирам на Proteus При желание да активирам PWM на 16f887 с код (от библиотеката на MikroC) void main(){ trisc = portc = 0 ; ansel = anselh = 0 ; pwm1_init(1999) ; pwm1_set_duty(122); PWM1_start ; } При симулацията излизат на крачетата C -нулички и грешки : Program or EEPROM data has invalid adress [2000;2001;2002;2003] for this device Пробвах на Real pic simulator и резултата е аналогичен. Моля за съвети. Поздрави! |
|
| Автор: | marcuka68 [ Вто Ное 04, 2014 4:39 pm ] |
| Заглавие: | Re: Проблем на начинаещия |
Аз не симулирам на Протеус, но бих пробвал да започна от нещо минимално работещо. След като го видя, че работи добре, пиша още малко код, отново се уверявам, че работи ,както трябва, и продължавам така. Следвайки горния подход, обикновено правя следните неща на нова платка: 1. Пускам светодиод да свети на някой крак на микроконтролера; 2. Пускам таймер и размигвам с него светодиода на определено време; 3. Пускам УАРТ; 4. Продължавам да пиша код и дебъгвам, като гледам стойности на променливи с УАРТ-а. |
|
| Автор: | michev [ Вто Ное 04, 2014 8:18 pm ] | |||||||||
| Заглавие: | Re: Проблем на начинаещия | |||||||||
А пък още по - преди това, трябва да научи, че от мейн функцията не трябва да излиза. Добави си
|
||||||||||
| Автор: | pechkov [ Пет Ное 07, 2014 12:14 am ] |
| Заглавие: | Re: Проблем на начинаещия |
Малко екзампълс няма да е във вреда: http://www.mikroe.com/chapters/view/17/chapter-4-examples/#c4v8 Обаче аз лично нямам доверие на симулатори, когато се касае за програмен код в чипове. Съвета на marcuka68 е по-доброто решение. Ще ти трябва някаква скромна breadboard, малко жички, шепа резисторчета, кондензаторчета, светодиодчета и прочие, нормален програматор за PIC-ове и действай по метода one step at a time. |
|
| Автор: | Cekins [ Пет Ное 07, 2014 10:25 am ] |
| Заглавие: | Re: Проблем на начинаещия |
А какъв е проблема да се симулира програмен код - много по-лесно е от аналогова симулация... |
|
| Автор: | pechkov [ Пет Ное 07, 2014 12:48 pm ] | |||||||||
| Заглавие: | Re: Проблем на начинаещия | |||||||||
То проблеми да искаш. Ще разкажа един мой случай. Почнах едно мъъъъничко проектче. Много мъничко код, с много мъничък процесор PIC12F683. И по някое време при разширяване на възможностите на устройството ми потрябва и UART. А пък 12F683 няма хардуерен, не ми се пускаше библиотеката за софтуерен UART, понеже много товари като размер на програмата... Промених конфигурацията, смених типа на процесора на PIC12F1840, компилирах, записах в чипа, и... не тръгна. ... Изгубих два дни в чудене. Програмния код за функционалността на проекта до този момент беше написан, тестван, и работещ. По метода на изключването - почнах да премахвам избрани редове от кода, после ги връщах и премахвах други, докато гада не се показа в един на пръв поглед несъмнителен ред. Побитова операция за запис на данна в масив от байтове. Бях написал математическа операция за събиране в параметъра за указване на кой байт от масива да бъде записана данната. При 12F683 си работеше нормално, но за 12F1840 не. Развойната среда е MicroBasic 6.0. И досега не знам дали е заради някаква разлика в процесорите, или компилатора има бъг. |
||||||||||
| Автор: | Cekins [ Пет Ное 07, 2014 6:35 pm ] |
| Заглавие: | Re: Проблем на начинаещия |
И двете Да ти обясня ся къв е проблема : 683 паметта му е разпиляна. Като дефинираш масив, той започва от първото свободно място до края на конкретната банка и продължава от първото свободно място на следващата и т.н. С други думи един масив може да е на адреси от 0х030 до края на банката (0х06F примерно) и после от 0х0А0 на следваща банка до някъде си. Зависи как са му SFR регистрите - сега не ми се гледа точно. За да можеш да ги четеш и пишеш вярно, програмата някак си трябва да установи дадения индекс къде точно се намира - абе въобще гоуем секс. Обаче - 1840 (а и цялата серия 18хх и другите нови 14бит коре) имат една екстра всички рам регистри са достъпни ЛИНЕЙНО от физически адрес 0х2000 но САМО с използването на FSR0 и FSR1, като първия свободен рам регистър в банка 0 е на адрес 0х2000, втория на 0х2001 и т.н. и примерно в банката има 80 клетки, последната ще е на адрес 0х204F а първата рам клетка от банка 1 (която е на адрес 0x0A0 примерно) ще дойде на адрес 0х2050 в линейната памет. И т.н. със всички останали банки в които има GPR-и. Комбинирано с няколкото допълнителни инструкции специално за манипулация на FSRх регистрите, работата с големи масиви на тия въшлета става доста удобна. Протон-а ги знае тия работи и се възползва максимално от тях. Не знам микорбейсик-а дали ги знае. Трябва да компилираш и да видиш когато четеш/пишеш някой индекс как точно инициализира FSR регистрите - ако го зарежда с 0х2ххх значи е добре, ама ако задава нормалния адрес е нормално да се омаже програмата. Омазва се защото индекса ти реално сочи към SFR регистър (който е в началото на следващата банка) а не към GPR (който реално е някъде по средата на банката). |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|