Перейти к содержанию

crazz

Рекомендуемые сообщения

Здравствуйте.

не могу разобраться с модулем АЦМ в pic16f876a. Пишу код в mikroс pro for pic 6.4.

Работал с модулеи АЦП в pic12f675, благо есть в библиотеке микроси поддержка АЦП, однако как ни пытался прикрутить библиотечные функции из примера к 876-му ничего не вышло - компилятор просто не знает что делать с этими функциями.

Пробовал конфигурировать МК по датасшиту, разобрался с ADCON0 и ADCON1, но как снять показания с AN0, так и не пойму.

Может направит кто в нужную сторону?

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Пробовал конфигурировать МК по датасшиту, разобрался с ADCON0 и ADCON1, но как снять показания с AN0, так и не пойму.

код в студию... а там будем посмотреть...
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

В общем как то так. Только разбираюсь...

int temp;
void main() {
TRISA=0b00000001;
PORTA=0b00000000;
TRISB=0b00000001;
PORTB=0b00000000;
TRISC=0b00000000;
PORTC=0b00000000;

ADCON0 = 0b10000001;
ADCON1 = 0b10000000;

PORTB.F1=1;
Delay_ms(1000);
PORTB.F1=0;

temp=ADRESL; // смотрим AN0 и запоминаем значение в темр
Delay_ms(10);
if (temp!=ADRESL) PORTB.F1=1; // Сравниваем значение в темр с вновь считаным AN0
Delay_ms(1000);
PORTB.F1=0;

}

Ссылка на комментарий
Поделиться на другие сайты

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

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

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

мда... грусно... вот это для кого в даташите написано?

teapot еще раз нарушишь П.2.9 правил форума, выпишу редонли на пару дней

Мда.. действительно грустно...

"Учитель! Я прочитал главу но не понял ее, объясните"

"вот это для кого в этой главе написано?"

"но я же и прошу вас объяснить это"

"иди читай а то поставлю два"

А вообще, прежде чем кого-то посылать, может, стоит самому сходить

i32084.jpg

А за картинку спасибо. У меня на английском, с переводчиком разбирался.

Изменено пользователем teapot
Ссылка на комментарий
Поделиться на другие сайты

на правила ходил через

i73834.jpg

И с разных браузеров - 404

за ссылку на архив спасибо, я и забыл про него...

Изменено пользователем teapot
Ссылка на комментарий
Поделиться на другие сайты

за ссылку на архив спасибо, я и забыл про него...

Советую стянуть все документы оттуда, на всякий случай.

За нерабочую ссылку спасибо, отпишусь Админу.

Ссылка на комментарий
Поделиться на другие сайты

"Учитель! Я прочитал главу но не понял ее, объясните"

"вот это для кого в этой главе написано?"

"но я же и прошу вас объяснить это"

"иди читай а то поставлю два"

уже поставил... :)

1. неправильно настроены аналоговые/цифровые входы в ADCON1

2. преобразование АЦП в коде не запускалось , те измерения не было...

3. сделано правое выравнивание, читаете только младший бит АЦП , те старшие два разряда АЦП ненужны?

Ссылка на комментарий
Поделиться на другие сайты

Сам АЦП запустил, все работает, однако ADCON1 остался без изменений и все работает

int temp, t;
void main() {
TRISA=0b00000001;
PORTA=0b00000000;
TRISB=0b00000001;
PORTB=0b00000000;
TRISC=0b00000000;
PORTC=0b00000000;

ADCON1 = 0b10000000;
ADCON0 = 0b10000001;
 PORTB.F1=1;
  Delay_ms(1000);
  PORTB.F1=0;
 ADCON0 = 0b10000101;
 Delay_ms(1);
 temp=ADRESL;
while(1){
  ADCON0 = 0b10000101;
  Delay_ms(1);
  t=ADRESL;
  if (temp!=t) PORTB.F1=1;
  else PORTB.F1=0;
}
}

Можно ли как нибудь объединить старший и младший бит в одно?

Ссылка на комментарий
Поделиться на другие сайты

А что именно неправильно в ADCON1: 7 бит - правое выравнивание, 6-4 не исполльзуются, по этому нули, 3-0 - опорное напряжение по Vdd - согласно даташиту.

Тестирую в протеусе - ошибок нет. В железе пока не пробовал.

Изменено пользователем teapot
Ссылка на комментарий
Поделиться на другие сайты

1. еще раз спрашиваю старшие два бита АЦП не нужны? : сделали правое выравнивание, а в коде проверяете только младший байт, младший байт имеет одинаковое значение четыре раза при изменении напряжения на входе, те ХХ_YYYYYYYY , если не нужна точность АЦП то делают левое выравнивание XXXXXXXX_YY и считывают только старший бит из ADRESH с потерей точности АЦП в два разряда

2. биты PCGF3:PCGF0 отвечают не только за опорное напряжение, но и за то какие входы будут цифровые и аналоговые... у вас PCGF3:PCGF0 = 0000 - все входы аналоговые (а в TRIS на вход настроен только RA0), а должно быть PCGF3:PCGF0=1110 - RA0-аналоговый, остальные цифровые...

Ссылка на комментарий
Поделиться на другие сайты

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

"у вас PCGF3:PCGF0 = 0000 - все входы аналоговые " - все верно, используются все с последовательным перебором (с соответствующими изменениями в ADCON1), Что б не писать весь код составляемой программы, создал новый проект, приведенный выше, для разбора модуля АЦП, а вернее работы с ним. Для тестового проекта ваши замечания верны и приняты во внимание. Спасибо большое за помощь. Извиняюсь, если ввел в заблуждение.

На данный момент интересует вопрос (на будущее) можно ли состыковать старший и младший бит и работать сразу с 10-битной величиной или для 16-х это невозможно?

П.С. Почему-то mikroc ругается на прямое обращение к конкретным битам, из-за чего паузы вместо отслеживания бита.GO/-DONE.

Изменено пользователем teapot
Ссылка на комментарий
Поделиться на другие сайты

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

Плохая идея. На сколько мне известно, АЦП всегда шумит в пределах одного младшего бита, даже при идеальном входном сигнале.

можно ли состыковать старший и младший бит
Это как и куда стыковать ? И самое главное - зачем ?

И что Вы собрались делать с остальными 8-мью средними битами ? Если "выкидывать", то для чего тогда Вам нужен старший бит ?

П.С. Почему-то mikroc ругается на прямое обращение к конкретным битам, из-за чего паузы вместо отслеживания бита.GO/-DONE.
Используйте битовые операции.
Ссылка на комментарий
Поделиться на другие сайты

"Плохая идея" - в железе будет видно, поменять не проблема, если что не так.

"Это как и куда стыковать " - удобнее апперировать одним 10-битным данным нежели его кусками, т.е не ХХ_YYYYYYYY и не XXXXXXXX_YY, а ZZZZZZZZZZ, но как я понял для этой серии мк это невозможно.

"Используйте битовые операции." - это как? Я обращаюсь в регистр и изменяю ужный бит.

Ссылка на комментарий
Поделиться на другие сайты

При правом выравнивании:

...
unsigned int result = ( unsigned int ) ADRESH << 8 | ADRESL ;
...

При левом выравнивании:

...
unsigned int result = ( unsigned int ) ADRESH << 2 | ADRESL >> 6;
...

Можно ещё через union и указатели, это - общий подход, всё равно нужны сдвиги для 10-битного результата.

И определитесь уже, что Вам нужно "старший бит", или "старший байт". Можно убрать явное приведение типов, но надо смотреть, что сделает компилятор.

Изменено пользователем shindax
Ссылка на комментарий
Поделиться на другие сайты

удобнее апперировать одним 10-битным данным нежели его кусками
Вы собираетесь "клеить" старший и младший бит, причём тут 10-ти битные данные ?

Вы, похоже, запутались в терминах бит/байт...

это как?
По запросу в поисковике на фразу битовые операции вылезла куча ссылок, странно, что Вы этого не сделали.
Ссылка на комментарий
Поделиться на другие сайты

При правом выравнивании:

...
unsigned int result = ( unsigned int ) ADRESH << 8 | ADRESL ;
...

ну с этим понятно и вопросов нет

При левом выравнивании:

...
unsigned int result = ( unsigned int ) ADRESH << 2 | ADRESL >> 6;
...

а это что за танец с бубном???????

Ссылка на комментарий
Поделиться на другие сайты

...а это что за танец с бубном???????

DS39582C-page 132

Сам я обычно делаю левое выравнивание и беру ADRESH, но это уже от задачи.

post-184141-0-78832400-1414643483_thumb.jpg

Изменено пользователем shindax
Ссылка на комментарий
Поделиться на другие сайты

DS39582C-page 132
эта картинка знакома... для чего старший байт сдвигать влево на 2 и младший вправо на 6 :wall:

Будьте добры, покажите, как будет правильно это склеить в int два байта при таких настройках АЦП, без использования указателей, структур, объединений. И, желательно, без сдвигов.

Изменено пользователем shindax
Ссылка на комментарий
Поделиться на другие сайты

что для правого, что для левого выравнивания запись одна и та же

...
unsigned int result = ( unsigned int ) ADRESH << 8 | ADRESL ;
...

просто для дальнейших действий с результатом требуется разное выравнивание, для нахождения среднего значения правое выравнивание, для деления на коэффициент левое

Ссылка на комментарий
Поделиться на другие сайты

Человек спрашивал, как "склеить" байты, не сказав зачем, я привёл чисто логические действия.

просто для дальнейших действий с результатом требуется разное выравнивание, для нахождения среднего значения правое выравнивание, для деления на коэффициент левое

Можно поподробнее про деление на коэффициент. И вообще, про применение правого и левого выравнивания.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...