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

Bugrim

Members
  • Постов

    235
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Bugrim

  1. Добрый день.

    Подскажите кто знает, как можно создать таблицу данных, ну напритмер несколько (примерно 30) констант, расположенных в памяти программ последовательно и потом при необходимости их считывать. Константу считывать хотелось бы зня ее адрес.

    Заранее всем благодарен.

  2. В первоначальном варианте использовал прерывание таймера 1, которое при запоздплом прерывании (обработке другого прерывания) могло привести к потере времени, пока перейдем на обработку считаем текущую информацию с регистров таймера, сложим с нужным числом и запишем обратно. Это давало погрешность. От вложеных прерываний отказался - другой подход - таймер 1 оставить как считает, а модуль ССР настроить на сравнение с обнулением таймера 1. В моделировании работает как надо, с небольшой погрешностью. Однако в реале - то ли кварц, от которого работает тиймер 1 имеет погрешность, которая довольно быстро набигает, толи что то есче принудили сделать коррекцию, которая уменьшает/увеличивает значение регистра ССР. Для этого изменения, времени предостаточно и нет необходимости точно выполнять прерывание, ведь средний период этих прерываний будет нужным. Так вот при обработке прерывания от ССР, каждую 32 секунду, так захотел, происходит коррекция егистр ССР уменьшается на 1 - на индакатое - цифра 32, пауза примерна в 2 секуны, потом цифра 34. Интересная штука, на моделировании не видно, или не вижу, прийдеться помучатся исходник на работе, с понедельника посмотрю, может что то прояснится.

  3. Происходит весма странная чтука.

    Порядок работы программы такой: прерывание таймера 1 - отсчет секунды и пересчет регистров в озу. Раймер 0 - динамическая индикация регистров, которые пересчитываются прерываним таймером 1, клавиатура и т.д. Пусть на индикаторе - цифра 5. При изменении CCPR1 (или регистра таймера 1, необходимо скоректировать время) динамическая индикации не измененяет цифры (цифра выдается PORTA0-PORTA3), то есть цифра 5 так и остается, хотя по логике должна была пересчитаться и отображать 6. После пошествия времени примерно в два раза большей чем обычно - динамическая индикация показывает цифру 7. Часа 4 пытался в ПРОТЕУСе и МПЛАБе это споймать - не споймал. А в жизни вот такая штука.

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

    Ничего больше сказать не могу, все что имею осталось на работе, а на ней я появлюсь только в понедельник. Хотел узнать может это глюк и при использовании этой комбинации TMR1 и CCP гдето какаято оговорка есть. Если оговорок нет, то буду с понедельника дальше мучать, если сдамся - то сюда за помощью.

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

    А какие биты конфигурации вы изменяли?

  4. Добрый день.

    Подскажите, из вашего опыта, кто нибыдь замечал глюки на pic16f628a при работе TMR1(работает от внешнего кварца) и CCP (настроен на сравнение). При обработке прерывания от CCP переодически необходимо менять значение CCPR1H И CCPR1L и тут то прооисходит что то, которое не поддается моему пониманию. Proteus этого не замечает, по MPLAB тоже ничего не вижу, а вот в живую - бред. Может в камне глюк?

  5. Господа! Опять прошу меня вразумить.

    Использую три таймера (PIC16F628A). При чем, один таймер должен иметь высший приоритет по прерыванию, то есть, должен обслуживаться даже в обработке другого прерывания. На сколько я понимаю при обслуживании прерывания обработка других прерываний запрещена, пока не даш команду retfie. Кто нибудь сталкивался с такой проблеммой?

  6. ORG + листинг=думаю получется, и на сколько я понял начало юлока памяти это каждый 256 байт?

    А директивы BANKSEL и PAGESEL - для объектных файлов, я до них не дорос, не могу найти где бы объектные файлы были разжованы для "Чайников".

  7. Доброго времени суток всем.

    Я опять за помощью. Дело в том, что необходимо сделать вычисляемый переход.На сколько я понимаю ничего сложного здесь нет, однако в даташите сказано , что необходимо обратить внимание на то, чтобы значение PLC не пересекало границу блока памяти. Подскадите подалуста, можно ли в MPLAB определить где именно в памяти (начало, конец блока) находится мой вычисляемый переход, для корректного вычисления перехода.

    Заранее благодарен.

    P.S. А примеров по использованию директив я нашел мало, если вести реч о ORG, EQU, то я ими и так пользуюся а их тк еще много осталоь.

  8. :rolleyes: :rolleyes: :rolleyes: !!!!!!!БОЛЬШОЕ СПАСИБО!!!!!!! :rolleyes: :rolleyes: :rolleyes:

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

    А по RA5 прошу прощения не доглядел, ОТМЕЧУ БОЛЬШИМИ КРАСНЫМИ БУКВАМИ, чтоб потом на грабли не наступить.

  9. Дело в том, что при сбрасывании 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

  10. Господа знатаки! Разрешите Вас помучать глупыми вопросами:

    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 для каких случаев. Я их применяю, но на результат они не влияют, при отладке просто эти строки пропускаются. Наверно я не так ими пользуюся или не понимаю их истенного назначения. Так что если меня просветят, буду очень благодарен.

  11. Доброго свем времени суток.

    Подскажите пожалуста нет ли справочнока для размеров корпусов, ну например корпус sot74 - и его размеры, или soic, dip и т.д.

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

    Заранее всем благодарен.

  12. Программу пишу с нуля, написал часть, проверил на ошибки - что в регистрах, что на выходах, как на входа реагирует, чтото поправил, исправил - дописал часть и опят в симклятор. Программист я молодой, поэтому части, которые дописываю очеь малы, вплоть до нескольких операторов, посмотреть правильно ли настроил, к присеру таймер и т.д. А под секциями Вы что имеете в виду - работа с объектними фыйлами? Я до них есче не дорос, в плотную не сталкивался, пока пытаюсь все в один файл забить.

  13. Не правильно выразился - промоделировать часть рограммы, большая часть есче не написана. Входа RB6, RB7 - входа TMR1. т.е. таймер настраиваю на работу с кварцевым резонатором, а сам контроллер тактируется внутреним осцилятором. PROTEUS хоть и есть но с ним мало знаком, хотя видимо прийдется разбиратся.

    А по поводу микросхем - пожскажите наиболее полный справочник, в котором ток выхода можно посмотреть.

    А поповодк сделать на основе стандартного дешифратора - на выход транзистор, т.е.ключ?

  14. Добрый день.

    Подскажите пожалуста, можно ли в MPLABе задать в стимуле частоту на ножке, или частота задается согласно тактам осцилятора. А ситуация такая, хочу промоделировать процесс, когда PIC16F628A работает от внутренего осцилятора, а на вход RB6/RB7 подключен часовой кварц 32768 Гц. При этом приходится забивать частоту осцилятора не 4 МГц, а крантую кварцу - 4194304 Гц, и задавать в стимуле частоту 64 такта, такая частота осцилятора не совсем корректная, как на мой взгляд, да и пока высчитал сколько тактов задать надо времени много прошло - запутался. Так что вот такая неувязка.

    И попутно вопрос, подскажите где можно подобрать эллементы (микросхемы) по параметрам или где прочитать их классификацию, ну например нежен двоично десятичной дешифратор с повышеной нагрузочной способностью (около 40мА) или это на каждый дешифратор даташит читать надо?

    Заранее благодарен.

    И есче интересно - MPLAB рускоязычный есче не придумали?

  15. Прекрепляю программы, бреда там много, но настройка программы "новый" отказывается менять сигналы, хотя в ожидании прерывания и в самом прерывании стоят эти команды. Но на данный момент эти вопросы отошли на задний план.

    НАКРЫЛСЯ ПРОГРАММАТОР ПОМОГИТЕ!!!. Надеюся не накажут что я сдесь про программатор спрашиваю.

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

    Симтомы такие (программатор PicKit 2) - подсоединил програвмматор запускаю программу на компе, ответ - Не подключен программатор.

    Вскрыл, начинаю осцилографом тыкать: на 13 выводе PIC16F2550 наблюдаю частоту, дальше стоит резистор, за ним частоты нет, только потенциал. И есче смущает, при включении программы на компе, по USB не видно ни каких сигналов, может я их не замечаю? Ток потребления при подаче 5В - 50 мА.

    А при подсоединения программатор WINDOWS должен его определять? Изначально я его не мог увидеть, приходилось производить горячее выключение (просто выдергивал USB при рабочем компе).

    Може необходимо будет поменять PIC18F2550 - подскажите что в него прошивать, хотелось бы конкретно "hех" файл.

  16. Новая программа чтото типа СИФУ - по внешнему прерыванию приходит начало фазы сети, записуются регистры таймера 1 и запускается таймер, через выдержку времени (переполнение таймера) - прерывание, один из выходов уставнавливается в 1 (управляющего сигнала на тиристоры), таймер 1 выключается и одновременно заппускается таймер 0 - по переполнению Т0 - выключение Т0 и сброс управляющего сигнала и переход на жидание начала фазы. И так несколько раз, постапенно увеличивается выдержка времени Т0, ятобы выходное напряжение на тиристорах уменьшалось. Вот и вся суть.

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

    Проверка довольно проста - после настроек обе программы переходят на ожидание прерывания, где я их зайиклил на инвертирование порта B, так вот в новой программе инверсия сигналов проходит через раз, при подаче напряжения не заводится тактовый генератор, в старой таких проблем нет. При работе новой программы на входе OSC2 наблюдаю синусойду, смещенную на 2В и амплитуда- 1.1 В.

    Программ пока нет, оставил на работе.

  17. УВажаемые форумчане! Подскажите может ли влиять программа, не бит конфигурации, на устойчивую работу тактового генератора с вунешним кварцом (20 МГц)?

    Точнее - использую PIC16F628A. Прошиваю старую программу - запускается и работает. А вот с новой программой (бит конфигурации тот же) запускается через раз. Разница между програми - в новой используется внешнее прерывание и таймер 1 и входа/выхода по разному настроены. програмирую на ассемблере, прогрпмматор PicKit2. Может в программировании должны быть какието "рамки", чтото типа: в начале надо настроить порт, а потом таймер?

    Надеюсь на ВАШ опыт. Жду советов.

  18. Вроде бы рекомендуют "В меню "Tools” можно включить опцию ”Use VPP First Program Entry", это может понадобиться для контроллеров, конфигурация которых и настройка портов не позволяет войти в режим программирования (например, для контроллеров PIC12F675 с включенным внутренним сбросом и портами, подключенными к PGD и PGC, настроенными на выход). Попробуйте включить эту опцию, если программатор выдает ошибку проверки конфигурации ('Verification of configuration failed.')." (http://www.microchip.com.ru/1010/Support/PICkit2_art.html). Но я не могу найти такую опцию.

  19. Прошивал под оболочкой пиккита, отлаживал в 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

  20. Добрый день. Подскажите, кто сможет, написал часть проги для PIC16F628А в асме, отладил, хотел поммотреть как работает. Прошил (PiсKit2), при проверке ругнулся на конфигурацию, и больше не хотел распознавать контроллер, а тем более его читать/писать. Хотя знаю, что эта конфигурация работает в другой программе и таких проблем не было. Может связано с настройкой поров? Помогите, а то уже 4 контроллера так прошил, все не разобрался почему.

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