hallo,
ik heb weer een vraag, en dat gaat eigenlijk, over om iets kort te programeren. ik krijg het wel werkend, maar met een hoop type werk, en dus omslachtig en inefficient. ik zit er al dagen over te denken en naar te kijken maar de korte methode zie ik gewoon niet .
ik heb een switch/case constructie met 24 cases. die vullen 3 variabelen (3x een byte). alleen die variabelen wijzigen iedere keer wanneer die swich/case constructie word doorlopen, en dat is 300x. dus op het eind van het liedje heb ik 3x300 = 900 bytes.
als ik dit allemaal met if/then doe dan worden dat enorme lappen text.
ik heb eigenlijk een "reverse array" nodig (denk ik).
om het duidelijk te maken, heb ik een stuk code toegevoegd, waar in de 2e helft de simpele manier staat.
die switch/case constructie moet behouden blijven, i.v.m. synchronisatie met een ander "device".
ISR(TIMER1_COMPA_vect)
{
static uint8_t PulseCounter = 150;
static uint8_t BitCounter = 0;
if(PulseCounter == 0)
{
PulseCounter = 150;
switch(BitCounter++)
{
case 0 : { byte_1 |= (PINC & 0x80); break; }
case 1 : { byte_1 |= (PINC & 0x40); break; }
case 2 : { byte_1 |= (PINC & 0x20); break; }
case 3 : { byte_1 |= (PINC & 0x10); break; }
case 4 : { byte_1 |= (PINC & 0x08); break; }
case 5 : { byte_1 |= (PINC & 0x04); break; }
case 6 : { byte_1 |= (PINC & 0x02); break; }
case 7 : { byte_1 |= (PINC & 0x01); break; }
case 8 : { byte_2 |= (PINA & 0x80); break; }
case 9 : { byte_2 |= (PINA & 0x40); break; }
case 10: { byte_2 |= (PINA & 0x20); break; }
case 11: { byte_2 |= (PINA & 0x10); break; }
case 12: { byte_2 |= (PINA & 0x08); break; }
case 13: { byte_2 |= (PINA & 0x04); break; }
case 14: { byte_2 |= (PINA & 0x02); break; }
case 15: { byte_2 |= (PINA & 0x01); break; }
case 16: { byte_3 |= (PINB & 0x80); break; }
case 17: { byte_3 |= (PINB & 0x40); break; }
case 18: { byte_3 |= (PINB & 0x20); break; }
case 19: { byte_3 |= (PINB & 0x10); break; }
case 20: { byte_3 |= (PINB & 0x08); break; }
case 21: { byte_3 |= (PINB & 0x04); break; }
case 22: { byte_3 |= (PINB & 0x02); break; }
case 23: { byte_3 |= (PINB & 0x01); PORTD &= ~(1 << PIND4); break; }
// below: pulse counter = 0; needed so that TSAL & TSOP number 1 start on the same time.
case 24: { BitCounter = 0; PulseCounter = 0; start_pulse_train = 0; break; }
// HIER ONDER ZOU DAN EEN ENORME LAP TEXT KOMEN, WAT IK GRAAG EFFICIENTER WIL DOEN.***********
// column_counter word buiten deze ISR op gehoogd ********************************************
if (column_counter == 1)
{
column1_byte1 = byte_1;
column1_byte2 = byte_2;
column1_byte3 = byte_3;
}
if (column_counter == 2)
{
column2_byte1 = byte_1;
column2_byte2 = byte_2;
column2_byte3 = byte_3;
}
.
.
.
.
.
.
.
.
if (column_counter == 300)
{
column300_byte1 = byte_1;
column300_byte2 = byte_2;
column300_byte3 = byte_3;
}
}
}
else
{
PulseCounter -= 1;
}
}