program cube3x3x3 run no'smooth help

Beta Testing discussion on mikroC PRO for PIC.
Post Reply
Author
Message
pued
Posts: 7
Joined: 21 Jun 2012 09:57
Location: sisaket

program cube3x3x3 run no'smooth help

#1 Post by pued » 26 Oct 2013 13:54

* 3x3x3 cube.c
*
* Created: 24/10/2013 12:19:26
* Author: PUED
* PIC16F876A
* MIKROC PRO FOR PIC
*
*/
void interrupt() {
TMR0 = 96; // Reset counter TMRO 0
INTCON = 0x20; // Bit T0IF=0, T0IE=1 0x20
}

void firework()
{
PORTC=0b0001001;
PORTB=0b00000000;
delay_ms(300);
PORTC=0b0001010;
PORTB=0b00000000;
delay_ms(300);
PORTC=0b0001100;
PORTB=0b00000000;
delay_ms(300);
PORTC=0b0001100;
PORTB=0b11111111;
delay_ms(50);
PORTC=0b0000000;
PORTB=0b00000000;
delay_ms(50);
PORTC=0b0001100;
PORTB=0b11111111;
delay_ms(50);
PORTC=0b0000000;
PORTB=0b00000000;
delay_ms(50);
PORTC=0b0001100;
PORTB=0b11111111;
delay_ms(50);
PORTC=0b0000000;
PORTB=0b00000000;
delay_ms(50);
PORTC=0b0001100;
PORTB=0b11111111;
delay_ms(50);
PORTC=0b0000000;
PORTB=0b00000000;
delay_ms(50);
PORTC=0b0001100;
PORTB=0b11111111;
delay_ms(500);

PORTC=0b0000001;
PORTB=0b00000001;
delay_ms(300);
PORTC=0b0000010;
PORTB=0b00000001;
delay_ms(300);
PORTC=0b0000100;
PORTB=0b00000001;
delay_ms(300);
PORTC=0b0001110;
PORTB=0b10000011;
delay_ms(50);
PORTC=0b0000000;
PORTB=0b00000000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b10000011;
delay_ms(50);
PORTC=0b0000000;
PORTB=0b00000000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b10000011;
delay_ms(50);
PORTC=0b0000000;
PORTB=0b00000000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b10000011;
delay_ms(50);
PORTC=0b0000000;
PORTB=0b00000000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b10000011;
delay_ms(500);

PORTC=0b0000001;
PORTB=0b00000100;
delay_ms(300);
PORTC=0b0000010;
PORTB=0b00000100;
delay_ms(300);
PORTC=0b0000100;
PORTB=0b00000100;
delay_ms(300);
PORTC=0b0001110;
PORTB=0b00001110;
delay_ms(50);
PORTC=0b0000000;
PORTB=0b00000000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00001110;
delay_ms(50);
PORTC=0b0000000;
PORTB=0b00000000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00001110;
delay_ms(50);
PORTC=0b0000000;
PORTB=0b00000000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00001110;
delay_ms(50);
PORTC=0b0000000;
PORTB=0b00000000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00001110;
delay_ms(500);

PORTC=0b0000001;
PORTB=0b01000000;
delay_ms(300);
PORTC=0b0000010;
PORTB=0b01000000;
delay_ms(300);
PORTC=0b0000100;
PORTB=0b01000000;
delay_ms(300);
PORTC=0b0001110;
PORTB=0b11100000;
delay_ms(50);
PORTC=0b0000000;
PORTB=0b00000000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b11100000;
delay_ms(50);
PORTC=0b0000000;
PORTB=0b00000000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b11100000;
delay_ms(50);
PORTC=0b0000000;
PORTB=0b00000000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b11100000;
delay_ms(50);
PORTC=0b0000000;
PORTB=0b00000000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b11100000;
delay_ms(500);

PORTC=0b0000001;
PORTB=0b00010000;
delay_ms(300);
PORTC=0b0000010;
PORTB=0b00010000;
delay_ms(300);
PORTC=0b0000100;
PORTB=0b00010000;
delay_ms(300);
PORTC=0b0001110;
PORTB=0b00111000;
delay_ms(50);
PORTC=0b0000000;
PORTB=0b00000000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00111000;
delay_ms(50);
PORTC=0b0000000;
PORTB=0b00000000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00111000;
delay_ms(50);
PORTC=0b0000000;
PORTB=0b00000000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00111000;
delay_ms(50);
PORTC=0b0000000;
PORTB=0b00000000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00111000;
delay_ms(500);
}
void double_firework()
{
PORTC=0b0001001;
PORTB=0b01010101;
delay_ms(300);
PORTC=0b0001010;
PORTB=0b01010101;
delay_ms(300);
PORTC=0b0001100;
PORTB=0b01010101;
delay_ms(300);
PORTC=0b0001110;
PORTB=0b10000011;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b00111000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b10000011;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b00111000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b10000011;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b00111000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b10000011;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b00111000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b10000011;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b00111000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b10000011;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b00111000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b10000011;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b00111000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b10000011;
delay_ms(300);

PORTC=0b0000001;
PORTB=0b10101010;
delay_ms(300);
PORTC=0b0000010;
PORTB=0b10101010;
delay_ms(300);
PORTC=0b0000100;
PORTB=0b10101010;
delay_ms(300);
PORTC=0b0001110;
PORTB=0b00111000;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b10000011;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00111000;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b10000011;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00111000;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b10000011;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00111000;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b10000011;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00111000;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b10000011;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00111000;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b10000011;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00111000;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b10000011;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00111000;
delay_ms(300);

PORTC=0b0000001;
PORTB=0b11101110;
delay_ms(300);
PORTC=0b0000010;
PORTB=0b11101110;
delay_ms(300);
PORTC=0b0000100;
PORTB=0b11101110;
delay_ms(300);
PORTC=0b0001110;
PORTB=0b00001110;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b11100000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00001110;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b11100000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00001110;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b11100000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00001110;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b11100000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00001110;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b11100000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00001110;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b11100000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00001110;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b11100000;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b00001110;
delay_ms(300);

PORTC=0b0000001;
PORTB=0b10111011;
delay_ms(300);
PORTC=0b0000010;
PORTB=0b10111011;
delay_ms(300);
PORTC=0b0000100;
PORTB=0b10111011;
delay_ms(300);
PORTC=0b0001110;
PORTB=0b11100000;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b00001110;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b11100000;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b00001110;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b11100000;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b00001110;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b11100000;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b00001110;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b11100000;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b00001110;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b11100000;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b00001110;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b11100000;
delay_ms(50);
PORTC=0b0001011;
PORTB=0b00001110;
delay_ms(50);
PORTC=0b0001110;
PORTB=0b11100000;
delay_ms(300);
}


void finish ()
{
PORTC=0b0001010;
PORTB=0b11111111;
delay_ms(50);
PORTC=0b0001100;
PORTB=0b11111111;
delay_ms(1000);
}

void main()
{
CMCON = 0x07;
TRISB = 0;
TRISC = 0;
OPTION_REG = 0x80; // Set timer TMR0
TMR0 = 0;
INTCON = 0x20; // Disable interrupt PEIE,INTE,RBIE,T0IE

while (1){

firework();
double_firework();
finish();
}

}[/color]
Help. source

DigitalDunc
Posts: 67
Joined: 11 Oct 2013 20:25
Location: Leicester, England

Re: program cube3x3x3 run no'smooth help

#2 Post by DigitalDunc » 27 Oct 2013 09:38

Hi! I see that you've managed to get interrupts to work. I have a suggestion for you.

Instead of using massive amounts of assignments and Delay_ms() calls why don't you use the interrupt to update your cube.

You could define arrays of constants for the cube data and set play back the light sequence by playing back a list of adjustments each interrupt. A few words of warning though:-

1) Don't store every LED state as a voxel map or it won't scale well.
2) Declare variables that exist outside the interrupt but changed from within the interrupt as volatile so the compiler knows they can change at any time.
3) You can use an interrupt at a fairly high speed and do very little in it, just communicating with the main code through variables if you like. I like this approach because it makes my code portable between MikroC, Crossworks for ARM and various other compilers I have.

Have you drawn up any flow charts, state machines or whatnot to work out how your program should achieve your goal(s)?
Why use a half a dozen transistors when 3 billion will do. :-)

Post Reply

Return to “mikroC PRO for PIC Beta Testing”