Hallo, ich versuche ein eDip 240 TP Display von Electronic Assembly über SPI anzusteuern und bekomme es nicht hin. Da ich noch nicht so fit bin in dem Bereich hoffe ich auf eure Hilfe. Das erste Problem ist, dass mein Microcontroller ADUC 7026 von Analog Devices mit 3,3V betrieben wird, das Display aber mi 5V. Nun hab ich verschiedene Angaben dazu gefunden, die einen sagen es wäre kein Problem, da das Display ab 0,6xVDD als high erkennt und das dann mit 3v passen müsste. Andererseits laufen ein Teil ´der Ausgänge auch mit 2,5V. Andere sagen ich rauche komplizierte Pegelwandlerchips? Kennt sich hier jemand damit aus? Ich Versuche den Controller mit C und Keil uVision 3 zu programmieren. Nun wäre ein Beispielprogramm für die Datenübertragung sehr hilfreich da ich bis jetzt noch sehr auf dem trockenen sitze und keine Daten gesendet bekomme. Hat hier jemand schonmal sowas geschrieben? Wäre über Hilfe wirklich dankbar, bin schon seit drei Wochen am versuchen und hatte sehr wenig erfolg. Herzliche Grüße Markus
Hat niemand ein fertiges SPI Datenübertragungsprotokoll? Kann ja auch von einem anderen Chip sein, ich kanns dann umschreiben.
Leider kann ich Dir z.B. nicht helfen, aber ich kann Dir sagen, dass das LCD super mit der RS232- und I2C-Schnittstelle läuft. Wenn das Display am SPI-Bus betreiben würde, dann würde es zu sehr verlangsamen. Du weißt, dass der Bustakt nicht schneller als 100kHz bzw. 400kHz mit Wartezyklus sein darf?
@Metaller du verwechselst gerade nicht I2C und SPI? SPI = schnell, I2C = nicht so rasend flott
Ich habe es zuerst mit dem SPI Bus probiert weil ich nicht herausgefunden habe wie ich die RS 232 Schnittstelle benutzen muss an dem ARM und die Schnittstelle eventuell später im Projekt für die Datenübertragung auf den PC benötigen könnte. I2C sah mir auf der ersten Blick zu kompliziert aus. Abgesehen von dem oben beschriebenen pegelproblem bekomme ich die Daten auch noch nicht richtig gesendet.
@Manfred B. > du verwechselst gerade nicht I2C und SPI? Nein das tue ich nicht, aber wie es mir scheint kennst Du das Display nicht ;) @Markus > I2C sah mir auf der ersten Blick zu kompliziert aus Es sieht nur so aus ist es aber nicht. Im Anhang findest Du ein einfaches I2C Softwareprotokoll für ein AVR. > ich die Daten auch noch nicht richtig gesendet Hast Du auch schon versucht mit abgeschaltetem Protokoll Daten zu senden?
Das hat ja erst mal nichts mit dem Display zu tun? I2C läuft mit 100kBit/s, 400kBit/s bzw. 3.4MBit/s (aber hier wird's schon haarig...) SPI locker einige MBit/s
@Metaller Danke für den Code, leider kann ich kein Assembler Programmieren und ich benutze einen ARM7 Chip. Aber vielleicht kann ich einige anhaltspunkte herauslesen wie so ein Protokoll eigentlich aussieht. Bisher habe ich versucht jeden schritt einzeln zu machen und die Daten testweise direkt ins Senderegister zu schreiben. Irgendwas passiert auch aber ich denke wenn ich so weiter mache bin ich nächstes Jahr noch am rumprobieren. @Manfred Wenn ich das so richtig verstanden habe dann kann der Controller vom Display nur 100KHz Takt vertragen, deshalb ist SPI hier nicht so schnell. Aber ich denke das wird nicht das große Problem sein. Ich kann auch theoretisch I2C oder RS232 verwenden, Display und Chip können alles drei, hab halt nur mit SPI angefangen weil es mir am einfachsten erschien. Ich denke wenn ich das sendeprotokoll und das Pegelproblem im Griff hab kann das doch auch nicht so schwierig sein, überall steht was für ein einfaches system SPI sei.
wenn ich das richtig rauslese (Datenblatt Seite 6) kannst du durchaus ein einzelnes Datum mit bis zu 3MHz reinschiessen, danach braucht der Displaycontroller halt ein Päuschen vom 100us... Dein ADUC7019 hat ja Hardware SPI? Dann würd ich das darüber machen... ich sehe gerade der hat auch 2xI2C (nobel :-) ) hmmm dann kommt es darauf an was noch alles dranhängt... aber mir ist SPI sympatischer...
@Manfred Wie gesagt ich will eigentlich auch lieber SPI nutzen und ja der Bus ist Hardwaremäßig dabei. Ich denke, dass die Geschwindikeit keine so große Rolle spielen wird, aber es ist gut wenn es schnell gehen kann falls es mal eng wird. Wie steuer ich denn die Zeiten? Wo stelle ich ein wann er wieviele Pausen machen soll?
Hallo, das eDIP240 läßt sich auch problemlos über eine Software emulierte SPI ansteuern. Das erledigen bei mir lcd_putc und lcd_getc. Die einelnen Kommandos lege ich vorher in einen Buffer. Wie z.B. edip_cmd1("ZF",3); // Set Font 3 Gruß, Martin void lcd_putc(uint8 d) { uint8 i; LCD_CS_CLR; for(i=0;i<8;i++) { if(d & 0x80) LCD_MOSI_SET; else LCD_MOSI_CLR; d <<= 1; LCD_CLK_SET; LCD_CLK_SET; LCD_CLK_SET; LCD_CLK_CLR; } LCD_CS_SET; } uint8 lcd_getc(void) { uint8 i,b; LCD_CS_CLR; for(i=0;i<8;i++) { b <<= 1; LCD_CLK_SET; LCD_CLK_SET; LCD_CLK_SET; if(LCD_MISO) b |= 0x01; else b &= ~0x01; LCD_CLK_CLR; LCD_CLK_CLR; LCD_CLK_CLR; } LCD_CS_SET; LCD_CLK_CLR; return(b); } void edip_cmd1(const char *s,uint8 b0) { uint8 p; p = edip_buf_wr; edip_buf[edip_buf_wr++] = 0x11; // <DC1> edip_buf[edip_buf_wr++] = 4; // LEN = 4 edip_buf[edip_buf_wr++] = 0x1B; // ESC edip_buf[edip_buf_wr++] = s[0]; // X edip_buf[edip_buf_wr++] = s[1]; // X edip_buf[edip_buf_wr++] = b0; // edip_append_checksum(p); // Checksum edip_buf_wr++; } void edip_append_checksum(uint8 p) { uint8 sum,len,i; sum = 0; len = edip_buf[p+1]; for(i=0;i<len+2;i++) { sum += edip_buf[p+i]; } edip_buf[p + len + 2] = sum; }
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.