Forum: Mikrocontroller und Digitale Elektronik S65 Display - bei PWM bricht Kommunikation zusammen


von S65_User (Gast)


Lesenswert?

Hallo zusammen,

Ich betreibe ein Siemens S65 Display mit der glcd-lib per SPI.

Das Display hängt an den entsprechenden Leitungen meines Mega644P:
- LCD_DAT   an MOSI
- LCD_CLK   an SCK
- LCD_CS    an SS
- LCD_RESET an PB0
- LCD_RS    an PB2

Funktioniert auch alles wunderbar mit der Ansteuerung. Nur jetzt wollte 
ich eine PWM in Betrieb nehmen und plötzlich bricht das Display 
zusammen.

Mein Codeschnipsel
1
  glcdDisplayInit();
2
        printString("String");
3
4
  DDRB |= (1<<PB3);
5
  DDRD |= (1<<PD7);
6
...
7
8
  // Timer 0 A für PWM
9
  //TCCR0A |= (1<<COM0A1) | (1<<WGM01) | (1<<WGM00);
10
  //TCCR0B |= (1<<CS01) | (1<<CS00);
11
  //TIMSK0 |= (1<<OCIE0A);
12
  //OCR0A  =  252;
13
14
  // Timer 2 A für PWM
15
  TCCR2A |= (1<<COM2A1) | (1<<WGM21) | (1<<WGM20);
16
  TCCR2B |= (1<<CS21) | (1<<CS20);
17
  TIMSK2 |= (1<<OCIE2A);
18
  OCR2A  = 200;

Wie ihr seht, hab ich es schon mit Timer 1 und 2 versucht, hab einfach 
ne LED am Vorwiderstand dran. Die PWM funzt auch (sieht man an der LED).

Ich habe auch schon versucht das Display in Ruhe initialisieren zu 
lassen (2 sek Pause bis sei()). Hilft nix.

Symptom am LCD: Bild "blendet" aus (~0.5 s), dann leuchten alle Pixel, 
dann kommt das Bild wieder und es blendet wieder aus usw.

Stört der Timer die SPI-Kommunikation? Bin ratlos...

von S65_User (Gast)


Lesenswert?

Und außerdem funktioniert meine ISR bei TIMER1_COMPB nicht mehr, das war 
mein Zeitgeber...

Was ist an der PWM-Initialisierung falsch ??

von asdf (Gast)


Lesenswert?

Ob's mit Deinem Problem zusammenhängt kann ich aus Codeschnipseln ohne 
Kontext leider nicht erkennen und alle Effekte erklärt es auf keinen 
Fall:

Es gibt vom S65-Display mindestens 3 verschiedene Typen (LPH88,LS020 und 
L2F50) und mein L2F50 nimmt es einem übel, wenn man das Chipselekt zu 
lange aktiviert (führt zu flimmernden Streifen oder Bildausfall, je nach 
Dauer). Das trat bei mir durch Interrupts (liefen aber teilweise relativ 
lange) während des Bildaufbaus auf. Ich konnte es nur durch Einbau von 
Interruptsperren (natürlich mit Pausen) in die Bibliothek beseitigen.

Die Frage nach dem Fehler bei der PWM-Initialisierung ließe sich 
einfacher beantworten, wenn man wüsste was Du einzustellen 
beabsichtigst.

von S65_User (Gast)


Lesenswert?

Soll später mehrere HighPower-LED's dimmen. Aber das ist in dem Kontext 
ja auch egal. Zurzeit hängt halt nur ne LED als Feedback dran, aber die 
PWM stört mein ganzes Programm.
Wie gesagt, selbst mein Zeitgeber-Interrupt, der alle 100ms aufgerufen 
werden sollte, läuft nicht mehr.

von Michael U. (amiga)


Lesenswert?

Hallo,

S65_User schrieb:
>   // Timer 2 A für PWM

>   TIMSK2 |= (1<<OCIE2A);

hab jetzt zwar keine Unterlagen hier greifbar, aber Du gibst doch hier 
einen Interrupt frei?

Wenn ja, wozu und wo ist die ISR dazu?

AVR-Typ habe ich irgendwie nicht gelesen...

Gruß aus Berlin
Michael

von S65_User (Gast)


Lesenswert?

Oh nein, du hast recht... Das würde erklären, warum mein Timing 
zusammenbricht. Die PWM läuft mit ner hohen Frequenz.

Wenn ich ne PWM haben will, wie "starte" ich die dann? Läuft das 
automatisch los, nachdem ich die erforderlichen Register geschrieben 
habe?


Und wo wir gerade bei diesem Effekt sind: Was passiert bei der 
Programmausführung, wenn ich einen Interrupt freischalte, aber keine ISR 
dazu implementiert habe?


Schonmal danke an Michael, ich hab wieder den Wald vor lauter Bäumen 
nicht gesehen.

S65_User

von Emperor_L0ser (Gast)


Lesenswert?

Moin,
1. für eine PWM benötigst du keine ISR. D.h. du beschreibst deine 
Counter-Register wie gewohnt. Mit dem Einstellen des Prescalers fängt 
der Timer an zu laufen. Wenn du keine ISR schreibst, darfst die ISR 
natürlich auch nicht aktiviert werden (z.B. TIMSK2 |= (1<<OCIE2A); 
weglassen).

2. AFAIK startet der AVR sich neu, wenn du nen ISR-Vektor anspringst, wo 
sich keine ISR befindet. Dabei ist aber zu beachten, dass es sich nicht 
um einen echten Reset handelt, bei dem alle Register zurückgesetzt sind, 
sondern lediglich der Programmcounter bei 0x00 anfängt.

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.