Stap 3: De Microcontroller-Interface
Ik niet de juiste condensator waarden gebruiken bij het bouwen van de jas. Ik wilde niet een electrolytics in de mix. De 6952 is een tamelijk veerkrachtig chip en heeft stond vrij goed op mijn misbruik.
Ik ben stroom wordt voorzien voor de boarduino rechtstreeks met de 4AA voeding en 5v vervolgens uit te voeren naar de max6952.
En hier is wat voorbeeldcode voor interfacing de boarduino met de max6952:
Max 6952 voorbeeldcode voor Arduino
Getest op Boarduino
Matt Joyce @ NYC Resistor
#define DATAOUT 11 / / MOSI
#define DATAIN 12 / / MISO - niet gebruikt, maar een deel van de ingebouwde SPI
#define SPICLOCK 13 / / sck
#define SLAVESELECT 10 / / ss
char spi_transfer (vluchtige char gegevens)
{
SPDR = gegevens;
De overdracht starten
terwijl (! () SPSR & (1 << SPIF))) / / wachten van het einde van de transmissie
{
};
retourneren SPDR; retourneren van de ontvangen byte
}
VOID Setup
{
byte i;
byte clr;
pinMode (DATAOUT, uitvoer);
pinMode (DATAIN, INPUT);
pinMode(SPICLOCK,OUTPUT);
pinMode(SLAVESELECT,OUTPUT);
digitalWrite(SLAVESELECT,HIGH); apparaat uitschakelen
SPCR = 01010000
Interrupt uitgeschakeld, spi ingeschakeld, msb 1e master, clk lage wanneer nutteloos,
monster op voorrand van clk, systeem klok/4 (snelste)
SPCR = 0b01010010;
CLR = SPDR;
delay(32);
Register configureren
write_led_twice(0x04,0x01);
Intensiteit deelvensters 1 en 2
write_led_twice(0x01,0xFF);
write_led_twice(0x02,0xFF);
Scan limiet
write_led_twice(0x03,0x01);
}
byte write_led (int adres, int value)
{
digitalWrite(SLAVESELECT,LOW);
2 byte opcode
spi_transfer(Address);
spi_transfer(Value);
delay(36);
digitalWrite(SLAVESELECT,HIGH); vrijgeven van de chip, signaal einde overdracht
}
N keer voor n schrijven chips daisy geketend.
byte write_led_twice (int adres, int value)
{
digitalWrite(SLAVESELECT,LOW);
2 byte opcode
spi_transfer(Address);
spi_transfer(Value);
spi_transfer(Address);
spi_transfer(Value);
delay(36);
digitalWrite(SLAVESELECT,HIGH); vrijgeven van de chip, signaal einde overdracht
}
void loop
{
Testen ROM-tekenset
write_led_twice(0x20,0x5e);
write_led_twice(0x21,0x5e);
write_led_twice(0x22,0x5e);
write_led_twice(0x23,0x5e);
delay(4000);
Programmeerbare RAM-geheugen testen
write_led_twice(0x05,0x80);
write_led_twice(0x05,0x42);
write_led_twice(0x05,0x61);
write_led_twice(0x05,0x51);
write_led_twice(0x05,0x49);
write_led_twice(0x05,0x46);
write_led_twice(0x20,0x80);
write_led_twice(0x21,0x80);
write_led_twice(0x22,0x80);
write_led_twice(0x23,0x80);
delay(4000);
Gred Test Register oproep
write_led_twice(0x07,0x01);
delay(1000);
Uitschakelen Test registreren
write_led_twice(0x07,0x00);
}