Форум

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

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

В сети

Пользователей: 102
Из них просматривают:
Аналоги: 31. Даташиты: 25. Инструкции: 5. Новости: 15. Остальное: 6. Программы: 1. Профиль пользователя: 4. Форум: 14. Чат: 1.
Участников: 3
Гостей: 99

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

Партнёры


Партнёры

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

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

 1 анонимных пользователей
Re: Семисегментный индикатор с микроконтроллером
Младший сотрудник
Зарегистрирован:
31.07.2011 13:51
Из: Тирасполь
Сообщений: 30
Не в сети
Цитата:

komarik пишет:

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

WDT тактируется от отдельного встроенного RC-генератора (т.е. работающего даже если нет тактирования основного модуля). Для увеличения длительности отсчета между счетчиком и генератором можно включить делитель. Единственное программное средство воздействия на WDT это команда CLRWDT очищающая регистр счетчика. Бит конфигурации включающий/выключающий WDT доступен только на этапе программирования. Состояние регистра OPTION_REG после сброса соответсвует назначению делителя на WDT и на максимальное деление.
Возможно не в такой последовательности, но об этом написано в описании на микроконтроллер.
В результате имея включенный в конфигурации WDT, назначенный на WDT и на максимум делитель и НЕ используя CLRWDT получем полный сброс микроконтроллера через примерно ~2.3 сек после предыдущего сброса. Я пытался добиться, что бы прочитали и пришли к такому выводу самостоятельно.



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

LIST        P=PIC16F84A
 
 
#include    <P16F84A.INC>

 
__CONFIG  _HS_OSC _WDT_ON _PWRTE_OFF _CP_OFF


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

            
org         0           начало программы             
 
подготовительные моменты
             bsf         STATUS
,5    переход в Банк 1 
             clrf        TrisB
             bcf         STATUS
,5    переход назад в Банк 0
отрисовка фразы "УРА_" звук
m1           clrf        PortB       
очистка порта
            
             CLRWDT
             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
             CLRWDT 
             call        Pause
             
             movlw       .4
             call        TABLE       
переход на метку TABLE
             movwf       PortB
             call        Pause

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

             movlw       .6
             call        TABLE       
переход на метку TABLE
             movwf       PortB
             CLRWDT             
             call        Pause
            
             movlw       .7
             call        TABLE       
переход на метку TABLE
             movwf       PortB
             call        Pause

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

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

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

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

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

             movlw       .13
             call        TABLE       
переход на метку TABLE
             movwf       PortB
             CLRWDT
             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                     конец программы


вот код.


Отредактировано пользователем MACTEP 26.07.2013 7:22:00


Re: Семисегментный индикатор с микроконтроллером
Администратор
Зарегистрирован:
07.08.2008 19:40
Из: Тирасполь
Сообщений: 7044
Не в сети
В отсчете времени (Pause) применяй CLRWDT!)))



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

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



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


А вот описание и принцип работы

Сейчас мы составим несколько элементарных программ для МК:
– передача от МК в сторону ПК набора символов;
– прием на стороне МК от ПК символов;
– двухсторонний обмен: ПК<=>МК.

Программа непрерывной передачи в сторону ПК фразы "Ура! ".
Периодичность посылки 1 сек.

LIST P=PIC16F84A
__CONFIG H3FF1

W EQU 0
F EQU 1
STATUS EQU H0003
PORTA EQU H0005
PORTB EQU H0006
TRISA EQU H0005
TRISB EQU H0006
C EQU 0
Reg_1 EQU H000C ; для счетчика паузы 100 мкс
Reg_2 EQU H000D ; для счетчика битов в байте
Reg_3 EQU H000E ; для передаваемого символа
Reg_4 EQU H000F
Reg_5 EQU H0010
Reg_6 EQU H0011


org 0 ; начало программы
; подготовительные моменты
Start bsf STATUS,5 ; переход в Банк 1
movlw b00011101 ; RA0 на выход, остальные на вход
movwf TRISA
clrf TRISB
bcf STATUS,5 ; переход назад в Банк 0
bsf PORTA,0 ; установка 1 - "режим ожидания"
clrf PORTB ; очистка порта
; вставка символа "У" для передачи
m3 movlw "У" ; копируем букву У (рус) как символ, который
movwf Reg_3 ; пропишется в кодировке ANSI в Reg_4 (hС4)
call Tx
; о кодировке ANSI мы поговорим чуть позже
movlw "р"
movwf Reg_3
call Tx
movlw "а"
movwf Reg_3
call Tx
movlw "!"
movwf Reg_3
call Tx
movlw " "
movwf Reg_3
call Tx ; т.о. отправлено "Ура! ",
call Pause2
goto m3 ; 5 символов, в т.ч. пробел
; сегмент передачи от МК в сторону ПК (9600, 8-N-1, 104 мкс)
Tx movlw .9 ; 8+1, т.е + бит C из STATUS
movwf Reg_2
bcf STATUS,C ; подготовка стартового бита
m1 btfsc STATUS,C
goto bit1
goto bit0
bit1 bsf PORTA,1 ; передача единицы
call Pause
goto m2
bit0 bcf PORTA,1 ; передача нуля
call Pause
goto m2
m2 rrf Reg_3,F ; сдвиг вправо для передачи с младшего бита
decfsz Reg_2,F
goto m1
bsf PORTA,1 ; установка 1 - "режим ожидания"
call Pause
return
;delay = 95 machine cycles
Pause movlw .31
movwf Reg_1
wr decfsz Reg_1, F
goto wr
nop
return

;delay = 1000000 machine cycles
Pause2 movlw .173
movwf Reg_4
movlw .19
movwf Reg_5
movlw .6
movwf Reg_6
wr2 decfsz Reg_4, F
goto wr2
decfsz Reg_5, F
goto wr2
decfsz Reg_6, F
goto wr2
return

end ; конец программы

В случае передачи более длинных фраз (или набора слов), программу можно упростить, создав таблицу в которой символы из фразы будут следовать друг за другом, а обращение к таблице будет организовано из счетчика.

Start
; организация счетчика передаваемых символов
movlw .6 ; всего 5 символов +1
movwf Reg_4 ; 6 => Reg_4
; организация передачи из таблицы
m4 movf Reg_4,W ; Reg_4 => W
call TABLE ; уход в таблицу
movwf Reg_3 ; символ из таблицы W => Reg_3
call Tx ; уход в передачу
decfsz Reg_4,F ; уменьшаем (Reg_4)-1
goto m4 ; зацикливание
goto Start
TABLE addwf PC,F ; Содержимое счетчика команд PC = PC + W
nop ; для корректировки
retlw " "
retlw "!"
retlw "А"
retlw "Р"
retlw "У"

Размер таблицы накладывает некоторые ограничения, которые ранее мы не рассматривали для облегчения восприятия принципа работы. Выход на командные строчки таблицы производится путем принудительного увеличения счетчика команд PC. Этот счетчик команд организован с помощью обычного регистра, который может принять максимальное значение в 255. А теперь представим ситуацию, что перед таблицей находится некоторое количество других командных строк, например 32. Исходя из этого, таблица может содержать не более (255 – 32) = 223 строк, иначе будет переполнение регистра PC, что приведет к неправильному ходу выполнения программы. Это и есть ограничение размера таблицы для вышеуказанного примера.

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

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



gif  52.gif (9.32 KB)
206_524c4722df512.gif 445X382 px



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



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

#include <P16F84A.INC>

__CONFIG _HS_OSC & _WDT_ON & _PWRTE_OFF & _CP_OFF


W EQU 0
F EQU 1
STATUS EQU 03h
PortA EQU 05h
TrisA EQU 05h
PortB EQU 06h
TrisB EQU 06h
C EQU 0h
Reg_1 EQU 0Ch ; для счетчика паузы 100 мкс
Reg_2 EQU 0Dh ; для счетчика битов в байте
Reg_3 EQU 0Eh ; для передаваемого символа
Reg_4 EQU 0Fh
Reg_5 EQU 10h
Reg_6 EQU 11h


org 0 ; начало программы
; подготовительные моменты
Start bsf STATUS,5 ; переход в Банк 1
movlw b'00011101' ; RA0 на выход, остальные на вход
movwf TrisA
clrf TrisB
bcf STATUS,5 ; переход назад в Банк 0
bsf PortA,0 ; установка 1 - "режим ожидания"
clrf PortB ; очистка порта
; вставка символа "У" для передачи
m3 movlw "У" ; копируем букву У (рус) как символ, который
movwf Reg_3 ; пропишется в кодировке ANSI в Reg_4 (hС4)
call Tx
; о кодировке ANSI мы поговорим чуть позже
movlw "р"
movwf Reg_3
call Tx
movlw "а"
movwf Reg_3
call Tx
movlw "!"
movwf Reg_3
call Tx
movlw " "
movwf Reg_3
call Tx ; т.о. отправлено "Ура! ",
call Pause2
goto m3 ; 5 символов, в т.ч. пробел
; сегмент передачи от МК в сторону ПК (9600, 8-N-1, 104 мкс)
Tx movlw .9 ; 8+1, т.е + бит C из STATUS
movwf Reg_2
bcf STATUS,C ; подготовка стартового бита
m1 btfsc STATUS,C
goto bit1
goto bit0
bit1 bsf PortA,1 ; передача единицы
call Pause
goto m2
bit0 bcf PortA,1 ; передача нуля
call Pause
goto m2
m2 rrf Reg_3,F ; сдвиг вправо для передачи с младшего бита
decfsz Reg_2,F
goto m1
bsf PORTA,1 ; установка 1 - "режим ожидания"
call Pause
return
;delay = 95 machine cycles
Pause movlw .31
movwf Reg_1
wr decfsz Reg_1, F
goto wr
nop
return

;delay = 1000000 machine cycles
Pause2 movlw .173
movwf Reg_4
movlw .19
movwf Reg_5
movlw .6
movwf Reg_6
wr2 decfsz Reg_4, F
goto wr2
decfsz Reg_5, F
goto wr2
decfsz Reg_6, F
goto wr2
return

end; ; конец программы


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



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

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



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


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

Разное

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

Интересно

Во время ремонта телевизора не ставьте настольную лампу на его корпус.
Она обязательно упадёт и отобьёт горловину кинескопа.