S65 Display - bei PWM bricht Kommunikation zusammen

Gast #1574385
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...
Gast #1574556
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.
Gast #1574726
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.
Gast #1574758
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
Gast #1575118
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren