d4_ev1l
Legacy Member
Ik heb nog eens de programmering van mijn led cube bekeken, en ben tot de vaststelling gekomen dat ik er nog veel meer mee zou kunnen doen als ik de code wat op punt stel.
dit is het basisprogramma met een paar waardes dat ie doorstuurt naar de 595s:
De 24 bits die naar load_bytev() gaan zijn 24 van de 25 kolommen van de led cube(de 25e is portb.6)
de 5bits die naar load_byteh() worden gestuurd zin de 5 rijen.
leds staan horizontaal als volgt: (dat#, bit #)
1,1 1,6 2,3 2,8 3,5
1,2 1,7 2,4 3,1 3,6
1,3 1,8 2,5 3,2 3,7
1,4 2,1 2,6 3,3 3,8
1,5 2,2 2,7 3,4 portb.6
Ik zou graag willen een sinusgolf erin programmeren, maar de effecten die ik er tot nu toe in gestoken heb zijn allemaal opeenvolgende commando's die ik zelf moeten programmeren heb, dus niks wiskundige formules fzo.
Heeft iemand een idee hoe ik dat er moet inkrijgen?
dit is het basisprogramma met een paar waardes dat ie doorstuurt naar de 595s:
Code:
#include <system.h>
// Set the device configuration bits
#pragma DATA _CONFIG, _CP_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT
// Tell the compiler the device clock frequency to get the correct delays generated
#pragma CLOCK_FREQ 4000000
// IO's
//Data and clock for the 595's
volatile bit data1 @ PORTB.0;
volatile bit clk1 @ PORTB.1;
volatile bit data2 @ PORTB.2;
volatile bit clk2 @ PORTB.3;
volatile bit data3 @ PORTB.4;
volatile bit clk3 @ PORTB.5;
volatile bit clk4 @ PORTA.0;
volatile bit data4 @ PORTA.1;
volatile bit latchv @ PORTA.2;
volatile bit latchh @ PORTA.3;
void load_bytev(char dat1, char dat2, char dat3);
void load_byteh(char dat4);
void main(){
trisa = 0;
porta = 0;
trisb = 0;
portb = 0;
while(1){
load_byteh(0b11111);
load_bytev(0b10001, 0b0, 0b10000);
portb.6 = 1;
delay_ms(1000);
portb.6 = 0;
load_bytev(0b10, 0b10000010, 0b10000000);
delay_ms(1000);
load_bytev(0b100, 0b1000100, 0b1000000);
delay_ms(1000);
load_bytev(0b101000, 0b00000, 0b000101);
delay_ms(1000);
}
}
void load_bytev(char dat1, char dat2, char dat3){
char i = 0;
for (i = 0; i < 8; i++){
data1 = (dat1 & 0x01);
dat1 = dat1 >> 1;
clk1 = 0;
clk1 = 1;
}
for (i = 0; i < 8; i++){
data2 = (dat2 & 0x01);
dat2 = dat2 >> 1;
clk2 = 0;
clk2 = 1;
}
for (i = 0; i < 8; i++){
data3 = (dat3 & 0x01);
dat3 = dat3 >> 1;
clk3 = 0;
clk3 = 1;
}
latchv = 1;
delay_us(50);
latchv = 0;
}
void load_byteh(char dat4){
char i = 0;
for (i = 0; i < 8; i++){
data4 = (dat4 & 0x01);
dat4 = dat4 >> 1;
clk4 = 0;
clk4 = 1;
}
latchh = 1;
delay_us(50);
latchh = 0;
}
De 24 bits die naar load_bytev() gaan zijn 24 van de 25 kolommen van de led cube(de 25e is portb.6)
de 5bits die naar load_byteh() worden gestuurd zin de 5 rijen.
leds staan horizontaal als volgt: (dat#, bit #)
1,1 1,6 2,3 2,8 3,5
1,2 1,7 2,4 3,1 3,6
1,3 1,8 2,5 3,2 3,7
1,4 2,1 2,6 3,3 3,8
1,5 2,2 2,7 3,4 portb.6
Ik zou graag willen een sinusgolf erin programmeren, maar de effecten die ik er tot nu toe in gestoken heb zijn allemaal opeenvolgende commando's die ik zelf moeten programmeren heb, dus niks wiskundige formules fzo.
Heeft iemand een idee hoe ik dat er moet inkrijgen?
