Für ein 16x32 RGB-Ledmatrix bräuchte ich ein paralleles 6fach shiftout. Das display hat 6 Eingänge von Schieberegistern, deren clocks alle miteinander verbunden sind. Der Kontroller mus also an 6 Ausgangspins bits bereit stellen, die mit einem Clockpuls in die Register übernommen werden. Derzeit hab' ich das so gelöst
Alles anzeigen
Die bytes werden bitweise an die 6 pins gelegt und ein weiterer pin macht den clock. Verschärfend ist die Notwendigkeit nach einem ausgegebenen byte die bit Reihenfolge zu ändern. Das Ganze dauert recht lange. Die Alternative wäre alle 48 Schieberegister in Reihe zu schalten und mit einem shiftout die ganzen bytes auszugeben. Erfordert eine komplizierte Verkabelung, um die Ausgänge an die Eingänge der Register zu bringen, geht aber dann min. 2,5x so schnell. Hat man jetzt mit Assembler eine Chance da was hin zu bekommen? Vielleicht reizt die Aufgabenstellung einen Assemblercrack? Ich bin total überfordert.
BASCOM-Quellcode
- 'Interrupt service
- Display_refresh: 'show the memory on the display
- Load Timer2 , Timer2reload
- Toggle Page_counter.0
- If Page_counter.0 = 0 Then
- Restore Byte_order_a
- Else
- Restore Byte_order_b
- End If
- For B_1 = 0 To 7
- Read Byte_num_1
- Read Byte_num_2
- For C_1 = 7 To 0 Step -1
- P_r1 = Memory_red(byte_num_2).c_1
- P_g1 = Memory_green(byte_num_2).c_1
- P_b1 = Memory_blue(byte_num_2).c_1
- P_r2 = Memory_red(byte_num_1).c_1
- P_g2 = Memory_green(byte_num_1).c_1
- P_b2 = Memory_blue(byte_num_1).c_1
- P_ckl = 1 : P_ckl = 0
- Next C_1
- Read Byte_num_1
- Read Byte_num_2
- For C_1 = 0 To 7
- P_r1 = Memory_red(byte_num_2).c_1
- P_g1 = Memory_green(byte_num_2).c_1
- P_b1 = Memory_blue(byte_num_2).c_1
- P_r2 = Memory_red(byte_num_1).c_1
- P_g2 = Memory_green(byte_num_1).c_1
- P_b2 = Memory_blue(byte_num_1).c_1
- P_ckl = 1 : P_ckl = 0
- Next C_1
- Next B_1
- Pwm0 = 0
- P_lat = 1 : P_lat = 0
- P_a = Page_counter.0
- P_b = 0
- Pwm0 = Brightness
- Trigger = 1
- Return
- Byte_order_a:
- Data 12 , 44 , 4 , 36 , 13 , 45 , 5 , 37 , 14 , 46 , 6 , 38 , 15 , 47 , 7 , 39 , 28 , 60 , 20 , 52 , 29 , 61 , 21 , 53 , 30 , 62 , 22 , 54 , 31 , 63 , 23 , 55
- Byte_order_b:
- Data 8 , 40 , 0 , 32 , 9 , 41 , 1 , 33 , 10 , 42 , 2 , 34 , 11 , 43 , 3 , 35 , 24 , 56 , 16 , 48 , 25 , 57 , 17 , 49 , 26 , 58 , 18 , 50 , 27 , 59 , 19 , 51
Raum für Notizen
-----------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------