Засада с PIC18F25K80

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
Sergey_57
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Вс ноя 13, 2022 22:47:31

Засада с PIC18F25K80

Сообщение Sergey_57 »

Здравствуйте, коллеги!
Столкнулся с проблеммой при работе с портом А PIC18F25K80 не работает чтение порта.
Проверено на двух устройствах.
На криворукость не думать.
Смотрел листинг программы, сам пишу на Си.
Там четко перевод входов на вход и чтение откуда надо. Порты В и С читает.
После танцев с бубном Перепаял на 18F2520 (цоколёвка позволяет) и сразу всё заработало.
Хотелось узнать , чего я не знаю. Или баг.
Аватара пользователя
Mursik
Мудрый кот
Сообщения: 1762
Зарегистрирован: Вт мар 28, 2023 21:17:15
Откуда: Universe

Re: Засада с PIC18F25K80

Сообщение Mursik »

Может порт (или отдельные линии) по умолчанию включены в альтернативные режимы? (АЦП, компаратор, ШИМ, USART...)
I have a dream...¯\_(ツ)_/¯
Sergey_57
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Вс ноя 13, 2022 22:47:31

Re: Засада с PIC18F25K80

Сообщение Sergey_57 »

Да, забыл указать -Выдача с порта идёт. Когда меняю назначение входов естественно.
Но вот замена на 18f2520 без всякой перестройки программы( только добавил 2520.h) решило проблему.
Вашу версию буду проверять.Спасибо.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25117
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Засада с PIC18F25K80

Сообщение КРАМ »

Вашу версию буду проверять.Спасибо.

ANSEL нужно перевести в цифровой режим. По умолчанию он в аналоговом.
На криворукость не думать.
:)))
Sergey_57
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Вс ноя 13, 2022 22:47:31

Re: Засада с PIC18F25K80

Сообщение Sergey_57 »

ANSEL - Где он. Это вроде 16 ПИК. Искал не нашёл.

У меня стоит setup_adc( ADC_OFF );
Вроде отключил. А как на самом деле.....
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25117
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Засада с PIC18F25K80

Сообщение КРАМ »

Причем тут ADC? Речь идет о регистрах порта.
И зачем искать функцию, если есть название регистра?
Возможно в компиляторе он называется ANSELA.
Ну и на дорожку. Вы когда с МК работаете, даташит на него открываете? Кроме даташита на МК есть хедер на него в папках компилятора.
veso74
Поставщик валерьянки для Кота
Сообщения: 1902
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Засада с PIC18F25K80

Сообщение veso74 »

REGISTER 23-8: ANCON0: A/D PORT CONFIGURATION REGISTER 0

bit 7-0 ANSEL<7:0>: Analog Port Configuration bits (AN7 and AN0)(1)
1 = Pin configured as an analog channel: digital input disabled and any inputs read as ‘0’
0 = Pin configured as a digital port

Код: Выделить всё

ANCON0 = 0x00;  // set all analog pins to digital mode
Sergey_57
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Вс ноя 13, 2022 22:47:31

Re: Засада с PIC18F25K80

Сообщение Sergey_57 »

Здравствуйте, veso74!
Да похоже в этом всё и дело.
В 2520 этого регистра нет. Потому и работает.
Осталось понять, как к нему попасть через Си.
Могу конечно через АСМ.
Пока микросхемы сдул. и напаял другие 18F2520.
Поди угадай где за этими настройками на Си стоит функция перевода в цифру.
Спасибо за науку.

Спойлер//////// Fuses: VREGSLEEP_SW,VREGSLEEP,INTRC_LP,INTRC_HP,SOSC_LOW,SOSC_DIG
//////// Fuses: SOSC_HIGH,XINST,NOXINST,LP,XT,HSH,HSM,ECH,ECH_IO,RC,RC_IO
//////// Fuses: INTRC_IO,INTRC,ECM,ECM_IO,ECL,ECL_IO,PLLEN,NOPLLEN,FCMEN
//////// Fuses: NOFCMEN,IESO,NOIESO,PUT,NOPUT,NOBROWNOUT,BROWNOUT_SW
//////// Fuses: BROWNOUT_NOSL,BROWNOUT,BORV30,BORV27,BORV20,BORV18,BORM_LOW
//////// Fuses: BORM_MED,BORM_HIGH,ZPBORM,NOWDT,WDT_NOSLEEP,WDT_SW,WDT,WDT1
//////// Fuses: WDT2,WDT4,WDT8,WDT16,WDT32,WDT64,WDT128,WDT256,WDT512
//////// Fuses: WDT1024,WDT2048,WDT4096,WDT8192,WDT16384,WDT32768,WDT65536
//////// Fuses: WDT131072,WDT262144,WDT524288,WDT1048576,CANC,CANB,MSSPMSK5
//////// Fuses: MSSPMSK7,MCLR,NOMCLR,STVREN,NOSTVREN,BBSIZ1K,BBSIZ2K,DEBUG
//////// Fuses: NODEBUG,PROTECT,NOPROTECT,CPB,NOCPB,CPD,NOCPD,WRT,NOWRT,WRTC
//////// Fuses: NOWRTC,WRTB,NOWRTB,WRTD,NOWRTD,EBTR,NOEBTR,EBTRB,NOEBTRB
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25117
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Засада с PIC18F25K80

Сообщение КРАМ »

Осталось понять, как к нему попасть через Си.

Это такая шутка?
Вам же написали:
ANCON0=0;
Изображение
Sergey_57
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Вс ноя 13, 2022 22:47:31

Re: Засада с PIC18F25K80

Сообщение Sergey_57 »

Это не шутка.
В Си это можно сделать только АСМ вставку, что не хотелось.
Типа
acm
ANCON0=0;
end acm
Буду разбираться.
Ещё раз спасибо.
Аватара пользователя
Mursik
Мудрый кот
Сообщения: 1762
Зарегистрирован: Вт мар 28, 2023 21:17:15
Откуда: Universe

Re: Засада с PIC18F25K80

Сообщение Mursik »

Не, без асм-вставки это делается. Просто в разных компиляторах разные команды.
I have a dream...¯\_(ツ)_/¯
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25117
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Засада с PIC18F25K80

Сообщение КРАМ »

Это не шутка.
В Си это можно сделать только АСМ вставку, что не хотелось.
Типа
acm
ANCON0=0
end acm
Буду разбираться.
Ещё раз спасибо.

Что за чушь? :facepalm:
ANCON0=0; - это Си. В АСМ нет такого синтаксиса.
В АСМе это присвоение будет таким:
clrf ANCON0
или
movlw 0x00
movwf ANCON0

И это без учета управления секциями ОЗУ.
Вы даже в слове asm делаете ошибку :facepalm:
ЗЫ. Впрочем, я знаю истоки такой чуши. У вас не присоединен хедер контроллера к проекту и потому компилятор ничего не знает про регистры МК.
veso74
Поставщик валерьянки для Кота
Сообщения: 1902
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Засада с PIC18F25K80

Сообщение veso74 »

Судя по строкам, используемым для конфигурационного слова:

Код: Выделить всё

//////// Fuses: VREGSLEEP_SW,VREGSLEEP,INTRC_LP,INTRC_HP,SOSC_LOW,SOSC_DIG

то используете CCS для PIC? Ето так?
---
Если да, то объявите порт как IO с помощью макросов/функций CCS

Код: Выделить всё

#use fast_io (port)
или
#use standard_io (port)
или
#use fixed_io (port_outputs=pin, pin?)

Если всe же нужны регистры, есть и такой вариант

Код: Выделить всё

#byte ANCON0 = 0xF5D
...
ANCON0 = 0x00;

Изображение
---
Не знаю: вопросы о программном коде без информации о программном коде - это просто догадки ...
В общем, дайте информацию о том, с чем вы работаете: среда написания кода IDE, компилятор, предоставьте копию/фрагмент инициализации, скриншот, иначе это будет похоже на "взгляд фокусника в хрустальный шар" ...
(частично пользуюсь переводчиком БГ->РУ)
Последний раз редактировалось veso74 Пт окт 10, 2025 14:01:40, всего редактировалось 2 раза.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25117
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Засада с PIC18F25K80

Сообщение КРАМ »

#byte ADCON0 = 0xFC2
...
ADCON0 = 0x00;

Это не ADCON0, а ANCON0. Первый является регистром АЦП, а второй регистром порта.
veso74
Поставщик валерьянки для Кота
Сообщения: 1902
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Засада с PIC18F25K80

Сообщение veso74 »

Да, :). Файлов было много. Идея ясна.
F5Dh <- ANCON0
---
#use FIXED_IO( ) достаточно, два варианта делает то же самое:

Код: Выделить всё

.................... #use FIXED_IO(A_outputs = PIN_A0, PIN_A1, PIN_A2, PIN_A3)
0048:  MOVLW  00
004A:  MOVWF  x5D
...
.................... ANCON0 = 0x00;
0056:  CLRF   x5D
Sergey_57
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Вс ноя 13, 2022 22:47:31

Re: Засада с PIC18F25K80

Сообщение Sergey_57 »

Коллеги, доброй ночи! Два дня посвятил чтению документации.
Да , проглядел. Каюсь. Си немного разбаловал.
Пользуюсь CCS. Сделал ряд конструкций на ней , порт А на выход везде. А тут влип.
Итоговая вставка, Всё заработало.

Код: Выделить всё

#asm
   movlw   0x00
   movwf  ANCON0,1     
#endasm

В кампиляторе была попытка это сделать, есть команда с синтаксисом, но описано не внятно. И не указано как перевести в цифровые входы.
Только как в аналоговые. и не работает.
Но есть конечно , вопросы.

Код: Выделить всё

 #define ANCON0      0xF5d;   

С точки зрения АСМ вы не можете присвоить ANCON0 в команде movwf ANCON0,1 такой адрес.

Код: Выделить всё

MOVWF Move W to f
Syntax: MOVWF f {,a}
Operands: 0 < f < 255
a  [0,1]
Operation: (W) в f

Однако работает с 0xF5d. Банки , как оказалось. роли не играют. При переключении банков всё пишется в нулевой, если адрес 0x5d .
Спросить только на форуме можно. Мои знакомые не в теме.
Ещё раз большое спасибо.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25117
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Засада с PIC18F25K80

Сообщение КРАМ »

Си немного разбаловал.

Может нужно на XC8 перейти? Тогда все сразу наладится и не нужно будет в гамаке и стоя.... :)))
Аватара пользователя
Mursik
Мудрый кот
Сообщения: 1762
Зарегистрирован: Вт мар 28, 2023 21:17:15
Откуда: Universe

Re: Засада с PIC18F25K80

Сообщение Mursik »

Коллеги, доброй ночи! Два дня посвятил чтению документации.
Да , проглядел. Каюсь. Си немного разбаловал.
Пользуюсь CCS. Сделал ряд конструкций на ней , порт А на выход везде. А тут влип.


Вы не то читаете видимо. Зачем так сложно, если есть базовая команда:

setup_adc_ports();

set_analog_pins(NO_ANALOGS);

Вам надо описание компилятора почитать. И всё.

https://www.ccsinfo.com/downloads/ccs_c_manual.pdf
I have a dream...¯\_(ツ)_/¯
Sergey_57
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Вс ноя 13, 2022 22:47:31

Re: Засада с PIC18F25K80

Сообщение Sergey_57 »

Уважаемый, Mursik!
Проверил, всё работает.

Код: Выделить всё

 set_analog_pins(NO_ANALOGS);

Решило проблему.
Вот сижу и думаю, как упустил. Собирал из нескольких проектов.
Спасибо.
Ответить

Вернуться в «PIC»