Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

PIC16F676 проблем
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=5215
Страница 1 от 2

Автор:  GDTRON [ Нед Дек 16, 2007 4:46 pm ]
Заглавие:  PIC16F676 проблем

Здравейте,
надявам се да помогнете да реша следният проблем. Правя една платка с PIC16F676. Тъй като използвам всички изводи на процесора ми се налага да му ползвам вътрешния генератор. Направих пробна програмка с която да пробвам работата на процесора. Записването на програмата в процесора минава нормално. При самото програмиране ICProg-a ми изписва две предупреждения. Първото е че няма въведена ID Value а второто е че няма въведена стойност за калибриране на вътрешният генератор, като след второто предупреждение ми дава да си избирам дали при програмирането да се използва някаква стойност по подразбиране. След като избера Yes или NO програмирането преминава нормално. След като после прочета кода от процесора и го сравня с оригинала който записвам - разлика няма, обаче процесора не тръгва да работи. Всички изводи са с високо импедансно състояние, което ме навежда на мисълта че всички са входове, както при начално състояние.
Смених процесора с нов, но отново проблема е същият.
Прикачам и кода да го видите:
Код:
#include <16F676.h>
#device adc=10


#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                //Internal RC Osc, no CLKOUT
#FUSES NOPROTECT                //Code not protected from reading
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOPUT                    //No Power Up Timer

#use delay(clock=4000000)



#byte   porta=0x0005
#byte   portc=0x0007
//#byte   CMCON=0x0019

#bit    current_gen=portc.0
#bit    sv_green=portc.1
#bit    sv_red=portc.4
#bit    sv_yellow=portc.5
#bit    rele=porta.5
#bit    button=porta.4

#int_COMP


void main()
{

   setup_adc_ports(sAN6|sAN7|VSS_VDD);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_vref(FALSE);
   
   output_a (0b00000000);
   output_c (0b00000001);
   set_tris_a (0b11010011);
   set_tris_c (0b11001100);
 
   sv_green=1;
                sv_red=1;
   rele=1;



   do{
      }while(true);
}


Компилатора е CCS.На симулацията в Proteus-a програмата върви нормално.
В pdf-a на процесора открих изречение което немога да разтълкува: When MCLR is asserted in INTOSC or RC mode, the internal clock oscillator is disabled.
Надявам се някой да може да помогне. Благодаря!

Автор:  GDTRON [ Нед Дек 16, 2007 4:59 pm ]
Заглавие: 

Сега като четох из форумът забелязах че в тема IntRC PIC16F628A колегата mash описва същият проблем само че на друг PIC. Ако случайно го е решил се надявам да каже как.

Автор:  plameniv [ Нед Дек 16, 2007 5:16 pm ]
Заглавие:  Mda

GDTRON написа:
Сега като четох из форумът забелязах че в тема IntRC PIC16F628A колегата mash описва същият проблем само че на друг PIC. Ако случайно го е решил се надявам да каже как.

Вече програмира ли го , ако си значи си омазал пейзажа и трябва ръчно тестово да калибрираш генератора , най лесно е да си купиш друг чип и да изчетеш първо какво има записано на адрес #03FFF (обикновенно е нещо от сорта 34XX , като XX е от 0 до FF), там има записано калибровачна стойност на вътрешния генератор и за всеки чип е различна, първо се изчита и после се записва това заедно със твоята програма , именно за това ти дава грешка преди запис като ти напомня да си напишеш вярната стойност на този адрес !!!
Най лесно става като предварително изчиташ контролера и си записваш си на лисче какво пише там, после зареждаш HEX файла и отиваш на този адрес и ръчно записваш пак кода , и чак след това записваш в чипа и всичко е 6 :)

Автор:  GDTRON [ Нед Дек 16, 2007 5:37 pm ]
Заглавие: 

Благодаря plameniv,
ще пробвам това и после ще пиша какво е станало . За съжаление обаче ще трябва да сменя чипа защото вече го записах :)

Автор:  wolfshark [ Нед Дек 16, 2007 6:59 pm ]
Заглавие: 

GDTRON написа:
Благодаря plameniv,
ще пробвам това и после ще пиша какво е станало . За съжаление обаче ще трябва да сменя чипа защото вече го записах :)

Е ще го презапишеш де :D
Пробвай на асемблер да го пуснеш (вътрешния генератор) пък после пробвай с на plameniv трика да вземеш стойността.

Автор:  plameniv [ Пон Дек 17, 2007 1:12 am ]
Заглавие:  Mne

wolfshark написа:
GDTRON написа:
Благодаря plameniv,
ще пробвам това и после ще пиша какво е станало . За съжаление обаче ще трябва да сменя чипа защото вече го записах :)

Е ще го презапишеш де :D
Пробвай на асемблер да го пуснеш (вътрешния генератор) пък после пробвай с на plameniv трика да вземеш стойността.

Не може да я вземеш а трябва да се налучка !
1.Когато записваш софта също записваш на адрес #3FFE и #3FFF някаква стойност там да речем 34АА .
2. За да я налучкаш правиш си вътре един loop да цикли със смяна на нивото на един от портовете и мериш честотата , после сменяш това AA нагоре или надолу за проба например 9А или BA , виждаш колко се е променила честотата на онзи порт смяташ за колко цикъла ти излиза като време на цикъл коригираш още и така но не е лесно трябват ти няколко опита .:)
Другия вариант е да си включиш порта дето е изход от осцилатора и да мериш директно каква е честотата на осцилатора , правиш си програмка дето да пише в еепрома някакво число и с 2 бутона цъкаш единия за увеличаване на тази константа другия за намаляне с по 1 може да сложиш и още 2 бутона за прескачане по 10 за по бързо, и като стигне 4MHz стойноста я имаш в ЕЕПРОМ, само че за целта се прави малко по сложна програма и тази константа трябва да я имаш в програмата директно заложена и от там да си я заредил на осцилатора в началото :D
Ама аз забравих да спомена че в програмата винаги трябва да имаш в началото един CALL 3FFh или ако те мързи всеки път да я пишеш на онзи адрес изчиташ я и я записваш в софта директно нещо такова:
MOVLW 0xAA
BSF STATUS,RP0
MOVWF OSCCAL
BCF STATUS,RP0
------------------------------------------------------
по вярно е така, в този случай е по универсално става нещо с контролера сменяш го и той работи със същата програма на същата честота :
CALL 0x03FF
BSF STATUS,RP0
MOVWF OSCCAL
BCF STATUS,RP0

Автор:  GDTRON [ Сря Дек 19, 2007 9:29 pm ]
Заглавие: 

Здравейте,
смених процесора но при четенето му с ICprog-a на адрес 0х03FF нямаше нищо. Пускам ви е снимка да видите какво излиза при четенето. Този адрес #3FFF за който говорите, как мога да го прочета. Нещо съвсем се обърках вече. Имам и още един въпрос. Може ли калибриращата променлива на вътрешния генератор да е причина генератора да не работи или тя е само за определяне на точната тактова честота? Защото при мен нищо не тръгва затова си мисля че генератора не тръгва въобще.

Прикачени файлове:
IC-prog.JPG
IC-prog.JPG [ 68.63 KiB | Прегледано 2146 пъти ]

Автор:  Ки4о [ Сря Дек 19, 2007 10:29 pm ]
Заглавие: 

Това прилича на картинка на заключен контролер.Направи му един bulk erase за да го изтриеш и при четене трябва да имаш 3FFF навсякъде.

Автор:  GDTRON [ Сря Дек 19, 2007 11:02 pm ]
Заглавие: 

Цитат:
Това прилича на картинка на заключен контролер.Направи му един bulk erase за да го изтриеш и при четене трябва да имаш 3FFF навсякъде.

Абсолютно съм съгласен, и на мене на такъв ми прилича, обаче контролера е чисто нов, нищо не е записвано на него. Просто го сложих и го прочетох. Сега се сетих че може би ако някой от изводите не контактува добре май пак така ще показва ICprog-a. Ще взема да проверя спойките.

Автор:  plameniv [ Чет Дек 20, 2007 12:08 am ]
Заглавие:  Mmmm

GDTRON написа:
Цитат:
Това прилича на картинка на заключен контролер.Направи му един bulk erase за да го изтриеш и при четене трябва да имаш 3FFF навсякъде.

Абсолютно съм съгласен, и на мене на такъв ми прилича, обаче контролера е чисто нов, нищо не е записвано на него. Просто го сложих и го прочетох. Сега се сетих че може би ако някой от изводите не контактува добре май пак така ще показва ICprog-a. Ще взема да проверя спойките.

Нов контролер няма заключен.
Нещо криво има в твоя програматор !!!
Да не си го сложил на грешно място, виж къде се слага 12С509 и на негово място го ложи !!!

Автор:  wolfshark [ Чет Дек 20, 2007 11:49 am ]
Заглавие: 

GDTRON написа:
Цитат:
Това прилича на картинка на заключен контролер.Направи му един bulk erase за да го изтриеш и при четене трябва да имаш 3FFF навсякъде.

Абсолютно съм съгласен, и на мене на такъв ми прилича, обаче контролера е чисто нов, нищо не е записвано на него. Просто го сложих и го прочетох. Сега се сетих че може би ако някой от изводите не контактува добре май пак така ще показва ICprog-a. Ще взема да проверя спойките.

По принцип ако не контактува ще се получи така както е на твоята снимка. Опитай просто да не слагаш чипа в програматора да видиш че същото ще илезе.

Автор:  Ки4о [ Чет Дек 20, 2007 8:52 pm ]
Заглавие: 

Абе я да кажеш с каква платка ползваш IcProg - ProPic,JDM,Tait,...?

Автор:  Syrius-B [ Чет Дек 20, 2007 11:43 pm ]
Заглавие: 

Цитат:
В pdf-a на процесора открих изречение което немога да разтълкува: When MCLR is asserted in INTOSC or RC mode, the internal clock oscillator is disabled.
Надявам се някой да може да помогне. Благодаря!

Не можеш да ползваш при INTOSC пина на MCLR за нещо друго, освен за MCLR

Автор:  Predator_MF [ Съб Дек 22, 2007 12:10 pm ]
Заглавие: 

@Syrius-B, трудно ми е да повярвам...щом FUSЕ-a NOMCLR е вдигнат значи MCLR пина работи като част от порта, а не като ресет. Този PIC изключение ли е ?

Автор:  Syrius-B [ Съб Дек 22, 2007 1:04 pm ]
Заглавие: 

При всички е така.
Освен това има проблеми с програмирането - проблема е, че обикновено не се програмира :o
Това, което го пише в Datasheets за разните функционални възможности, е вярно поотделно, но не е безусловно и винаги.
Специално за MCLR пина, не можеш да го ползваш като I/O, при вътрешен генератор по нормалния начин.
Има обиколен път, но е "с едно наум".
Трябва при програмирането да го излъжеш, че няма да го ползваш, и после да го включиш, но номера не минава на всички процесори :cry:
Затова, просто не го ползвай, и няма да имаш проблем нито с програмирането, нито с дебъга.

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