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

Проблем с 16F676 - не ми тръгва програмата
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=188
Страница 1 от 2

Автор:  peterhr [ Сря Дек 01, 2004 5:37 pm ]
Заглавие:  Проблем с 16F676 - не ми тръгва програмата

За първи път използвам 16F676. От страна на хардуер е добре. Записвам програмата и я чета без грешки. Обаче не ми се стартира.

Използвам С компилатор и ICProg.
Изключил съм: WDT, PWRT, MCLR, BODEN, CP, CPD
За осцилатор съм избрал IntOSC GP4.

За Bandgap какво трябва да избера?
Изключил съм компараторите.

Как да настроя калибровъчния регистър - OSCCAL?

При начало на запис ICProg чете данни от процесора и ми казва че не съм задал : "Oscillator Calibration Value".
След това по подразбиране взима 3FFF, така че това не би трябвало да ми е проблем.

Програмата ми има само инициалиране на регистри и трябва да светне 2 светодиода, ама не иска.

Къде бъркам?

Автор:  Реконструктор [ Сря Дек 01, 2004 5:41 pm ]
Заглавие:  Re: Проблем с 16F676 - не ми тръгва програмата

peterhr написа:
За първи път използвам 16F676. От страна на хардуер е добре. Записвам програмата и я чета без грешки. Обаче не ми се стартира.

Използвам С компилатор и ICProg.
Изключил съм: WDT, PWRT, MCLR, BODEN, CP, CPD
За осцилатор съм избрал IntOSC GP4.

За Bandgap какво трябва да избера?
Изключил съм компараторите.

Как да настроя калибровъчния регистър - OSCCAL?

При начало на запис ICProg чете данни от процесора и ми казва че не съм задал : "Oscillator Calibration Value".
След това по подразбиране взима 3FFF, така че това не би трябвало да ми е проблем.

Програмата ми има само инициалиране на регистри и трябва да светне 2 светодиода, ама не иска.

Къде бъркам?


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

Автор:  peterhr [ Сря Дек 01, 2004 5:51 pm ]
Заглавие: 

кода е това:

--------------
#include <Charge_Adaptor.h>
#fuses NOWDT, NOPROTECT, NOBROWNOUT, NOMCLR

// Задава адрес за калибровка
#BYTE OSCCAL = 0x90

// Задава адрес за компаратора
#BYTE CMCON = 0x19

void main()
{
// Прави всички изходи
set_tris_a (0); // 0 - out
set_tris_c (0); // 0 - out

// Централна честота - според datasheet-a
OSCCAL = 0b100000;

// Изключва компараторите
CMCON = 0x07;

output_high (PIN_A5);
output_high (PIN_C5);

}
------------------

Трябва да светнат двата светоиода, но не искат. +5В на тези изходи няма.
Сигурно е нещо в настройките ама ...


Забравих да постна и header файла:
---------------
name:Charge_Adapter.h
#include <16F676.h>
#device adc=8
#use delay(clock=4000000)
#fuses INTRC_IO, BANDGAPHIGH, BROWNOUT, MCLR
#use rs232(baud=9600,parity=N,xmit=PIN_A3,rcv=PIN_A2,bits=9)
----------------

Автор:  Реконструктор [ Сря Дек 01, 2004 6:00 pm ]
Заглавие: 

peterhr написа:
кода е това:

--------------
#include <Charge_Adaptor.h>
#fuses NOWDT, NOPROTECT, NOBROWNOUT, NOMCLR

// Задава адрес за калибровка
#BYTE OSCCAL = 0x90

// Задава адрес за компаратора
#BYTE CMCON = 0x19

void main()
{
// Прави всички изходи
set_tris_a (0); // 0 - out
set_tris_c (0); // 0 - out

// Централна честота - според datasheet-a
OSCCAL = 0b100000;

// Изключва компараторите
CMCON = 0x07;

output_high (PIN_A5);
output_high (PIN_C5);

}
------------------

Трябва да светнат двата светоиода, но не искат. +5В на тези изходи няма.
Сигурно е нещо в настройките ама ...


Забравих да постна и header файла:
---------------
name:Charge_Adapter.h
#include <16F676.h>
#device adc=8
#use delay(clock=4000000)
#fuses INTRC_IO, BANDGAPHIGH, BROWNOUT, MCLR
#use rs232(baud=9600,parity=N,xmit=PIN_A3,rcv=PIN_A2,bits=9)
----------------


Странна работа, fuses се определят от кода. :) Сигурен ли си, че 0 е out?

Автор:  Predator_MF [ Сря Дек 01, 2004 6:08 pm ]
Заглавие: 

С кварц пробва ли??? На асемблер какво излиза (понякога тоя компилатор върши големи глупости).

output_high (PIN_A5);
output_high (PIN_C5);

Ей тука предполагам че има някаква каша, направена от компилатора. Предлагам да го направиш така:

Код:
#bit A5 = 0x05.5  // инициализираш A5 като променлива
#bit C5 = 0x07.5 // инициализираш С5 като променлива
(Не съм сигурен за адресите на портовете, намам даташийт пред мене)
....
....
void main()
{
...
А5 = True;// Вдигаш А5
С5 = True;// Вдигаш С5
...
}

Автор:  Nikola Kirov [ Сря Дек 01, 2004 7:15 pm ]
Заглавие: 

Зависи с кой компилатор си.

ако си с Hi-Tech
наи коректно според мен е да си инклуднеш първо .h фаила за 16F676
и да го направиш така.

след това

#define PB(port,bit) ((unsigned)&(port)*8+(bit))
static bit PIN1 @ PB(PORTA,5);
static bit PIN2 @ PB(PORTC,5);


TRISA = 0;
TRISC = 0;

PIN1 = 1;
PIN2 = 1;

Автор:  Mozfet [ Сря Дек 01, 2004 7:35 pm ]
Заглавие: 

Писал го е на CCS C.

Predatore и на мен ми се стори необичайно да виждам нещо като
output_high (PIN_A5);
но си бачка. Пък и щом от CCS препоръчват така да се прави, мисля да го правя. Не знам, тези с повечето опит с този компилатор ползват ли fast_io , т.е.

#bit A5 = 0x05.5;
А5 = 1

или

output_high(pin_A5); ?

Автор:  bateAz [ Сря Дек 01, 2004 7:38 pm ]
Заглавие: 

Aма и ти си ги избрал... :wink:
PA5 се шерва с аналоговите входове, докато не запишеш с ADCON1 каквото трябва, напр. 0x06, няма да стане.
За PC5 май че е същото. Виж SPI/I2C модула, да не би той да ги държи.

Автор:  zmej [ Сря Дек 01, 2004 11:40 pm ]
Заглавие: 

bateAz написа:
PA5 се шерва с аналоговите входове, докато не запишеш с ADCON1 каквото трябва, напр. 0x06, няма да стане.
За PC5 май че е същото. Виж SPI/I2C модула, да не би той да ги държи.


TRIS-регистрите са с приоритет пред ADCON-a. Aко го ориентираш като изход, след това може да се пробваш да четеш колкото искаш - резултат - никакъв. Пробвано (не точно на тоя, ама не вярвам този да е различен от всички останали). А SPI/I2C (както и всяка периферия май) си е изключен по default.

Автор:  bateAz [ Сря Дек 01, 2004 11:58 pm ]
Заглавие: 

Грешиш. ADCON1 трябва да се инициализира пръв.

Автор:  zmej [ Чет Дек 02, 2004 12:10 am ]
Заглавие: 

Не мисля. И не за друго, ами щото досега всичките ми програми работят така (трис-овете винаги ги инициализирам първи, след intcon-a, option-a и тук-таме някое ресет-битче). Налагало ми се е да го лъжа - конфигурирам краката като аналогови с АДКОН-а (щото пик-а друга възможност не ми дава :evil: ), а с ТРИС-а ги ориентирам като изходи. И си имам напълно функционални няколко аналогови входа (които са входове и в трис-а) и няколко цифрови изхода (даже работят :D - в трис-а са изходи, а в АДКОН-а са аналогови)... Между другото, в началото и аз се чудех дали ще стане, но на всеки пик, който съм хванал, е така... :roll:

Но както и да е, не мисля че това е проблема... Но на симулатор много лесно ще се види къде какво прави.

Автор:  peterhr [ Чет Дек 02, 2004 9:56 am ]
Заглавие: 

Мерси за отговорите.
Със CCS компилирам.

Според мен проблема не е в инициализирането на портовете с TRIS.
Някъде четох че командата output_high (???) прави изход този пин, т.е. включва и обръщането му в изход и подаването на високо ниво. Но това мисля не ми е проблема. Писах няколко програми за 16Ф628А и там всичко си вървеше.

Функциите на A5 са:
-I/O
-Timer1 clock
-Crystal/Resonator
-External clock input

Искам да използвам само вътрешния кварц, нямам външен за да правя опити.

Тук е нещо или с основните регистри или с настройките при самото програмиране.

Може ли да ми кажете нещо повече за bandgap?

Това GP4 какво означава?
Има го като допълнение на INTOSC GP4 (при избора от ICProg).

И последно - как да разкарам това калибриране което ми го иска в началото?

Много въпроси станаха, ама...

Автор:  zmej [ Чет Дек 02, 2004 10:30 am ]
Заглавие: 

peterhr написа:
Това GP4 какво означава?
Има го като допълнение на INTOSC GP4 (при избора от ICProg).

И последно - как да разкарам това калибриране което ми го иска в началото?


Първото ти е, че GP4 си го ползваш като входно, изходен пин, ако му напишеш CLKOUT, оттам ще ти изкара изход на вътрешния генератор.

За калибрирането - мисля, че няма начин да го разкараш, поне с айсипрог-а, принципно той май така или иначе си е калибриран.

Автор:  peterhr [ Чет Дек 02, 2004 11:12 am ]
Заглавие: 

Да, ако избера да изкарва CLOCKOUT на А4 ми изкарва честотата.
Това е единственото което успях да подкарам.

Направих всички пинове изходи, вдигам ги в 1-за ама никой не слуша. Стоят си на 0V.

Според мен нещо не тръгва програмата. Ама защо ...

Автор:  zmej [ Чет Дек 02, 2004 3:56 pm ]
Заглавие: 

Подкарай я със симулатор - дръпни си някакъв МПЛАБ (преди 6), и я трасирай... Иначе май гадаем... Аз лично залагам на някаква простотийка, дето е като я гледаш - нищо, а иначе може да ти отрови живота (както в случая)...

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