Виж темите без отговор | Виж активните теми
Дата и час: Пет Мар 29, 2024 5:45 pm
PIC12F509 - написах код ама работи само на симулация
Автор |
Съобщение |
Ванко
Ранг: Минаващ
Регистриран на: Вто Дек 17, 2019 5:51 pm Мнения: 13
|
PIC12F509 - написах код ама работи само на симулация
Здравейте, написах код за PIC12F509 за 2 бутона към rotary encoder или двупосочен квадратурен генератор тоест да подменя rotary encoder с бутони Флашнах го на PIC16F648 и работи, работи и в симулация на Proteus (естествено с промяна на командата за порт) на PIC12C509 (C509 беше най-близо до F509 което в същност имам). Проблема идва от това, че когато го програмирам на реален PIC12F509 - чипа нищо не прави! Виждам, че е жив понеже като натисна Резет бутона двата светодиода премигват и толкова. Поставих 2 светодиода на изходите за да следя за реакция. Схемата е следната: GP0 = UP - Бутон с резистор 10к към маса GP1 = DN - бутон с резистор 10 към маса GP2 = не е свързан, зададен като изход GP3 = RESET през 10k към Vcc и бутон към GND GP4 = OUT B - Изход 2 - свързан през 220 ома резистор и светодиод към GND GP5 = OUT A - Изход 1 - свързан през 220 ома резистор и светодиод към GND Изходите си седят логически 1 без никаква реакция! Къде бркам? 3-4 дена се мъча с какви ли не конфигурации на регистрии не ще, имам 2 нови чипа PIC12F509! MPLAB IDE 8.30 с компилатор High-Tech C компилира без никакъв проблем за F509. Бушоните са извън кода и са следните - IntOSC, CP - OFF, RESET - ON, WDT - OFF програматора ми е PicKit3 и също флашва без никакви забележки! Просто не ще и не ще да тръгне на истински чип. Ей това е кода: Това е функцията, която се опитвам да направя: | | | | Код: loop4_ms=8 -> имитира 1mS закъснение, за 4MHz вграден осцилатор идва 8 процесорни цикъла
STEPS_MAP таблицата отговаря на светодиодите както следва - AB -> 11 01 00 10 първи старт от step0 (т. е. 11)
Ако бутон UP = 1 за повече от 90mS и по-малко от 250mS -> брои две стъпки нагоре от текущата таблица STEPS_MAP т.е. -> step0 изчаква 90mS step1 чака 250mS -> и остава на стъпка 2 или съответно 0
Ако задържа UP за повече от 250mS -> прави още 2 стъпки ли продължава да брои докато държа бутона т.е. -> step0 -> чака 90mS step1 -> чака 250mS -> step2 -> чака 90mS -> step3 -> чака 250mS -> step0 ... и т.н. (0,1,2,3,0,1, ...)
като отпусна бутона остава на съответната стъпка 0 или 2 като натисна пак продължава от където е стигнало
Ако бутон DN = 1 за повече от 90mS и по-малко от 250mS -> брои две стъпки надолу от текущата таблица STEPS_MAP т.е. -> step0 чака 90mS step1 чака 250mS -> и спира на съответната 0 или 2
Ако задържа DN за повече от 250mS -> прави още 2 стъпки ли продължава да брои докато държа бутона т.е. -> step3 -> чака 90mS step2 -> чака 250mS -> step1 -> чака 90mS -> step0 -> чака 250mS -> step3 ... и т.н. (3,2,1,0,3,2, ...)
като отпусна бутона остава на съответната стъпка 0 или 2 като натисна пак продължава от където е стигнало
Всеки път като натисна някой от бутоните да продължава от съответната стъпка а не от началото на STEPS_MAP
| | | | |
Прикачам и целия проект на Proteus 7.10 и MPLAB IDE 8.30, в архива има и снимки от симулацията - работи отлично. Вижда се как ТЕТРИС фигурката е огледална Моля, ако някой знае как и може да ми помогне!
|
Вто Дек 17, 2019 9:33 pm |
|
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 8:21 pm Мнения: 27949 Местоположение: София
|
Re: PIC12F509 - написах код ама работи само на симулация
Ами той C509 е еднократно програмируем, ако преди това си качвал и друго на него няма как да работи, освен ако не е развоен с прозорче.
|
Сря Дек 18, 2019 3:18 am |
|
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 11:02 am Мнения: 8873 Местоположение: Разград
|
Re: PIC12F509 - написах код ама работи само на симулация
Точка първа - PIC12F509 не е компютър. Пълно глупост на тая въшка да ползваш индексно адресиране - само там генерираш тон код. Не знам как точно се справя хайтек Ц с банкирането на програмната памет, щото тая плюнка и там има "банкиране". Ако програмата ти е по-голяма от 128 думи, почти сигурно е че там се осира. Протеуса това нещо не го симулира правилно.
Като искаш нещо 8 пиново има къде къде по смислени алтернативи - примерно 12F1822 - линейна програмна памет, фср регистри и още куп хардуер, дето това което го искаш май може и без програма да стане - само с периферия.
|
Сря Дек 18, 2019 9:20 am |
|
|
Ванко
Ранг: Минаващ
Регистриран на: Вто Дек 17, 2019 5:51 pm Мнения: 13
|
Re: PIC12F509 - написах код ама работи само на симулация
Благодаря за отговорите! ToHu 12C509 ползвам само за симулацията, компилирам за F509 и флашвам на F509. Cekins Аз го имам направено и работещо с CMOS логика, но исках да е по-компактно, освен това тези "въшки" вече ги имам купени и исках да ги използвам. Пробвах и само мигалка за GP0 през 500mS но и това не тръгна (но всичко работи в симулацията), нещо не е наред с конфигурацията и немога да го изловя или даташиита има грешка, че там е и мешан с 16F505 което е 14 пиново подобие но с 11 IO мисля беше. Да, знам, че не е компютър ама то нищо не тръгва на яве! Сякаш някаква второстепенна функция е задействана или пък не е задействана и нямам достъп до изводите, Как ли не го ръчках. Нямам идея как да реша проблема, а информацията е оскъдна та реших да се допитам до по-знаещи и можещи. Тука окастрих кода и размених GP0, GP1 c GP5, GP4 ама се тя, пак същия ефект:
|
Сря Дек 18, 2019 2:01 pm |
|
|
ig_ivanov
Ранг: Напреднал
Регистриран на: Съб Май 21, 2016 8:47 pm Мнения: 472 Местоположение: Бургас
|
Re: PIC12F509 - написах код ама работи само на симулация
От конфигурационната дума забрани WDT и виж пак там дали е избран вътрешния генератор. От OPTION register може да изключиш pull-up-a, и без това ползваш външни резистори. ПП: Всъщност, сега видях, че ако GP3 e конфигуриран за MCLR, pull-up са винаги включени.
|
Сря Дек 18, 2019 3:05 pm |
|
|
Ванко
Ранг: Минаващ
Регистриран на: Вто Дек 17, 2019 5:51 pm Мнения: 13
|
Re: PIC12F509 - написах код ама работи само на симулация
Благодаря за отговора. ig_ivanov WDT е изключен, осцилатора е вътрешен (IntOSC), Резета (GP3) е включен да (в първия пост съм дал бушоните)... явно съм пропуснал момента където е описано, че резето автоматично включва вътрешните повдигащи резистори (макар, че не би трябвало да ми пречат ... май ), ще го спра, но в OPTION регистъра съм ги спрял да не ми се пречкат и там аномалията с GP2/T0CKI също съм я настроил уж, даже го сложих изход.
|
Сря Дек 18, 2019 4:08 pm |
|
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 10:22 pm Мнения: 3074
|
Re: PIC12F509 - написах код ама работи само на симулация
Имаше някакъв екран в ИДЕ-то - оттам да зададеш конфиг.дума , не в сорса.... Ама кога кое беше валидно, не помня.
|
Сря Дек 18, 2019 4:10 pm |
|
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 8:21 pm Мнения: 27949 Местоположение: София
|
Re: PIC12F509 - написах код ама работи само на симулация
ами то не остава много, конфигурационна дума трябва да е тоя е по прост от бобена чорба. Виж дали си на вътрешен, виждаш ли си конфигурационната дума ? Гледам при тях се пише нещо ткаова : __CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & BOREN_ON & LVP_OFF & CPD_OFF & CP_OFF); Виждам че в твоят код е директно сетната конфигурационната дума, сега не ми се рови да видя дали е правилна, пробвай да изпозлваш тов апо-горе, по-разбираемо е.
|
Сря Дек 18, 2019 4:13 pm |
|
|
ig_ivanov
Ранг: Напреднал
Регистриран на: Съб Май 21, 2016 8:47 pm Мнения: 472 Местоположение: Бургас
|
Re: PIC12F509 - написах код ама работи само на симулация
Конфигурационната дума за този чип е 12 бита, от които се ползват само 5. Твоята е 14.
|
Сря Дек 18, 2019 5:11 pm |
|
|
Stoimen
Ранг: Популярен
Регистриран на: Пет Юни 25, 2010 2:18 pm Мнения: 338 Местоположение: Varna
|
Re: PIC12F509 - написах код ама работи само на симулация
Имам далечен спомен за проблем с HIGH-TECH и дефиницията на TRIS. При PIC12F509 TRIS регистъра не е мапнат на адрес. Достъпен е само с инструкцията TRIS. По спомен HIGH-TECH компилатора генерираше код за писане в SFR адреса на TRIS от .h файла, а не използваше инструкцията TRIS. Можеш да провериш в .lst файла.
|
Сря Дек 18, 2019 7:07 pm |
|
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 10:22 pm Мнения: 3074
|
Re: PIC12F509 - написах код ама работи само на симулация
В листинга има това: line 44 114 ;509quad.c: 44: TRIS = 0b001011; 115 14C C0B movlw (0Bh) 116 14D 006 tris 0x6
|
Сря Дек 18, 2019 7:33 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4671
|
Re: PIC12F509 - написах код ама работи само на симулация
Ванко, вземи си 12F1822 или 12F1840 и потренирай малко с MPLAB-а
_________________ main[-1u]={1};
|
Сря Дек 18, 2019 7:47 pm |
|
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 10:22 pm Мнения: 3074
|
Re: PIC12F509 - написах код ама работи само на симулация
Що бре , 509 си е ок за задачата. Мотиката е малка, може да му помогне за в бъдеще. От друга страна - ST пуснаха 8 краков АРМ.
|
Сря Дек 18, 2019 8:49 pm |
|
|
Ванко
Ранг: Минаващ
Регистриран на: Вто Дек 17, 2019 5:51 pm Мнения: 13
|
Re: PIC12F509 - написах код ама работи само на симулация
Благодаря за отговорите! ig_ivanov Мисля, че някъде в началото го сложих на 12 бита, но не виждам как да го наглася в момента. Принципно съм малко по-запознат с MikroC но там този чип го няма и се чудих с какъв компилатор да го подхвана, а и в програмирането не съм силен - дет се вика новак съм Пък асемблера е като тъмна Индия за мен! stefan63 TRIS=0b111000 т.е. 5,4,3 са входове а 2,1,0 са ми изходи сега махам резето и става TRIS=0b110000 тоест GP5, GP4 стават входове а всичко останало изходи, предполагам за този чип не вървят на обратно или? Като променям ТRIS и в симулацията се променят посоките на изводите и мисля, че е ок така. И да, сега и аз го виждам това в Program Memory Line 379 address 17A opcode 006 TRIS 0x6 там трябва да е 0x30 предполагам или? ToHu да беше настроено но го махнах от кода иначе трябваше да е adress FFF value 0x31FA с пуснато резе, сега е 0x31EA без резе, извън кода са настроени. stefan63 да задал съм ги от там - таба Configure -> Configuration Bits, но ако го няма в кода програматора мрънка, че не ги намира в HEX-a Stoimen къде да го търся тва? Порязах още кода, сега ми махна и резето (единственото живо нещо ) и пак ядец:
|
Сря Дек 18, 2019 9:18 pm |
|
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 10:22 pm Мнения: 3074
|
Re: PIC12F509 - написах код ама работи само на симулация
На мен това line 44 114 ;509quad.c: 44: TRIS = 0b001011; 115 14C C0B movlw (0Bh) 116 14D 006 tris 0x6 ми изглежда нормално за твоята схема. TRIS 0X6 означава , че ще запише W=0b001011 в регистъра за управление на посоката(GPIO има адрес 0x6). Поне така си мисля. ===== Това , че мрънка ...ок, ама отказва ли да програмира? Ако не отказва - пробвай без конфиг в сорса.
|
Сря Дек 18, 2019 9:38 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|