Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: проблема инициализации pic24fj128gb106
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
french
люди помогите !!! пол дня потратил, все волосы вырвал а толку 0.
впервые взял 16-битку pic24fj128gb106. теперь никак не могу ее настроить.

что есть: mplab + C30 + pickit2 + pic24fj128gb106

есть биты RG6, RG7, RG8, RG9. в начале настроил на вывод,
потом выставляю на них еденицы.
PORTGbits.RG6 = 1;
PORTGbits.RG7 = 1;
PORTGbits.RG8 = 1;
PORTGbits.RG9 = 1;
в отладчике MPLAB SIM все ок. PORTG = 00000011 11000000.
а когда смотрю отладчиком PicKit2 то ведет себя по разному. если смотреть пошагово,
то все ок, биты ставятся в 1. но если поставить точку останова на while(1);
то PORTG = 00000010 10000000 ????

возможно я не отключил какую-то периферию. перерыл весь даташит, вроде все выключено.
догадвыюсь что все очень просто. помогите, хелп, не вижу где я туплю.

вот код:
CODE
#include "p24fxxxx.h"

_CONFIG2( IESO_OFF & PLLDIV_NODIV & FNOSC_FRC & FCKSM_CSECME & OSCIOFNC_OFF & POSCMOD_HS);
_CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & ICS_PGx1 & FWDTEN_OFF & WINDIS_OFF);

int main()
{
ClrWdt();
AD1PCFG=0xFFFF; // dis analog input

TRISG = 0b0000111111;
ODCG = 0b0000000000;

// comparator disable
CVRCON = 0;
CM1CON = 0b0000000000010011;
CM2CON = 0b0000000000010011;
CM3CON = 0b0000000000010011;

PORTGbits.RG6 = 1;
PORTGbits.RG7 = 1;
PORTGbits.RG8 = 1;
PORTGbits.RG9 = 1;


while(1);

return 0;
}


Danis
Цитата(french @ Apr 9 2011, 20:01) *
вот код:
CODE
#include "p24fxxxx.h"

_CONFIG2( IESO_OFF & PLLDIV_NODIV & FNOSC_FRC & FCKSM_CSECME & OSCIOFNC_OFF & POSCMOD_HS);
_CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & ICS_PGx1 & FWDTEN_OFF & WINDIS_OFF);

int main()
{
ClrWdt();
AD1PCFG=0xFFFF; // dis analog input

TRISG = 0b0000111111;
ODCG = 0b0000000000;

// comparator disable
CVRCON = 0;
CM1CON = 0b0000000000010011;
CM2CON = 0b0000000000010011;
CM3CON = 0b0000000000010011;

PORTGbits.RG6 = 1;
PORTGbits.RG7 = 1;
PORTGbits.RG8 = 1;
PORTGbits.RG9 = 1;


while(1);

return 0;
}




// Настраиваем выводы на цифровой режим работы

AD1PCFGHbits.PCFGxx = 1;
...
....


// 0 - out, 1 - in
TRISGbits.TRISG6 = 0; // out
TRISGbits.TRISG7 = 0; // out
TRISGbits.TRISG8 = 0; // out
TRISGbits.TRISG9 = 0; // out

//data
LATGbits.LATG6 = 1;
LATGbits.LATG7 = 1;
LATGbits.LATG8 = 1;
LATGbits.LATG9 = 1;



french
Цитата(Danis @ Apr 9 2011, 22:02) *
//data
LATGbits.LATG6 = 1;
LATGbits.LATG7 = 1;
LATGbits.LATG8 = 1;
LATGbits.LATG9 = 1;

да так работает корректно ! автору респект !
но блин, для вывода в порт я всегда писал в PORT, и все работало.
цитата даташита:
Reads from the Output Latch register (LATx),
read the latch. Writes to the latch, write the latch.
Reads from the port (PORTx), read the port pins, while
writes to the port pins, write the latch
. <-- я думал это тоже, что
писать в LATCH.

volodya
Цитата(french @ Apr 10 2011, 10:17) *
Reads from the port (PORTx), read the port pins, while
writes to the port pins, write the latch
. <-- я думал это тоже, что
писать в LATCH.


Не совсем - Вы использовали побитовые операции (компилятор интерпретировал) - чтение из (...)->изменение->запись в(...) , т.е. чтение из PORTx изменение и запись в LATx . Архитектура построена так , что следующая команда (за счет конвейера и т.д.) может прочитать не измененное состояние порта (в пошаговом режиме куча промежуточных процедур выполняется и порт устанавливается верно). Тоже справедливо и для обращения к порту, но реже встречается.
Это описано в мануалах, но пока сам лбом не стукнулся - на увидел.
french
я думаю тему можно закрыть. спасибо всем, кто отозвался biggrin.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.