Ich hab mir jetzt mal einen anderen Beitrag mit den Anzeigen von Dir angeschaut.
Hier geht es ja nicht um eine SPI, sondern um eine Codierung, bei denen ein 0 Bit und ein 1 Bit lediglich eine andere Pulsweite aufweisen.
Das würde ich versuchen mit einem Timer zu realisieren.
Bei einem 20MHz Prozessortakt würde ein Timer für ein Bit genau 25 Prozessortakte für ein komplettes Bit brauchen.
Wenn man jetzt einen Timer mit einem CTC und dem Compare A Timer mit 24 proggt und das Comparematch B mit dem Wert für die 1 oder 0 versieht ( z.B. 17 ),
werden gültige Pulslängen ausgegeben. Der Comparematch B müsste dazu im Fast PWM Modus arbeiten.
Der Comparematch B Wert müsste im Comparematch Interrupt A upgedatet werden.
Die Crux dabei ist, das die Updaterei innerhalb von ca. 7 Prozessortakten geschehen muss.
Das ist auch in Assembler keine leichte Aufgabe.
Alle Register sichern wie Bascom das üblicherweise macht wird wohl nicht möglich sein.
Ich würde es mit einem inkrementierenden X Register und einer Tabelle mit einem Tabellenplatz ( = 8Bit ) pro auszugebenden Bit in Assembler probieren.
Die benutzten Register dürfen dann aber von Bascom nicht mehr verwendet werden und exklusiv für die Biterzeugung des Displays arbeiten.
Alternativ könnte man das Gleiche auch im Comparematch B Interrupt versuchen.
Allerdings muss man dann peinlichst darauf achten, das das Comparematch B Register nicht zu früh geändert wird.
Dann hätte man für die Updaterei 16 Prozessortakte.
Die Aufgabe bleibt aber weiterhin sportlich.
Lesezeichen