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

PIC16F877, не работает PORTВ на выход


zengard

Рекомендуемые сообщения

Доброго времени суток, Уважаемые форумчане. 

Месяц уже изучаю Pic контроллеры, щас дошел до динамической индикации и столкнулся с такой проблемой. Использую 2 разрядный 7 сегментный индикатор с общим катодом, подключаю через NPN транзисторы катоды, код программы и проект проетуса ниже.

Скрытый текст



 LIST        p=16f877
       __CONFIG    H'3F72'        
PORTB       EQU         H'0006'        ; Порты сегментов
TRISB       EQU         H'0006'
PORTA       EQU         H'0005'        ; 0,1 разряды
TRISA       EQU         H'0005'
STATUS      EQU         H'0003'
PCL        EQU        H'0002'
INDICATOR_0 EQU        H'0020'        ;1 индикатор
INDICATOR_1 EQU        H'0021'        ;2 индикатор
COUNT        EQU        H'0024'        
Reg_1       EQU         H'0025'
Reg_2       EQU         H'0026'
Reg_3       EQU         H'0027'
        org 0
       bsf    STATUS,5
       CLRF    TRISA
       CLRF    TRISB
       bcf    STATUS,5
       movlw    .0
       movfw    INDICATOR_0
       movfw    INDICATOR_1
       movlw    .10            
       movwf    COUNT
       
START 
       ;Берем значение из таблицы, записывем в портБ и через А0 выдаем нужную цифру
       movf        INDICATOR_0,0
       call        Tablica
       movwf        PORTB
       movlw        b'00000001'
       movwf        PORTA
       call        delay
       bcf        PORTA,0
       ;Берем значение из таблицы, записывем в портБ и через А1 выдаем нужную цифру
       movf        INDICATOR_1,0
       call        Tablica
       movwf        PORTB
       movlw        b'00000010'
       movwf        PORTA
       call        delay
       bcf        PORTA,1
       decfsz        COUNT,1
       goto        START
       movlw        .10            ;счетчик
       movwf        COUNT
       
       incf        INDICATOR_0,1
       bcf        STATUS,2
       movlw        .10
       subwf        INDICATOR_0,0
       btfsc        STATUS,2
       goto        RESTART_IND
       goto        START
     
; Задержка 500 000 машинных циклов
; Длительность задержки 250 миллисекунд
; Частота задающего генератора 8 МГц

delay       movlw       .85
            movwf       Reg_1
            movlw       .138
            movwf       Reg_2
            movlw       .3
            movwf       Reg_3
            decfsz      Reg_1,F
            goto        $-1
            decfsz      Reg_2,F
            goto        $-3
            decfsz      Reg_3,F
            goto        $-5
            nop
            nop
        return
        
Tablica        
    addwf        PCL,1    
    retlw        b'00000110'    ;1
    retlw        b'11011011'    ;2
    retlw        b'01001111'    ;3  
    retlw        b'01100110'    ;4
    retlw        b'01101101'    ;5
    retlw        b'01111101'    ;6
    retlw        b'00000111'    ;7
    retlw        b'01111111'    ;8
    retlw        b'01101111'    ;9
    retlw        b'00111111'    ;0

RESTART_IND
    movlw        .0
    movwf        INDICATOR_0
    incf        INDICATOR_1,1
    bcf        STATUS,2
    movlw        .1
    subwf        INDICATOR_1,0
    btfsc        STATUS,2
    goto        RESTART_IND_2
    goto        START
        
RESTART_IND_2
    clrf        INDICATOR_1
    clrf        INDICATOR_0
    
PAUSE    movlw        b'01000000'
    movwf        PORTB
    bsf        PORTA,0
    call        delay
    bcf        PORTA,0

    movlw        b'01000000'
    movwf        PORTB
    bsf        PORTA,1
    call        delay
    bcf        PORTA,1
    goto        PAUSE
       END


 

В протеусе программа работает исправно, на практике к сожалению нет. Если подключаю выводы разрядов к плюсу напрямую все работает четко, мерю питание на выходе с портовБ 15мв. 

Читая даташит вроде как я понял , что проблема в том, что состояние TRISB  на момент начала записи у меня состояние 0, записывал значение b'00000001', не помогло(

Помогите пожалуйста. 

Может быть сторожевой таймер или что то в этом духе, не могу найти ошибку

.1.thumb.png.a4ee1e152b9a8894fc2e7153611c4252.png

autoloader_prot.zip

Суть программы обычный перебор чисел, и когда дошла до конца высветить 2 тире

Ссылка на комментарий
Поделиться на другие сайты

При старте процессора пины порта А являются аналоговыми входами. Надо их переконфигурировать в цифровые.

Для этого в самом начале программы надо в ADCON1 записать 6.

bsf    STATUS,5
MOVLW 0x06 ; Делаем пины цифровыми
MOVWF ADCON1 
CLRF    TRISA
CLRF    TRISB
... дальше остальной код

 

Ссылка на комментарий
Поделиться на другие сайты

Сделал как вы посоветовали, теперь на выходы А0 и А1 питание 4,9В, но на светодиоды все так же 15мв

Щас получается что открывается транзистор, только тока нету с портов Б(

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Какое напряжение на коллекторе транзистора? 15мв это где? Какое напряжение на portb? Задайте статический режим для измерений, если "лёд тронется" то потом потихоньку на динамику переходить.

Отправлено с моего Lenovo A5000 через Tapatalk
 

И какой тип индикатора и транзистора?

Отправлено с моего Lenovo A5000 через Tapatalk
 

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

К коллектору транзистора подключены разряды индикатора, поидее тогда и питание 15мв, потому-что индикатор с общим катодом, что следует что ток течёт от порта В по сегментам и в коллектор.

15мв это напряжение питания с выходов порта В на сегменты индикатора.

На базу транзистора подаётся питание 4.5вольта, транзистор значит открыт, эмиттер транзистора подключён к земле

Индикатор с общим катодом, семисегментный 2х разрядный

Транзистор 2n4401 npn биополярный

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Если подключаю эмиттер транзистора к минусу светодиода, то все чётко работает, а через индикатор ничего. Индикатор исправен.4efade0c07d90926d8a339cde7a8fe72.jpg&key=209f9fc71b4daafd8867c43d6b5bb94bc7734d21c723a77bff2e768aa0963551

69858c20569e981bd131387d04b43ed2.jpg&key=2c780fe202878c34e98d9f2039dae3fd1dd539b2f4c52975e6e0dede58851ccc

Напряжение на коллекторе 1вольт

Ссылка на комментарий
Поделиться на другие сайты

 

нет , вы бы просто видели мигающие цифры на индикаторах.

19 часов назад, zengard сказал:

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

разряды ? или все таки сегменты

ЗЫ напишите простую прогу установки портаВ в лог1 и проверьте работоспособность порта.

Ссылка на комментарий
Поделиться на другие сайты

Доброго времени суток

	LIST  p=16F877
	__CONFIG H'3F72'
INTCON			equ 0x0B
STATUS			equ 0x03
PORTB			equ 0x06
TRISB			equ 0x86
PORTA       EQU         H'0005'		; 0,1 ???????
TRISA       EQU         H'0005'
RP0			equ 0x05
	ORG 0x00
	goto Start



	ORG 0x05

Start:
	clrf INTCON			

	bsf STATUS, RP0 			;переходим в банк 1
	
	movlw b'00000000'		;помещаем в аккумулятор число 0 
	movwf TRISB			;устанавливаем линии порта 
	clrf	TRISA				;PortB на выход

	bcf STATUS, RP0			
	movlw .255 			
	movwf	PORTB
	bsf	PORTA,0;

Loop:	
	nop				
	goto Loop			

	End

Вот этот код работает на ура, сегменты все горят через транзистор. 

Может ли быть где то прерывание в моей предыдущей программе?

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, zengard сказал:

Может ли быть где то прерывание в моей предыдущей программе?

в теории - нет, по дефолту прерывания запрещены. практически - да может.

Ссылка на комментарий
Поделиться на другие сайты

Буду искать, а по опыту не у кого подобных проблем не было?

Использую среду MPLAB X IDE 4.05

Компилятор их родной mpasmwin 5.76

Может компилятор неправильно переводит двоичный код?

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, zengard сказал:

Может компилятор неправильно переводит двоичный код?

это шутка такой? асм и есть по сути двоичный код...

1 час назад, zengard сказал:

по опыту не у кого подобных проблем не было?

почему не было, было вот тут к примеру http://forum.cxem.net/index.php?/topic/159325-внешнее-прерывание-на-pic/&tab=comments#comment-2327520

минимальная настройка портов на цифровой  выход для 877

 INTCON = 0;
 PIE1 = 0;
 ADCON1 = 0b00000111; // цифровой вывод
 TRISA = 0b11111111; //порт А - на вход
 TRISB = 0; //порт В - выходы
 TRISC = 0b11111111;// порт С - входы
 TRISD = 0; // порт Д - выходы
 PORTA = 0; //очищаем порт А
 PORTB = 0; //очищаем порт В
 PORTC = 0;
 PORTD = 0;
 OPTION = 0b10000000; //Конфигурация переферии по умолчанию, предделитель таймера 0 на 0

 

Ссылка на комментарий
Поделиться на другие сайты

В ‎17‎.‎12‎.‎2017 в 21:53, zengard сказал:

код программы... ниже

какую функцию выполняет вот этот код?

	movlw	.0
	movfw	INDICATOR_0
	movfw	INDICATOR_1
	movlw	.10
	movwf	COUNT

я так понимаю Вы хотите обнулить индикаторы? Тогда может movwf INDICATOR_0 / INDICATOR_1?

И после метки RESTART_IND_2 и выполнения двух команд clrf Вы входите в цикл PAUSE, а где выход? Вы же в нем "зависаете"...

Ссылка на комментарий
Поделиться на другие сайты

14 часа назад, zengard сказал:

Попробую перестроить

симуляцией в MPLAB'е пользуетесь? Протеус это хорошо (не пользуюсь, если что), но все же в симуляторе MPLAB'а можно посмотреть состояние нужных регистров, что должно быть (по задумке), что получилось. Легче "выловить" ошибку в случае чего.

Ссылка на комментарий
Поделиться на другие сайты

20 часов назад, IMXO сказал:

типа в протезе это сделать нельзя...

не знаю. Я же написал что Протеусом не пользуюсь. Я прогнал программу топикстартера в MPLAB'е, есть моменты которые вызывают вопросы и если бы человек использовал симулятор в пошаговом режиме, то таких бы косяков (или как это назвать) можно было бы избежать.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...