Forum: Compiler & IDEs ATmega6490 - Ansteuerung passives Display


von Silvio S. (deschmsi)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.