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

Проблема с PIC16F874A


zengard

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

Добрый день, уважаемые форумчане.

В программирование мк новичок, начал с азов, дошел до динамического 7 сегментного дисплея и встал. 

Проблема такова, что код вроде рабочий, в протеусе все нормально. Прошиваю через Pickit3 в Mplab IDE и ничего не работает. 

Блок питания импульсный 24 вольта, дальше через КР1158ЕН и КР142ЕН5А и пару конденсаторов получил напряжение 5.6 вольт, с помощью парочки диодов понизил напряжение до 4.8 (подумал на всякий случай уменьшить, а то по краю пропасти ходить не хочется(или нужно 5.5 вольт?)), КЗ нигде нету, поставил по 100 ом резисторы на входы питания на мк. 

7 сегментный индикатор DC56-11EWA с общим катодом, выходы сегментов подключил к портам B, выходы разрядом подключил к порту А, через биополярные транзисторы, 

схема проетуса в приложение.

Измерял ноги при напряжение, питания с них 0.292в (плюс-минус). 

К слову о 7 сегментом дисплее, у меня 18 ножек на нем, сегменты соединил друг с другом попарно, и общий вывод каждой пары на мк через резистор в 330ом.

Код программы

LIST        p=16f874a
            __CONFIG    H'3FF1'
PORTB       EQU         H'0006'
TRISB       EQU         H'0006'
PORTA       EQU         H'0005'
TRISA       EQU         H'0005'
STATUS      EQU         H'0003'
Reg_1       EQU         H'000C'
Reg_2       EQU         H'000D'
Reg_3       EQU         H'000E'
START       org 0
            bsf         STATUS,5
            CLRF        TRISB           ;segmenti
            CLRF        TRISA           ;1 razriad RA0 2, razriad RA1
            bcf         STATUS,5
            movlw       b'01111111'
            movwf       PORTB
            bsf         PORTA,0
            call        delay
            bcf         PORTA,0
            movlw       b'01111110'
            movwf       PORTB
            bsf         PORTA,1
            call        delay
            bcf         PORTA,1
            goto        START

; Задержка 1 000 000 машинных циклов
; Длительность задержки 1 секунд
; Частота задающего генератора 4 МГц
delay       movlw       .173
            movwf       Reg_1
            movlw       .19
            movwf       Reg_2
            movlw       .6
            movwf       Reg_3
            decfsz      Reg_1,F
            goto        $-1
            decfsz      Reg_2,F
            goto        $-3
            decfsz      Reg_3,F
            goto        $-5

            end

 

HEX файл

:020000040000FA
:1000000083168601850183127F30860005140F2038
:1000100005107E30860085140F2085100028AD3035
:100020008C0013308D0006308E008C0B15288D0B44
:0600300015288E0B1528B7
:04003600003400345E
:02400E00F13F80
:00000001FF


 

Уже неделю лазею по форумам и не могу найти ответ. Помогите пожалуйста, из интуиции подозреваю, что дело в зависание или переходе в спящий режим, но разобраться сам не могу((((

 

Безымянный.png

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Кренку, дающую 5.6 Вольта выкинуть и поставить нормальную, на 5 Вольт. Всякие гасящие диоды и резисторы тоже убрать. Базовые резисторы на ключах поставить 1 - 2 кОм. По питанию МК, после КРЕНки конденсатор на 10uF и керамику 100nF.

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

Изменено пользователем Dr. West

"Я не знаю какой там коэффициент, я просто паять умею. "

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

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

В протеусе работает, а жизни нет, это постоянная проблема начинающих, написание программ под симулятор, это не программа под реальное железо.  Симулятор это программа которую написал человек и наделал ошибок, симулятор не может на 100% реально поддержать устройство, симулятор хорош, что бы только заинтересовать. 

Начинать учиться программировать, как бы это странно не звучало, рекомендую с Си, хотя знание ассемблера дает неоспоримое преимущество, но для быстрого старта лучше Си, и проще, и львиную часть работы на себя берет компилятор, вам остается только суть задачи и результат сразу на лицо.

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

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

874 это сильно устаревший контроллер, у него нет LAT регистров, и если пытаетесь управлять выводами порта, то вам надо учитывать особенность операций чтения-модификация-запись. В реальной жизни когда вы при записи одного бита в порт, пишется все 8 бит одновременно, и когда состояние какого вывода меняется, то потенциал на нем возникает не мгновенно, а нарастает для микроконтроллера постепенно. Если не подождать пока он вырастет, то при установке единицы на выводе и при последующем чтении, состояния порта, у вас будет не единица, а ноль. А если  время выждать, и только тогда прочитать, тогда все будет ок.

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

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

Проблема такова, что код вроде рабочий, в протеусе все нормально

это врядли...

1. на картинко эмиттеры прибиты к +пит , почему?

2. видите названия выводов 13,14 ? на них в реале должен быть подключен кварцевый или керамический резонатор согласно даташита

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

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

@Catcatcat   при всем уважении, но с вами не согласен. свою первую программу писал на асме и отлаживал в протезе и в железе она запустилась без проблем. и сейчас все отлаживаю в протезе и в железе все работает. дебагером не пользовался ни разу (если честно даже не знаю как его включать :) ), необходимость отладки в железе была только один раз при изучении частоты работы RC осциллятора при изменении R.

 

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

Тоже пару раз напарывался на протезе. 

А такая простая, как у автора темы, на раз-два отлаживается прямо в МПЛАБе. Без свистоперделок, конечно, зато без лишних глюков и допущений.

"Я не знаю какой там коэффициент, я просто паять умею. "

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

Если в протеусе работает, а в железе нет, значит в схеме косяк или схемное решение нетипичное. Например мультивибратор сам не запустится пока его не "толкнешь". Для контроллеров необходимо настроить тактирование ну и т.д. Я бы не назвал это косяком симулятора, скорее это специфика работы программы. Лично у меня никогда не было проблем  с протеусом кроме, как собственные косяки, которые и в железе работали не стабильно.

Изменено пользователем Rhime

- А совесть в курсе? - А совесть в доле! :-D

Эксперт — это человек, который совершил все возможные ошибки в некотором узком поле.

Все грамматические ошибки являются авторским стилем изложения материала.

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

34 минуты назад, Dr. West сказал:

в протезе работает, в железе - нет.

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

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

второй пример в даташите черным по белому сказано про ЧМЗ и команды прямого воздействия на биты портов не рекомендованы к использованию , ан нет зачем что-то там читать , метод научного тыка не победим

и таких примеров вагон и маленькая телега .

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

13 часа назад, Alex сказал:

А это зачем ? :huh:

Прочитал на одном из форумов, якобы кому-то помогло....

7 часов назад, Bugrim сказал:

А какой номинал резисторов на индикатор поставил?

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

930оМ, если напрямую подать питание на индикаторы все четко работает.

 

И теперь даже простая программа не работает(

LIST        p=16f874a
            __CONFIG    H'3FF1'
STATUS      EQU         H'0003'
TRISB       EQU         H'0006'
PORTB       EQU         H'0006'
Reg_1       EQU         H'000C'
Reg_2       EQU         H'000D'
Reg_3       EQU         H'000E'
            org         0
            bsf         STATUS,5    ; переход в Банк 1
            clrf        TRISB
            bcf         STATUS,5

m1          movlw       b'11111111' ; запись в аккумулятор
            movwf       PORTB       ; перенос из аккумулятора в порт
            call        Pause       ; переход на метку (с возвратом)
            clrf        PORTB       ; "очистка" порта
            call        Pause       ; переход на метку (с возвратом)
            goto        m1          ; переход на метку (зацикливание)
 ;delay = 500000 machine cycles
Pause       movlw       .85
            movwf       Reg_1
            movlw       .138
            movwf       Reg_2
            movlw       .3
            movwf       Reg_3
wr          decfsz      Reg_1, F
            goto        wr
            decfsz      Reg_2, F
            goto        wr
            decfsz      Reg_3, F
            goto        wr

            return
            end

Может быть проблема в компиляторе? 

Взял другой камень, он тоже не работает(

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

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

13 часа назад, IMXO сказал:

это врядли...

1. на картинко эмиттеры прибиты к +пит , почему?

2. видите названия выводов 13,14 ? на них в реале должен быть подключен кварцевый или керамический резонатор согласно даташита

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

1. тип NPN, по другому давал питание на базу и они не срабатывали, хотя я тоже уверен что нужно на минус их.

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

Есть кварцевый резонатор на 12Мгц

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

1. эмиттер однозначно на массу (вы в протезе взяли цифровую  модель индикатора , чтобы работало в протезе нужно катоды притянуть к +пит через резисторы )

2. элементарно

нужно из вашего кода удалить

LIST        p=16f874a
            __CONFIG    H'3FF1'
PORTB       EQU         H'0006'
TRISB       EQU         H'0006'
PORTA       EQU         H'0005'
TRISA       EQU         H'0005'
STATUS      EQU         H'0003'

открыть пример/форму для вашего МК файл 16F874ATEMP.ASM

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

;                                                                     *
;    Filename:	    xxx.asm                                           *
;    Date:                                                            *
;    File Version:                                                    *
;                                                                     *
;    Author:                                                          *
;    Company:                                                         *
;                                                                     * 
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files Required: P16F874A.INC                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Notes:                                                           *
;                                                                     *
;**********************************************************************


	list		p=16f874A	; list directive to define processor
	#include	<p16f874A.inc>	; processor specific variable definitions
	
	__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _RC_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF

; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.






;***** VARIABLE DEFINITIONS
w_temp		EQU	0x20		; variable used for context saving
w_temp1		EQU	0xA0		; reserve bank1 equivalent of w_temp 
status_temp	EQU	0x21		; variable used for context saving
pclath_temp	EQU	0x22		; variable used for context saving





;**********************************************************************
	ORG     0x000             ; processor reset vector

	nop			  ; nop required for icd
  	goto    main              ; go to beginning of program


	ORG     0x004             ; interrupt vector location

	movwf   w_temp            ; save off current W register contents
	movf	STATUS,w          ; move status register into W register
	bcf     STATUS,RP0        ; ensure file register bank set to 0
	movwf	status_temp       ; save off contents of STATUS register
	movf	PCLATH,w	  ; move pclath register into w register
	movwf	pclath_temp	  ; save off contents of PCLATH register


; isr code can go here or be located as a call subroutine elsewhere

	bcf     STATUS,RP0        ; ensure file register bank set to 0
	movf	pclath_temp,w	  ; retrieve copy of PCLATH register
	movwf	PCLATH		  ; restore pre-isr PCLATH register contents
	movf    status_temp,w     ; retrieve copy of STATUS register
	movwf	STATUS            ; restore pre-isr STATUS register contents
	swapf   w_temp,f
	swapf   w_temp,w          ; restore pre-isr W register contents
	retfie                    ; return from interrupt



main

; remaining code goes here










	END                       ; directive 'end of program'

 

лежащий в папке мплаба \Program Files\Microchip\MPASM Suite\Template\Code\

и скопировать инициализацию и конфигурацию МК

	list		p=16f874A	; list directive to define processor
	#include	<p16f874A.inc>	; processor specific variable definitions
	
	__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF

; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.

 

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

Большое спасибо, но к сожалению не помогло. 

Поставил кварц на 12Мгц, подсоединил к ногам 13 и 14, после кварца 2 конденсатора по 0,1мкф

подтянул резистор 10Ком на ногу 1 и отключил питание от 32 и 31 ноги, нашел на одном форуме, но к сожалению результата ноль(((

не знаете что еще может быть?

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

Ладно хоть, не электролиты навесил. Может, стоит в даташит заглянуть, ?  (стр 116). А не собирать информацию где попало.
 

"Я не знаю какой там коэффициент, я просто паять умею. "

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

Ладно хоть, не электролиты навесил. Может, стоит в даташит заглянуть, ?  (стр 116). А не собирать информацию где попало.  

 

Смотрел в даташит, перевёл неправильно(

 

 

Отправлено с моего iPhone используя Tapatalk

Ладно хоть, не электролиты навесил. Может, стоит в даташит заглянуть, ?  (стр 116). А не собирать информацию где попало.  

 

А кварцевый генератор можно поставить вместо кварца? Я так понял это RC режим, но что лучше хотелось бы узнать. Генератор попроще в обвязке я так понял, но он больше подвержен воздействию паразитных ёмкостей

 

 

Отправлено с моего iPhone используя Tapatalk

 

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

Внешний генератор можно подключить, но зачем?
Эта функция имеет смысл, если в устройстве уже имеется источник подходящей тактовой частоты и так можно сэкономить на кварце.

И это не RC режим. Даташит же по ссылке на русском, там явно всё написано.

"Я не знаю какой там коэффициент, я просто паять умею. "

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

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

"Я не знаю какой там коэффициент, я просто паять умею. "

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

Экономия на кварце? Их как грязи и копейки стоит!

На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие

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

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

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

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

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

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

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

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

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

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

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

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