Had wat tijd over vanmiddag en een peilroosje (36 leds ) gemaakt voor de arduino.
Misschien zitten er nog wat ideeen in voor deze en gene.
Het maakt gebruik van de poortregisters , leuke bijkomstigheid is dat dit 10 X sneller werkt
en even als voorbeeld een rondlopertje om te kijken of alles goed werkte.
Het probleem was eigenlijk hoe krijg ik led 0 van - 4 graden tot +5 graden ( eigenlijk altijd 1 graad afwijking )
Als volgt opgelost: door er bij de hoek 5 graden op te tellen en boven de 360 direct Led0 aan te sturen is eigenlijk niet elegant maar het werkt. ( hele proces duurt +/- 2.5 usec )
De analoge poortjes A0 t/m A4 worden hiervoor gebruikt , A5 kan dan als analoge ingang gebruikt worden, Nog niet geprobeerd , maar zag er wel hoogohmig uit op de scoop.
Voor de rest van het schema en aansluitingen zie:
http://www.nxp.com/documents/data_sheet/74HC137.pdf
http://www.nxp.com/documents/data_sheet/74HC237.pdf
Het koste me meer tijd om het schema te tekenen dan om het te maken ( op plak_eilandjes ).
Code: Selecteer alles
//Goos Visser PAoSIR.
// voorbeeldje voor een display met 36 leds voor de Arduino
// zie schema
void setup() {
Serial.begin(9600);
// zet de eerste 5 bits direction register van poort C op output
// dit zijn de analoge ingangen 0 t/m 4
DDRC=B11111;
}
int hoek;
void loop() {
hoek=0;
while (hoek<=359){
delay(100);
Serial.println(hoekgraden);
leddisp();
hoek = hoek+1;
}
}
void leddisp() {
int hgr = hoek + 5; // dit zorgt ervoor dat ledje 0 actief is tussen -5 en + 5 graden enz.
int hoekleds;
byte hl;
if (hgr >=360) { hgr = 0; }
hoekleds=hgr / 10;
hl=hoekleds & B111;
// zet de minst signifikante 3 bits van var hgr in var hl
PORTC=B10000+hl;
// PORTC=B10000+hl;
// stuur tegelijk met de data de latchpuls (bit 4)
// eventueel 2 x omdat de latchpuls n.l. erg kort is (+/- 200nsec )
PORTC=B11000+hl; // en maak de latchpuls weer hoog
// en dit is voor het segment
// schuif de zaak 3 bits naar rechts voor de segmenten
hl=hoekleds>>3 & B111;
PORTC=B01000+hl;
// PORTC=B01000+hl;
PORTC=B11000+hl;
}
Goos