Засада с PIC18F25K80

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

Сообщение Sergey_57 »

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

Сообщение Mursik »

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

Сообщение Sergey_57 »

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

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

[uquote="Sergey_57",url="/forum/viewtopic.php?p=4752579#p4752579"]Вашу версию буду проверять.Спасибо.[/uquote]
ANSEL нужно перевести в цифровой режим. По умолчанию он в аналоговом.
[uquote="Sergey_57",url="/forum/viewtopic.php?p=4752571#p4752571"]На криворукость не думать.[/uquote] :)))
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Вс ноя 13, 2022 22:47:31

Сообщение Sergey_57 »

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

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

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

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

Сообщение 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
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Вс ноя 13, 2022 22:47:31

Сообщение 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
Друг Кота
Аватара пользователя
Сообщения: 25446
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="Sergey_57",url="/forum/viewtopic.php?p=4752653#p4752653"]Осталось понять, как к нему попасть через Си.[/uquote]
Это такая шутка?
Вам же написали:
ANCON0=0;
Изображение
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Вс ноя 13, 2022 22:47:31

Сообщение Sergey_57 »

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

Сообщение Mursik »

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

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

[uquote="Sergey_57",url="/forum/viewtopic.php?p=4752663#p4752663"]Это не шутка.
В Си это можно сделать только АСМ вставку, что не хотелось.
Типа
acm
ANCON0=0
end acm
Буду разбираться.
Ещё раз спасибо.[/uquote]
Что за чушь? :facepalm:
ANCON0=0; - это Си. В АСМ нет такого синтаксиса.
В АСМе это присвоение будет таким:
clrf ANCON0
или
movlw 0x00
movwf ANCON0

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

Сообщение 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 раза.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 25446
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="veso74",url="/forum/viewtopic.php?p=4752679#p4752679"]#byte ADCON0 = 0xFC2
...
ADCON0 = 0x00;[/uquote]
Это не ADCON0, а ANCON0. Первый является регистром АЦП, а второй регистром порта.
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение 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
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Вс ноя 13, 2022 22:47:31

Сообщение 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 .
Спросить только на форуме можно. Мои знакомые не в теме.
Ещё раз большое спасибо.
Друг Кота
Аватара пользователя
Сообщения: 25446
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="Sergey_57",url="/forum/viewtopic.php?p=4753203#p4753203"]Си немного разбаловал.[/uquote]
Может нужно на XC8 перейти? Тогда все сразу наладится и не нужно будет в гамаке и стоя.... :)))
Мудрый кот
Аватара пользователя
Сообщения: 1840
Зарегистрирован: Вт мар 28, 2023 21:17:15
Откуда: Universe

Сообщение Mursik »

[uquote="Sergey_57",url="/forum/viewtopic.php?p=4753203#p4753203"]Коллеги, доброй ночи! Два дня посвятил чтению документации.
Да , проглядел. Каюсь. Си немного разбаловал.
Пользуюсь CCS. Сделал ряд конструкций на ней , порт А на выход везде. А тут влип.[/uquote]

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

setup_adc_ports();

set_analog_pins(NO_ANALOGS);

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

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

Сообщение Sergey_57 »

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

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

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

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