Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическая индикация поl управлением PICa, Опять не работает. 
:(
    Опции темы
rcdimon
Дата 6.1.2005, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: нет
Всего: 2



В общем что то у нас все же заработало. Но не совсем. Сделали такую прогу:

Нажатия кнопки инкрементируют переменную, которая потом дешифруется в 7-и сегментный код и отсылается на индикатор. Используется только 1 индикатор из 9 в модуле. Модуль от китайского телефона с АОН smile

Все работает. Он все считает и все как надо! Но как только делаем что бы был не 1 индикатор 0-9 а 2 или более 0-99 или еще больше, то все начинает работать очень загадочным образом!

А именно. Индикаторы показывают правильные числа, нои светятся так слабо, что их еле видно в темноте. Но не всегда! Если индикатор показывает число 1, то именно эта цифра ВСЕГДА яркая! Как пологается. На всех, ктоме первого индикатора так же яркие еще 4 и 7. А все остальные цифры еле видны! Не понятно. Пробовали заменить индикатор, все равно то же самое.

Вот как мы делаем. На землю, нужного нам индикатора мы подаем лог. 0 (он должен быль замкнут на землю всей схемы) а на все неактивные в данный момент индикаторы мы подаем лог. 1 и они не светятся. Посмотрели осцилом. Оказывается на тусклых индикаторах земля выше, чем на ярких. То есть она где то на уровне 2-3 вольта! А на цифрах 1,4,7 они нормальные.

Попробывали сделать наоборот, активным сигналом земли сделать лог 1 и подавать ее на базу транзистора, который уже коннектит индикатор на землю. Типа мы думали может там тока не хватает или еще что нить. Так с транзисторами так- первый индикатор работает полностью, а остальные нет! Проверели поступающие сигналы ниче интересного. Короче - неизвестно.

Привожу исходник нашей проги, может кто нить поймет в чем дело.




Код


;2.01.05
;ЧАСТОТОМЕР
;PIC16F74-20I/P
;5МГц\\\800нс
;
;a  portb, 0
;b  portb, 1
;c  portb, 2
;d  portb, 3
;e  portb, 4
;f  portb, 5
;g  portb, 6
;h  portb, 7
;  
;
;GND_9  portc, 4
;GND_8  portd, 3
;GND_7  portd, 4
;GND_6  portd, 5
;GND_5  portd, 6
;GND_4  portd, 7
;GND_3  portc, 5
;GND_2  portc, 6
;GND_1  portc, 7
;
;КОНТАКТЫ:
;
;Пост.инд. porta, 0
;Частота porta, 1
;Период  porta, 2
;Инвертирование porta, 3
;Счет имп. porta, 4
;Длина имп. porta, 5
;
;СВЕТОДИОДЫ:
;
;Пост.инд. portc, 0
;Частота portc, 1
;Период  portc, 2
;Инвертирование portc, 3
;Счет имп. portd, 0
;Длина имп. portd, 1
;
;ВХОД СИГНАЛА porte, 0
;
;
;
;
;

w                EQU     H'0000'

;----- Register Files------------------------------------------------------

indf                         EQU     H'0000'
tmr0                         EQU     H'0001'
status                       EQU     H'0003'
porta                        EQU     H'0005'
portb                        EQU     H'0006'
portc                        EQU     H'0007'
portd                        EQU     H'0008'
porte                        EQU     H'0009'
intcon                       EQU     H'000B'
tmr1l                        EQU     H'000E'
tmr1h                        EQU     H'000F'
t1con                        EQU     H'0010'
tmr2                         EQU     H'0011'
t2con                        EQU     H'0012'

PCL        equ     H'0002'
option_reg                   EQU     H'0081'
trisa                        EQU     H'0085'
trisb                        EQU     H'0086'
trisc                        EQU     H'0087'
trisd                        EQU     H'0088'
trise                        EQU     H'0089'
pcon                         EQU     H'008E'
adcon1                       EQU     H'009F'


;----- STATUS Bits --------------------------------------------------------

IRP                          EQU     H'0007'
RP1                          EQU     H'0006'
RP0                          EQU     H'0005'
NOT_TO                       EQU     H'0004'
NOT_PD                       EQU     H'0003'
Z                            EQU     H'0002'
DC                           EQU     H'0001'
C                            EQU     H'0000'

;----- INTCON Bits --------------------------------------------------------

GIE                          EQU     H'0007'
PEIE                         EQU     H'0006'
T0IE                         EQU     H'0005'
INTE                         EQU     H'0004'
RBIE                         EQU     H'0003'
T0IF                         EQU     H'0002'
INTF                         EQU     H'0001'
RBIF                         EQU     H'0000'


;----- T1CON Bits ---------------------------------------------------------

T1CKPS1                      EQU     H'0005'
T1CKPS0                      EQU     H'0004'
T1OSCEN                      EQU     H'0003'
NOT_T1SYNC                   EQU     H'0002'
T1INSYNC                     EQU     H'0002'   ; Backward compatibility only
TMR1CS                       EQU     H'0001'
TMR1ON                       EQU     H'0000'

;----- T2CON Bits ---------------------------------------------------------

TOUTPS3                      EQU     H'0006'
TOUTPS2                      EQU     H'0005'
TOUTPS1                      EQU     H'0004'
TOUTPS0                      EQU     H'0003'
TMR2ON                       EQU     H'0002'
T2CKPS1                      EQU     H'0001'
T2CKPS0                      EQU     H'0000'

;----- OPTION Bits --------------------------------------------------------

NOT_RBPU                     EQU     H'0007'
INTEDG                       EQU     H'0006'
T0CS                         EQU     H'0005'
T0SE                         EQU     H'0004'
PSA                          EQU     H'0003'
PS2                          EQU     H'0002'
PS1                          EQU     H'0001'
PS0                          EQU     H'0000'

;----- TRISE Bits ---------------------------------------------------------

IBF                          EQU     H'0007'
OBF                          EQU     H'0006'
IBOV                         EQU     H'0005'
PSPMODE                      EQU     H'0004'
TRISE2                       EQU     H'0002'
TRISE1                       EQU     H'0001'
TRISE0                       EQU     H'0000'

;----- TRISE Bits ---------------------------------------------------------


;описание переменных

cblock 0x20
com_gnd   ;коммутирование земель
ind_1   ;код семисегментного индикатора в двоичном виде
ind_2
ind_3
ind_4
ind_5
ind_6
ind_7
ind_8
ind_9
system_   ;всякая служебная инфа
count
d   ;переменная счета импульсов
endc

ORG 0x00
goto Init

;-------------------------------Инициализация------------------------------------------------

Init

bcf status, RP0
clrf intcon
clrf tmr0
BANKSEL porta
clrf porta
clrf portb
clrf portc
clrf portd
clrf porte
bsf  status, RP0 ;установка RP0 - выбор 1 страницы

bsf option_reg, PSA
bsf option_reg, T0CS;внешняя синхронизация
bsf option_reg, T0SE;срабатывание по заднему фронту
BANKSEL trisc
bcf trisc, 0
bcf trisc, 1
bcf trisc, 2
bcf trisc, 3
bcf trisc, 4
bcf trisc, 5
bcf trisc, 6
bcf trisc, 7

bsf trisa, 0
bsf trisa, 1
bsf trisa, 2
bsf trisa, 3
bsf trisa, 4
bsf trisa, 5

bcf trisb, 0
bcf trisb, 1
bcf trisb, 2
bcf trisb, 3
bcf trisb, 4
bcf trisb, 5
bcf trisb, 6
bcf trisb, 7

bcf trisd, 0  
bcf trisd, 1
bcf trisd, 2
bcf trisd, 3
bcf trisd, 4
bcf trisd, 5
bcf trisd, 6
bcf trisd, 7

bsf trise, 0
 
bsf adcon1, 2 ;ставим все ноги как цифровые
bsf adcon1, 1

bcf  status, 5h ;сброс RP0 - выбор 0 страницы

bcf portc, 4
bcf portd, 3
bcf portd, 4
bcf portd, 5
bcf portd, 6
bcf portd, 7
bcf portc, 5
bcf portc, 6
bcf portc, 7

movlw .255
movwf d

incfsz count, 1
call Init
goto Begin

return

;-----------------------------//Инициализация//----------------------------------------------


Tbl; Таблица преобразования двоичного в код индикатора
addwf PCL, 1
dt 03F, 006, 05B, 04F, 066, 06D, 07D, 007, 07F, 06F


;--------------------------------------------------------------------------------------------

;--------------------Задержка----------------
delay
decfsz d, 1
goto delay
return
;--------------------Задержка----------------


draw

movf tmr0, 0
call Tbl
movwf portb

bcf portc, 7
bsf portd, 2
bsf portd, 3
bsf portd, 4
bsf portd, 5
bsf portd, 6
bsf portd, 7
bsf portc, 5
bsf portc, 6
call delay
call delay
call delay
bsf portc, 7


movf ind_2, 0
call Tbl
movwf portb

bcf portc, 6
bsf portd, 2
bsf portd, 3
bsf portd, 4
bsf portd, 5
bsf portd, 6
bsf portd, 7
bsf portc, 5
bsf portc, 7
call delay
call delay
call delay
bsf portc, 6


movf ind_3, 0
call Tbl
movwf portb

bcf portc, 5
bsf portd, 2
bsf portd, 3
bsf portd, 4
bsf portd, 5
bsf portd, 6
bsf portd, 7
bsf portc, 6
bsf portc, 7
call delay
call delay
call delay
bsf portc, 5


movf ind_4, 0
call Tbl
movwf portb

bcf portd, 7
bsf portd, 2
bsf portd, 3
bsf portd, 4
bsf portd, 5
bsf portd, 6
bsf portc, 5
bsf portc, 6
bsf portc, 7
call delay
call delay
call delay
bsf portd, 7


movf ind_5, 0
call Tbl
movwf portb

bcf portd, 6
bsf portd, 2
bsf portd, 3
bsf portd, 4
bsf portd, 5
bsf portd, 7
bsf portc, 5
bsf portc, 6
bsf portc, 7
call delay
call delay
call delay
bsf portd, 6


movf ind_6, 0
call Tbl
movwf portb

bcf portd, 5
bsf portd, 2
bsf portd, 3
bsf portd, 4
bsf portd, 6
bsf portd, 7
bsf portc, 5
bsf portc, 6
bsf portc, 7
call delay
call delay
call delay
bsf portd, 5


movf ind_7, 0
call Tbl
movwf portb

bcf portd, 4
bsf portd, 2
bsf portd, 3
bsf portd, 5
bsf portd, 6
bsf portd, 7
bsf portc, 5
bsf portc, 6
bsf portc, 7
call delay
call delay
call delay
bsf portd, 4

movf ind_8, 0
call Tbl
movwf portb

bcf portd, 3
bsf portd, 2
bsf portd, 4
bsf portd, 5
bsf portd, 6
bsf portd, 7
bsf portc, 5
bsf portc, 6
bsf portc, 7
call delay
call delay
call delay
bsf portd, 3


movf ind_9, 0
call Tbl
movwf portb

bcf portd, 2
bsf portd, 3
bsf portd, 4
bsf portd, 5
bsf portd, 6
bsf portd, 7
bsf portc, 5
bsf portc, 6
bsf portc, 7
call delay
call delay
call delay
bsf portd, 2


return

;--------------------------------------------------------------------------------------------


Begin


movf tmr0, 0
sublw .9
btfss status, C ;если счет дошел до 10, то обнуляем 1 и инкрементируем 2.
clrf tmr0
btfss status, C
incf ind_2

movf ind_2, 0
sublw .9
btfss status, C ;если счет дошел до 10, то обнуляем 2 и инкрементируем 3.
clrf ind_2
btfss status, C
incf ind_3

movf ind_3, 0
sublw .9
btfss status, C ;если счет дошел до 10, то обнуляем 3 и инкрементируем 4.
clrf ind_3
btfss status, C
incf ind_4

movf ind_4, 0
sublw .9
btfss status, C ;если счет дошел до 10, то обнуляем 4 и инкрементируем 5.
clrf ind_4
btfss status, C
incf ind_5

movf ind_5, 0
sublw .9
btfss status, C ;если счет дошел до 10, то обнуляем 5 и инкрементируем 6.
clrf ind_5
btfss status, C
incf ind_6

movf ind_6, 0
sublw .9
btfss status, C ;если счет дошел до 10, то обнуляем 6 и инкрементируем 7.
clrf ind_6
btfss status, C
incf ind_7

movf ind_7, 0
sublw .9
btfss status, C ;если счет дошел до 10, то обнуляем 7 и инкрементируем 8.
clrf ind_7
btfss status, C
incf ind_8

movf ind_8, 0
sublw .9
btfss status, C ;если счет дошел до 10, то обнуляем 8 и инкрементируем 9.
clrf ind_8
btfss status, C
incf ind_9

movf ind_9, 0
sublw .9
btfss status, C ;если счет дошел до 10, то обнуляем 9.
clrf ind_9

call draw


goto Begin

END

PM MAIL ICQ   Вверх
Guest
Дата 6.1.2005, 12:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ну есть такая идея - выкинь процессор из макета, поставь дешифратор семисегментного индикатора на жесткой логике, перед ним регистр, данные в регистре меняй кнопками и разберись с землей.
Еще Ленин поднимал в России когда-то аграрный вопрос.
  Вверх
rcdimon
Дата 6.1.2005, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: нет
Всего: 2



Дело в том, что наша задача как раз как можно меньше внешних компанентов. Так что не хотелось бы. Тем более, что какой дешифратор ты посоветуешь? по моему среди нормальных серий их штуки 2 или 3. И то все кривые. Америкосские брать я не буду. А этих 2 или 3 у нас в продаже нет, уже проверял. Можно конечно на ПЗУ сделать, но проще наручными часами гвоздь забить.
PM MAIL ICQ   Вверх
Guest
Дата 6.1.2005, 16:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я имел ввиду, что дешифратор нужен только на этапе отладки. Когда все сегменты будут светиться одинаково, тогда подключай индикатор к процессору. Как-то у тебя там с землей и питанием странно. Схем включения индикатора много - можно использовать буферные транзисторы между процессором и индикатором, если тока нехватает.
  Вверх
rcdimon
Дата 7.1.2005, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: нет
Всего: 2



я же говорю, что я подсоелинял эти транзисторы. КТ815 хватит? Помойму с головой. И у меня первый индикатор стал работать на все 100% а остальные так же, хотя трансы были подсоеденены ко всем.
PM MAIL ICQ   Вверх
PILOT
Дата 7.1.2005, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: 20
Всего: 54



Очевидно что ты используешь все 9 разрядов одновременно.
А тебе нужен всего один.
Если зажигать их по очереди, то все будет ок, если только не переключать их с частотой близкой к максимальной частоте работы транзистора, или с неправильной скважностью (т.е. негорит больше чем горит).

СУВ.


--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0796 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.