|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 9:27 pm
Проблем с 16F676 - не ми тръгва програмата
| Автор |
Съобщение |
|
peterhr
Ранг: Минаващ
Регистриран на: Пон Сеп 27, 2004 8:48 pm Мнения: 59 Местоположение: София
|
 Проблем с 16F676 - не ми тръгва програмата
За първи път използвам 16F676. От страна на хардуер е добре. Записвам програмата и я чета без грешки. Обаче не ми се стартира.
Използвам С компилатор и ICProg.
Изключил съм: WDT, PWRT, MCLR, BODEN, CP, CPD
За осцилатор съм избрал IntOSC GP4.
За Bandgap какво трябва да избера?
Изключил съм компараторите.
Как да настроя калибровъчния регистър - OSCCAL?
При начало на запис ICProg чете данни от процесора и ми казва че не съм задал : "Oscillator Calibration Value".
След това по подразбиране взима 3FFF, така че това не би трябвало да ми е проблем.
Програмата ми има само инициалиране на регистри и трябва да светне 2 светодиода, ама не иска.
Къде бъркам?
|
| Сря Дек 01, 2004 5:37 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
 Re: Проблем с 16F676 - не ми тръгва програмата
Не, че съм капацитет по въпроса с тез процесори, но не е зле да пуснеш сорса тука.  Колкото и да е прост, може да има някой дребен, но съществен пропуск. При мен в началото имаше много такива.
|
| Сря Дек 01, 2004 5:41 pm |
|
 |
|
peterhr
Ранг: Минаващ
Регистриран на: Пон Сеп 27, 2004 8:48 pm Мнения: 59 Местоположение: София
|
кода е това:
--------------
#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 5:51 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
 |  |  |  | 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?
|
| Сря Дек 01, 2004 6:00 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
С кварц пробва ли??? На асемблер какво излиза (понякога тоя компилатор върши големи глупости).
output_high (PIN_A5);
output_high (PIN_C5);
Ей тука предполагам че има някаква каша, направена от компилатора. Предлагам да го направиш така:
|
| Сря Дек 01, 2004 6:08 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Зависи с кой компилатор си.
ако си с 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;
|
| Сря Дек 01, 2004 7:15 pm |
|
 |
|
Mozfet
Ранг: Ориентиран
Регистриран на: Съб Сеп 25, 2004 4:33 pm Мнения: 273 Местоположение: София
|
Писал го е на CCS C.
Predatore и на мен ми се стори необичайно да виждам нещо като
output_high (PIN_A5);
но си бачка. Пък и щом от CCS препоръчват така да се прави, мисля да го правя. Не знам, тези с повечето опит с този компилатор ползват ли fast_io , т.е.
#bit A5 = 0x05.5;
А5 = 1
или
output_high(pin_A5); ?
_________________ Adios
Mozfet
|
| Сря Дек 01, 2004 7:35 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Aма и ти си ги избрал...
PA5 се шерва с аналоговите входове, докато не запишеш с ADCON1 каквото трябва, напр. 0x06, няма да стане.
За PC5 май че е същото. Виж SPI/I2C модула, да не би той да ги държи.
|
| Сря Дек 01, 2004 7:38 pm |
|
 |
|
zmej
Ранг: Новодошъл
Регистриран на: Нед Ное 28, 2004 10:02 pm Мнения: 141 Местоположение: София
|
TRIS-регистрите са с приоритет пред ADCON-a. Aко го ориентираш като изход, след това може да се пробваш да четеш колкото искаш - резултат - никакъв. Пробвано (не точно на тоя, ама не вярвам този да е различен от всички останали). А SPI/I2C (както и всяка периферия май) си е изключен по default.
|
| Сря Дек 01, 2004 11:40 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Грешиш. ADCON1 трябва да се инициализира пръв.
|
| Сря Дек 01, 2004 11:58 pm |
|
 |
|
zmej
Ранг: Новодошъл
Регистриран на: Нед Ное 28, 2004 10:02 pm Мнения: 141 Местоположение: София
|
Не мисля. И не за друго, ами щото досега всичките ми програми работят така (трис-овете винаги ги инициализирам първи, след intcon-a, option-a и тук-таме някое ресет-битче). Налагало ми се е да го лъжа - конфигурирам краката като аналогови с АДКОН-а (щото пик-а друга възможност не ми дава  ), а с ТРИС-а ги ориентирам като изходи. И си имам напълно функционални няколко аналогови входа (които са входове и в трис-а) и няколко цифрови изхода (даже работят  - в трис-а са изходи, а в АДКОН-а са аналогови)... Между другото, в началото и аз се чудех дали ще стане, но на всеки пик, който съм хванал, е така...
Но както и да е, не мисля че това е проблема... Но на симулатор много лесно ще се види къде какво прави.
|
| Чет Дек 02, 2004 12:10 am |
|
 |
|
peterhr
Ранг: Минаващ
Регистриран на: Пон Сеп 27, 2004 8:48 pm Мнения: 59 Местоположение: София
|
Мерси за отговорите.
Със CCS компилирам.
Според мен проблема не е в инициализирането на портовете с TRIS.
Някъде четох че командата output_high (???) прави изход този пин, т.е. включва и обръщането му в изход и подаването на високо ниво. Но това мисля не ми е проблема. Писах няколко програми за 16Ф628А и там всичко си вървеше.
Функциите на A5 са:
-I/O
-Timer1 clock
-Crystal/Resonator
-External clock input
Искам да използвам само вътрешния кварц, нямам външен за да правя опити.
Тук е нещо или с основните регистри или с настройките при самото програмиране.
Може ли да ми кажете нещо повече за bandgap?
Това GP4 какво означава?
Има го като допълнение на INTOSC GP4 (при избора от ICProg).
И последно - как да разкарам това калибриране което ми го иска в началото?
Много въпроси станаха, ама...
|
| Чет Дек 02, 2004 9:56 am |
|
 |
|
zmej
Ранг: Новодошъл
Регистриран на: Нед Ное 28, 2004 10:02 pm Мнения: 141 Местоположение: София
|
Първото ти е, че GP4 си го ползваш като входно, изходен пин, ако му напишеш CLKOUT, оттам ще ти изкара изход на вътрешния генератор.
За калибрирането - мисля, че няма начин да го разкараш, поне с айсипрог-а, принципно той май така или иначе си е калибриран.
|
| Чет Дек 02, 2004 10:30 am |
|
 |
|
peterhr
Ранг: Минаващ
Регистриран на: Пон Сеп 27, 2004 8:48 pm Мнения: 59 Местоположение: София
|
Да, ако избера да изкарва CLOCKOUT на А4 ми изкарва честотата.
Това е единственото което успях да подкарам.
Направих всички пинове изходи, вдигам ги в 1-за ама никой не слуша. Стоят си на 0V.
Според мен нещо не тръгва програмата. Ама защо ...
|
| Чет Дек 02, 2004 11:12 am |
|
 |
|
zmej
Ранг: Новодошъл
Регистриран на: Нед Ное 28, 2004 10:02 pm Мнения: 141 Местоположение: София
|
Подкарай я със симулатор - дръпни си някакъв МПЛАБ (преди 6), и я трасирай... Иначе май гадаем... Аз лично залагам на някаква простотийка, дето е като я гледаш - нищо, а иначе може да ти отрови живота (както в случая)...
|
| Чет Дек 02, 2004 3:56 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 4 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|