Форум

Радиолюбительский форум.

Если у Вас возникли вопросы, задавайте их на форуме.

В сети

Пользователей: 479
Из них просматривают:
Аналоги: 249. Даташиты: 161. Инструкции: 3. Новости: 16. Остальное: 4. Программы: 1. Профиль пользователя: 10. Советы: 1. Форум: 33. Чат: 1.
Участников: 3
Гостей: 476

an , Google , Яндекс , далее...
Рекорд 4345 человек онлайн установлен 21.09.2026.

Партнёры


Партнёры

Новые объявления

В настоящее время нет объявлений.

Просмотр этой темы: 

 1 анонимных пользователей
Семисегментный индикатор с микроконтроллером
Младший сотрудник
Зарегистрирован:
12.10.2012 14:38
Сообщений: 26
Не в сети
Собрал я одну несложную схемку. Сегменты индикатора типа CA04-41 подключил к линиям порта В, общие аноды к младшей тетраде порта D. Чтобы упростить кодировку символов написал программу, которую можно взять здесь.
В таблице устанавливается соответствие бит(линия порта)-сегмент, и активируются нужные сегменты. Код выдается прямой и инверсный(активный уровень высокий/низкий) в десятичном и шестнадцатеричном формате.



Re: Семисегментный индикатор с микроконтроллером
Технолог
Зарегистрирован:
12.01.2009 6:28
Из: Уфа
Сообщений: 128
Не в сети
кто может сказать в чем тут дело.
недавно только начал изучать ассемблер и решил потренироватся на семисегментных индикаторах.
вот схема
Открыть изображение в новом окне


LIST        P=PIC16F84A
 
 
include     P16f84a.inc

 __CONFIG    3FFE


PC          EQU         02h
STATUS      EQU         03h
PortB       EQU         06h
TrisB       EQU         06h
Reg_1       EQU         0Ch
Reg_2       EQU         0Dh
Reg_3       EQU         0Eh

            org         0           
; начало программы             
 
; подготовительные моменты
             bsf         STATUS
,5    ; переход в Банк 1 
             clrf        TrisB
             bcf         STATUS
,5    ; переход назад в Банк 0
; отрисовка фразы "УРА_" + звук
m1          clrf        PORTB       
; очистка порта

             movlw       .0
             call        TABLE       
; переход на метку TABLE
             movwf       PortB
             call        Pause

             movlw       .1
             call        TABLE       
; переход на метку TABLE
             movwf       PortB
             call        Pause

             movlw       .2
             call        TABLE       
; переход на метку TABLE
             movwf       PortB
             call        Pause

             movlw       .3
             call        TABLE       
; переход на метку TABLE
             movwf       PortB
             call        Pause

             movlw       .4
             call        TABLE       
; переход на метку TABLE
             movwf       PortB
             call        Pause

             movlw       .10
             call        TABLE       
; переход на метку TABLE
             movwf       PortB
             call        Pause
             movlw       .11
             call        TABLE       
; переход на метку TABLE
             movwf       PortB
             call        Pause
             movlw       .12
             call        TABLE       
; переход на метку TABLE
             movwf       PortB
             call        Pause
             movlw       .13
             call        TABLE       
; переход на метку TABLE
             movwf       PortB
             bsf         PortB
,7     ; звук
             call        Pause
             
goto        m1          ; переход на метку (зацикливание)
 ;====================================
TABLE       addwf      PC,F        ; Содержимое счетчика команд PC = PC + W
             retlw      
b'01101111' ; 0
             retlw      
b'00001100' ; 1
             retlw      
b'01011011' ; 2
             retlw      
b'01011110' ; 3
             retlw      
b'00111100' ; 4
             retlw      
b'01110110' ; 5
             retlw      
b'01110111' ; 6
             retlw      
b'01001100' ; 7
             retlw      
b'01111111' ; 8
             retlw      
b'01111110' ; 9
             retlw      
b'00111110' ; У
             retlw      
b'01111001' ; Р
             retlw      
b'01111101' ; А
             retlw      
b'00000010' ; _
             retlw      
b'00110101' ; h
              
;====================================
 ;
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                     ; конец программы

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


Отредактировано пользователем MACTEP 11.07.2013 20:54:02
Отредактировано пользователем MACTEP 11.07.2013 23:56:50


Re: Семисегментный индикатор с микроконтроллером
Технолог
Зарегистрирован:
12.01.2009 6:28
Из: Уфа
Сообщений: 128
Не в сети
Вот схема

Прикреплённый файл:



jpg  ind.jpg (33.84 KB)
206_51deda98d37a7.jpg 599X214 px



Re: Семисегментный индикатор с микроконтроллером
Администратор
Зарегистрирован:
07.08.2008 19:40
Из: Тирасполь
Сообщений: 7458
Не в сети
addwf PC,F - что за F?
может надо вначале прописать:
W equ 0 ; Результат направить в аккумулятор.
F equ 1 ; Результат направить в регистр.



Re: Семисегментный индикатор с микроконтроллером
Технолог
Зарегистрирован:
12.01.2009 6:28
Из: Уфа
Сообщений: 128
Не в сети
По статье, которую читал по которой обучался написано так:

В сегменте отрисовки копируем в аккумулятор W число (последовательно 10, 11, 12, 13). Затем отправляемся в сегмент таблицы. С помощью команды addwf PC,F мы складываем содержимое аккумулятора с регистром PC (в этом регистре у МК реализован аппаратный счетчик команд). В результате сложения счетчик увеличивается на величину, которая у нас содержится в аккумуляторе W и происходит переход на соответствующую команду в таблице. По команде retlw bхххххххх мы помещаем в аккумулятор указанное число (bхххххххх) и возвращаемся назад в сегмент отрисовки. Указанное число представляет собой комбинацию битов, которое затем записывается в порт и приводит к отображению осмысленного символа.


я алкоголик из Москвы



Re: Семисегментный индикатор с микроконтроллером
Технолог
Зарегистрирован:
12.01.2009 6:28
Из: Уфа
Сообщений: 128
Не в сети
По статье, где показаны примеры написания команд, то как все реализуются уже под схему в самом коде очень много ошибок было.
Ошибки я исправил и компиляция прошла, а то до этого были критичные и вообще не компилировало, может это такой прикоол конечно типо найди ошибку и исправь, незнаю.
Но скажем само написание программ не чем не отличается от книжек единственное, в примерах неправильно составленна программа. и под этот макет программа как обучающая тоже много ошибок из-за которых не компилировалось.

я алкоголик из Москвы



Re: Семисегментный индикатор с микроконтроллером
Технолог
Зарегистрирован:
12.01.2009 6:28
Из: Уфа
Сообщений: 128
Не в сети
я дописал что за F W и в самом начале программы
результат тот же доходит до 4 и начинает заново.
может как то по другому сделать вывод на индикатор цифр и текста, без addwf PC,F



Re: Семисегментный индикатор с микроконтроллером
Младший сотрудник
Зарегистрирован:
31.07.2011 13:51
Из: Тирасполь
Сообщений: 30
Не в сети
to MASTER:
include     P16f84a.inc

в часности , там описан и F, и STATUS

to komarik:
если бы писали не:
__CONFIG    3FFE
(кстати надо еще быть уверенным, что в опциях компилятора по умолчанию включена шеснадцатиричная система чисел), а например так:
__CONFIG  HS_OSC & WDT_ON & PWRTE_OFF & CP_OFF


то свою ошибку увидели бы сразу.



Re: Семисегментный индикатор с микроконтроллером
Технолог
Зарегистрирован:
12.01.2009 6:28
Из: Уфа
Сообщений: 128
Не в сети
сейчас попробуем



Re: Семисегментный индикатор с микроконтроллером
Технолог
Зарегистрирован:
12.01.2009 6:28
Из: Уфа
Сообщений: 128
Не в сети
он мне вот что выдает

Error[113] D:\RADIO\PROBA_ASS\PROJECT_3\MAK_ASS.ASM 6 : Symbol not previously defined (HS_OSC)
Error[113] D:\RADIO\PROBA_ASS\PROJECT_3\MAK_ASS.ASM 6 : Symbol not previously defined (WDT_ON)
Error[113] D:\RADIO\PROBA_ASS\PROJECT_3\MAK_ASS.ASM 6 : Symbol not previously defined (PWRTE_OFF)
Error[113] D:\RADIO\PROBA_ASS\PROJECT_3\MAK_ASS.ASM 6 : Symbol not previously defined (CP_OFF)
Halting build on first failure as requested.



Поиск по форуму


Расширенный поиск

Разное

Интересно

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