Problem mit T6963c bei Umstellung auf I2C

Gast #1017310
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
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
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ß
Gast
DANKE !!!

Es funktioniert :-)

Ich habe in der GetStatus Routine als erstes ein 0xFF auf den Datenbus 
geschrieben und noch zwei nops eingefügt.

Vielen Dank, wieder etwas dazugelernt!
Gast
>Ich habe in der GetStatus Routine als erstes ein 0xFF auf den Datenbus
>geschrieben und noch zwei nops eingefügt.

Du kannst sämtliche nops weglassen. I2C ist langsam genug ;)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.