Hallo Ihr Allwissenden,
voller Verzweiflung wende ich mich an Euch.... Ich habe einen AtMega6490
und möchte an diesem ein passives Display mit zwei COMs und 35 Segmenten
betreiben. http://www.atmel.com/Images/doc2552.pdf
Wie auf Seite 232 beschrieben, habe ich bei der Initialisierung zunächst
einen 1/2 Bias und 1/2 Duty angenommen. LCD Interrupt Enable, LCD
Interrupt Flag und LCD Blanking sind deaktiviert. LCD Enable ist aktiv.
Die Segementanzahl beträgt LCDPM3 LCDPM2 LCDPM1 LCDPM0 -> 1100, also 35.
Benütze ich darauffolgend die Befehle
ldi tmp, 0b00000001
sts LCDDR0, tmp // für COM0 und durch tmp SEG000
sts LCDDR5, tmp // für COM1 und durch tmp SEG100
sind beide gewünschten Segmente mit einer bestimmten Intensität
aktiviert.
Benütze ich darauffolgend die Befehle
ldi tmp, 0b00000001
sts LCDDR0, tmp // für COM0 und durch tmp SEG000
sts LCDDR6, tmp // für COM1 und durch tmp SEG108
sind die vorherigen zwei Segmente und zwei neue Segmente aktiviert.
Jetzt sind quasi vier Segmente mit halber Lichtintensität aktiviert. Der
Grund hierfür ist, dass eben beide COMs Multiplexen. Und klar, im ersten
Fall ist dann dementsprechend die Leuchtintensität höher, da in der
selben Zeit beide doppelt angesteuert werden.
Die in Figure 23-4 abgebildeten Oszillogramme konnte auch ich ermitteln,
passt soweit.
Ich nehme an, beide COMs multiplexen ständig und ich muss halt genau im
richtigen Moment die Daten übergeben.Genau hier ist aber das Problem.
Als LCD_Clock habe ich den internen Systemtakt benutzt.
Im LCDFRR – LCD Frame Rate Register habe ich nun die Möglichkeit einen
Prescaler sowie Clock Divide zu benutzen.
Es ist schön, dass eine Formel zur Ermittlung eines Frames auf Seite 242
angegeben ist, doch wie lang darf oder muss ein Frame
sein? Wann genau muss ich in diesem Frame meine Daten durch sts_LCDDRx
aktualisieren?
Schlussendlich benötige ich nicht wirklich Code, sondern eine Art
Ablaufsequenz zur Ansteuerung von zwei "einzelnen" Segmenten.
Viele Grüße und Dank
Silvio