Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Перезагрузка микроконтроллера

Пт мар 29, 2019 07:05:35

Радиокоты, прошу помощи.
На выходе должен увидеть прямоугольные бесконечные импульсы длительностью в один цикл, а с помощью логического анализатора вижу, что кристалл перезапускается каждые 470,35 мкс.
Не могу понять почему?. А так же вижу, при запуске высокий уровень на обоих выходах. Хотя вроде все делаю чтобы опустить в ноль выходы.

Код:
;*******************************************************************************
 #include <p18lf2620.inc>
;*******************************************************************************
; TODO INSERT INCLUDE CODE HERE
;*******************************************************************************
; PIC18LF2620 Configuration Bit Settings
 
; CONFIG1H
 
  CONFIG  OSC = HSPLL           ; Oscillator Selection bits (HS oscillator, PLL enabled (Clock Frequency = 4 x FOSC1))
  CONFIG  FCMEN = OFF           ; Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
  CONFIG  IESO = OFF            ; Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled)

; CONFIG2L
  CONFIG  PWRT = OFF            ; Power-up Timer Enable bit (PWRT disabled)
  CONFIG  BOREN = OFF           ; Brown-out Reset Enable bits (Brown-out Reset disabled in hardware and software)
  CONFIG  BORV = 2              ; Brown Out Reset Voltage bits ()


; CONFIG2H
 ; CONFIG  WDT = ON              ; Watchdog Timer Enable bit (WDT enabled)
  CONFIG  WDT = OFF             ; Watchdog Timer Enable bit (WDT disabled (control is placed on the SWDTEN bit))
  CONFIG  WDTPS = 32768         ; Watchdog Timer Postscale Select bits (1:32768)

; CONFIG3H
  CONFIG  CCP2MX = PORTC        ; CCP2 MUX bit (CCP2 input/output is multiplexed with RC1)
  CONFIG  PBADEN = OFF          ; PORTB A/D Enable bit (PORTB<4:0> pins are configured as digital I/O on Reset)
  CONFIG  LPT1OSC = OFF         ; Low-Power Timer1 Oscillator Enable bit (Timer1 configured for higher power operation)
  CONFIG  MCLRE = ON            ; MCLR Pin Enable bit (MCLR pin enabled; RE3 input pin disabled)

; CONFIG4L
  CONFIG  STVREN = OFF          ; Stack Full/Underflow Reset Enable bit (Stack full/underflow will not cause Reset)
  CONFIG  LVP = OFF             ; Single-Supply ICSP Enable bit (Single-Supply ICSP disabled)
  CONFIG  XINST = OFF           ; Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))

; CONFIG5L
  CONFIG  CP0 = OFF             ; Code Protection bit (Block 0 (000800-003FFFh) not code-protected)
  CONFIG  CP1 = OFF             ; Code Protection bit (Block 1 (004000-007FFFh) not code-protected)
  CONFIG  CP2 = OFF             ; Code Protection bit (Block 2 (008000-00BFFFh) not code-protected)
  CONFIG  CP3 = OFF             ; Code Protection bit (Block 3 (00C000-00FFFFh) not code-protected)

; CONFIG5H
  CONFIG  CPB = OFF             ; Boot Block Code Protection bit (Boot block (000000-0007FFh) not code-protected)
  CONFIG  CPD = OFF             ; Data EEPROM Code Protection bit (Data EEPROM not code-protected)

; CONFIG6L
  CONFIG  WRT0 = OFF            ; Write Protection bit (Block 0 (000800-003FFFh) not write-protected)
  CONFIG  WRT1 = OFF            ; Write Protection bit (Block 1 (004000-007FFFh) not write-protected)
  CONFIG  WRT2 = OFF            ; Write Protection bit (Block 2 (008000-00BFFFh) not write-protected)
  CONFIG  WRT3 = OFF            ; Write Protection bit (Block 3 (00C000-00FFFFh) not write-protected)

; CONFIG6H
  CONFIG  WRTC = OFF            ; Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) not write-protected)
  CONFIG  WRTB = OFF            ; Boot Block Write Protection bit (Boot Block (000000-0007FFh) not write-protected)
  CONFIG  WRTD = OFF            ; Data EEPROM Write Protection bit (Data EEPROM not write-protected)

; CONFIG7L
  CONFIG  EBTR0 = OFF           ; Table Read Protection bit (Block 0 (000800-003FFFh) not protected from table reads executed in other blocks)
  CONFIG  EBTR1 = OFF           ; Table Read Protection bit (Block 1 (004000-007FFFh) not protected from table reads executed in other blocks)
  CONFIG  EBTR2 = OFF           ; Table Read Protection bit (Block 2 (008000-00BFFFh) not protected from table reads executed in other blocks)
  CONFIG  EBTR3 = OFF           ; Table Read Protection bit (Block 3 (00C000-00FFFFh) not protected from table reads executed in other blocks)

; CONFIG7H
  CONFIG  EBTRB = OFF           ; Boot Block Table Read Protection bit (Boot Block (000000-0007FFh) not protected from table reads executed in other blocks)
;=========================
;   ПЕРЕМЕННЫЕ
;=========================
    CBLOCK   H'10'
temp
temp_code

count           ;СЧЕТЧИК БАЙТ
n              ;СЧЕТЧИК ПОЛУБАЙТ
nnn              ;ВСЯКОЕ
red
green
blue         ;ЗНАЧЕНЯ БАЙТА ЦВЕТА
box_zigzag      ;ЗНАЧЕНИЯ ТАБЛИЦЫ RGB

word_hi        ; СТАРШИЙ ПОЛНЫЙ КОД ЦВЕТА
word_hi_hi     ; СТАРШИЙ ПОЛУБАЙТ КОДА ЦВЕТА
word_hi_low    ; МЛАДШИЙ ПОЛУБАЙТ КОДА ЦВЕТА


word_low       ; МЛАДШИЙ ПОЛНЫЙ КОД ЦВЕТА
word_low_hi    ; СТАРШИЙ ПОЛУБАЙТ КОДА ЦВЕТА
word_low_low   ; МЛАДШИЙ ПОЛУБАЙТ КОДА ЦВЕТА

Reg_1
Reg_2
Reg_3
Reg_4    ;РЕГИСТРЫ ДЛЯ ЗАДЕРЖЕК
    ENDC
   
    CBLOCK  H'100'
    edat0 ;:256 БАЙТ (100-1FF)
    ENDC
   
    CBLOCK  0X200
data_RGB ;16*16*2=512  512*3=1536 байт (200-7FF)
    ENDC
;=========================
;   ДАННЫЕ EEPROM "РИСУНОК"
;=========================
DATAEE    ORG       0XF00000

    DE   H'2B',H'BB',H'BB',H'00',H'55',H'88',H'00',H'11'   
    DE    "titr"        ; Place 't' 'i' 't' 'r'     
;=========================
;       КОНСТАНТЫ
;=========================
#DEFINE      LED_GREEN   LATA,0   ;ЗЕЛЁНЫЙ СВЕТОДИОД НА ПЛАТЕ
#DEFINE      ZIGZAG      LATB,0   ;ВЫХОД НА LED ЛЕНТУ
 
BSR_SFR      EQU      .1     ;ВЫБОР БАНКА SFR
COUNT_CONST   EQU      .255    ;256 БАЙТ EDAT0...
MASK      EQU     B'00001111'   ;МАСКА ДЛЯ ВЫДЕЛЕНИЯ МЛАДШЕГО ПОЛУБАЙТА
;=========================
; Reset Vectored
;*******************************************************************************
     ORG   0x0000            ; predocessored redeset vectored
     GOTO    START           ; greeno to blueegreeninningreen of predogreenredam
;*******************************************************************************
; TODO Step #4 - Interedredupt Seredvice Routines
;*******************************************************************************
;        ИНИЦИАЛИЗАЦИЯ
;*******************************************************************************
    ORG     H'20'
START

    MOVLW      BSR_SFR    ;ВЫБИРАЕМ БАНК SFR
    MOVWF      BSR
    CLRF      PORTA
    CLRF      LATA
    MOVLW      B'00001111'   
    MOVWF      ADCON1      ;ЦИФРОВЫЕ I/O
    MOVLW      B'00000111'
    MOVWF      CMCON      ;OFF COMPARATORS 
    MOVLW      B'00000000'   ;1,2,3,4,6,7-ВХОДЫ, 0,5-ВЫХОДЫ
    MOVWF      TRISA      ;

    CLRF      PORTB
    CLRF      LATB 
    MOVLW      B'00001111'   
    MOVWF      ADCON1      ;ЦИФРОВЫЕ I/O ПОВТОРНО ЗАЧЕМ?
    MOVLW      B'00011110'   ;ПРОВЕРИТЬ SS=1
    MOVWF      TRISB      ;ВЫХОДЫ 0,5,6,7; ВХОДЫ 1,2,3,4 КНОПКИ УПРАВЛЕНИЯ

    CLRF      PORTC
    CLRF      LATC
    MOVLW      B'00000000'   ;
    MOVWF      TRISC      ;ПОКА ВСЕ ВЫХОДЫ
 
    BSF         SSPSTAT, SMP   ;ОПРОС ВХОДА В КОНЦЕ ПЕРИОДА ВЫВОДА ДАННЫХ
    BSF         SSPSTAT, CKE   ;ПО ПЕРЕДНЕМУ ФРОНТУ
    MOVLW      B'00000000'   ;ВЕДУЩ. РЕЖИМ SPI, Fosc /4-ЧАСТОТА, ПАСС. УР. СИГН. НИЗКИЙ УР
    MOVWF      SSPCON1      ;MSSP ВЫКЛЮЧЕН ПОКА (5)
    MOVLW      B'01110100'   ;10 mhz             
    MOVWF      OSCCON      ;ВНЕШНИЙ КВАРЦ, 10 МГЦ (PLL*4=40 МГЦ)
    MOVLW      B'00000000'           
    MOVWF      OSCTUNE   
    MOVWF      INTCON      ;
    BCF         WDTCON,SWDTEN   ;WDT ТАЙМЕР ОТКЛЮЧЕН
    CLRF      LATA
    CLRF      LATB
    CLRF      LATC

;=========================
;   РИСУНОК
;=========================
   ORG      0x100 ; УТОЧНИТЬ АДРЕС (100 - 1FF)ПАМЯТЬ ПРОГРАММ
PICTURE    
 db  H'17',H'11',H'11',H'11',H'44',H'44',H'44',H'64',H'11',H'11',H'11',H'11',H'44',H'44',H'44',H'64'
 db  H'11',H'11',H'11',H'11',H'46',H'66',H'66',H'66',H'11',H'11',H'11',H'11',H'46',H'66',H'66',H'66'
 db  H'11',H'11',H'11',H'11',H'46',H'44',H'44',H'64',H'11',H'11',H'11',H'11',H'46',H'44',H'44',H'64'
 db  H'11',H'11',H'11',H'11',H'44',H'44',H'44',H'44',H'11',H'11',H'11',H'11',H'44',H'44',H'44',H'44'
 db  H'11',H'11',H'11',H'11',H'46',H'66',H'66',H'46',H'11',H'11',H'11',H'11',H'46',H'66',H'66',H'46'
 db  H'44',H'44',H'44',H'44',H'14',H'44',H'44',H'44',H'44',H'44',H'44',H'44',H'14',H'44',H'44',H'44'
 db  H'44',H'44',H'44',H'44',H'14',H'44',H'44',H'64',H'44',H'44',H'44',H'44',H'14',H'44',H'44',H'64'
 db  H'44',H'44',H'44',H'44',H'16',H'66',H'66',H'66',H'44',H'44',H'44',H'44',H'16',H'66',H'66',H'66'
 db  H'44',H'44',H'44',H'44',H'16',H'44',H'44',H'64',H'44',H'44',H'44',H'44',H'16',H'44',H'44',H'64'
 db  H'44',H'44',H'44',H'44',H'14',H'44',H'44',H'44',H'44',H'44',H'44',H'44',H'14',H'44',H'44',H'44'
 db  H'66',H'66',H'66',H'66',H'46',H'66',H'66',H'66',H'66',H'66',H'66',H'66',H'46',H'66',H'66',H'66'
 db  H'66',H'66',H'66',H'66',H'44',H'44',H'44',H'64',H'66',H'66',H'66',H'66',H'44',H'44',H'44',H'64'
 db  H'66',H'66',H'66',H'66',H'44',H'44',H'44',H'46',H'66',H'66',H'66',H'66',H'44',H'44',H'44',H'46'
 db  H'66',H'66',H'66',H'66',H'44',H'44',H'44',H'64',H'66',H'66',H'66',H'66',H'44',H'44',H'44',H'64'
 db  H'66',H'66',H'66',H'66',H'41',H'14',H'44',H'44',H'66',H'66',H'66',H'66',H'41',H'14',H'44',H'44'
 db  H'66',H'66',H'66',H'66',H'41',H'14',H'44',H'44',H'66',H'66',H'66',H'66',H'41',H'14',H'44',H'74'
;----------
;      НАЧАЛО:   МОРГАЛКА СВЕТИОДИДОМ
;----------
NNN
   BSF           LED_GREEN      ;ВКЛЮЧАЕМ ЗЕЛЁНЫЙ СВЕТОДИОД                
   BCF          LED_GREEN       ;OFF LED
   BRA      NNN
;=========================
ДАЛЕЕ КОД ПРОГРАММЫ...

   END

Re: Перезагрузка микроконтроллера

Пт мар 29, 2019 17:05:58

Шозабред?
Что за куски кода ничем не связанные? Вы когда нибудь программировали на АСМе?
У Вас есть начало, которое обрывается в никуда, а потом таблица с адреса 0х100. После таблицы цикл, в который программа непонятно как должна попасть...
ЗЫ. В догон. Цикл будет выводить импульсы, но не меандр. Длительность импульса будет в 1 машцикл, а период 4 машцикла. Итого, частота будет в 4 раза ниже частоты работы ядра.

Re: Перезагрузка микроконтроллера

Пт мар 29, 2019 17:27:26

При всей корявости кода, что мешает что бы были выполнены эти инструкции?

NNN
BSF LED_GREEN ;ВКЛЮЧАЕМ ЗЕЛЁНЫЙ СВЕТОДИОД
BCF LED_GREEN ;OFF LED
BRA NNN

Re: Перезагрузка микроконтроллера

Пт мар 29, 2019 17:28:23

Покажите путь по которому код попадет на эти инструкции.

Re: Перезагрузка микроконтроллера

Пт мар 29, 2019 18:05:41

у вас бардак в коде. таблицу данных надо переместить вниз. после : "ДАЛЕЕ КОД ПРОГРАММЫ..."
кстати. если это код мерцания светодиода то этого вы не увидите. без задержки. после каждой команды.

Re: Перезагрузка микроконтроллера

Пт мар 29, 2019 18:56:17

Спасибо за помощь!
Данные с выходов смотрю цифровым анализатором, поэтому вижу всё.
Хочу 18 пиком светодиодную ленту на диодах WS2812B запустить.

Re: Перезагрузка микроконтроллера

Пт мар 29, 2019 19:21:40

PIC 18 + asm это жесть. Ваш код естественно смотреть не буду, есть подозрение что счётчик команд доходит до конца кода и возвращается на 0 адрес, т.е. снова происходит инициализация контроллера.

Re: Перезагрузка микроконтроллера

Пт мар 29, 2019 20:00:12

Спасибо за помощь!
Данные с выходов смотрю цифровым анализатором, поэтому вижу всё.
Хочу 18 пиком светодиодную ленту на диодах WS2812B запустить.


откуда код? лучше удалить всю эту абракадабру и начать с чистого листа. так как вводит в заблуждение. и лучше всего использовать родной листинг. файл INC. у каждого проца есть такой. там уже даны названия для все регистров. от самого микрочипа.
и конфиг тоже.
а вообще вот этот документ хорош для начинания для пик18. но чисто как сравниловка если туго с английским. мне в свое время очень помог. скачай.


http://www.microchip.ru/files/d-sheets- ... manual.pdf

Добавлено after 3 minutes 19 seconds:
PIC 18 + asm это жесть. Ваш код естественно смотреть не буду, есть подозрение что счётчик команд доходит до конца кода и возвращается на 0 адрес, т.е. снова происходит инициализация контроллера.


да нее. ничего сложного нет. сам пишу на АСМ 18. там отличии от 16 го почти нет. кроме нескольких команд. а вот на пик24 уже да. значительно сложнее.

Re: Перезагрузка микроконтроллера

Пт мар 29, 2019 20:03:53

Такой документ у меня уже есть.
Что не так с моим кодом?
Ведь его нету!!!
Кроме таблицы!

Re: Перезагрузка микроконтроллера

Пт мар 29, 2019 20:11:24

Такой документ у меня уже есть.
Что не так с моим кодом?
Ведь его нету!!!
Кроме таблицы!


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

и вообще. ты сам хотел научиться кодить или просто нужны эффекты? на самом деле в сети куча готовых решении по этой ленте. на ардуино?
не проще ли собрать на ней.?

Re: Перезагрузка микроконтроллера

Сб мар 30, 2019 05:00:52

Такой документ у меня уже есть.
Что не так с моим кодом?
Ведь его нету!!!
Кроме таблицы!

Вы, очевидно, даже терминологией не владеете.
Код МК - это и есть программа, включая таблицы.
Код начинает исполняться с нулевого адреса и далее следует строго по исполняемым инструкциям. Ваш код начинается, инициализирует контроллер и далее упирается в таблицу. Таблица - это не инструкции. Таблица не может быть адекватно исполнена. Таблица - это массив констант, которые могут быть просто считаны соответствующими инструкциями кода. У Вас исполнение попадает на таблицу, где байтные константы попарно будут интерпретироваться МК как инструкции. И куда их занесет - Бог ведает. Можно канешна разобрать и самому куда занесет, вручную дизассемблируя пары констант. Но ЗАЧЕМ?
Вам уже сказали, что цикл нужно перенести НАД ТАБЛИЦЕЙ. Вот и все.

Добавлено after 5 minutes 1 second:
ничего сложного нет. сам пишу на АСМ 18. там отличии от 16 го почти нет. кроме нескольких команд. а вот на пик24 уже да. значительно сложнее.

ПИК24 значительно ПРОЩЕ. По крайней мере для реализации простых сущностей. Он позволяет писать на АСМе как на Си.

Re: Перезагрузка микроконтроллера

Сб мар 30, 2019 17:01:01

titr писал(а):в этом коде и нет ничего. кроме инита и вводных данных. самой программы нету. ну или ты забыл часть кода. судя по тексту. выкладывай оригинал программы.

и вообще. ты сам хотел научиться кодить или просто нужны эффекты? на самом деле в сети куча готовых решении по этой ленте. на ардуино?
не проще ли собрать на ней.?


Да, код я не выкладывал, перенес таблицу и заработало.
В ардуино не хочу принципиально.
А решений на PIC18 со скоростью в 40 мгц думаю нету вообще. Ну мне так кажется.

Re: Перезагрузка микроконтроллера

Сб мар 30, 2019 17:19:15

решений на PIC18 со скоростью в 40 мгц думаю нету вообще.

Естественно нет. Это семейство не для быстрых расчетов. 8-битные платформы - это неспешное вычислительное приложение к своей периферии. Тут дело даже не в МИПСах/мегагерцах. Разрядность данных, система команд и архитектура не приспособлены для быстрых расчетов даже средней (16 бит) точности.
У Микрочипа на 40 МИПСах работает dsPIC33F/PIC24H, на 70 МИПСах - dsPIC33E/PIC24E, на 90 МИПСах - dsPIC33C/PIC24C. Выше - это уже 32-разрядные MIPS 4K (PIC32MZ) и ARM Cortex M4 (SAMx7).

Re: Перезагрузка микроконтроллера

Вт май 14, 2019 11:34:13

...
Хочу 18 пиком светодиодную ленту на диодах WS2812B запустить.

Для нормальной работы с WS2812 простым "дрыголапом" требуется весьма шустрый МК.
Да и циклы высчитывать надо.
С аттини45 вопрос попроще рещается и то... Приходится поизворачиваться, чтобы
длительную стабильность интервалов удерживать.
:roll:

Re: Перезагрузка микроконтроллера

Сб май 25, 2019 05:16:49

Вот, получил изображение на WS2812.
Изображение

Добавлено after 4 minutes 27 seconds:
Еще прошу помощи!
В тексте программы имеется большая таблица.
В МПлабе вижу только часть ее.
Заметил, что МПлаб видит только 36 байт в строке (строка довольно длинная).
Подскажите, ткните носом где можно почитать каковы параметры таблиц должны быть.

Re: Перезагрузка микроконтроллера

Сб май 25, 2019 07:03:21

А зачем делать таблицу такой широкой?
Параметры редактора можно настроить.
Но из соображений читабельности нет никакого смысла делать таблицу шире экрана, а паче шире печатной страницы.

Re: Перезагрузка микроконтроллера

Сб май 25, 2019 11:26:16

titr
если на ПИКах и на асме вам удобней, то как вариант : https://pikabu.ru/story/nemnogo_razgona_5307131

Re: Перезагрузка микроконтроллера

Вс май 26, 2019 22:36:59

titr писал(а):в этом коде и нет ничего. кроме инита и вводных данных. самой программы нету. ну или ты забыл часть кода. судя по тексту. выкладывай оригинал программы.

и вообще. ты сам хотел научиться кодить или просто нужны эффекты? на самом деле в сети куча готовых решении по этой ленте. на ардуино?
не проще ли собрать на ней.?


Да, код я не выкладывал, перенес таблицу и заработало.
В ардуино не хочу принципиально.
А решений на PIC18 со скоростью в 40 мгц думаю нету вообще. Ну мне так кажется.

32,48,64 МГц. Выбирайте семейство K42. 32 МГц HFINTOSC вам хватит за глаза для пиксельных светодиодов.

Re: Перезагрузка микроконтроллера

Пн май 27, 2019 07:43:02

32,48,64 МГц.
Fcy
Вопрос касался системной частоты, а не частоты осциллятора. 64МГц - это только 16МГц для Fcy.

Re: Перезагрузка микроконтроллера

Пн май 27, 2019 17:38:23

32,48,64 МГц.
Fcy
Вопрос касался системной частоты, а не частоты осциллятора....

Очень сомневаюсь.
Ответить