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

crazz

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

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

Помогите настроить мою программу мигания светодиодами,

668663m.jpg

; Прога управления 4 светодиодами, 2 кнопками
; PIC16F84 кварц 4мГц

;================================
		LIST	   p=16f84
		__CONFIG	 03FF1h
;================================
Status	  equ	   03h
TrisA	   equ	   85h
TrisB	   equ	   86h
PortB	   equ	   06h
PortA	   equ	   05h
PC		  equ	   02h

IntCon	  equ	   0Bh
EEData	  equ	   08h
EECon1	  equ	   88h
EEAdr	   equ	   09h
EECon2	  equ	   89h
OptionR	 equ	   81h
;===============================
;Общие регистры
SecL	   equ		0Ch
SecH	   equ		0Dh
Reg		equ		0Eh	 ;Для EEPROM
StatT	  equ		0Fh	 ;Для сохранения содержимого
WTemp	  equ		10h	 ; спец регистров

W		  equ		0	;Присвоение названий битам.
F		  equ		1
RP0		equ		5
GIE		equ		7	; Бит глобального разрешения
					; прерываний
	   org		2100h; Обращение к EEPROM
	   DE		 0, .166 ; Запись числа во 2ю ячейку
					; С НИМ ЧАСТОТА МИГАНИЯ БУДЕТ БОЛЬШЕ
;==============================
	  org		 0
	  goto		START
	  org		 4		; Вектор прерывания
;==============================
;Прерывания
	  movwf	   WTemp
	  movf		Status,W ; Скопировать содержимое регистров
	  movwf	   StatT	; во временные регистры

	  btfsc	   PortB,0; Проверка нуля на входе прер.
	  goto		EndInt; если нет, выходим из прерываний.
	  movlw	   02h; если есть, берем константу из памяти
	  movwf	   EEAdr	; сначала обращаемся к ячейке
	  bsf		 Status,RP0; Первый банк
	  bsf		 EECon1,0 ; Инициализировать чтение
	  bcf		 Status,RP0; Нулевой
	  movf		EEData,W ; Копирую число из ячейки
	  movwf	   SecL	 ; теперь оно в регистре
	  clrf		SecH	 ; очишаю регистр счетчика(он не нужен)
EndInt	bcf		 IntCon,1 ; Сброс флага прерывания по INT.
	  movf		StatT	;Стандартные операции
	  movwf	   Status	  
	  swapf	   WTemp,F	
	  swapf	   WTemp,W	
	  retfie			; Возврат по стеку

;================================
;Основная прога==================
;================================
	 bcf		  Status,RP0
PAUSE	movlw	   .75
	 movwf	   SecL
	 movlw	   .2
	 movwf	   SecH
wr	   decfsz	  SecL, F
	 goto		wr
	 decfsz	  SecH, F
	 goto		wr
	 return
START	bsf		  Status,RP0
	 clrf		 OptionR; 00000000 вкл подт Res
						; прер по 1/0 

	  bsf		 Status,RP0
	  movlw	   00000110
	  movwf	   TrisA	; ПортА работает на вход.
	  movlw	   00000001
	  movwf	   TrisB	; RB0 работоает на вход
	  bcf		 Status,RP0; остальные на выход
OPROS	movf		 PortA,W; Опрос клавы
	 addwf		PC,F	 ; Увеличение PC в зависимости от клавы
	 goto		 FUNC1	; Просто горят, надо запр.прерывания
	 goto		 FUNC2	; Горят влево, надо разрешить прер
	 goto		 FUNC3	; Горят в право, разрешить
	 goto		 FUNC4	; Не горят, запретить прерывания.

FUNC1	bcf		  IntCon,GIE; Запрет прерывания
	 movlw		00000000
	 movwf		PortB	; не горят, на все пох..
	 goto		 OPROS	; Не поменялось ли там чего?

FUNC2	movlw		10010000	
	 movwf		IntCon; разрешаю прерывания
	 clrf		 PortB	; Все потухли- мигать будем
	 bsf		  PortB,4; Один загорелся
	 Call		 PAUSE	; Надо подождать
	 bcf		  PortB,4; Потух
	 bsf		  PortB,3; Второи
	 Call		 PAUSE	; Надо подождат
	 bcf		  PortB,3
	 bsf		  PortB,2; Третий
	 Call		 PAUSE	; Надо подождат
	 bcf		  PortB,2
	 bsf		  PortB,1; Четвертый
	 call		 PAUSE
	 bcf		  PortB,1; Четвертый потух
	 goto		 OPROS
FUNC3	movlw		10010000 ; Разрешаю прерывания
	 movwf		IntCon
	 clrf		 PortB
	 bsf		  PortB,1; Один загорелся
	 Call		 PAUSE	; Надо подождать
	 bcf		  PortB,1; Потух
	 bsf		  PortB,2; Второи
	 Call		 PAUSE	; Надо подождат
	 bcf		  PortB,2
	 bsf		  PortB,3; Третий
	 Call		 PAUSE	; Надо подождат
	 bcf		  PortB,3
	 bsf		  PortB,4; Четвертый
	 call		 PAUSE
	 bcf		  PortB,4; Четвертый потух
	 goto		 OPROS
FUNC4	bcf		  IntCon,GIE; Запрет всех прерываний
	 movlw		00011110
	 movwf		PortB	;  горят- ждем.
	 goto		 OPROS
	 goto		 START
	 end

Задача стояла, объединить в однои проге прерывания, вычисляемый переход и запись и считывание EEPROM

Значить вот: PIC16f84 ко входам RA1 и RA2 подключены кнопки и на общий.

RB0 кнопка увеличивающая частоту на два RB1...RB4 собственно светодиоды на общий.

состояния кнопок : 00 горят, 01 горят по очереди (1 сек)и смещается влево, 10 горят по очереди и смещаются вправо, 11 не горят.

При нажатии на кнопку RB0 происходит чтение из памяти константы временной 500млсек.

она загружается в счетчик (пока не придумал, как обратно сделать, чтоб при повторном нажатии стало опять 1сек)

Не могу пока со стимулом разобраться, чтоб имитировать нажатие кнопок.

Ваши коментарии и поправки...жду.

Подкорректировал прогу, все равно тут еще не написали ничего, вопрос возник существенный

Выскакивает "массага"

84 : Argument out of range. Least significant bits used.

На это участок кода

START bsf Status,RP0

clrf OptionR ; 00000000 вкл подт Res

; прер по 1/0

bsf Status,RP0

movlw 00000110

movwf TrisA ; ПортА работает на вход.

movlw 00000001

movwf TrisB ; RB0 работоает на вход

bcf Status,RP0 ; остальные на выход

Я как перевел" Младшие биты используются" ЧЕМ???

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

Не цитируите полностью предыдущее сообщение!!!

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

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

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

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

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

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

Нашел кучу ошибок, сообщения пропали, но нашел одну глобальную ошибку

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

Не цитируите полностью предыдущее сообщение!!!

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

Hongfa для различных применений в Компэл. Большой выбор в наличии!

Компания HONGFA - это не только крупнейший в мире производитель электромеханических реле, но также производитель конденсаторов, вакуумных прерывателей, трансформаторов и низковольтного коммутационного оборудования. На складе КОМПЭЛ регулярно поддерживаются около 100 самых популярных позиций электромеханических реле. Реле Hongfa могут заместить многие изделия производства недоступных брендов. Подробнее>>

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

Тренды и лучшие решения для разработки зарядных станций в России

К 2029 году в России прогнозируется увеличение числа зарядных станций до 40 000. При этом отечественный рынок электротранспорта имеет климатические, потребительские и географические особенности. Для успешной разработки и построения инфраструктуры станций заряда в России идеальным вариантом является использование решений и электронных компонентов китайских производителей – лидеров индустрии электротранспорта и возобновляемой энергетики, которые уже представлены в КОМПЭЛ. Подробнее>>

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

Доделал наконец-то таки, были пропушены кое-какие команды и синтаксис хромал. но самое серьозное это проблема, как сделать два сценария, одинаковых по структуре, просто разных по временым характеристикам? Оптимального решения так и ненашел, пришлось просто скопировать часть основной проги в подпрогу прерывания.

Пока версия такая, в прикрепленном файле, можете попробовать.

svet.zip

Не цитируите полностью предыдущее сообщение!!!

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

Секреты депассивации литиевых батареек FANSO EVE Energy

Самыми лучшими параметрами по энергоемкости, сроку хранения, температурному диапазону и номинальному напряжению обладают батарейки литий-тионилхлоридной электрохимической системы. Но при длительном хранении происходит процесс пассивации. Разберем в чем плюсы и минусы, как можно ее избежать или уменьшить последствия и как проводить депассивацию батареек на примере продукции и рекомендаций компании FANSO EVE Energy. Подробнее>>

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

Некоторые замечания по схеме:

Вывода RA1,2,RB0 работают на вход. При разомкнутых кнопках они висят в воздухе, так оставлять нельзя.

Необходимо каждый вывод RA1,2,RB0 соединить с +5в через резистор 10К.

Тогда, при разомкнутой кнопке на выводе будет четкая -1, а при замкнутой -0.

Замени изображение светодиодов на функциональное(LED GREEN, например),

и когда запустиш схему(PLAY) светодиодики будут загораться очень наглядно.

По ветвлению: есть 2 сценария с разными задержками. По опросу кнопки RB0 нужно организовать

выбор нужного сценария. Для этого необходимо назначить регистр общего применения(FLAG, например),

и проверять у него , допустим, нулевой бит(можно любой командами Btfsc FLAG,0 или Btfss FLAG,0).

Начальная установка (clrf FLAG = 00000000)

Выбор сценария: проверяем нулевой бит FLAG, если -0(а он в начале -0), то переход на 1й сценарий,

если -1, то 2й сценарий. Вопрос, а откуда берется -1 в нулевом бите?

Ответ:

После того как вошли в 1й сценарий и сделали все необходимые дела устанавливаем нулевой бит в -1(BSF FLAG,0)

и выходим из этой подпрограммы. Все, после следующего нажатия кнопки RB0 выбран будет 2й сценарий,

и после его отработки, аналогично, устанавливаем нулевой бит в -0(BСF FLAG,0).

Т.е. получиться чередование 0-1-0-1..., так же будут чередоваться и ваши сценарии.

Схему пока не смотрел, но буду рад, если это поможет.

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

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

А програмку я опять преределал и схему тоже, теперь вход RA0 и RA1 подключены на кнопки ( выбор режима), RB0 так-же и остался умножает частоту на два, правда делает он это весьма заковыристым способом. При нажатии на RB0 вызывается команда прерывания, в которой считывается число из памяти и записывается в регистр SecL, теперь когда там это число в результате декремента этого регистра, задержка времени горения диода будет равна 500млсек(4мГц-кварц), против обычного горения 1сек.(кнопка не нажата).

А резисторы подключил ко входам на 4,3кОм.

Не цитируите полностью предыдущее сообщение!!!

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

На будущее "Argument out of range" - это попытка присвоить переменной значение выходящее за диапазон возможных значений которая она может принимать, например для байта это диапазон 0-255. "Least significant bits used" - использованы только значащие биты, т.е. те биты которые вышли за пределы размера переменной просто отсечены.

Учение - изучение правил. Опыт - изучение исключений.

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

Спасибо, нагуглил эти вопросы, вот только не понял как вставить двоичное число? например - b`0000000`именно на эти записи у меня ругался mplab

Не цитируите полностью предыдущее сообщение!!!

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

вот только не понял как вставить двоичное число? например - b`0000000`именно на эти записи у меня ругался mplab

mplab ругался на запись вида: "movlw 00000110"

так ругаться совсем не будет : "movlw b'01011011'", но так писать оправдано

при использовании вычисляемого перехода:

Tab addwf PCL,f ;индикация десятичных цифр.

retlw b'01101111' ;9

retlw b'01111111' ;8

........................................................

........................................................

Поэтому лучше использовать десятичные или 16ричные цифры,

а в комментариях можно и бинарными, особенно когда задаеш направление

работы портов:

movlw .128 ;Загружаем (10000000) в w.

movwf TrisB ;RB7 вход, остальные-выход. что мы и наблюдаем в твоей последней программе.

А вообще - "верной дорогой идете товарищ..."

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

это повидимому все 10 сек что-то проверять и проверять, только непонятно что потом делать то?

Учение - изучение правил. Опыт - изучение исключений.

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

Да делать чтото потом не проблема. Смотря что проверять и как. Если ловить импульс, то нужно знать какая его минимальная длительность, чтобы знать дискретность (переодичность) опроса. Это к примеру :)

Возможно ему нужно знать есть ли 10-ти секундный сигнал на ноге.

Вобщем будем ждать автора.

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

Датчик движения зафиксировал обьект (+5 на входе) и мне нужно в течение 10 сек опросить кнопку Сброса/Постановки на наличие кратковременного "0".

Если сбросить то тревоги не будет.

Не цитируите полностью предыдущее сообщение!!!

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

Ну так это совсем просто - в цикле (по 100мс за итерацию) проверяешь нажатие той самой кнопки - если нажата - выходишь из цикла. В конце цикла(когда отсчитает 100 итераций) выполняется переход на код включающий тревогу. Т.о. если кнопка будет нажата тревога вызвана не будет.

Учение - изучение правил. Опыт - изучение исключений.

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

Уууу... CHARADEY, это неверный подход. Яркость твоей матрицы будет в 48 раз меньше номинала... и светодиоды такой пиковый ток не выдержат. А его прийдется поднять чтобы яркость была хоть какой-то...

Такие вещи делают по-другому: последовательный/паралельный регистр на 48 выходов и 8 строк, которые и сканируются.

В качестве регистра - микросхемы HEF4094+драйвер ULN2803(коммутация по +пит.) они по 8 бит - берется нужное количество. а вот на столбцы 8 полевиков вроде IRLML2502 - они недорогие и мелкие.

Учение - изучение правил. Опыт - изучение исключений.

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

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

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

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

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

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

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

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

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

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

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

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