zengard Опубликовано 18 декабря, 2017 Поделиться Опубликовано 18 декабря, 2017 Доброго времени суток, Уважаемые форумчане. Месяц уже изучаю 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', не помогло( Помогите пожалуйста. Может быть сторожевой таймер или что то в этом духе, не могу найти ошибку . autoloader_prot.zip Суть программы обычный перебор чисел, и когда дошла до конца высветить 2 тире 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Yurkin2015 Опубликовано 18 декабря, 2017 Поделиться Опубликовано 18 декабря, 2017 При старте процессора пины порта А являются аналоговыми входами. Надо их переконфигурировать в цифровые. Для этого в самом начале программы надо в ADCON1 записать 6. bsf STATUS,5 MOVLW 0x06 ; Делаем пины цифровыми MOVWF ADCON1 CLRF TRISA CLRF TRISB ... дальше остальной код 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
zengard Опубликовано 18 декабря, 2017 Автор Поделиться Опубликовано 18 декабря, 2017 Сделал как вы посоветовали, теперь на выходы А0 и А1 питание 4,9В, но на светодиоды все так же 15мв Щас получается что открывается транзистор, только тока нету с портов Б( 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Bugrim Опубликовано 18 декабря, 2017 Поделиться Опубликовано 18 декабря, 2017 Какое напряжение на коллекторе транзистора? 15мв это где? Какое напряжение на portb? Задайте статический режим для измерений, если "лёд тронется" то потом потихоньку на динамику переходить. Отправлено с моего Lenovo A5000 через Tapatalk И какой тип индикатора и транзистора?Отправлено с моего Lenovo A5000 через Tapatalk 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
zengard Опубликовано 18 декабря, 2017 Автор Поделиться Опубликовано 18 декабря, 2017 К коллектору транзистора подключены разряды индикатора, поидее тогда и питание 15мв, потому-что индикатор с общим катодом, что следует что ток течёт от порта В по сегментам и в коллектор. 15мв это напряжение питания с выходов порта В на сегменты индикатора. На базу транзистора подаётся питание 4.5вольта, транзистор значит открыт, эмиттер транзистора подключён к земле Индикатор с общим катодом, семисегментный 2х разрядный Транзистор 2n4401 npn биополярный 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
zengard Опубликовано 18 декабря, 2017 Автор Поделиться Опубликовано 18 декабря, 2017 Если подключаю эмиттер транзистора к минусу светодиода, то все чётко работает, а через индикатор ничего. Индикатор исправен. Напряжение на коллекторе 1вольт 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Bugrim Опубликовано 18 декабря, 2017 Поделиться Опубликовано 18 декабря, 2017 Если ставлю в цепь коллектора светодиод (вместо индикатора), то он светит? И не моргает? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
zengard Опубликовано 18 декабря, 2017 Автор Поделиться Опубликовано 18 декабря, 2017 Да, светит, а почему должен моргать? Пауза не такая высокая, чтобы видеть частоту моргания, если я не ошибаюсь. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 18 декабря, 2017 Поделиться Опубликовано 18 декабря, 2017 потому-что переключается с частотой 2Гц 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 18 декабря, 2017 Поделиться Опубликовано 18 декабря, 2017 и прочитайте как оформляется код на асме http://pic24.ru/lib/exe/fetch.php/osa/articles/mpasm_formatting.pdf мозг можно сломать пока поймешь, че вы там быкодели 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
zengard Опубликовано 18 декабря, 2017 Автор Поделиться Опубликовано 18 декабря, 2017 Спасибо, почитаю. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 18 декабря, 2017 Поделиться Опубликовано 18 декабря, 2017 @zengard еще один тупой копипаст предыдущего поста и отправлю в баню , читаем правила форума 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
zengard Опубликовано 18 декабря, 2017 Автор Поделиться Опубликовано 18 декабря, 2017 То есть проблема в частоте переключения? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 18 декабря, 2017 Поделиться Опубликовано 18 декабря, 2017 нет , вы бы просто видели мигающие цифры на индикаторах. 19 часов назад, zengard сказал: подключаю выводы разрядов к плюсу напрямую все работает четко, разряды ? или все таки сегменты ЗЫ напишите простую прогу установки портаВ в лог1 и проверьте работоспособность порта. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
zengard Опубликовано 19 декабря, 2017 Автор Поделиться Опубликовано 19 декабря, 2017 Доброго времени суток 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 Вот этот код работает на ура, сегменты все горят через транзистор. Может ли быть где то прерывание в моей предыдущей программе? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 20 декабря, 2017 Поделиться Опубликовано 20 декабря, 2017 2 часа назад, zengard сказал: Может ли быть где то прерывание в моей предыдущей программе? в теории - нет, по дефолту прерывания запрещены. практически - да может. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
zengard Опубликовано 20 декабря, 2017 Автор Поделиться Опубликовано 20 декабря, 2017 Буду искать, а по опыту не у кого подобных проблем не было? Использую среду MPLAB X IDE 4.05 Компилятор их родной mpasmwin 5.76 Может компилятор неправильно переводит двоичный код? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 20 декабря, 2017 Поделиться Опубликовано 20 декабря, 2017 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 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Electric_84 Опубликовано 22 декабря, 2017 Поделиться Опубликовано 22 декабря, 2017 В 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, а где выход? Вы же в нем "зависаете"... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
zengard Опубликовано 22 декабря, 2017 Автор Поделиться Опубликовано 22 декабря, 2017 Попробую перестроить 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Electric_84 Опубликовано 22 декабря, 2017 Поделиться Опубликовано 22 декабря, 2017 14 часа назад, zengard сказал: Попробую перестроить симуляцией в MPLAB'е пользуетесь? Протеус это хорошо (не пользуюсь, если что), но все же в симуляторе MPLAB'а можно посмотреть состояние нужных регистров, что должно быть (по задумке), что получилось. Легче "выловить" ошибку в случае чего. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 22 декабря, 2017 Поделиться Опубликовано 22 декабря, 2017 типа в протезе это сделать нельзя... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Electric_84 Опубликовано 23 декабря, 2017 Поделиться Опубликовано 23 декабря, 2017 20 часов назад, IMXO сказал: типа в протезе это сделать нельзя... не знаю. Я же написал что Протеусом не пользуюсь. Я прогнал программу топикстартера в MPLAB'е, есть моменты которые вызывают вопросы и если бы человек использовал симулятор в пошаговом режиме, то таких бы косяков (или как это назвать) можно было бы избежать. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.