@ijjiij
Sorry ich hab gerade erst Deinen Dateianhang in Antwort #8 entdeckt.
Im Prinzip wär das so richtig, nur das es von der ersten Uhr zur zweiten und dann von der zweiten zur dritten Uhr gehen soll.
Das mit dem Schieberegister stimmt so. In jede Uhr kommt somit ein Controller, der die Schieberegister nur für diese Uhr bearbeitet.
Übrigens würde ich für eine Stelle 8 Bit verbraten. Zum einen Hat so eine Anzeige eventuell einen Dezimalpunkt und es passt auch besser in die 8Bit Struktur eines solchen Controllers. Da auch die Hardware SPI immer 8 Bits sendet.
Das bei den Zahlen die richtigen Segmente angesteuert werden lässt sich am geschicktesten über eine indizierte Tabelle erreichen.
unsigned char uc_disptable[10] {0b01100000,0b11011010,0b11110010,0b...... usw.}
Das indiz ist dann die Zahl die angezeigt werden soll, in der Tabelle verstecken sich die anzusteuernden Segmente.
Die Ziffer 0 würde dann den ersten Speicherplatz ansprechen also uc_dispplatz[0]=uc_displtable[0];
Die Dezimalpunktansteuerung würde ich nach dem Auswählen der Ziffer erst machen also uc_displplatz[0]|=0b00000001;
Sind alle Segmentinformationen beisammen wird alles in die Display Schieberegister geschoben.
for(uc_i=0;uc_i<10;uc_i++)
{
while(ssr&0b10000000==0){} //Warten bis die SPI frei ist Programmbeispiel im ATMEL Datasheet beachten!
{
sdr=uc_displplatz[uc_i]; //Zu übertragende Daten in das Datenregister der SPI übergeben
}
}
LATCH = 1; // Nachdem alle Daten zu den Schieberegistern übertragen wurden Latch Impuls generieren
#asm("nop");
LATCH = 0;
Ist jetzt natürlich nur ein pseudo Code. Die Registernamen der SPI hab ich jetzt nicht im Datenblatt nachgeguckt.
Lesezeichen