Например TDA7294

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





Текущее время: Ср май 14, 2025 13:24:06

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


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



Начать новую тему Ответить на тему  [ Сообщений: 23 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Проблема при переходе с pic16 на pic18
СообщениеДобавлено: Вт фев 21, 2023 07:54:06 
Первый раз сказал Мяу!

Зарегистрирован: Ср янв 18, 2023 13:01:27
Сообщений: 35
Рейтинг сообщения: 0
Доброго времени суток, уважаемые коты. Начал я изучать работу динамической индикации. Просмотрел урок на эту тему, написал программу счётчика, запустил в протеусе - всё работает. Код был для МК Pic16f84a. Когда я поменял на pic18f4520, то пошли проблемы. Счётчик начал считать так: 0,1,2,3,4,0,1,2,3,4. Потом включался второй разряд и так же считал. Искал решение этой проблемы в интернете и только понял то, что в 16 и 18 пиках регистр pcl как-то по другому работает. Подскажите, пожалуйста, в чём проблема?
Фрагмент кода:
.......
MOVF IND4, 0
CALL TABLE
...........
TABLE.
ADDWF PCL, F
RETLW B'00000011' ; 0
RETLW B'10011111' ; 1
...........
RETLW B`00001011' ; 9


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Проблема при переходе с pic16 на pic18
СообщениеДобавлено: Вт фев 21, 2023 08:31:41 
Друг Кота

Карма: 68
Рейтинг сообщений: 1958
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
Даташит на pic18f4520
страница 58
раздел 5.1.4.1 Computed GOTO

The offset value (in WREG) specifies the number of bytes that the program counter should advance and should be multiples of 2 (LSb = 0).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Проблема при переходе с pic16 на pic18
СообщениеДобавлено: Вт фев 21, 2023 08:52:40 
Первый раз сказал Мяу!

Зарегистрирован: Ср янв 18, 2023 13:01:27
Сообщений: 35
Рейтинг сообщения: 0
"Значение смещения (в wreg) определяет количество байт, которое должно продвинуть счётчик и должно быть кратно 2". Читал я это, только не понимаю. Если можно, объясните на пальцах.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Проблема при переходе с pic16 на pic18
СообщениеДобавлено: Вт фев 21, 2023 09:11:51 
Друг Кота

Карма: 68
Рейтинг сообщений: 1958
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
В данном случае имеется ввиду, что индекс должен быть удвоен - в PIC18F4520 команда занимает два байта (за исключением некотрых), а не один, как в PIC16F (за исключением некоторых), а значит, адресация должна быть удвоена


Вернуться наверх
 
Открыт интернет-магазин MEAN WELL.Market – весь ассортимент MEAN WELL, выгодные цены

Открыта удобная площадка с выгодными ценами, поставляющая весь ассортимент продукции, производимой компанией MEAN WELL – от завоевавших популярность и известных на рынке изделий до новинок. MEAN WELL.Market предоставляет гарантийную и сервисную поддержку, удобный подбор продукции, оперативную доставку по России. На сайте интернет-магазина посетители смогут найти обзоры, интересные статьи о применении, максимальный объем технических сведений.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Проблема при переходе с pic16 на pic18
СообщениеДобавлено: Вт фев 21, 2023 09:30:13 
Первый раз сказал Мяу!

Зарегистрирован: Ср янв 18, 2023 13:01:27
Сообщений: 35
Рейтинг сообщения: 0
Я вот что не понимаю. Если адресация удвоена, то счётчик должен работать так: 0,2,4,0,2,4, т. е. если адрес единицы равен 0, то с учётом удвоения адресации следующая цифра должна быть по адресу 2, т. е. двойка. Но т. к. счётчик работает 0,1,2,3,4, значит я не понимаю, какая адресация должна быть удвоена.


Вернуться наверх
 
LED-драйверы MOSO - надежные решения для индустриальных приложений

Продукция MOSO предназначена в основном для индустриальных приложений, использует инновационные решения на основе более 200 собственных патентов для силовой электроники и соответствует международным стандартам. LED-драйверы MOSO применяются в системах наружного освещения разных отраслей, включая промышленность, сельское хозяйство, транспорт и железную дорогу. В ряде серий реализована возможность дистанционного контроля и программирования работы по заданному сценарию. Разберем решения MOSO подробнее>>
Не в сети
 Заголовок сообщения: Re: Проблема при переходе с pic16 на pic18
СообщениеДобавлено: Вт фев 21, 2023 09:55:11 
Друг Кота

Карма: 68
Рейтинг сообщений: 1958
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
ADDWF PCL, F что делает?

Добавлено after 4 minutes 57 seconds:
...всё-таки "кратно двум" более правильно, чем "удвоен"..

то есть, если раньше индекс изменялся так:
00000000 +1
00000001 +1
00000010 +1
00000011...

то теперь должен так:
00000000 +2
00000010 +2
00000100 +2
00000110...


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Проблема при переходе с pic16 на pic18
СообщениеДобавлено: Вт фев 21, 2023 13:18:04 
Первый раз сказал Мяу!

Зарегистрирован: Ср янв 18, 2023 13:01:27
Сообщений: 35
Рейтинг сообщения: 0
ADDWF PCL, F что делает?

Насколько я знаю складывается wreg и pcl и сохраняется в pcl

...всё-таки "кратно двум" более правильно, чем "удвоен"..

то есть, если раньше индекс изменялся так:
00000000 +1
00000001 +1
00000010 +1
00000011...

то теперь должен так:
00000000 +2
00000010 +2
00000100 +2
00000110...

Так я об этом и говорю. Почему читается первые 5 цифр, а не через одну?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Проблема при переходе с pic16 на pic18
СообщениеДобавлено: Вт фев 21, 2023 13:45:48 
Друг Кота

Карма: 68
Рейтинг сообщений: 1958
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
ну я не знаю почему, что и как симулятор читает, к тому же из приведенного кода не видно
Hailmary писал(а):
складывается wreg и pcl и сохраняется в pcl
что заносится в W, и может Вы перепутали соответствие набора битов цифрам :dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Проблема при переходе с pic16 на pic18
СообщениеДобавлено: Вт фев 21, 2023 14:14:22 
Нашел транзистор. Понюхал.
Аватар пользователя

Карма: 3
Рейтинг сообщений: 21
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Сообщений: 157
Откуда: не с Уфы
Рейтинг сообщения: 0
умножай на два приращение и всего лишь, вставь вот это:
Код:
    MULLW    .2
    MOVF     PRODL,W


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Проблема при переходе с pic16 на pic18
СообщениеДобавлено: Вт фев 21, 2023 14:46:13 
Друг Кота

Карма: 68
Рейтинг сообщений: 1958
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
RLNCF


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Проблема при переходе с pic16 на pic18
СообщениеДобавлено: Вт фев 21, 2023 15:18:17 
Нашел транзистор. Понюхал.
Аватар пользователя

Карма: 3
Рейтинг сообщений: 21
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Сообщений: 157
Откуда: не с Уфы
Рейтинг сообщения: 0
да, так будет проще


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Проблема при переходе с pic16 на pic18
СообщениеДобавлено: Вт фев 21, 2023 17:39:28 
Первый раз сказал Мяу!

Зарегистрирован: Ср янв 18, 2023 13:01:27
Сообщений: 35
Рейтинг сообщения: 0
А где эту команду написать?


Вот мой код
LIST p=18f4520
#include "p18f4520.inc"

; CONFIG1H
CONFIG OSC = XT ; Oscillator Selection bits (XT oscillator)
CONFIG FCMEN = OFF ; Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
CONFIG IESO = OFF ; Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled)

; CONFIG2L
CONFIG PWRT = OFF ; Power-up Timer Enable bit (PWRT disabled)
CONFIG BOREN = OFF ; Brown-out Reset Enable bits (Brown-out Reset disabled in hardware and software)
CONFIG BORV = 3 ; Brown Out Reset Voltage bits (Minimum setting)

; CONFIG2H
CONFIG WDT = OFF ; Watchdog Timer Enable bit (WDT disabled (control is placed on the SWDTEN bit))
CONFIG WDTPS = 32768 ; Watchdog Timer Postscale Select bits (1:32768)

; CONFIG3H
CONFIG CCP2MX = PORTC ; CCP2 MUX bit (CCP2 input/output is multiplexed with RC1)
CONFIG PBADEN = OFF ; PORTB A/D Enable bit (PORTB<4:0> pins are configured as digital I/O on Reset)
CONFIG LPT1OSC = OFF
CONFIG MCLRE = OFF ; MCLR Pin Enable bit (RE3 input pin enabled; MCLR disabled)

; CONFIG4L
CONFIG STVREN = OFF
CONFIG LVP = OFF
CONFIG XINST = OFF

; CONFIG5L
CONFIG CP0 = OFF ; Code Protection bit (Block 0 (000800-001FFFh) not code-protected)
CONFIG CP1 = OFF ; Code Protection bit (Block 1 (002000-003FFFh) not code-protected)
CONFIG CP2 = OFF ; Code Protection bit (Block 2 (004000-005FFFh) not code-protected)
CONFIG CP3 = OFF ; Code Protection bit (Block 3 (006000-007FFFh) not code-protected)

; CONFIG5H
CONFIG CPB = OFF
CONFIG CPD = OFF ; Data EEPROM Code Protection bit (Data EEPROM not code-protected)

; CONFIG6L
CONFIG WRT0 = OFF ; Write Protection bit (Block 0 (000800-001FFFh) not write-protected)
CONFIG WRT1 = OFF ; Write Protection bit (Block 1 (002000-003FFFh) not write-protected)
CONFIG WRT2 = OFF ; Write Protection bit (Block 2 (004000-005FFFh) not write-protected)
CONFIG WRT3 = OFF ; Write Protection bit (Block 3 (006000-007FFFh) not write-protected)

; CONFIG6H
CONFIG WRTC = OFF
CONFIG WRTB = OFF
CONFIG WRTD = OFF

; CONFIG7L
CONFIG EBTR0 = OFF
CONFIG EBTR2 = OFF
CONFIG EBTR3 = OFF

; CONFIG7H
CONFIG EBTRB = OFF

BSR EQU 0xFE0
STATUS EQU 0xFD8 ;задаём
PORTA EQU 0xF80 ; имена
PORTB EQU 0xF81 ; регистрам
TRISA EQU 0xF92 ; специального
TRISB EQU 0xF93 ; назначения
PCL EQU 0xFF9 ;переход на любую строчку
LATA EQU 0x89 ;
LATB EQU 0x8A
COUNT EQU 0x101 ;задаём
IND1 EQU 0x102 ; имена
IND2 EQU 0x103 ; рагистрам
IND3 EQU 0x104 ; общего
IND4 EQU 0x105 ; назначения
REG1 EQU 0x106
REG2 EQU 0x107
REG3 EQU 0x108
ORG 0 ;

;инициализация портов
CLRF TRISA ;обнуляем trisa для настройки порта на выход. Вывод цифр.
MOVLW 0x00
MOVWF TRISA
CLRF TRISB ;обнуляем trisb для настройки порта на выход. Вывод цифр.
MOVLW 0x00
MOVWF TRISB

MOVLW .0 ;закгружаем в акк. 0
MOVWF IND4 ;копируем из акк. в регистр ind4
MOVWF IND3 ;копируем из акк. в регистр ind3
MOVWF IND2 ;копируем из акк. в регистр ind2
MOVWF IND1 ;копируем из акк. в регистр ind1
MOVLW .8 ;загружае в акк. 8 (будет использоваться как задержка)
MOVWF COUNT ;копируем из акк. в регистр coun

;основная программа
MAIN ;первый индикатор
MOVF IND4,0 ;копируем в акк. из ind4 и сохраняем в акк., т.к. стоит 0
CALL TABLE ;переход на метку
MOVWF PORTB ;копирум из акк. (из подпрограммы table) в порт В
BSF PORTA,0 ;включаем нулевой бит порта А
CALL DELAY ;задержка
BCF PORTA,0 ;очищаем нулевой бит порта А

;второй индикатор
MOVF IND3,0 ;копируем в акк. из ind3 и сохраняем в акк.
CALL TABLE ;переход на метку
MOVWF PORTB
BSF PORTA,1 ;включаем первый бит порта А
CALL DELAY
BCF PORTA,1
DECFSZ COUNT,1 ;вычитаем 1 и сравниваем, если = 0, то следующая команда игнорируется
; результата записывается в count, т.к. стоит 1. Это задержка перед переключением на
; следующий разряд
GOTO MAIN ;возврат к началу основной программы
MOVLW .8 ;снова задаём параметр задержки. Если это не сделать,
MOVWF COUNT ; то вычитание будет с 255 и до 0
INCF IND4,1 ;увеличивается на 1 и сохраняется в ind4,т.к. стоит 1 после запятой
BCF STATUS,2 ;очищаем второй бит регистра, флаг z для проверки нуля
MOVLW .10 ;сравниваем с 10
SUBWF ind4,0 ;вычитает и записывается в аккумулятор, т.к. стоит 0 после запятой
BTFSC STATUS,2 ;провуряем второй бит регистра status, если он =0, команда пропускается
GOTO ZERO4
GOTO MAIN

DELAY MOVLW .75 ;задаются
MOVWF REG1 ; числа
MOVLW .5 ; регистрам
MOVWF REG2 ;
WR4 DECFSZ REG1,f ;уменьшает f на единицу и записывает в f. Если результата =0, то следующая команда игнорируется
GOTO WR ;возврат на метку
DECFSZ REG2,f
GOTO WR
RETURN

TABLE ADDWF PCL,F ;складываем аккум. с pcl и сохраняем в pcl.
;при pcl = 0 переходим на следующую строчку, при pcl = 1 - через одну
;при pcl = 2 - через 2, при pcl = 3 - через 3 и т.д
RETLW b'00000011'; 0 ;retlw как return, только ещё записывает значение в аккумулятор
RETLW b'10011111' ; 1
RETLW b'00100101' ; 2
RETLW b'00001101' ; 3
RETLW b'10011001' ; 4
RETLW b'01001001' ; 5
RETLW b'01000001' ; 6
RETLW b'00011111' ; 7
RETLW b'00000001' ; 8
RETLW b'00001001' ; 9

ZERO4 MOVLW .0 ;загружаем
MOVWF IND4 ; в ind4 ноль
INCF IND3,1 ;увеличиваем ind3 на единицу и записываем в ind3
BCF STATUS,2 ;очищаем второй бит регистра, флаг z для проверки нуля
MOVLW .10 ;сравниваем с 10
SUBWF IND3,0 ;вычитает и записывается в аккумулятор, т.к. стоит 0 после запятой
BTFSC STATUS,2 ;провуряем второй бит регистра status, если он =0, команда пропускается
GOTO ZERO3
GOTO MAIN

ZERO3 MOVLW .0
MOVWF IND1
GOTO MAIN
END


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Проблема при переходе с pic16 на pic18
СообщениеДобавлено: Вт фев 21, 2023 18:45:45 
Нашел транзистор. Понюхал.
Аватар пользователя

Карма: 3
Рейтинг сообщений: 21
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Сообщений: 157
Откуда: не с Уфы
Рейтинг сообщения: 0
MOVF IND3,0 ;копируем в акк. из ind3 и сохраняем в акк.
RLNCF WREG,F
CALL TABLE ;переход на метку
;
короче во всех случаях перед "CALL TABLE"


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Проблема при переходе с pic16 на pic18
СообщениеДобавлено: Вт фев 21, 2023 18:48:03 
Друг Кота

Карма: 68
Рейтинг сообщений: 1958
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
полагаю, лучше всё-таки внутри TABLE, ибо вызовов несколько


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Проблема при переходе с pic16 на pic18
СообщениеДобавлено: Вт фев 21, 2023 22:55:56 
Друг Кота
Аватар пользователя

Карма: 94
Рейтинг сообщений: 1464
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14982
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Работая с таблицами и PCL не забываем, что есть еще и PCU:PCH (и PCLATU:PCLATH)...
:wink:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Проблема при переходе с pic16 на pic18
СообщениеДобавлено: Ср фев 22, 2023 05:57:18 
Первый раз сказал Мяу!

Зарегистрирован: Ср янв 18, 2023 13:01:27
Сообщений: 35
Рейтинг сообщения: 0
Всем огромное спасибо!!! Заработало! Пробовал два варианта, и оба работают. Выбрал второй, внутри таблицы, т. к. он компактнее. Но, к сожалению, я так и не понял, как это работает. Буду дальше разбираться.

Добавлено after 9 minutes 55 seconds:
Работая с таблицами и PCL не забываем, что есть еще и PCU:PCH (и PCLATU:PCLATH)...
:wink:

Читал я про них, что есть два байта младший PCL и старший PCH, к которому доступ только через PCLATH. PCU верхний байт, к нему доступ через PCLATH. но, обычно, на этом все объяснения и заканчиваются. Мне бы поподробнее, с примерами. Так что пока я не совсем понимаю, как работает счётчик программ (или совсем не понимаю :( ).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Проблема при переходе с pic16 на pic18
СообщениеДобавлено: Ср фев 22, 2023 08:11:36 
Друг Кота

Карма: 68
Рейтинг сообщений: 1958
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
к сожалению, я так и не понял, как это работает.

Вы - слепой гигантский почтальон. Обслуживали старый дом, с кучей подъездов, и знаете, что перейти от одного подъезда до другого можно за один шаг. Но тут построили новый дом, в котором квартир стало больше. Чтобы вместить все квартиры, подъезды стали стоять дальше друг от друга, теперь надо делать два шага.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Проблема при переходе с pic16 на pic18
СообщениеДобавлено: Ср фев 22, 2023 08:34:54 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2916
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23674
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Читал я про них, что есть два байта младший PCL и старший PCH, к которому доступ только через PCLATH. PCU верхний байт, к нему доступ через PCLATU. но, обычно, на этом все объяснения и заканчиваются.

А какие еще нужны объяснения?
Писать все разряды в PC непосредственно невозможно, патамушта разрядность контроллера всего 8. Писать по частям тоже невозможно, патамушта это программный счетчик и первая же запись байта приведет к переходу на "недоадрес". Поэтому имеется механизм с буферами старших байт, при котором запись в буферы не приводит к переходу, а запись в младший байт PC - PCL ОДНОВРЕМЕННО приводит к перезаписи старших байт из буферов в PCH и PCU соответственно.
По поводу счетчика команд. Счетчик не задействует младший бит программного адреса. Поэтому при его инкременте шаг адреса получается ДВОЙНЫМ автоматически. Изменение младшего бита адреса происходит только при ЧТЕНИИ флеша как данных.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Проблема при переходе с pic16 на pic18
СообщениеДобавлено: Ср фев 22, 2023 09:12:03 
Друг Кота
Аватар пользователя

Карма: 94
Рейтинг сообщений: 1464
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14982
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Собственно вопрос вероятно в том, что сайт с русским переводом документации для начинающих "переехал" (или его "переехали")...
Сегодня старые буклетики вроде можно найти тут:
https://web.archive.org/web/20080208141 ... t/?mid=1x0
в частности
https://web.archive.org/web/20080208141 ... manual.pdf
:roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Проблема при переходе с pic16 на pic18
СообщениеДобавлено: Ср фев 22, 2023 09:39:29 
Первый раз сказал Мяу!

Зарегистрирован: Ср янв 18, 2023 13:01:27
Сообщений: 35
Рейтинг сообщения: 0
Вы - слепой гигантский почтальон. Обслуживали старый дом, с кучей подъездов, и знаете, что перейти от одного подъезда до другого можно за один шаг. Но тут построили новый дом, в котором квартир стало больше. Чтобы вместить все квартиры, подъезды стали стоять дальше друг от друга, теперь надо делать два шага.

Задам ещё раз вопрос по своему коду: почему он читал первые 5 цифр, а остальные не читал? Согласно логике про почтальона он должен читать числа через одно, но читает только первые 5. Если я начинаю сравнивать не с 10 а с 20, то он читает первые 10 цифр, и т. д.

Добавлено after 2 minutes 21 second:
Собственно вопрос вероятно в том, что сайт с русским переводом документации для начинающих "переехал" (или его "переехали")...
Сегодня старые буклетики вроде можно найти тут:
https://web.archive.org/web/20080208141 ... t/?mid=1x0
в частности
https://web.archive.org/web/20080208141 ... manual.pdf
:roll:

Благодарю за ссылки, буду читать.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 23 ]  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