За основу взята статья Светодиодный КУБ 5 х 5 х 5

Очень удобно работать с прошивками в програмной среде MPLAB . 

При включении питания на нем отображается текст "PICPROJECTS", а затем продолжает работать с помощью ряда случайно выбранных эффектов анимации. Если переключатель S1 нажать при включении питания будет показывать отображения текста.

Для начала отредактируем слово высвечивающееся в кубе, по умолчанию это слово "PICPROJECTS" изменим его на "HELLO". Для этого открываем ledCubeC.asm и CubeProgram.inc, в CubeProgram.inc видим следующий рядок:

редактируем его на :

LDR Р.З., 4 
MSET
LDR R0, 'H'
JSR WRITE
LDR R0, 'E'
JSR WRITE
LDR R0, 'L'
JSR WRITE
LDR R0, 'L'
JSR WRITE
LDR R0, '0 '
JSR WRITE
RET

Все очень просто. Каждый символ анимированый при помощи двух команд, например, буква "Р" осуществляется с помощью этих двух команд. 

LDR R0, 'P'
JSR WRITE

Как вы уж поняли все коды для "рисования" прописаны в файле  CubeProgram.inc, вот его и надо редактировать.

DP имеет 8 регистров; 4 общего назначения и 4 специального назначения. Все регистры 8 бит и могут хранить значения в диапазоне 0-255.

Положение эффектов определяется ее X, Y и Z координат.

Регистры

Все эффекты прописаны через спец регистры, в таблице приведены:

Имя регистра Функции Диапазон
R0 Общего назначения  0-255
R1 Общего назначения   0-255
R2 Общего назначения   0-255
R3 Общего назначения   0-255
RHOLD Временная задержка для команды SHOW (х 10 мс)  0-255
RX X координат  для voxel и функций рисования  0-4
RY Y координат  для voxel и функций рисования  0-4
RZ Z координат  для voxel и функций рисования  0-4

 

Набор инструкций

 

r - имя регистра
k - константа данных 

Мнемоника Описание Флаги  Регистр
NOOP Нет операции    
       
MSET Изменить набор операций для voxel включить    
MCLR Изменить набор операций для voxel выключить    
MINV Измение операции, будет инвертировано текущее значение voxel      
       
SETALL Включите все трехмерные объекты в кубе (independant of MSET, MCLR and MINV instructions)    
CLRALL Выключите все трехмерные объекты в кубе (independant of MSET, MCLR and MINV instructions)    
INVALL Инвертировать все трехмерные объекты в кубе (independant of MSET, MCLR and MINV instructions)    
       
SHOW Передача буфера рисунока для отображения и величины загрузки в RHOLD регестрированого в таймере    
       
VOX k,k,k Загрузка RX, RY, RZ и изменить voxel   [ 0 <= k <= 4 ]   RX,RY,RZ
VOXM Изменить voxel по текущим RX, RY, RZ координатам    
TSTVOX Испытание voxel по текущим RX, RY, RZ координат.
Fzero clear if voxel on : Fzero set if voxel off
Fzero  
       
CHYR r Draw ASCII символов, указанного в регистре r in the Y (вертикальной) плоскости    
CHZR r Draw ASCII символов, указанного в регистре r in the Z (горизонтальной) плоскости    
CHY k Draw ASCII значение символа value k in the Y (вертикальной) плоскости  [32 <= k <= 95]    
CHZ k Draw ASCII значение символа value k in the Z (горизонтальной) плоскости [32 <= k <= 95]    
       
LINE k,k,k,k Изменить линию трехмерные объекты, specify x inc, y inc, z inc, length   RX,RY,RZ
LINEX Modify line of voxels across the whole X axis, located at RY,RZ    
LINEY Modify line of voxels across the whole Y axis, located at RX,RZ    
LINEZ Modify line of voxels across the whole Z axis, located at RX,RY    
       
PLANEX Modify all voxels in the YZ plane, located in the X-axis at  RX    
PLANEY Modify all voxels in the XZ plane, located in the Y-axis at  RY    
PLANEZ Modify all voxels in the XY plane, located in the Z-axis at  RZ    
       
ROTATEX Rotate entire cube along a line at y=2, z=2 in the x-axis    
       
SHXL Shift entire drawing buffer left one voxel.     
SHXR Shift entire drawing buffer right one voxel.    
SHYU Shift entire drawing buffer up one voxel    
SHYD Shift entire drawing buffer down one voxel    
SHZF Shift entire drawing buffer forward one voxel     
SHZB Shift entire drawing buffer back one voxel     
       
DECX Decrement RX register, modulo 5 Fzero RX
DECY Decrement RY register, modulo 5 Fzero RY
DECZ Decrement RZ register, modulo 5 Fzero RZ
INCX Increment RX register, modulo 5 Fzero RX
INCY Increment RY register, modulo 5 Fzero RY
INCZ Increment RZ register, modulo 5 Fzero RZ
       
DECR r Decrement register, modulo 256 Fzero r
DECRSZ r Decrement register, modulo 256, Skip next instruction if result is zero   r
INCR r Increment register, modulo 256 Fzero r
INCRSZ r Increment register, modulo 256, Skip next instruction if result is zero   r
       
PUSHR r Push register contents onto top of stack    
PULLR r Pull top of stack and place contents into register   r
PUSHXYZ Push registers RX, RY, RZ on to stack    
PULLXYZ Pull registers RX, RY, RZ from stack   RX,RY,RZ
DROP Pull entry from top of stack and discard it  ( a -- )    
SWAP Swap top two entries on stack.  ( a b -- b a )    
DUP Duplicate entry on top of stack.   (a b -- a a b )    
OVER Operates on the stack : (a b -- a b a )    
ROT Operates on the stack : ( a b c -- b c a)    
TSTZ Test value on top of stack and condition Fzero flag  (a -- a ) : a==0 Fzero set, a != 0 Fzero clear Fzero  
       
ADD pulls two values from the stack, adds them together and pushes result back onto stack Fzero
Fcarry
 
SUB pulls two values from the stack, subtracts them and pushes result back onto stack
order is (TopOfStack-1) - (TopOfStack) -> TopOfStack
Fzero
Fcarry
 
AND pulls two values from the stack, performs a bitwise 'AND' result is pushed back onto stack Fzero  
OR pulls two values from the stack, performs a bitwise 'OR' result is pushed back onto stack Fzero  
XOR pulls two values from the stack, performs a bitwise 'XOR' result is pushed back onto stack Fzero  
NOT pull value from top of stack, perform bitwise 'NOT' operation on byte and push result back on to stack Fzero  
       
CMP r, k Compare register contents with k.  If contents of r == k then Fzero Set, else Fzero Cleared. Fzero  
       
LDXYZ k,k,k Load RX, RY, RZ    [ 0 <= k <= 4 ]     (see also VOX k,k,k)   RX,RY,RZ
LDR r,k Load register with value k   [0 <= k <= 255 ]   r
LDRAND r,k Load register with random number in the range [ 0 <= Random Number < k ]   r
LDTMR k Загрузка таймера с периодом в сек. [1 <= k <= 255 ]    
ADDTRND k Добавить случайное число в диапазоне [ 0 <= Random Number < k ] to contents of Timer    
       
SKIPZ Перейти следующей инструкции если Fzero flag is set    
SKIPNZ Перейти следующей инструкции если Fzero flag is clear    
SKIPC Перейти следующей инструкции если flag is set    
SKIPNC Перейти следующей инструкции если Fcarry flag is clear    
SKIPTOUT Пропустить следующую инструкцию, если таймер == 0    
JUMP k Перейти к программе адрес k    
JSR k Перейти к подпрограмме по адресу k    
RET Вернуться из подпрограммы    
       
RANDSEED Seed random number generator with non-zero value from  TMR0    
SYNCEXT k Wait for a falling edge on SW1 input before continuing program execution or timer out Fzero  
TSTSW Испытание SW1 вводаt. Установите Fzero flag if switch active (pressed), Clear Fzero flag if switch not active Fzero  



 


После редактирования исходника необходимо создать HEX, который и будет зашит в МК.

Скачать исходник, прошивку и схему 


Источник

   
drug # 1
 
 
у меня вопрос как срздать HEX файл после редоктирования sweated


   
Nikolai4 # 2
 
 
обычная компиляция через mplab с прикреплением всех файлов ///inc ///


   
drug # 3
 
 
а можно объяснить по подробнее я профан в этом деле . заранее спасибо
весь процесс bash


   
Nikolai4 # 4
 
 
для начала вот
Как компилировать прошивку для PIC из .asm
но тут надо еще прикрепить файлы расширением .inc, надо целую статью писать…
все делаеться через программу mplab,


   
Nikolai4 # 5
 
 
все фалы с расширением .inc должны быть рядом с файлом .asm при компиляции!


   
drug # 6
 
 
там выбор пиков слабоват 16f688 нема или выбор пиков по предельно позхожим


   
Владимир_59 # 7
 
 
сделал, все получилось хорошо. Попробовал текст менять тоже ОК, и он идет всегда после вкл. питания.
А если кнопку держать нажатой то "текст" пропускается.
Nikolai4 подскажи на примере хоть как одну программу поменять.


   
Jerzy # 8
 
 
А зачем это надо????


Обновления

Сообщения ФорумаОтветов
3D Модели для Авто0
Бакометр 2335
Touch Start-Stop Engine.587
Кодграберр17
Исправляем AVR фьюзы при помощ …109
Бакометр - измеритель остатка…4
IR конструктор на PIC12F62977
Универсальное зарядное устройство103
бaкoмeтр1974
Двунаправленный автомобильный…2
Программатор GENIUS G8401
Светодиодный тахометр34
Индикаторы ГРИ ИН1 - ИН141
Multiprog1
Управляющая программа LED CUB959
Универсальное зарядное устройство9
Изготовлю печатные платы29
Простой автоматический выключа…25