Hello everybody
I experience some odd going on’s with a midi switcher idea i want to build directly in an old tube guitar amplifier.
The Design: I use a core + a improvised relay board based on the relay_example.pdf with the 74HC595 and the ULN2803. there are 8 relays and only one 74HC595 with one ULN2803 attached connected via a 5 pin cable to the core-pcb.
The good thins: Everything seems to work fine from the start. the lcd flashes up. MIOS could be programmed and i was able to compile c applications and upload them into the pic to be greeted with nice characters in the display.
The Problem: Beside i’ve got not very much knowledge about c the relays wont work the way they should. Using the code posted below i’m only able to get 2 relay-states.
State 1: 11111111
all 8 relays get powered
State 2: 10101010
every second relay gets powered
The very strange thing about this all is that it only depends on pin 0x07!!!
0x07 = 1 –> above State 1
0x07 = 0 –> above State 2
All other pins do nothing.
As example in this code with
evnt1=0x00 –> the relays are going in State 1
evnt1=0x01 –> the relays are going in State 2
void MPROC_NotifyReceivedEvnt(unsigned char evnt0, unsigned char evnt1, unsigned char evnt2) __wparam
{
//**On MIDI Recieve**//
//only work if Program Change is received on channel 1
if( evnt0 == 0xc0) {
//only work if Program Change 1,2 received
if(evnt1 == 0x00) {
//reset all pins
MIOS_DOUT_PinSet(0x00, 0);
MIOS_DOUT_PinSet(0x01, 0);
MIOS_DOUT_PinSet(0x02, 0);
MIOS_DOUT_PinSet(0x03, 0);
MIOS_DOUT_PinSet(0x04, 0);
MIOS_DOUT_PinSet(0x05, 0);
MIOS_DOUT_PinSet(0x06, 0);
MIOS_DOUT_PinSet(0x07, 1);
//activate the recieved program change’s pin to control the relay
MIOS_DOUT_PinSet(evnt1, 1);
}
else if (evnt1 == 0x01)
{
MIOS_DOUT_PinSet(0x00, 1);
MIOS_DOUT_PinSet(0x01, 1);
MIOS_DOUT_PinSet(0x02, 1);
MIOS_DOUT_PinSet(0x03, 1);
MIOS_DOUT_PinSet(0x04, 1);
MIOS_DOUT_PinSet(0x05, 1);
MIOS_DOUT_PinSet(0x06, 1);
MIOS_DOUT_PinSet(0x07, 0);
}
}
}
Is it still a hardware problem i cannot find? i’ve checked my wirings several times. Or am I doing something wrong in the c code? it looks like there is only a little piece missing…
thanks for any help or advice.
gunnar