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

balk

Участник
  • Постов

    36
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные balk


  1. 11 minutes ago, aaarrr said:

    Ну, 12В подавать однозначно не стоит.

    ну если только в этом дело, то и было бы хорошо.
    я тут полистал интернет-книгу и
    у AlexGyver (https://alexgyver.ru/lessons/arduino-power/) вычитал не до конца понятную фразу

    Важно! На момент подключения к плате USB кабеля для прошивки внешнее питание должно быть подключено, иначе через плату может пойти большой ток то

    значит ли это, что нельзя подключать к плате внешнее питание, если уже подключено юсб ?

    9 minutes ago, aaarrr said:

    Например, включение C1, закоротки RX и TX на PB4 и PB5. То есть это не та схема, по которой что-то делали (надеюсь).

    спасибо, а есть ли в доступе реальная схема ?

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

  2. купил для удешевления конструкции вместо стандартной Arduino UNO R3 на диповском корпусе
    вот такие платы

    но столкнулся пока с необъяснимой для меня ситуацией:

    при  подключении внешнего питания 12В и кабеля юсб
    происходит нагрев и сгорание СH340G,LM1117-5, ну и самого мк .

    никаких проблем с такой же запиткой на стандартной Arduino UNO R3 нет.
    подскажите, пожалуйста, что является причиной проблемы.

     

     

    6027247351.jpg

  3. c инициализацией всё в порядке оказалось.

    нашёл в подпрограмме работы с таймером ( она участвовала в выводе информации) операцию с INTCON.

    после правки, всё стало на места.

    спасибо, уважаемые коллеги, Ваша поддержка очень помогла!

  4. похоже, что подобрался  к проблеме

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

    -на девятом синхроимпульсе единица.

    если из цикла ожидания выскочить (например , через кнопку) и попасть на пресловутые bsf GIE и PEIE,

    то мой слэйв оживает и начинает отвечать на адрес и принимать данные.

    получается , косяк в инициализации модуля ?

    вот код инициализации . не понимаю, что не так

    	BANKSEL		TRISC
    	movlw		b'00011111'		;RC1-RC0 -входы генератора TMR1
    								;RC2 -кнопка
    								;RC3-RC4 -I2C
    	movwf		TRISC
    ;------настройка I2C ---------
    	BANKSEL		SSPCON
    	movlw		0x36
    	movwf		SSPCON ;установка слэйв-режима
    	BANKSEL 	SSPADD
    	movlw		0x18
    	movwf		SSPADD; устанавливаем адрес слэйва
    	clrf		SSPSTAT
    ;-----настройка прерываний----------------
    	bsf			INTCON,GIE		
    	bsf			INTCON,PEIE		
    	BANKSEL 	PIE1
    	bsf			PIE1,SSPIE
  5. спасибо за ответ.
    в принципе , я так себе и представляю ситуацию, но , к сожалению, где-то совершаю промах.

    вот код модуля прерывания. в общем, всё стандартно.

    ;подпрограмма обработки прерывания
    int_SSP	;org 0x04	
    	
    	movf		STATUS,W
    	movwf		_STAT				;сохранение статуса
    	BANKSEL		PIE1
    	bcf		PIE1,SSPIE		;запрет прерываний 
    	BANKSEL		PIR1
    	bcf		PIR1,SSPIF		;сбросить бит прерывания от SSP
    
    	BANKSEL		SSPSTAT
    	movf		SSPSTAT,W		; SMP   CKE   D/#A   P   S   R/#W   UA  BF
    	andlw		b'00101101'		;маска проверяемых битоа
    	BANKSEL		TEMP_RG
    	movwf		TEMP_RG
    
    test1
    	movlw		0x29
    	xorwf		TEMP_RG,W
    	btfss		STATUS,Z		;DATA ?
    	goto		test2	
    
    StateDSWB
    	BANKSEL		SSPBUF
    	movf		SSPBUF,W
    	movwf		INDF
    	incf		FSR,F
    	goto		out
    
    test2
    	movlw		0x09
    	xorwf		TEMP_RG,W
    	btfss		STATUS,Z		;ADDRESS ?
    	goto		out
    StateAB
    	BANKSEL		SSPBUF
    	movf		SSPBUF,W
    	
    out	
    	BANKSEL		PIE1
    	bsf		PIE1,SSPIE
    	movf		_STAT,W
    	movwf		STATUS
    
    	retfie

    для того, чтоб разобраться в ситуации, я основной модуль упростил .

    в итоге он выглядит не совсем реалистичным ( момент прерывания я задаю вручную, осуществляя посылку от другого устройства по i2c),

    но мне важно понять проблему.


    в пустом цикле жду прерывания.
    по нажатию  кнопки, осуществляется некий вывод из буфера ( не показано).

    затем возврат.

    так вот без установки пресловутых GIE,PEIE почему-то дальнейшие прерывания не наблюдаются.

    ;  .............................. 
    
    	clrf		SSPSTAT
    		
    	bsf		INTCON,GIE		;разрешение прерываний
    	bsf		INTCON,PEIE			;разрешение внешних прерываний
    	BANKSEL PIE1
    	bsf		PIE1,SSPIE
    
    wait_int
    				; ожидаем прерывания по i2с
    	
    key_down
    	BANKSEL		PORTC	;ожидание нажатия кнопки
    	btfsc		PORTC,2
    	goto		key_down
    key_up
    	btfss		PORTC,2	
    	goto	 	key_up	
    
    VYVOD					;вывод информации
    ;......................
    	bsf		INTCON,GIE	;без этих двух строк не будет прерывания
    	bsf		INTCON,PEIE	;
    	
    
    	goto		`wait_int	;возврат к ожиданию

     

  6. не могу сообразить, что не так.

    есть простое устройство-слэйв на F873a . которое принимает несколько байтов от мастера
    и выводит их на индикатор.

    ловля данных происходит по прерыванию.

    пишу на asme

    и вроде всё хорошо, но напрягает момент, который не могу себе объяснить.
    если в основной программе не сделать повторно 

    bsf		INTCON,7			;разрешение всех прерываний
    bsf		INTCON,6			;разрешение внешних прерываний

    , то после возвращения из прерывания в основную программу прерывания больше не возникнут.

    насколько я понимаю, INTCON при прерывании не изменяется, если его не трогать.

     Пытался этот код вписывать в модуль прерывания перед retfie, но ситуацию это не поменяло.

    Почему такое происходит ?

     

  7. Команда movff занимает два МЦ

    да, но я имел ввиду краткость кода при том же времени исполнения, к тому же оставляю за скобками команды,

    которые нужно внедрить для манипуляций с аккумулятором.

     

     

     

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

    Извините, здесь, должен признаться, не чувствую разницы. Был бы признателен за разъяснения

     

     

    и мне кажется в этом контексте уместней говорить не "загружается", а читается

  8. дебаг в этом МК перекрыт расположением USB на пинах ICSP.

    PGD , PGC не пересекаются с D+/- , но мне это пока не нужно , поскольку хочу отработать только некоторые прерывания в коде

    на голом виртуальном симуляторе.

     

    balk, канэшна дыка ызвыняюсь, но Вы вроде ещё с PCLATH не разобрались, а уже за ЮСБ взялись?

    Аднака... :rolleyes:

    Можно и продолжить разбираться . В смежной теме.

     

  9. вопросы остаются

    Smenв смежной теме Вы предложили вернуться к PCLATH.

    Кстати вопрос у меня остался такой

    в Вашем коде

                movlw  high table
                movwf  PCLATH,0

    используются две команды, кроме того ещё задействован регистр W, который должен передавать в таблицу

    вектор перехода, соответственно нужно предусматривать дополнительные манипуляции с W.

    В коде

                movff tosh,pclath
                addwf pcl,1,0

    не нахожу ничего такого, чем бы он уступал Вашему .

  10. Спасибо, друзья , за ценные замечания !

    всё-таки один момент мне не стал понятнее,

    как по команде ADDWF PCL программа перейдет на нужную RETLW, если при

    выполнении ADDWF произойдет запись в PCH из PCLATH, в котором адресный байт другого сегмента. ?

    При выполнении команды RETLW в таблице, возврат произойдет БЕЗ ПРИВЯЗКИ К PCLATH,

    в том то и дело , что до RETLW не доходим, а срываемся в другой сегмент.

    вот собственно хребет , который всё наглядно может продемонстрировать

    #include <p18f2550.inc>

    org 0

    goto start

    nop

    nop

    nop

    nop

     

    org 0x20

    start

    call module

     

    org 0x100

    table

    addwf PCL,1,0

    retlw 0x50

    retlw 0xde

    retlw 0x62

    retlw 0xc2

    retlw 0xcc

    retlw 0xc1

     

    module

    movlw 0x06

    call table

    nop

    nop

    END

    после addwf программа перепрыгивает на выделенный жирным nop ,

    а не возвращается в module.

  11. А чем не устраивает обычный

            movlw  hight Label
            movwf  PCLATH

    не совсем понимаю, что кроется под hight label.

    мой замысел был таков

    от строки вызова call pprog перехожу

    к метке pprog ( в этом же сегменте)

    делаю MOFF TOSH,PCLATH - записываю в PCLATH код сегмента вызывателя, чтоб потом

    через ADDWF PCL и соответствующий retlw вернуться именно к вызывателю, а

    не к вызывателю вызывателя, находящегося в другом сегменте

     

     

     

    Да какие адреса? Это же виртуальный регистр.

    это просто констатация того, что изображает отладчик

  12. Smen спасибо за содействие

     

    с PCLATH я пока обошелся авантюрно-

    перед ADDWF PCL выставил один оператор

    MOVFF TOSH,PCLATH

    и он меня спасает, если таблица и ее вызов находятся в одном сегменте.

    пока для простой отладки мне достаточно.

     

    PCLAT

    Это, видимо PCLATH и PCLATU вместе взятые.

    видимо, не так. адреса разные.

    а у PCL и PCLAT один и тот же адрес FF9, но разрядность у PCLAT 0x000000,

    хотя изменения почему происходят только в младшем байте.

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

  13. Реальный сегмент находится в PCH.

    что такое PCH ? не нахожу в даташите на PIC18F2550

    кстати, в отладчике среди SFR имеется PCLAT , тоже не понятно что это, ибо в даташите тоже не вижу,

    по разрядам вроде соответствует счетчику, но изменяется тоже только в пределах 256

     

     

     

  14. В том-то весь и фокус, что операции с програмным счётчиком никак не влияют на содержимое регистра PCLATH.

    влияют

    вот даташит говорит, что содержимое PC транслируется в PCLATH при любом чтении PC.

    the upper two bytes of the program

    counter are transferred to PCLATH and PCLATU by an

    operation that reads PCL.

    проверьте в отладчике , если сомневаетесь.

  15. да, спасибо, как водится, пока 5 раз одно и тоже в даташите не прочитаешь, не поймешь.

    добавил команду MOVF PCL и увидел в PCLATH реальный сегмент адреса.

    тема собственно меня забеспокоила потому, что в вызове подпрограммы, которая размещается

    в произвольном месте присутствует еще подпрограмма с т.н. вычисляемым переходом ADDWF PCL,

    в результате которого у меня вместо 0318h происходит перескок на 0018h

  16. имеется asm-программа .

    в MPLAB IDE 8.33 запущен отладчик MPLAB SIM.

    двигаясь по шагам , перехожу на подпрограмму с адреса 0050 на адрес 0140.

    в окне WATCH наблюдаю изменение PCL на 40, а PCLATH почему-то остается в 00,

    хотя отладчик двигается дальше 0142.. и в PCLATH я ожидал видеть 01.

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