Отговори на тема  [ 47 мнения ]  Отиди на страница Предишна  1, 2, 3, 4  Следваща
PIC12F509 - написах код ама работи само на симулация 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27949
Местоположение: София
Мнение Re: PIC12F509 - написах код ама работи само на симулация
За какво са ти команди побитово, всички компилатори за ПИК които съм виждал компилират всяка побитова операция на С в побитов аинструкция, т.е. ако декларираш изхода ти като бит, и след това го манипулираш като бит компилатор аще изпозлва инструкция bfc/bfs. Ето тук менуал : https://ww1.microchip.com/downloads/en/ ... manual.pdf
Също така в мануала му пише че когато изпозлваш маска, тя отново се изпълнява с побитови операции .

unsigned int foo;
foo |= 0x40;
will produce the instruction:
BSF _foo,6

To set or clear individual bits within integral type, the following macros could be used:
#define bitset(var, bitno) ((var) |= 1UL << (bitno))
#define bitclr(var, bitno) ((var) &= ~(1UL << (bitno)))
To perform the same operation as above, the bitset macro could be employed as
follows:
bitset(foo,6);

Не е проблема в мплаба, не мисля че е и в HiTechC, ако е нужно си адаптирай малко кода, ако не е правен за тази среда. ПИК, АВР и др. дребосъци, са контролери чийто асемблер трябва да го познаваш, а и специално в пика са 35 инструкции, учат се за ден. В процесора също няма проблем, някога съм го изпозлвал, нямал съм никакви грижи, всъщност навремето май започнах точно с 508 опитвах да изпозлвам някаква малоумна среда която да ми генерира асмеблера накрая се отказах хванах мплаб-а и точно след два дена имах всичко работещо, а асемблера го бях научил на изуст, повечето инструкции все още ги помня въпреки че не съм писал за пик от години, особенно пък някакъв по-сериозен код.
В момента нямам нищо сетнато за пик, иначе щях да го пробвам и флашна. Обикновенно ако работи в протеус работи и на пик, и най-честите проблеми са свързани с генератор, куче, и др. подобни.


Чет Дек 19, 2019 5:13 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 11:02 am
Мнения: 8873
Местоположение: Разград
Мнение Re: PIC12F509 - написах код ама работи само на симулация
Е в този случай сигурен ли си че чипа е здрав? Няма причина при програма с 5 реда да не тръгне. Зарежи го тоя 509 и вземи нещо нормално. 1822 даже може и дебъг да му се прави колкото и да звучи малоумно...


Чет Дек 19, 2019 6:28 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 1:21 am
Мнения: 10573
Местоположение: София
Мнение Re: PIC12F509 - написах код ама работи само на симулация
Потърси готова програма за някаква мигалка с тоя чип. Да кажем някой пример от сайта на Майкрочип. Изпечи и провери дали тоя чип изобщо работи или вече е запразнил...
А най-добре ще е ако има колипилран хекс.


Чет Дек 19, 2019 6:34 pm
Профил
Ранг: Напреднал
Ранг: Напреднал
Аватар

Регистриран на: Пет Фев 14, 2014 3:45 pm
Мнения: 420
Местоположение: Монтана
Мнение Re: PIC12F509 - написах код ама работи само на симулация
Ванко написа:
...



Набързо преминах през темата, и може да съм пропуснал нещо важно, но да питам...

Казваш, че пишеш на MikroC, и използваш PIC12F509. А като какъв чип си го задал в развойната среда?

_________________
Не карай по-бързо от своя ангел-пазител!


Чет Дек 19, 2019 7:37 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27949
Местоположение: София
Мнение Re: PIC12F509 - написах код ама работи само на симулация
...едит, нещо грешно съм си спомнял, не е писал, пише че е C509 в средата, или поне аз така разбрах.
п.с. в архива който е качил asm листинга е генериран от Hitechc
п.с.2 ти сигурен ли си че изобщо го прогрмаираш, като го прочетеш записало ли се е тов акеото се предполага че се записва ?


Чет Дек 19, 2019 7:45 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 11:02 am
Мнения: 8873
Местоположение: Разград
Мнение Re: PIC12F509 - написах код ама работи само на симулация
C509 се ползвал само за симулация, щото протеуса нямал F509. С пиккит3 малко трудно ще се запише без да се запише.


Чет Дек 19, 2019 8:41 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 3:01 pm
Мнения: 1438
Мнение Re: PIC12F509 - написах код ама работи само на симулация
Така като чета почти съм сигурен, че има проблем с осцилатора. С външен ще заработи при всички положения. На симулацията пак ще работи, защото там и да не го конфигурираш тоя регистър пак ще работи с каквото си задал на симулатора.

Тоя процесор има една особеност, че стойността за калибриране на вътрешния осцилатор е записана на последния адрес от паметта, който адрес не се заключва и може да се прочете и при заключена памет. Ако искаш вътрешен осцилатор, първата инструкция от кода ти трябва да е MOVWF OSCCAL, защото при стартиране или ресет първо се чете последния адрес, за да се вземе тая стойност и след това отива на нулевия вектор. Ако там нямаш MOVWF OSCCAL не се знае на каква честота ще заработи. Нищо чудно и в момента да работи, но на честота, която не е подходяща за функциите ти, като това пак ще изглежда като неработещ процесор. Идея си нямам твоя компилатор дали автоматично оправя осцилатора или трябва да си го пипнеш ти, но в хекса, който си сложил не виждам подобно действие.

MPlab при програмиране не пипа последния адрес. Някой програматори като ICprog също питат дали да го изтрият, но ако не прочетеш предупреждението, а направо натиснеш YES, го изтрива. При изтриване на програмната памет се изтрива и калибровъчната стойност. Т.е. като си купиш нов процесор първо трябва да го прочетеш и да видиш какво е записал производителя на последния адрес, което е калибровка за точно 4 MHz. Пиковете от една серия имат горе долу еднакви стойности и ако не си трил втория пик може да вземеш неговата стойност от последния адрес.


Съб Дек 21, 2019 11:56 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 11:02 am
Мнения: 8873
Местоположение: Разград
Мнение Re: PIC12F509 - написах код ама работи само на симулация
С това се занимава програматора. Дори и да е изтрита калибрацията не е голям проблем - тя коригира с +/- 5%. И има чалъм да се възстанови - с пиккит като види че е 00 или FF се усеща и ти казва и има опция с която някак си го мери и калибрира. Предполагам че е на база кварца в пиккит-а, но все пак му задава някаква стойност. По скоро може да е проблем ако на последния адрес има нещо дето да го хвърли по върбите. И то командата там не беше ли Movlw 0xXX? И после при първа възможност W се вкарва в OSCCAL.


Съб Дек 21, 2019 5:29 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 10:22 pm
Мнения: 3074
Мнение Re: PIC12F509 - написах код ама работи само на симулация
В Хекса се вижда, че
втората инструкция е запис нa W в OSCCAL,
не е там ключът от бараката.
Интересно , че и простото сетване на един порт не работи.
Или WDT убива всичко, или проца е заминал.

Или Пикит3 не може коректно да програмира 509.


Съб Дек 21, 2019 7:03 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 10:22 pm
Мнения: 3074
Мнение Re: PIC12F509 - написах код ама работи само на симулация
Ванко, случайно разбрах, че кодът ти се компилира на МПЛАБ 8.9 с компилатор XC8(само __CONFIG не хареса).
Tа тая класика ХитекЦ можеш да я разкараш, не че мисля да е проблем.
Иначе , кодът ти е излишно дълъг - интежер и лонгинт...дето можеш да минеш с по-къси типове.


Съб Дек 21, 2019 7:09 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Дек 17, 2019 5:51 pm
Мнения: 13
Мнение Re: PIC12F509 - написах код ама работи само на симулация
Привет на новодошлите в темата и благодаря за отговорите!
CarBeta написа:
Така като чета почти съм сигурен, че има проблем с осцилатора. С външен ще заработи при всички положения. На симулацията пак ще работи, защото там и да не го конфигурираш тоя регистър пак ще работи с каквото си задал на симулатора.

Тоя процесор има една особеност, че стойността за калибриране на вътрешния осцилатор е записана на последния адрес от паметта, който адрес не се заключва и може да се прочете и при заключена памет. Ако искаш вътрешен осцилатор, първата инструкция от кода ти трябва да е MOVWF OSCCAL, защото при стартиране или ресет първо се чете последния адрес, за да се вземе тая стойност и след това отива на нулевия вектор. Ако там нямаш MOVWF OSCCAL не се знае на каква честота ще заработи. Нищо чудно и в момента да работи, но на честота, която не е подходяща за функциите ти, като това пак ще изглежда като неработещ процесор. Идея си нямам твоя компилатор дали автоматично оправя осцилатора или трябва да си го пипнеш ти, но в хекса, който си сложил не виждам подобно действие.

MPlab при програмиране не пипа последния адрес. Някой програматори като ICprog също питат дали да го изтрият, но ако не прочетеш предупреждението, а направо натиснеш YES, го изтрива. При изтриване на програмната памет се изтрива и калибровъчната стойност. Т.е. като си купиш нов процесор първо трябва да го прочетеш и да видиш какво е записал производителя на последния адрес, което е калибровка за точно 4 MHz. Пиковете от една серия имат горе долу еднакви стойности и ако не си трил втория пик може да вземеш неговата стойност от последния адрес.

Това всичкото и аз го гледах и настройвах!

ДА Cekins ПикКит3 си има стойност по подразбиране и си я записва и чете, но може и друга да се сложи уж на 4МХц е по-подразбиране, пък ся колко е 4 ... Аз го настройвам с __OSCCAL(0x0C3A) което е фабричната - и на 2-та ми чипа е такава. Kато менкам бушона за резето - се включва и иазключва на яве и на двата чипа. Аз не съм използвал никакъв хардуер от чипа, не ме бърка колко точна ще е честотата на вътрешния генератор, трябва само да отваря и затваря 2 изхода един след друг.

pechkov Компилирам на MPLAB 8.30 HighTechC за 12F509 и флашвам с PicKit3 на 12F509, a симулирам на Proteus 7.10 - 12C509, а отделно съм почитател на MikroC и с него каквото съм написал - всичко бачка ама няма нищо за 509 (него и разработчиците на MikroC го плюят) и от там се почна търсене на компилатори и прочия.

Конфига си е OK, одеве прикачих един руски код и там същите бушони и е така ама е на асемблер и ядец, друго нищо не разбрах от него, а е работещ...
stefan63 Да, и аз до там стигнах - никаква команда за GP0 не сработи (нито GPIObits.GP0 и т.н.)- в кода съм го показал! И аз мисля, че някаква настройка пречи, но всякак ги въртях, имам и друг програматор GPIC SE v1.1.2 за PIC - с него почнах. Ама нито компилатора мрънка, нито програматорите, а чипа приема всичко, но отказва да върши работа. Аз преди да отворя темата, цяла седмица се мъчих и копах информация.

itso.t аз обърнах нета и не намерих работаща за С а повечето от резултатите бяха асемблерски и рязко ги подминах.

Дайте да измислим някакво решение за този чип, за функцията, която се опитвам да направя или ако някой може да драсне някакъв код, да изпълнява функцията пък аз ще си настроя времезадръжките на нужната стойност.

Просто времето ми свършва, от 3-ти почвам работа, а трябва и платка да правя - за домашния ми усилвател е - присаждах му там дистанционно и всичко друго стана, само този ROTARY ENCODER остана да емулирам, че няма как да бръкна в процесора на усилвателя и да му туря бутони на мястото на Енкодера

Ето последното кълцано:
Код:
/*
PIC12F509 buttons to
rotary encoder truth table.
===========================
Count UP   OUTA  OUTB
===========================
<1.1> =     H  -  H
<1.2> =     L  -  H
<2.1> =     L  -  L
<2.2> =     H  -  L
===========================
Count DN   OUTA  OUTB
===========================
<1.1> =     H  -  H
<1.2> =     H  -  L
<2.1> =     L  -  L
<2.2> =     L  -  H
===========================
*/
// CONFIG
#include <pic.h>
__CONFIG(0x0FEA);
//__OSCCAL(0x0C3A);
#define _XTAL_FREQ 4000000
#include <stdint.h>
#define UP GPIObits.GP5
#define DN GPIObits.GP4

/*#define loop4_ms 8  // 8 is number of loop iterations for 1 ms at 4 MHz

//**********functions****************

unsigned int j;

void pause_ms(unsigned int given_ms);               // pause_ms(n); function same as delay_ms(n);

//**********mapping steps************

unsigned char const STEPS_MAP[4] = {0b11,0b10,0b00,0b01};
int step=0;
*/
//main code
void main(void) {   
    TRIS   = 0b110000;          // Set GP0,GP1,GP2 as outputs & GP3, GP5, GP4 as input (0 => Output, 1 => input)
    GPIO   = 0b000000;        // Set GPIO = 0 for all outputs
   OPTION = 0b11000000;      //Set functions for MCU pins - 0x30

GP0=1; //ОСТАВИЛ СЪМ САМО ТАЗИ КОМАНДА И ДОРИ ТЯ НЕ БАЧКА
/*      
do
     {
         if (UP)            //Check if switch  is closed
           {
             pause_ms(90);   //wait for 90ms  (switch debouncing)
             if (UP)         //Check if switch is still closed
                {
                GPIO = (STEPS_MAP[step]);     //Load current state
                pause_ms(250);                  //Pulse time
              step++;                        //Count +
              if (step>3)step=0;            
            }
           }

          else
             {
                 GPIO = (STEPS_MAP[step]);
             }
          if (DN)            //Check if switch  is closed
           {
             pause_ms(90);   //wait for 90ms  (switch debouncing)
             if (DN)         //Check if switch is still closed
                {
                GPIO = (STEPS_MAP[step]);     //Load current state
               pause_ms(250);                  //Pulse time
                 step--;                        //Count -
                 if (step<0)step=3;
               }
            }
          else
             {
                 GPIO = (STEPS_MAP[step]);
             }
     }
*/
   while(1);

//}
//end main code
/*
   void pause_ms( unsigned int given_ms ) {  // pause for given_ms milli seconds
   
   unsigned long j, max_time = given_ms * loop4_ms;
    for(j=0; j < max_time; j++);          // Make waiting for about given_ms msec
*/
};


Съб Дек 21, 2019 10:05 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 1:23 pm
Мнения: 3545
Местоположение: Високо в планината
Мнение Re: PIC12F509 - написах код ама работи само на симулация
На пикльовците може да им се изкара клока на някой пин. Я го направи , да видим имаш ли клок.
Едит: не съм чел нагоре, рекох да се обадя, че нямаме ток от известно време :-) дано да не дублирам някого.

_________________
Хайде де!


Съб Дек 21, 2019 10:42 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Пет Юни 25, 2010 2:18 pm
Мнения: 338
Местоположение: Varna
Мнение Re: PIC12F509 - написах код ама работи само на симулация
Пробвай това. Трябва да мърдат GP4 и GP5 в противофаза с период 1 секунда.
Нямам PIC12F509 в момента за да пробвам, но това трябва да работи (работило е някога точно на f509 :) ).


Прикачени файлове:
blink_509.zip [386 Байта]
130 пъти
Съб Дек 21, 2019 11:16 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Дек 17, 2019 5:51 pm
Мнения: 13
Мнение Re: PIC12F509 - написах код ама работи само на симулация
Благодаря за отговорите

dan Ще пробвам!
Stoimen Работи отлично и на двата чипа! Сега ако имаш и кода, вече има светлина в тунела :D 8O

Да дам и малко информация от програматора за конфигурацията на работещия HEX - OSCCAL 0C3A, CONFIG 0FEA, CHECKSUM 4D6E


Прикачени файлове:
Коментар на файл: Копие на HEX данните от програматора
F509_HEX VALUES.txt [4.31 KiB]
117 пъти
Вто Дек 24, 2019 10:14 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27949
Местоположение: София
Мнение Re: PIC12F509 - написах код ама работи само на симулация
От тук единствено кофига е важен.


Вто Дек 24, 2019 10:47 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 47 мнения ]  Отиди на страница Предишна  1, 2, 3, 4  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни