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
Silvio S. schrieb: > 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. Ich glaube mich zu erinnern, dass man dies in der zuständigen ISR macht. Schau dir doch mal den Beispielcode vom Butterfly an. Der ist zwar für einen ATmega169, aber das Prinzip müsste doch gleich sein. Auch vom AVR Raven geistert Code im Netz herum. Die originalen Appnotes (mit Code) von Atmel sind da zwar wohl nicht mehr auf deren Server zu haben (nur noch auf alten CD-ROMs), aber es gibt im µracoli-Project ein Verzeichnis Contrib/RavenLCD mit ein wenig Beispielcode von Daniel Thiele.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.