Problem mit T6963c bei Umstellung auf I2C

Gast #1017310
Lesenswert?
• ▲
▼
Hallo,

ich habe ein 240x128 Display mit T6963C Controller. Um Pins zu sparen, 
versuche ich das Display über zwei PCF8574A Portexpander anzusteuern. µC 
ist ein ATMega644 mit 16 Mhz. Pullups am I2C sind vorhanden.

Ein PCF8574A versorgt die Datenleitungen D0-D7, der andere die übrigen 
Steuerleitungen.

Das Display erscheint im schönsten Blau mit etwas mehr Kontrast im 
beschreibbaren Bereich.

Der Code funktioniert nicht, er bleibt bei der while Schleife in der 
Funktion T6963cPutData stehen, in der auf das Display gewartet wird. Ich 
bekommen einen Statuswert von 34 (später 162) angezeigt, was STA1 und 
STA5 (STA1, STA5, STA7) entspricht. Geprüft wird STA0 und STA1, daher 
geht der Code hier in eine Endlosschleife.

Hier die Debug-Ausgabe:
1
+++ Programm Start +++
2
UART Init ok.
3
I2C Init ok.
4
In Display Init.
5
1.
6
2.
7
in T6963cPutData 1
8
Status:  34 
9
Status:  34 
10
Status:  34 
11
Status:  162 
12
Status:  162 
13
Status:  162 
14
Status:  162 
15
Status:  162 
16
Status:  162 
17
Status:  162 
18
Status:  162 
19
Status:  162 
20
Status:  162 
21
Status:  162

Hat jemand eine Idee, warum es nicht funktioniert ? Source-Code anbei.
Angehängte Dateien:
Gast #1017558
Lesenswert?
• ▲
▼
OK, hier das C-File und die relevanten Header-Infos anbei:
1
#define PCF8574A_CMD_Address      0x72  // 0_1_1_1_A2_A1_1_RW
2
#define PCF8574A_DATA_Address      0x76  // 0_1_1_1_A2_1_1_RW
3

4
//Controlbits an PCF8574A_CMD
5
#define T6963C_WR          0    
6
#define T6963C_RD          1
7
#define T6963C_CE          2
8
#define T6963C_CD          3
9
#define T6963C_RST          4
10

11
//Physical Description
12
#define T6963C_ADDR_CGRAML        0x1800  //Lower half of CG (Chars 00-7F)
13
#define T6963C_ADDR_CGRAMH        T6963C_ADDR_CGRAML + 0x80*8  //Higher half of CG (Chars 80-FF)
14
#define T6963C_ADDR_GRAPHIC        0x0400
15
#define T6963C_ADDR_TEXT        0x0000
16
#define T6963C_TEXT_COLS        30    //40 bytes for 6x8 Font, 30 for 8x8 Font
17
#define T6963C_TEXT_ROWS        16
18
#define T6963C_GRPH_COLS        T6963C_TEXT_COLS
19
#define T6963C_GRPH_ROWS        128
20
#define T6963C_FONTWIDTH        8
Angehängte Dateien:
Gast #1017617
Lesenswert?
• ▲
▼
Eventuell ist der Zugriff auf das Display zu schnell.
Ich habe bei 8MHz einige NOPs einfügen müssen damit das klappt.

void StatusCheck_1(void)
{
  u8 Status;
  daten_bus_in(); // Bus auf eingang schalten
  steuer_bus = (1<<WR)+(1<<CD);

  NOP();
  NOP();
  NOP();

  Status = PINA;

  NOP();

  steuer_bus |= (1<<CE);  // CE wieder aus

  NOP();

  daten_bus_out();

  NOP();
  NOP();

  daten_bus = Status;
}

Wenn ich jetzt nur ein NOP weglasse, wird STA0 & STA1 nicht mehr
richtig gelesen.

1 NOP == 125ns

Dies ist nur eine Testfunktion.
Gruß

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.