mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit T6963c bei Umstellung auf I2C


Autor: Verzweifelter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
+++ Programm Start +++
UART Init ok.
I2C Init ok.
In Display Init.
1.
2.
in T6963cPutData 1
Status:  34 
Status:  34 
Status:  34 
Status:  162 
Status:  162 
Status:  162 
Status:  162 
Status:  162 
Status:  162 
Status:  162 
Status:  162 
Status:  162 
Status:  162 
Status:  162 


Hat jemand eine Idee, warum es nicht funktioniert ? Source-Code anbei.

Autor: Verzweifelter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(hochschieb)

Autor: Das delay (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Poste den Code als C File im Anhang und nicht als ZIP.
Dann kann man weitersehen.

Autor: Verzweifelter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
OK, hier das C-File und die relevanten Header-Infos anbei:
#define PCF8574A_CMD_Address      0x72  // 0_1_1_1_A2_A1_1_RW
#define PCF8574A_DATA_Address      0x76  // 0_1_1_1_A2_1_1_RW

//Controlbits an PCF8574A_CMD
#define T6963C_WR          0    
#define T6963C_RD          1
#define T6963C_CE          2
#define T6963C_CD          3
#define T6963C_RST          4

//Physical Description
#define T6963C_ADDR_CGRAML        0x1800  //Lower half of CG (Chars 00-7F)
#define T6963C_ADDR_CGRAMH        T6963C_ADDR_CGRAML + 0x80*8  //Higher half of CG (Chars 80-FF)
#define T6963C_ADDR_GRAPHIC        0x0400
#define T6963C_ADDR_TEXT        0x0000
#define T6963C_TEXT_COLS        30    //40 bytes for 6x8 Font, 30 for 8x8 Font
#define T6963C_TEXT_ROWS        16
#define T6963C_GRPH_COLS        T6963C_TEXT_COLS
#define T6963C_GRPH_ROWS        128
#define T6963C_FONTWIDTH        8

Autor: Das delay (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde vor dem Lesen von Status ein 0xFF auf den
PCF mit den Datenleitungen schreiben. Jede 0 ist ein
niederohmiger Ausgang gegen den der T6963 evtl. nicht ankommt.

Autor: Verzweifelter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.