Hallo,
ich habe ein Dogm128-6 an einen MSP430F2418.
Ich habs nach folgenden Code Initialsiert und sende zum Schluss einfach
irgendetwas das einen Anzeige hervorufen soll. Leider rührt sich rein
gar nix. Wer hat einen Idee was falsch ist?
Daten werden sauber übertragen, das hab ich bereits mitn Oszi
nachgemessen. Also müsste Hardware eigentlich passen! siehe Anhang
1
#include<msp430x26x.h>
2
volatileunsignedinti;
3
4
voidtransmit(chardata){
5
P2OUT&=~BIT6;//Chip Select auf 0 legen
6
P2OUT&=~BIT5;//A0 auf 0 legen
7
while(!(IFG2&UCB0TXIFG));
8
UCB0TXBUF=data;// Transmit first character
9
for(i=30;i>0;i--);
10
P2OUT|=BIT6;//Chip Select wieder auf 1 legen
11
12
}
13
14
voiddata(chardata){
15
P2OUT&=~BIT6;//Chip Select auf 0 legen
16
P2OUT|=BIT5;//A0 auf 1 legen
17
while(!(IFG2&UCB0TXIFG));
18
UCB0TXBUF=data;// Transmit first character
19
for(i=30;i>0;i--);
20
P2OUT|=BIT6;//Chip Select wieder auf 1 legen
21
P2OUT&=~BIT5;//A0 wieder auf 0
22
23
}
24
25
voidgoto_xy(charx,chary)
26
{
27
charset[]={0xb0,0x10,0x00};//Befehlsarray
28
set[0]=set[0]+y;//Y - Position auf Steuerbefehl addieren
29
set[2]=set[2]+(x&0x0f);//Low - Nibble auf Steuerbefehl addieren
30
set[1]=set[1]+(x>>4);//High - Nibble auf Steuerbefehl addieren
Ich könnte mir vorstellen, dass es zu kurz ist...
Wie lange musst du laut Datenblatt Zeit geben? Was hast du für einen
Takt?
Ich hatte ein ähnliches Display und musste ca. 80 µs Zeit geben, habe es
so gemacht:
Lukas H. schrieb:> er wartet zwischen dem senden 30 Takte, siehe for schleife
Welcher Compiler, welche Optimierungsstufe?
Solche for-Schleifen werden gerne wegoptimiert; bitte nur delay...
einsetzen.
also der smclk takt läuft auf 500khz, also ziemlich langsam
hab gerade nochmal die spannungen an den kondensatoren nachgemessen:
ergebnis ist das kein init durchgeführt wurde da keine spannungen
vorhanden
compiler ist ccs! delay zeiten werden auch eingehalten, hab ich nochmals
per oszi nachgemessen
Hallo Lukas ,
das Display hat eine eigene Resetbeschaltung ?
evtl. mal mit einen Taster den Kondensator brücken und dann
übern debugger deinen Controler neu starten .
evtl. ein paar Haltepunkte einsetzen .
viel Erfolg Erik
Also hab die Schaltung noch mal überprüft, die müsste passen, wie im
Handbuch von EA beschrieben.
SPI Signale kommen auch richtig an, zumindest laut meinen Messungen.
Display habe ich auch schon ein anderes probiert. Funktioniert auch
nicht.
Irgendwo hackst grundsätzlich, aber nur wo?
Hallo,
"SPI SS" muss es hoch gehalten, um Master-Betrieb zu gewährleisten
Ich kann dir nur den guten Rat geben, SPI 'SS' oder 'CS' ständig mit
einem 10K Widerstand auf 3,3 Volt zulegen und dann beim Beginn der
Übertragung nach low zu ziehen (usw.).
Ich verwende zwar Atmegas, aber auch hier funktioniert das nur so!
Gruß xmega
Da bin ich mir selbst nicht sicher, aber ich denke dadurch das man nur
3-wire Spi verwendet und die Ports ja dementsprechend zuteilt
siehe: P3SEL |= 0x0E; // P3.3,2,1 option select
Hallo,
du darft klar CS des DOGM128 auf Low legen.
Wenn das funktioniert ist das ok:
> P3SEL |= 0x0E; // P3.3,2,1 option select
Es gibt also bei dieser 3 PIN Geschichte keinen "SS"
Beim Atmega geht das nicht.
Ich muss immer vor der Initialisierung des SPI zum Master den SS Port
als Ausgang schalten und auf high legen.
Wird SS nicht konfiguriert funktioniert der SPI nicht!
Ich lege darum immer den SS mit einem 10K Widerstand auf PLUS.
Gruß xmega
Ja der CS vom DOGM128 darf man natürlich auf low legen, das ist mir
klar.
Laut meinen Wissen braucht man beim MSP430 den SS Ausgang nicht zwingend
definieren. Es reichen MOSI, MISO und CLK
SPI funktioniert auch soweit, hab ich bereits nachgemessen, Signale
kommen am Display an, werden aber leider (wieso auch immer) nicht
übernommen/wahrgenommen vom LCD -> es rührt sich nix
Hallo,
überprüfe bitte mal die Phasenlage des spi clocks zu den Datenbits.
da ist das dogm protokoll sehr speziell und empfindlich gegen jegliche
abweichung.
Bisher habe ich noch keine spi schnittstelle gesehen, die direkt das
format des dogm konnte, so dass ich immer die software emulation nutzen
musste.
lg
Andy W. schrieb:> Bisher habe ich noch keine spi schnittstelle gesehen, die direkt das> format des dogm konnte, so dass ich immer die software emulation nutzen> musste.
?
Ich habe bisher noch keinen SPI Controller gesehen bei dem man nicht
zwischen den 4 Standard SPI Modi umschalten konnte. Und mehr
möglichkeiten braucht man ja nicht.
Die DOG hab ich auch auch schon des öfteren mit Hardware SPI betrieben.
Keine Probleme.
1
UCB0TXBUF=data;// Transmit first character
2
for(i=30;i>0;i--);
3
P2OUT|=BIT6;//Chip Select wieder auf 1 legen
Bist du 100%ig sicher das der CS erst nach der Übertragung high wird?
hab den CS jetzt driket aus der Funktion rausgeschmissen und setzen ihn
vor der eigentlichen Übertragung auf low, wenn alle hex-Werte übertragen
sind setzen ich ihn wieder auf hi
So ich hab mal einen kleinen Test gestartet und zwar einen 75HC164 an
den MSP430. Dies ist ein Schieberegister das mit SPI angesteuert wird.
Fazit: SPI funktioniert, LEds an den Schieberegisterausgängen leuchten
Negativ daran: Display geht immer noch nicht! Warum nur?
Hi
Jörg S. schrieb:> Ich habe bisher noch keinen SPI Controller gesehen bei dem man nicht> zwischen den 4 Standard SPI Modi umschalten konnte. Und mehr> möglichkeiten braucht man ja nicht.> Die DOG hab ich auch auch schon des öfteren mit Hardware SPI betrieben.> Keine Probleme.
habe es sowohl schon mit bei xilinx, msp430 und cortex-m3 probiert.
da ich es nicht mit den jeweils dort vorhandenen schnittstellen
hinbekommen habe, es nicht wirklich zeitkritisch war und es wichtigere
aufgaben dabei gab, halt in eine software routine umgesetzt
dabei immer der HL LH flanke des Clocks nach stabilen anliegen des daten
bits gemacht und es ging.
ich sage ja nicht, das es absolut unmoeglich ist, einen spi controller
dazu zu bewegen, ich habe es bisher jedoch noch nicht hinbekommen ;-)
LG
Hi
>Negativ daran: Display geht immer noch nicht! Warum nur?
Ist deine Schaltung wirklich wie in dem obigen Schaltplan? Wenn ja hast
du einen Fehler drin: VDD und VDD2 müssen 3,3V liegen. Außerdem ist es
günstiger RST vom Display mit dem Controller zu bedienen. Möglicherweise
startest du die Initialisierung, wenn sich das Display noch im Reset
befindet.
MfG Spess
Lukas H. schrieb:> hab den CS jetzt driket aus der Funktion rausgeschmissen und setzen ihn> vor der eigentlichen Übertragung auf low, wenn alle hex-Werte übertragen> sind setzen ich ihn wieder auf hi
Und du hast wirklich nachgemessen das der CS erst NACH der übertragung
der Daten high wird?
VDD2 und VDD sind miteinander verbunden, und liegen an 3,3V. Es fehlt
hier nur die Junction, sinder ab definitiv verbunden.
Resetpin habe ich jetzt auf einen Portpin gelegt und am Anfang einen
Reset durchgeführt und dann die init durchgeführt -> es tut sich nichts
So, nu muss ich erstmal meinen Senf dazu geben.
till schrieb:
> Wenn ich das richtig sehe, hast du keine Pausen zwischen den einzelnen> Übertragungen... müsstest du evtl. noch einfügen.
Andy W. schrieb:
> Bisher habe ich noch keine spi schnittstelle gesehen, die direkt das> format des dogm konnte, so dass ich immer die software emulation nutzen> musste.
Warum Pausen und SPI - Emulation benutzen? Bei dem Beispiel von
msp430.funpic.de wird auch die Hardwareschnittstelle benutzt. Wenn man
das ganze noch auf DMA - Transfer umstellen würde, wäre noch höhere
Datenraten drinn. SPI - Clock darf ja schließlich 20MHz betragen.
So nun zu deinem Problem:
Prinzipiell ist dein Code richtig. Du solltest nur bedenken da die
Steuerkommandos teilweis aus zwei Bytes bestehen. Wenn du also nach
jedem Byte CS = 1 setzt sind einige Kommandos unvollständig.
Also Konfigurationsdaten immer am Stück senden! Gleiches gilt für die
Übertragung der Displaydaten.
Habe deinen Code entsprechend geändert und auf einem der Funpic - Boards
getestet
Michael
Hi,
sehe ich das richtig dass du ein blaues Display benutzt mit evtl weißer
HG Beleuchtung? Alles an 3,3V.
Laut Datenblatt gehts ja nur mittels LED Treiber.
Ich erkenne hier 47 Ohm Widerstände - das funzt? Wie hell ist denn Das
Display damit?