Засада с PIC18F25K80
Засада с PIC18F25K80
Здравствуйте, коллеги!
Столкнулся с проблеммой при работе с портом А PIC18F25K80 не работает чтение порта.
Проверено на двух устройствах.
На криворукость не думать.
Смотрел листинг программы, сам пишу на Си.
Там четко перевод входов на вход и чтение откуда надо. Порты В и С читает.
После танцев с бубном Перепаял на 18F2520 (цоколёвка позволяет) и сразу всё заработало.
Хотелось узнать , чего я не знаю. Или баг.
Столкнулся с проблеммой при работе с портом А PIC18F25K80 не работает чтение порта.
Проверено на двух устройствах.
На криворукость не думать.
Смотрел листинг программы, сам пишу на Си.
Там четко перевод входов на вход и чтение откуда надо. Порты В и С читает.
После танцев с бубном Перепаял на 18F2520 (цоколёвка позволяет) и сразу всё заработало.
Хотелось узнать , чего я не знаю. Или баг.
Re: Засада с PIC18F25K80
Может порт (или отдельные линии) по умолчанию включены в альтернативные режимы? (АЦП, компаратор, ШИМ, USART...)
I have a dream...¯\_(ツ)_/¯
Re: Засада с PIC18F25K80
Да, забыл указать -Выдача с порта идёт. Когда меняю назначение входов естественно.
Но вот замена на 18f2520 без всякой перестройки программы( только добавил 2520.h) решило проблему.
Вашу версию буду проверять.Спасибо.
Но вот замена на 18f2520 без всякой перестройки программы( только добавил 2520.h) решило проблему.
Вашу версию буду проверять.Спасибо.
- КРАМ
- Друг Кота
- Сообщения: 25117
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Засада с PIC18F25K80
Вашу версию буду проверять.Спасибо.
ANSEL нужно перевести в цифровой режим. По умолчанию он в аналоговом.
На криворукость не думать.
Re: Засада с PIC18F25K80
ANSEL - Где он. Это вроде 16 ПИК. Искал не нашёл.
У меня стоит setup_adc( ADC_OFF );
Вроде отключил. А как на самом деле.....
У меня стоит setup_adc( ADC_OFF );
Вроде отключил. А как на самом деле.....
- КРАМ
- Друг Кота
- Сообщения: 25117
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Засада с PIC18F25K80
Причем тут ADC? Речь идет о регистрах порта.
И зачем искать функцию, если есть название регистра?
Возможно в компиляторе он называется ANSELA.
Ну и на дорожку. Вы когда с МК работаете, даташит на него открываете? Кроме даташита на МК есть хедер на него в папках компилятора.
И зачем искать функцию, если есть название регистра?
Возможно в компиляторе он называется ANSELA.
Ну и на дорожку. Вы когда с МК работаете, даташит на него открываете? Кроме даташита на МК есть хедер на него в папках компилятора.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1902
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Засада с PIC18F25K80
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 modeRe: Засада с PIC18F25K80
Здравствуйте, veso74!
Да похоже в этом всё и дело.
В 2520 этого регистра нет. Потому и работает.
Осталось понять, как к нему попасть через Си.
Могу конечно через АСМ.
Пока микросхемы сдул. и напаял другие 18F2520.
Поди угадай где за этими настройками на Си стоит функция перевода в цифру.
Спасибо за науку.
//////// 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
Да похоже в этом всё и дело.
В 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
Re: Засада с PIC18F25K80
Это не шутка.
В Си это можно сделать только АСМ вставку, что не хотелось.
Типа
acm
ANCON0=0;
end acm
Буду разбираться.
Ещё раз спасибо.
В Си это можно сделать только АСМ вставку, что не хотелось.
Типа
acm
ANCON0=0;
end acm
Буду разбираться.
Ещё раз спасибо.
Re: Засада с PIC18F25K80
Не, без асм-вставки это делается. Просто в разных компиляторах разные команды.
I have a dream...¯\_(ツ)_/¯
- КРАМ
- Друг Кота
- Сообщения: 25117
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Засада с PIC18F25K80
Это не шутка.
В Си это можно сделать только АСМ вставку, что не хотелось.
Типа
acm
ANCON0=0
end acm
Буду разбираться.
Ещё раз спасибо.
В Си это можно сделать только АСМ вставку, что не хотелось.
Типа
acm
ANCON0=0
end acm
Буду разбираться.
Ещё раз спасибо.
Что за чушь?
ANCON0=0; - это Си. В АСМ нет такого синтаксиса.
В АСМе это присвоение будет таким:
clrf ANCON0
или
movlw 0x00
movwf ANCON0
И это без учета управления секциями ОЗУ.
Вы даже в слове asm делаете ошибку

ЗЫ. Впрочем, я знаю истоки такой чуши. У вас не присоединен хедер контроллера к проекту и потому компилятор ничего не знает про регистры МК.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1902
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Засада с PIC18F25K80
Судя по строкам, используемым для конфигурационного слова:
то используете CCS для PIC? Ето так?
---
Если да, то объявите порт как IO с помощью макросов/функций CCS
Если всe же нужны регистры, есть и такой вариант

---
Не знаю: вопросы о программном коде без информации о программном коде - это просто догадки ...
В общем, дайте информацию о том, с чем вы работаете: среда написания кода IDE, компилятор, предоставьте копию/фрагмент инициализации, скриншот, иначе это будет похоже на "взгляд фокусника в хрустальный шар" ...
(частично пользуюсь переводчиком БГ->РУ)
Код: Выделить всё
//////// 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 = 0x00;
Это не ADCON0, а ANCON0. Первый является регистром АЦП, а второй регистром порта.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1902
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Засада с PIC18F25K80
Да,
. Файлов было много. Идея ясна.
F5Dh <- ANCON0
---
#use FIXED_IO( ) достаточно, два варианта делает то же самое:
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 x5DRe: Засада с PIC18F25K80
Коллеги, доброй ночи! Два дня посвятил чтению документации.
Да , проглядел. Каюсь. Си немного разбаловал.
Пользуюсь CCS. Сделал ряд конструкций на ней , порт А на выход везде. А тут влип.
Итоговая вставка, Всё заработало.
В кампиляторе была попытка это сделать, есть команда с синтаксисом, но описано не внятно. И не указано как перевести в цифровые входы.
Только как в аналоговые. и не работает.
Но есть конечно , вопросы.
С точки зрения АСМ вы не можете присвоить ANCON0 в команде movwf ANCON0,1 такой адрес.
Однако работает с 0xF5d. Банки , как оказалось. роли не играют. При переключении банков всё пишется в нулевой, если адрес 0x5d .
Спросить только на форуме можно. Мои знакомые не в теме.
Ещё раз большое спасибо.
Да , проглядел. Каюсь. Си немного разбаловал.
Пользуюсь 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 перейти? Тогда все сразу наладится и не нужно будет в гамаке и стоя....
Re: Засада с PIC18F25K80
Коллеги, доброй ночи! Два дня посвятил чтению документации.
Да , проглядел. Каюсь. Си немного разбаловал.
Пользуюсь CCS. Сделал ряд конструкций на ней , порт А на выход везде. А тут влип.
Да , проглядел. Каюсь. Си немного разбаловал.
Пользуюсь CCS. Сделал ряд конструкций на ней , порт А на выход везде. А тут влип.
Вы не то читаете видимо. Зачем так сложно, если есть базовая команда:
setup_adc_ports();
set_analog_pins(NO_ANALOGS);
Вам надо описание компилятора почитать. И всё.
https://www.ccsinfo.com/downloads/ccs_c_manual.pdf
I have a dream...¯\_(ツ)_/¯
Re: Засада с PIC18F25K80
Уважаемый, Mursik!
Проверил, всё работает.
Решило проблему.
Вот сижу и думаю, как упустил. Собирал из нескольких проектов.
Спасибо.
Проверил, всё работает.
Код: Выделить всё
set_analog_pins(NO_ANALOGS);Решило проблему.
Вот сижу и думаю, как упустил. Собирал из нескольких проектов.
Спасибо.