реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> проблема инициализации pic24fj128gb106
french
сообщение Apr 9 2011, 17:01
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 21-09-04
Пользователь №: 688



люди помогите !!! пол дня потратил, все волосы вырвал а толку 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;
}


Go to the top of the page
 
+Quote Post
Danis
сообщение Apr 9 2011, 18:02
Сообщение #2


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



Цитата(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;





--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
french
сообщение Apr 10 2011, 07:17
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 21-09-04
Пользователь №: 688



Цитата(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.

Go to the top of the page
 
+Quote Post
volodya
сообщение Apr 11 2011, 06:46
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 194
Регистрация: 14-02-07
Из: УКРАИНА
Пользователь №: 25 344



Цитата(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 . Архитектура построена так , что следующая команда (за счет конвейера и т.д.) может прочитать не измененное состояние порта (в пошаговом режиме куча промежуточных процедур выполняется и порт устанавливается верно). Тоже справедливо и для обращения к порту, но реже встречается.
Это описано в мануалах, но пока сам лбом не стукнулся - на увидел.


--------------------
"Для того чтобы избежать критики, надо ничего не делать, ничего не говорить и никем не быть"
"Каждый из нас бывает дураком по крайней мере пять минут в день; мудрость заключается в том, чтобы не превысить лимит." Элберт Хаббард
Go to the top of the page
 
+Quote Post
french
сообщение Apr 11 2011, 16:18
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 21-09-04
Пользователь №: 688



я думаю тему можно закрыть. спасибо всем, кто отозвался biggrin.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01379 секунд с 7
ELECTRONIX ©2004-2016