Например TDA7294

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





Текущее время: Ср апр 24, 2024 18:44:19

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


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



Начать новую тему Ответить на тему  [ Сообщений: 31 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: PIC16F1503
СообщениеДобавлено: Ср июн 28, 2017 11:52:13 
Встал на лапы

Зарегистрирован: Ср ноя 05, 2014 19:04:31
Сообщений: 114
Рейтинг сообщения: 0
Доброго всем времени суток! Очень нужна ваша помощь. С пиками работаю впервые да и вообще такую задачу решаю впервые. Есть данный контроллер ножки 3,7,8,9,10,11,12,13 сделаны как входы аналогового сигнала (на выводах 3,5В) от светодиодов. На каждую ножку подведено 2 светодиода. Задача состоит в том, что бы определить высокий уровень на данных входах, что бы сделать определенное действие. Небольшое исследование - закоротив 4 светодиода получили на всех входах 4.1В.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC16F1503
СообщениеДобавлено: Ср июн 28, 2017 12:26:00 
Грызет канифоль

Зарегистрирован: Вт окт 08, 2013 07:38:59
Сообщений: 254
Откуда: СПб
Рейтинг сообщения: 0
входы аналогового сигнала (на выводах 3,5В) от светодиодов. На каждую ножку подведено 2 светодиода
Можете схемку изобразить, а то что-то вообще ничего не понятно? :dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC16F1503
СообщениеДобавлено: Ср июн 28, 2017 17:44:24 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 390
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7010
Откуда: Ижевск
Рейтинг сообщения: 0
...сделаны как входы аналогового сигнала...

Схему сюда.

_________________
Docendo discimus


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

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

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: PIC16F1503
СообщениеДобавлено: Ср июн 28, 2017 21:56:01 
Опытный кот

Карма: 4
Рейтинг сообщений: 81
Зарегистрирован: Пн апр 11, 2011 10:08:52
Сообщений: 844
Рейтинг сообщения: 0
Доброго всем времени суток! Очень нужна ваша помощь. С пиками работаю впервые да и вообще такую задачу решаю впервые. Есть данный контроллер ножки 3,7,8,9,10,11,12,13 сделаны как входы аналогового сигнала (на выводах 3,5В) от светодиодов. На каждую ножку подведено 2 светодиода. Задача состоит в том, что бы определить высокий уровень на данных входах, что бы сделать определенное действие. Небольшое исследование - закоротив 4 светодиода получили на всех входах 4.1В.

Что-то не стыкуется, схема нужна!


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: PIC16F1503
СообщениеДобавлено: Ср июн 28, 2017 22:14:33 
Друг Кота
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1859
Зарегистрирован: Чт сен 12, 2013 00:54:12
Сообщений: 4119
Откуда: ЗаМКАДье. Там, где ЦУП
Рейтинг сообщения: 0
Медали: 5
Получил миской по аватаре (5)
Похоже, вопрос "как работать с ADC PIC16F1503".....


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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: PIC16F1503
СообщениеДобавлено: Чт июн 29, 2017 10:23:43 
Вымогатель припоя

Карма: -3
Рейтинг сообщений: 77
Зарегистрирован: Сб мар 19, 2011 15:19:47
Сообщений: 546
Откуда: Владивосток
Рейтинг сообщения: 0
И как что то сделать не читая datasheet.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC16F1503
СообщениеДобавлено: Чт июн 29, 2017 13:40:55 
Встал на лапы

Зарегистрирован: Ср ноя 05, 2014 19:04:31
Сообщений: 114
Рейтинг сообщения: 0
вот схема Изображение

Да, я понял что с ADC работа. План действий таков:

1) Устанавливаю выводы как аналоговые входы
2) Через АЦП меряю какое напряжение и сравниваю его с нужным пределом.

Просто не знал что в пиках любой порт можно перевести как аналоговый, думал что с аналоговыми сигналами работает только порт A АЦП.

Буду благодарен в помощи настройки таймера. Даже в даташите не понимаю..

необходимо сформировать одиночный прямоугольный сигнал на ноге А5. При подаче питания высокий уровень длительностью 75мс, затем низкий уровень длительностью 25мс.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC16F1503
СообщениеДобавлено: Чт июн 29, 2017 15:42:15 
Друг Кота
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1859
Зарегистрирован: Чт сен 12, 2013 00:54:12
Сообщений: 4119
Откуда: ЗаМКАДье. Там, где ЦУП
Рейтинг сообщения: 0
Медали: 5
Получил миской по аватаре (5)
По таймеру: Как вариант, настройте TMR2 на 1mS и считайте время программно по прерыванию с TMR2.
Для настройки таймера надо знать частоту FOSC.
----
P.S.
А pdf на PIC16F1503, всё-таки, читать придётся...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC16F1503
СообщениеДобавлено: Пт июн 30, 2017 04:41:19 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 390
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7010
Откуда: Ижевск
Рейтинг сообщения: 0
Для PIC16F84A будет так:
Спойлер
Код:
#include <pic.h>

unsigned char count;

void interrupt isr(void)
{
if(T0IF) //  если переполнение TMR0
{
TMR0= 60; // предустановка на 25 мс

T0IF=0;     //  сбрасываем флаг переполнения таймера 0

if(++count > 3) count= 0; // наращиваем счетчик
if(count== 3) RA0= 0; // если такт 3, то сбрасываем выход
else RA0= 1; // если такты 0..2, то взводим выход
}
}


void main(void)
{
// запрещаем все прерывания
GIE= 0;
// настройка портов
PORTA = 0b00000000;
TRISA = 0b11111110;  // RA0 - на выход
// инициализируем таймер
INTCON= 0b11100000;
OPTION= 0b00000100;

while(1); // бесконечный цикл
}

Изображение
Для PIC16F1503 нужно учесть наличие регистров ADCONx.

_________________
Docendo discimus


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC16F1503
СообщениеДобавлено: Пт июн 30, 2017 19:54:11 
Мудрый кот
Аватар пользователя

Карма: 9
Рейтинг сообщений: 101
Зарегистрирован: Вс окт 04, 2009 13:23:12
Сообщений: 1833
Откуда: н. новгород
Рейтинг сообщения: 0
Если на контроллер подается 24В, то измерять не придется. Схема отвратительного качества. Контроллер очень непростой, это не 84а

_________________
Лучше умному тупить, чем тупому умничать


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC16F1503
СообщениеДобавлено: Сб июл 01, 2017 03:47:15 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 390
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7010
Откуда: Ижевск
Рейтинг сообщения: 0
anatol378 писал(а):
...отвратительного качества...

Курсовой надо полагать.
...очень непростой...

Не боги горшки обжигают.

_________________
Docendo discimus


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC16F1503
СообщениеДобавлено: Сб июл 01, 2017 08:07:59 
Друг Кота
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1859
Зарегистрирован: Чт сен 12, 2013 00:54:12
Сообщений: 4119
Откуда: ЗаМКАДье. Там, где ЦУП
Рейтинг сообщения: 0
Медали: 5
Получил миской по аватаре (5)
anatol378 писал(а):
Контроллер очень непростой
Если не читать документацию - все контроллеры не простые. :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC16F1503
СообщениеДобавлено: Сб июл 01, 2017 10:18:26 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 390
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7010
Откуда: Ижевск
Рейтинг сообщения: 0
..все контроллеры не простые. :)))

Оно ж понятно - человек просто набивает себе цену.

_________________
Docendo discimus


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC16F1503
СообщениеДобавлено: Пн июл 03, 2017 09:12:58 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14062
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Насчет "Контроллер очень непростой" вероятно имелось ввиду, что для начала не помешало бы с обычными "среднемладшими" познакомиться, затем 18-ю серию проштудировать - а потом уже к этой разновидности приступать.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC16F1503
СообщениеДобавлено: Пн июл 03, 2017 18:23:34 
Мудрый кот
Аватар пользователя

Карма: 9
Рейтинг сообщений: 101
Зарегистрирован: Вс окт 04, 2009 13:23:12
Сообщений: 1833
Откуда: н. новгород
Рейтинг сообщения: 0
..для начала не помешало бы с обычными "среднемладшими"...

Как замечательно сказал. Даже если не применять всего что заложено (типа конфигурируемых логических ячеек или цифрового генератора), необходимо правильно сконфигурировать его, а для этого читать доки. Другого пути нет. Там немного в основном ДШ - 340 страниц. :beer:

_________________
Лучше умному тупить, чем тупому умничать


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC16F1503
СообщениеДобавлено: Ср авг 02, 2017 10:12:39 
Встал на лапы

Зарегистрирован: Ср ноя 05, 2014 19:04:31
Сообщений: 114
Рейтинг сообщения: 0
Уважаемые знатоки! Укажите куда копать.. не могу получить устойчивую работу ADC на PIC16F1503.

Вот текущий код:
void main(void)
{
// set up oscillator control register
OSCCONbits.IRCF = 0x0F; //set OSCCON IRCF bits to select OSC frequency=16Mhz
OSCCONbits.SCS = 0x02; //set the SCS bits to select internal oscillator block
LATA = 0x00; // turn all outputs off
LATC = 0x00;
// set timer
// PR2 = 0xFF;
// PIR1bits.TMR2IF = 0; // clear TMR2 interrupt flag
// T2CONbits.T2CKPS = 0x02; // TMR2 prescalar bits are both high; prescalar = 64
// T2CONbits.TMR2ON = 1; // TMR2 on

OPTION_REGbits.nWPUEN = 1; // all weak pullups are disabled

// PORT A5 - ВЫХОД, остальные ВХОДЫ
TRISAbits.TRISA0 = 1; // RA0 = nc (SPDAT)
TRISAbits.TRISA1 = 1; // RA0 = nc (SPCLK)
TRISAbits.TRISA2 = 1; // RA2 = Blue LED
//TRISAbits.TRISA3 = 1; // RA0 = nc (MLCR)
TRISAbits.TRISA4 = 1; // RA4 = nc
TRISAbits.TRISA5 = 0; // RA5 = nc


PORTA = 0x20; // Порт A5 устанавливаем 1.

ANSELA = 0x1F; // Все порты кроме A3 аналоговые


// Все порты С входы
TRISCbits.TRISC0 = 1; // RC0 =привет пишем комент на русском
TRISCbits.TRISC1 = 1; // RC1 =
TRISCbits.TRISC2 = 1; // RC2 =
TRISCbits.TRISC3 = 1; // RC3 =
TRISCbits.TRISC4 = 0;
TRISCbits.TRISC5 = 0;

PORTC = 0x00; //На всех входах 0

ANSELC = 0x0F; // С0 - С3 аналоговые

// Выбираем канал внутренего опорного напряжения
//Бит - 7 - Не используется, читается как 0
//Бит - 6-2- Выбор канала (11111 внутрение опорное напряжение)
//Бит 1- 1 - статус преобразования
//Бит 0 - 0 - включение преобразования
/// работаем с первым каналом

ADCON0 = 0b00000000;
ADCON1 = 0xb01110000;

ADCON0bits.ADON = 1;
__delay_us(5);
ADCON0bits.GO = 1;
while (ADCON0bits.GO);
{
result = ((ADRESH * 205) + ADRESL);
}

if (result >= 4)
{
countChanel++;
}

__delay_us(5);
// Второй канал
ADCON0 = 0b00000100;
ADCON0bits.ADON = 1;
__delay_us(5);
ADCON0bits.GO = 1;
while (ADCON0bits.GO);
{
result = ((ADRESH * 205) + ADRESL);
}
if (result >= 4)
{
countChanel++;
}

__delay_us(5);
// 3 канал
ADCON0 = 0b00001000;
ADCON0bits.ADON = 1;
__delay_us(5);
ADCON0bits.GO = 1;
while (ADCON0bits.GO);
{
result = ((ADRESH * 205) + ADRESL);
}
if (result >= 4)
{
countChanel++;
}


__delay_us(5);
//Работаем с 4 каналом
ADCON0 = 0b00010000;
ADCON0bits.ADON = 1;
__delay_us(5);
ADCON0bits.GO = 1;
while (ADCON0bits.GO);
{
result = ((ADRESH * 205) + ADRESL);
}
if (result >= 4)
{
countChanel++;
}

__delay_us(5);
// 5 канал
ADCON0 = 0b00010100;
ADCON0bits.ADON = 1;
__delay_us(5);
ADCON0bits.GO = 1;
while (ADCON0bits.GO);
{
result = ((ADRESH * 205) + ADRESL);
}
if (result >= 4)
{
countChanel++;
}

__delay_us(5);
// 6 канал
ADCON0 = 0b00011000;
ADCON0bits.ADON = 1;
__delay_us(5);
ADCON0bits.GO = 1;
while (ADCON0bits.GO);
{
result = ((ADRESH * 205) + ADRESL);
}
if (result >= 4)
{
countChanel++;
}

__delay_us(5);
// Седьмой канал
ADCON0 = 0b00011100;
ADCON0bits.ADON = 1;
__delay_us(5);
ADCON0bits.GO = 1;
while (ADCON0bits.GO);
{
result = ((ADRESH * 205) + ADRESL);
}
if (result >= 4)
{
countChanel++;
}


if (countChanel <= 2 )
{
PORTA = 0x20; // Порт A5 устанавливаем 1.
mydelay_ms(87);
PORTA = 0; // Порт A5 устанавливаем 1.
mydelay_ms(25);
PORTA = 0x20; // Порт A5 устанавливаем 1.
}

while(1)
{

}

}

суть кода: анализирую напряжение на каналах, если напряжение больше 4 вольт то прибавляю счетчик. В итоге если счетчик меньше 2, то генерирую одиночный импульс. Правильно ли я перевожу полученные значения регистров в вольты. Небходимо с точностью хотя бы 1 знак после запятой..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC16F1503
СообщениеДобавлено: Ср авг 02, 2017 12:03:47 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 168
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1231
Откуда: Баку
Рейтинг сообщения: 0
После окончания преобразования сделайте вызов функции:
Код:
unsigned int calc_v(void)
{
    unsigned int result_adc;
    unsigned long result_v;

    result_adc = ((ADRESH << 2) | ADRESL);
    result_v = (unsigned long)Vdd_mV * result_adc;
    return (result_v / 1024);
}

Только предварительно через #define Vdd_mV определите напряжение питания в мВ.
А откуда вы взяли 205 я так и не понял.

Для расчета удобно было бы подать напряжение питания 5.12 В, тогда result_v = 5 * result_adc - готовый результат в мВ.
Можно еще сделать привязку Vdd через внутреннее опорное 1.024 В, тогда еще с формулами поколдовать придется. В общем, варианты разные.

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC16F1503
СообщениеДобавлено: Ср авг 02, 2017 13:19:28 
Встал на лапы

Зарегистрирован: Ср ноя 05, 2014 19:04:31
Сообщений: 114
Рейтинг сообщения: 0
Сделал как вы написали:

объявил #define Vdd_mV 4750

unsigned int ADC = 0;

и затем для каждого канала

ADRESH = 0;
ADRESL = 0;
ADCON0bits.ADON = 1;
__delay_us(10);
ADCON0bits.GO = 1;
while (ADCON0bits.GO);
{
ADC = calc_v();
}

if (ADC >= 4700)
{
countChanel++;
}

почему то в результате countChanel = 7 т.е считает что каждый канал соответствует условию. на деле же только 2 канала 4,7 вольта, остальные 4


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC16F1503
СообщениеДобавлено: Ср авг 02, 2017 14:08:52 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 168
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1231
Откуда: Баку
Рейтинг сообщения: 0
Куда выводите результат? В смысле устройство отображения имеется?
Если есть возможность, для начала выводите голые значения result_adc для каждого канала, чтобы оценить правильность измерений.
А дальше видно будет.

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC16F1503
СообщениеДобавлено: Ср авг 02, 2017 14:34:43 
Встал на лапы

Зарегистрирован: Ср ноя 05, 2014 19:04:31
Сообщений: 114
Рейтинг сообщения: 0
к сожалению устройства отображения нету.

проверяю в условии:

if (countChanel >= 2 )
{
PORTA = 0x20; // Порт A5 устанавливаем 1.
mydelay_ms(87);
PORTA = 0; // Порт A5 устанавливаем 1.
mydelay_ms(25);
PORTA = 0x20; // Порт A5 устанавливаем 1.
}

в итоге условие выполняется при countChanel = 7. А это значит что выполняется условие
if (ADC >= 4700)
{
countChanel++;
}
для каждого канала

Добавлено after 19 minutes 53 seconds:
в изначальной функции
unsigned int calc_v(void)
{
unsigned int result_adc;
unsigned long result_v;

result_adc = ((ADRESH << 2) | ADRESL);
result_v = (unsigned long)Vdd_mV * result_adc;
return (result_v / 1024);
}

присвоил result_adc = 0;

в итоге все верно. На выходе все каналы выдают 0;


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 31 ]  1,  

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


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

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


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

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


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