Форум

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

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

В сети

Пользователей: 54
Из них просматривают:
Аналоги: 16. Видео: 1. Даташиты: 8. Кроссворд: 1. Новости: 9. Остальное: 4. Программы: 1. Профиль пользователя: 3. Теги: 1. Форум: 10.
Участников: 2
Гостей: 52

Google , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

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

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

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

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



Re: Семисегментный индикатор с микроконтроллером
Технолог
Зарегистрирован:
12.01.2009 7: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 21:54:02
Отредактировано пользователем MACTEP 12.07.2013 0:56:50


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

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



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



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



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

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


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



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

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



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



Re: Семисегментный индикатор с микроконтроллером
Младший сотрудник
Зарегистрирован:
31.07.2011 14: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 7:28
Из: Уфа
Сообщений: 128
Не в сети
сейчас попробуем



Re: Семисегментный индикатор с микроконтроллером
Технолог
Зарегистрирован:
12.01.2009 7: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.



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


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

Разное

Интересно

Крупную деталь можно паять и обычным паяльником (25-40 Вт), если разогреть ее, например, на газовой плите.