Например TDA7294

Форум РадиоКот • Просмотр темы - Старт пика
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт мар 28, 2024 11:16:20

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 10 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Старт пика
СообщениеДобавлено: Пт авг 03, 2012 10:50:44 
Открыл глаза

Зарегистрирован: Чт ноя 05, 2009 14:10:04
Сообщений: 62
Откуда: Раша
Рейтинг сообщения: 0
Всем привет!

Есть такой вот вопрос: как ведут себя порты общего назначения PIC-микроконтроллера PIC24FJ64GB004 в момент подачи питания?

Дело в том, что у меня контроллер выдаёт два коротких импульса с нулевым уровнем на одном своём выводе, спустя пару миллисекунд после установления питания на уровне 3,3 В:

¯¯¯¯¯¯|_|¯|_|¯¯¯¯¯¯¯

В программе этот вывод конфигурируется как выход с общим стоком и выставляется в "1" в первой же строке программы (после процесса конфигурации). Никаких дополнительных переходов 1->0->1->0->1 в коде нет! На выводе стоит внешняя подтяжка к 3,3 В.

Пытался сам изучить вопрос, но чёткого представления пока не получил. Читал вот эти документы:
1) PIC24F Family Reference Manual, Sect. 12 I/O Ports with Peripheral Pin Select
2) PIC24F Family Reference Manual, Sect. 07 Reset

Из документа №2 понял, что при подаче питания (после ресета) контроллер имеет фиксированную задержку, перед тем, как начинает выполняться программный код. Эта задержка зависит от нескольких параметров: источник питания проца, осциллятор... Всё это ясно, и для меня не критично.

В документе №1 сказано, что все порты контроллера конфигурируются после старта (ресета) по умолчанию как входы. Но не понятно, как ведут себя порты до полноценного старта (т.е. до того, как пройдут все стартовые задержки POR и начнёт выполняться код)?

Буду благодарен за любую помощь!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Старт пика
СообщениеДобавлено: Пт авг 03, 2012 11:37:53 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
После сброса, все порты настроены на вход до того, как Вы их сконфигурируете на выход.
Возможно, Вы сначала настраиваете регистр направления (TRIS), а затем уже регистр защёлки (LAT), по этому, если в защёлке находится "0", может проскакивать кратковременный импульс. Настраивайте сначала защёлку а затем направление.
Тяжело судить, не видя куска кода с инициализацией.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Старт пика
СообщениеДобавлено: Пт авг 03, 2012 12:56:44 
Открыл глаза

Зарегистрирован: Чт ноя 05, 2009 14:10:04
Сообщений: 62
Откуда: Раша
Рейтинг сообщения: 0
Аlex писал(а):
Тяжело судить, не видя куска кода с инициализацией.

Вот код. Он состоит из 3-х файлов. Сигнал, который глючит, называется EN_HI:


1. Определение пользовательских сигналов.
Код:
/*======================*/
/*   configpin.h                                                      */
/*      Module contains procedures for working with                   */
/*                                                            */
/*======================*/

#ifndef __CONFIGPIN_H
#define __CONFIGPIN_H

#define ON   0
#define OFF   1

#define LED1        PORTAbits.RA9
#define LED2        PORTCbits.RC2

#define DAC_DATA    PORTAbits.RA7
#define DAC_CLK     PORTBbits.RB11
#define DAC_CS      PORTBbits.RB10

#define DP1A        PORTCbits.RC4
#define DP1B        PORTCbits.RC3

#define DP2A        PORTBbits.RB4   //|*/PORTAbits.RA0
#define DP2B        PORTAbits.RA4   //|*/PORTAbits.RA1

#define INT1        PORTCbits.RC1
#define INT2        PORTAbits.RA0

#define EN_LO       PORTAbits.RA8
#define EN_HI       PORTCbits.RC5

#define FREQ        PORTBbits.RB9

#define FAN         PORTAbits.RA10

#define   TEMP        5
#define TEMP2       2
#define TEMP3       3

#define VOLTAGE     4
#define CURRENT     11

#define AINPUTS     0xF7C3

//******************************************************************************
void config_Pins(void);
//******************************************************************************

#endif //__CONFIGPIN_H

//========================
// End of file.
//========================



2. Инициализация портов
Код:
/**
 * @file configpins.c
 *
 * Module to configures I/O ports
 *
 * @todo
 *      - Configures I/O ports.
 */
#include "p24FJ64GB004.h"
#include "configpins.h"

//========================
/**
 * Function to configure the I/O ports
 */
void config_Pins(void)
{

    AD1PCFG = AINPUTS;

    TRISA = 0;
    TRISB = 0;
    TRISC = 0;

    TRISAbits.TRISA0  = 1;
    TRISAbits.TRISA1  = 1;
    TRISAbits.TRISA4  = 1;
    TRISBbits.TRISB0  = 1;
    TRISBbits.TRISB1  = 1;
    TRISBbits.TRISB2  = 1;
    TRISBbits.TRISB3  = 1;
    TRISBbits.TRISB4  = 1;
    TRISBbits.TRISB9  = 1;
    TRISBbits.TRISB13 = 1;
    TRISBbits.TRISB15 = 1;
    TRISCbits.TRISC3  = 1;
    TRISCbits.TRISC4  = 1;
    TRISCbits.TRISC1  = 1;

    TRISAbits.TRISA7    = 0;
    TRISAbits.TRISA8    = 0;
    TRISAbits.TRISA9    = 0;
    TRISAbits.TRISA10   = 0;
    TRISBbits.TRISB5    = 0;
    TRISBbits.TRISB7    = 0;
    TRISBbits.TRISB8    = 0;
    TRISBbits.TRISB10   = 0;
    TRISBbits.TRISB11   = 0;
    TRISBbits.TRISB14   = 0;
    TRISCbits.TRISC0    = 0;
    TRISCbits.TRISC2    = 0;
    TRISCbits.TRISC5    = 0;
    TRISCbits.TRISC6    = 0;
    TRISCbits.TRISC7    = 0;
    TRISCbits.TRISC8    = 0;
    TRISCbits.TRISC9    = 0;




    ODCAbits.ODA7   = 1;
    ODCAbits.ODA8   = 1;
    ODCBbits.ODB5   = 1;
    ODCBbits.ODB7   = 1;
    ODCBbits.ODB8   = 1;
    ODCBbits.ODB10  = 1;
    ODCBbits.ODB11  = 1;
    ODCCbits.ODC5   = 1;
    ODCCbits.ODC6   = 1;
    ODCCbits.ODC7   = 1;
    ODCCbits.ODC8   = 1;
    ODCCbits.ODC9   = 1;

    RPINR7bits.IC1R = 9;    //IC1 -> RP9
    RPINR18bits.U1RXR = 15; //RX  -> RP15
    RPOR7bits.RP14R = 3;    //TX  -> RP14
}
/*======================*/
/*                          End of file                                       */
/*======================*/




3. Установка значений в порты
Код:
/**
 * @file configmcu.c
 *
 * Module to configures MCU
 *
 * @todo
 *      - Configures MCU.
 */

#include "p24FJ64GB004.h"
#include "adc.h"
#include "configpins.h"
#include "currentlimit.h"
#include "delay.h"
#include "frequency.h"
#include "lcd.h"
#include "serial.h"

//========================
/**
 * Function to configure the MCU
 */

void config_Mcu(void)
{
    config_Pins();

    EN_LO |= OFF;
    EN_HI |= OFF;
   
    config_Interrupts();
    init_OutInterrupt();
    init_UART();
    init_delay();
    init_ADC(AINPUTS);
    init_Frequency();
    init_LCD();
}
/*======================*/
/*                          End of file                                       */
/*======================*/


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Старт пика
СообщениеДобавлено: Пт авг 03, 2012 13:39:31 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
2. Инициализация портов

А зачем Вы сначала настраиваете на выход, затем на вход, потом снова на выход ? К чему такие манипуляции, причём побитные ? Скорее всего проблема именно в этом.
И где настройка защёлок (т.е. то, что нужно вывести в порт изначально) ?

Пример:
Код:
LATAbits.LATA0=0;     // Сначала в защёлку начальное значение
TRISAbits.TRISA0=0;   // Затем пин на вЫход


Вернуться наверх
 
Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Старт пика
СообщениеДобавлено: Пт авг 03, 2012 15:03:57 
Открыл глаза

Зарегистрирован: Чт ноя 05, 2009 14:10:04
Сообщений: 62
Откуда: Раша
Рейтинг сообщения: 0
ОК, спасибо! Щас будем разбираться!


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Старт пика
СообщениеДобавлено: Вт авг 07, 2012 01:06:30 
Открыл глаза

Зарегистрирован: Чт ноя 05, 2009 14:10:04
Сообщений: 62
Откуда: Раша
Рейтинг сообщения: 0
Поменяли инициализацию портов - см. код. Теперь сначала записываются значения в защёлки LAT, потом настраиваются Open drain, а потом задаётся направление портов ввода-вывода посредством регистров TRIS. Между этими операциями введена задержка.

Код:
/**
 * @file configpins.c
 *
 * Module to configures I/O ports
 *
 * @todo
 *      - Configures I/O ports.
 */
#include "p24FJ64GB004.h"
#include "configpins.h"
#include "delay.h"

//========================
/**
 * Function to configure the I/O ports
 */
void config_Pins(void)
{
    unsigned int i = 0;
   
    AD1PCFG = AINPUTS;

    LATA = 0x0100;
    LATB = 0x0000;
    LATC = 0x0020;
    for(i = 0; i > 3; i++);

    ODCA = 0x0180;
    ODCB = 0x0DA0;
    ODCC = 0x03E0;
    for(i = 0; i > 3; i++);
   
    TRISA = 0xF87F;
    TRISB = 0xB25F;
    TRISC = 0xFC1A;
    for(i = 0; i > 3; i++);

    RPINR7bits.IC1R = 9;    //IC1 -> RP9
    RPINR18bits.U1RXR = 15; //RX  -> RP15
    RPOR7bits.RP14R = 3;    //TX  -> RP14
}
/*======================*/
/*                          End of file                                       */
/*======================*/


Теперь проблема с двумя короткими импульсами при старте МК пропала. Но иногда (очень редко - примерно 1 запуск из 20-ти) проскакивает короткий импульс с нулевым уровнем, схематично выглядит он вот так:

Изображение

Ещё хочу добавить немного про саму схему. Вывод МК RC5 настраивается как вЫход с общим стоком, на котором есть внешний пуллап на 5 В. Этот вывод подключён к управляющему входу OE логического буфера SN74AHC125 с активным низким уровнем. Вот упрощённая схемка:

Изображение

Не знаем, что делать. К тому же проблема приобрела ещё и несистематический характер!


Вложения:
schema.png [13.58 KiB]
Скачиваний: 3688
imp.png [6.93 KiB]
Скачиваний: 3693
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Старт пика
СообщениеДобавлено: Вт авг 07, 2012 01:37:01 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Проблема всяко не в инициализации, а в дальнейшем коде. Ищите по коду что может этот ПИН так дёргать.
К сожалению, в слепую будет трудно Вам что-либо подсказать...

ПыСы:
А эт что такое
Код:
for(i = 0; i > 3; i++);
? :roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Старт пика
СообщениеДобавлено: Вт авг 07, 2012 08:48:48 
Открыл глаза

Зарегистрирован: Чт ноя 05, 2009 14:10:04
Сообщений: 62
Откуда: Раша
Рейтинг сообщения: 0
Аlex писал(а):
Проблема всяко не в инициализации, а в дальнейшем коде. Ищите по коду что может этот ПИН так дёргать.
К сожалению, в слепую будет трудно Вам что-либо подсказать...
Я могу выложить и оставшийся код, конечно. Только там ничего больше нет относительно этого пина RC5. Он может стать равным нулю только при нажатии на кнопку, которая подключена к одному из портов через функцию Change Notification и внутреннюю подтяжку. При следующем нажатии на кнопку пин RC5 возвращается в единицу.

Аlex писал(а):
ПыСы:
А эт что такое
Код:
for(i = 0; i > 3; i++);
? :roll:
Это цикл задержки. А что вам не понравилось тут?


Какие могут быть ещё причины для несистематичного сброса пина в ноль? Есть у кого-нибудь догадки?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Старт пика
СообщениеДобавлено: Ср авг 08, 2012 16:02:51 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Сб фев 07, 2009 19:21:25
Сообщений: 345
Рейтинг сообщения: 0
Мне кажется, нужно написать примитивнейший код, и на нём изучить пуск пика, что как и в какой последовательности происходит.
и исходя из полученных результатов писать программу которая вам нужна.

_________________
Мечтатель - не тот, кто сидит на диване и думает о несбыточном, а тот, кто всеми силами стремится воплотить несбыточное в реальность.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Старт пика
СообщениеДобавлено: Ср авг 08, 2012 17:31:14 
Открыл глаза

Зарегистрирован: Чт ноя 05, 2009 14:10:04
Сообщений: 62
Откуда: Раша
Рейтинг сообщения: 0
Нашли вроде бы, в чём дело было. По крайней мере после внесённых изменений пока больше ни разу ни одного импульса не проскачило... А реагировал МК на кнопку, подключённую на пин с Change Notification, про которую я ранее писал. Отключили прерывание модуля CN, и после этого трабл исчез. Теперь разрешаем это прерывание в другом месте, и всё пока ОК!


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y