-
Постов
235 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Блоги
Сообщения, опубликованные Bugrim
-
-
Добрый день.
Подскажите кто знает, как можно создать таблицу данных, ну напритмер несколько (примерно 30) констант, расположенных в памяти программ последовательно и потом при необходимости их считывать. Константу считывать хотелось бы зня ее адрес.
Заранее всем благодарен.
0 -
В первоначальном варианте использовал прерывание таймера 1, которое при запоздплом прерывании (обработке другого прерывания) могло привести к потере времени, пока перейдем на обработку считаем текущую информацию с регистров таймера, сложим с нужным числом и запишем обратно. Это давало погрешность. От вложеных прерываний отказался - другой подход - таймер 1 оставить как считает, а модуль ССР настроить на сравнение с обнулением таймера 1. В моделировании работает как надо, с небольшой погрешностью. Однако в реале - то ли кварц, от которого работает тиймер 1 имеет погрешность, которая довольно быстро набигает, толи что то есче принудили сделать коррекцию, которая уменьшает/увеличивает значение регистра ССР. Для этого изменения, времени предостаточно и нет необходимости точно выполнять прерывание, ведь средний период этих прерываний будет нужным. Так вот при обработке прерывания от ССР, каждую 32 секунду, так захотел, происходит коррекция егистр ССР уменьшается на 1 - на индакатое - цифра 32, пауза примерна в 2 секуны, потом цифра 34. Интересная штука, на моделировании не видно, или не вижу, прийдеться помучатся исходник на работе, с понедельника посмотрю, может что то прояснится.
0 -
Происходит весма странная чтука.
Порядок работы программы такой: прерывание таймера 1 - отсчет секунды и пересчет регистров в озу. Раймер 0 - динамическая индикация регистров, которые пересчитываются прерываним таймером 1, клавиатура и т.д. Пусть на индикаторе - цифра 5. При изменении CCPR1 (или регистра таймера 1, необходимо скоректировать время) динамическая индикации не измененяет цифры (цифра выдается PORTA0-PORTA3), то есть цифра 5 так и остается, хотя по логике должна была пересчитаться и отображать 6. После пошествия времени примерно в два раза большей чем обычно - динамическая индикация показывает цифру 7. Часа 4 пытался в ПРОТЕУСе и МПЛАБе это споймать - не споймал. А в жизни вот такая штука.
Да почему то CCP срабатывает при синхронизации сигнала на таймере и без синхронизации, это тоже интересно - в документации четко сказано что без синхронизации работать не должен.
Ничего больше сказать не могу, все что имею осталось на работе, а на ней я появлюсь только в понедельник. Хотел узнать может это глюк и при использовании этой комбинации TMR1 и CCP гдето какаято оговорка есть. Если оговорок нет, то буду с понедельника дальше мучать, если сдамся - то сюда за помощью.
Я как-то мучился со считыванием значения регистра таймера, ну нивкакую не читалось - всегда 00 а прерывания происходят, оказалось надо было правильно биты конфигурации выставить.А какие биты конфигурации вы изменяли?
0 -
Добрый день.
Подскажите, из вашего опыта, кто нибыдь замечал глюки на pic16f628a при работе TMR1(работает от внешнего кварца) и CCP (настроен на сравнение). При обработке прерывания от CCP переодически необходимо менять значение CCPR1H И CCPR1L и тут то прооисходит что то, которое не поддается моему пониманию. Proteus этого не замечает, по MPLAB тоже ничего не вижу, а вот в живую - бред. Может в камне глюк?
0 -
Господа! Опять прошу меня вразумить.
Использую три таймера (PIC16F628A). При чем, один таймер должен иметь высший приоритет по прерыванию, то есть, должен обслуживаться даже в обработке другого прерывания. На сколько я понимаю при обслуживании прерывания обработка других прерываний запрещена, пока не даш команду retfie. Кто нибудь сталкивался с такой проблеммой?
0 -
Всем свпасибо - буду пробывать.
0 -
ORG + листинг=думаю получется, и на сколько я понял начало юлока памяти это каждый 256 байт?
А директивы BANKSEL и PAGESEL - для объектных файлов, я до них не дорос, не могу найти где бы объектные файлы были разжованы для "Чайников".
0 -
Доброго времени суток всем.
Я опять за помощью. Дело в том, что необходимо сделать вычисляемый переход.На сколько я понимаю ничего сложного здесь нет, однако в даташите сказано , что необходимо обратить внимание на то, чтобы значение PLC не пересекало границу блока памяти. Подскадите подалуста, можно ли в MPLAB определить где именно в памяти (начало, конец блока) находится мой вычисляемый переход, для корректного вычисления перехода.
Заранее благодарен.
P.S. А примеров по использованию директив я нашел мало, если вести реч о ORG, EQU, то я ими и так пользуюся а их тк еще много осталоь.
0 -
А где можно почитать про расчёт диодов (Хотябы список формул увидеть)?
Что вы имеете в виду расчет диодов и какие формулы вас интересуют?
0 -
Спасибо будем дерзать.
0 -
Вот становиться кое что на места (по IF). Примеров мало дают и пощупать это не где, по крайней мере в моих источниках, так что если подскажете где это посмотреть, так чтоб можно было разобраться, буду очень рад.
А по RA5 прошу прощения не доглядел, ОТМЕЧУ БОЛЬШИМИ КРАСНЫМИ БУКВАМИ, чтоб потом на грабли не наступить.
0 -
Дело в том, что при сбрасывании TRISA MPLAB показыает в результате что TRISA=h'20', то есть у меня должным образом TRISA не сбрасывается. И как следствие RA5 остается настроеным на вход, а мне нужен выход!!! Почему? А PORTA я сбрасываю.
То есть эти директивы подобны оператарам языка программирования (Паскаль Вейсик) и работают аналогично? Тогда этот код имеет право на жизнь? И если да, то как он работает? Его пошагово можно выполнить?
variable cikl variable rezult cikl=0 rezult=0 while cikl==1 rezult=cikl+5 rezult++ cikl++ endw movf rezult end
0 -
Господа знатаки! Разрешите Вас помучать глупыми вопросами:
1 Вот такая вот программа (PIC16G628A). подскажите почемуто при обнклении TRISA (настройка на входы), почемуто результат равен h'20'. И как следствие при изменеии данных в PORTA RA5 не меняется. Объясните с чем это свяхано. Цикл в конце - для проверки изменения порта.
list p=16f628A INCLUDE <C:\PROGRAM FILES\MICROCHIP\MPASM SUITE\P16F628A.INC> __CONFIG _INTRC_OSC_NOCLKOUT&_LVP_OFF& _MCLRE_off& _BODEN_OFF&_WDT_OFF ; Настройка PORTA bcf status,5 bcf status,6;Банк 0 clrf porta movlw 0x07 movwf cmcon; Копратаровы откл., porta - цифра bsf status,5;Банк 0 clrf trisa;porta - входа bcf status,5 ttt comf porta goto ttt end
2 Директивы тапа WHILE, IF для каких случаев. Я их применяю, но на результат они не влияют, при отладке просто эти строки пропускаются. Наверно я не так ими пользуюся или не понимаю их истенного назначения. Так что если меня просветят, буду очень благодарен.
0 -
Доброго свем времени суток.
Подскажите пожалуста нет ли справочнока для размеров корпусов, ну например корпус sot74 - и его размеры, или soic, dip и т.д.
А есче интересует вопрос: подскажите пожалуста дешифратор в семисегментный код в SIOC, а то я не слишком большой ассортимент НЕ нашел.
Заранее всем благодарен.
0 -
Программу пишу с нуля, написал часть, проверил на ошибки - что в регистрах, что на выходах, как на входа реагирует, чтото поправил, исправил - дописал часть и опят в симклятор. Программист я молодой, поэтому части, которые дописываю очеь малы, вплоть до нескольких операторов, посмотреть правильно ли настроил, к присеру таймер и т.д. А под секциями Вы что имеете в виду - работа с объектними фыйлами? Я до них есче не дорос, в плотную не сталкивался, пока пытаюсь все в один файл забить.
0 -
Не правильно выразился - промоделировать часть рограммы, большая часть есче не написана. Входа RB6, RB7 - входа TMR1. т.е. таймер настраиваю на работу с кварцевым резонатором, а сам контроллер тактируется внутреним осцилятором. PROTEUS хоть и есть но с ним мало знаком, хотя видимо прийдется разбиратся.
А по поводу микросхем - пожскажите наиболее полный справочник, в котором ток выхода можно посмотреть.
А поповодк сделать на основе стандартного дешифратора - на выход транзистор, т.е.ключ?
0 -
Добрый день.
Подскажите пожалуста, можно ли в MPLABе задать в стимуле частоту на ножке, или частота задается согласно тактам осцилятора. А ситуация такая, хочу промоделировать процесс, когда PIC16F628A работает от внутренего осцилятора, а на вход RB6/RB7 подключен часовой кварц 32768 Гц. При этом приходится забивать частоту осцилятора не 4 МГц, а крантую кварцу - 4194304 Гц, и задавать в стимуле частоту 64 такта, такая частота осцилятора не совсем корректная, как на мой взгляд, да и пока высчитал сколько тактов задать надо времени много прошло - запутался. Так что вот такая неувязка.
И попутно вопрос, подскажите где можно подобрать эллементы (микросхемы) по параметрам или где прочитать их классификацию, ну например нежен двоично десятичной дешифратор с повышеной нагрузочной способностью (около 40мА) или это на каждый дешифратор даташит читать надо?
Заранее благодарен.
И есче интересно - MPLAB рускоязычный есче не придумали?
0 -
Прекрепляю программы, бреда там много, но настройка программы "новый" отказывается менять сигналы, хотя в ожидании прерывания и в самом прерывании стоят эти команды. Но на данный момент эти вопросы отошли на задний план.
НАКРЫЛСЯ ПРОГРАММАТОР ПОМОГИТЕ!!!. Надеюся не накажут что я сдесь про программатор спрашиваю.
Предыстория: за час до выключения компа прошивал, на следующий день пришел на работу и через час после включения компьютера попытался прошить PIC и полуяил неприятность. Все это время программатор был подключен.
Симтомы такие (программатор PicKit 2) - подсоединил програвмматор запускаю программу на компе, ответ - Не подключен программатор.
Вскрыл, начинаю осцилографом тыкать: на 13 выводе PIC16F2550 наблюдаю частоту, дальше стоит резистор, за ним частоты нет, только потенциал. И есче смущает, при включении программы на компе, по USB не видно ни каких сигналов, может я их не замечаю? Ток потребления при подаче 5В - 50 мА.
А при подсоединения программатор WINDOWS должен его определять? Изначально я его не мог увидеть, приходилось производить горячее выключение (просто выдергивал USB при рабочем компе).
Може необходимо будет поменять PIC18F2550 - подскажите что в него прошивать, хотелось бы конкретно "hех" файл.
0 -
Новая программа чтото типа СИФУ - по внешнему прерыванию приходит начало фазы сети, записуются регистры таймера 1 и запускается таймер, через выдержку времени (переполнение таймера) - прерывание, один из выходов уставнавливается в 1 (управляющего сигнала на тиристоры), таймер 1 выключается и одновременно заппускается таймер 0 - по переполнению Т0 - выключение Т0 и сброс управляющего сигнала и переход на жидание начала фазы. И так несколько раз, постапенно увеличивается выдержка времени Т0, ятобы выходное напряжение на тиристорах уменьшалось. Вот и вся суть.
Старая программа - пытался разработать часы, но больше поиграться и познакомиться с PICом, на этой схеме я применял кварц, поэтому и проверял с помощью ее.
Проверка довольно проста - после настроек обе программы переходят на ожидание прерывания, где я их зайиклил на инвертирование порта B, так вот в новой программе инверсия сигналов проходит через раз, при подаче напряжения не заводится тактовый генератор, в старой таких проблем нет. При работе новой программы на входе OSC2 наблюдаю синусойду, смещенную на 2В и амплитуда- 1.1 В.
Программ пока нет, оставил на работе.
0 -
УВажаемые форумчане! Подскажите может ли влиять программа, не бит конфигурации, на устойчивую работу тактового генератора с вунешним кварцом (20 МГц)?
Точнее - использую PIC16F628A. Прошиваю старую программу - запускается и работает. А вот с новой программой (бит конфигурации тот же) запускается через раз. Разница между програми - в новой используется внешнее прерывание и таймер 1 и входа/выхода по разному настроены. програмирую на ассемблере, прогрпмматор PicKit2. Может в программировании должны быть какието "рамки", чтото типа: в начале надо настроить порт, а потом таймер?
Надеюсь на ВАШ опыт. Жду советов.
0 -
Собрал схему JDM программатора с переделкой (http://users.tpg.com.au/btkelly/jdm_b.htm) + IC-Prog - Проблему решил. Но как проблему решить с PicKit2 не разобрался. Кстати, убрал из программы таймер1 и глюк исчез.
0 -
Вроде бы рекомендуют "В меню "Tools” можно включить опцию ”Use VPP First Program Entry", это может понадобиться для контроллеров, конфигурация которых и настройка портов не позволяет войти в режим программирования (например, для контроллеров PIC12F675 с включенным внутренним сбросом и портами, подключенными к PGD и PGC, настроенными на выход). Попробуйте включить эту опцию, если программатор выдает ошибку проверки конфигурации ('Verification of configuration failed.')." (http://www.microchip.com.ru/1010/Support/PICkit2_art.html). Но я не могу найти такую опцию.
0 -
Прошивал под оболочкой пиккита, отлаживал в MPLAB. Вот моя прога, хотел сделать часы, а точнее поиграться на часах
list p=16f628A INCLUDE <C:\PROGRAM FILES\MICROCHIP\MPASM SUITE\P16F628A.INC> __CONFIG _INTRC_OSC_NOCLKOUT&_LVP_OFF& _MCLRE_OFF& _BODEN_OFF&_WDT_OFF has equ h'21' minuta equ h'22' sekunda equ h'23' kolihestvo equ h'24' kolihestvo1 equ h'25' ed_sec equ h'26' dec_sec equ h'27' ed_min equ h'28' dec_min equ h'29' ed_has equ h'2a' dec_has equ h'2b' hislo equ h'2c' ed equ h'2d' des equ h'2e' prom equ h'2f' rozrad equ h'30' bank0 macro bcf status,5 bcf status,6 endm bank1 macro bsf status,5 bcf status,6 endm bank2 macro bcf status,5 bsf status,6 endm bank3 macro bsf status,5 bsf status,6 endm dehifratot macro cifra, adres; ;local prom=0 clrf des movf cifra,0 movwf prom ;nah movf prom,0 movwf ed movlw h'a' subwf prom,1 btfss status,c goto $+3 ;goto prod incf des goto $-7 ;goto nah ;prod movf ed,0 addlw h'40' bank1 movwf fsr movf indf,0 bank0 movwf adres ;exitm movf des,0 addlw h'40' bank1 movwf fsr movf indf,0 bank0 movwf (adres+1) endm org 0 goto nahalo; перейти на начало программы org 4 ; вектор прерывания movlw h'0f8'; Загрузка movwf tmr1h; времени movlw (30h+6); срабатывания movwf tmr1l; таймера clrf pir1 ; обнулить бит прерывания таймера 1 movf hislo,0 addlw h'26' movwf fsr movf indf,0 movwf portb bcf status,c movf rozrad,0 movwf porta rlf rozrad incf hislo movlw d'4' subwf hislo,0 btfss status,z goto prop clrf hislo clrf rozrad bsf rozrad,0 prop decfsz kolihestvo; kolihestvo-1 и если 0 то пропустить goto con ; переход на программу индикации decfsz kolihestvo1; kolihestvo1-1 и если 0 то пропустить goto con1 ;обработка incf sekunda movlw d'60' subwf sekunda,0 btfss status,z goto dalshe clrf sekunda incf minuta movlw d'60' subwf minuta,0 btfss status,z goto dalshe clrf minuta incf has movlw d'24' subwf has,0 btfss status,z goto dalshe clrf has dalshe nop dehifratot sekunda, ed_sec dehifratot minuta, ed_min dehifratot has, ed_has movlw 5 movwf kolihestvo1 con1 movlw h'64' movwf kolihestvo con retfie org 200h nahalo movlw b'01111011' movwf h'40' movlw b'01100000' movwf h'41' movlw b'11011010' movwf h'42' movlw b'11101010' movwf h'43' movlw b'11100001' movwf h'44' movlw b'10101011' movwf h'45' movlw b'10111001' movwf h'46' movlw b'01100010' movwf h'47' movlw b'11111011' movwf h'48' movlw b'11101011' movwf h'49' clrf has clrf minuta clrf sekunda movlw 100d movwf kolihestvo movlw 5 movwf kolihestvo1 clrf hislo clrf portb ; очистить рорт В bank1 ;перейти в 1 банк bcf option_reg,7 ; настройка порта В без подтягивающих регистров movlw b'00000000' ; настройка порта В на movwf trisb ; выхода bank0 ;перейти в банк 0 clrf porta movlw 0x07 movwf cmcon bank1 movlw b'11110000' movwf trisa bank0 clrf porta movlw b'11000000' ; Разрешение прерываний movwf intcon bank1 bsf pie1,0 ; Разрешение прерываний bank0 movlw 0f8h ;Загрузка movwf tmr1h ; времени movlw (30h+6) ; срабатывания movwf tmr1l ; таймера movlw b'00001001' ; настройка таймера movwf t1con ; для работы l goto l end
Вам замечание за не использование тега “CODE”
мод. Lexi
0 -
Добрый день. Подскажите, кто сможет, написал часть проги для PIC16F628А в асме, отладил, хотел поммотреть как работает. Прошил (PiсKit2), при проверке ругнулся на конфигурацию, и больше не хотел распознавать контроллер, а тем более его читать/писать. Хотя знаю, что эта конфигурация работает в другой программе и таких проблем не было. Может связано с настройкой поров? Помогите, а то уже 4 контроллера так прошил, все не разобрался почему.
0
Начинающим с нуля (PIC)
в PIC
Опубликовано
Спасибо за подсказку, довольно просто, а столько времени потратил в поисках решения.
Есче раз БОЛЬШОЕ СПАСИБО!