Forum: Mikrocontroller und Digitale Elektronik MAX7456 SPI - Ansteuerungsprobleme (AVR)


von J. K. (rooot)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

Hab leider schon wieder ein Problem:

Versuche immer noch den Max7456 über SPI anzusteuern
http://datasheets.maxim-ic.com/en/ds/MAX7456.pdf

Verwende die in den Applicantion Notes vorgestellten Codebeispiele:
http://www.maxim-ic.com/appnotes.cfm/appnote_number/4184

Schaffe es aber nicht einmal ein Register des MAX's auszulesen. Bekomme 
immer 0 zurrück, auch wenn default-mäßig was anderes im Register drinnen 
stehen sollte.

Im Anghang hab ich den Code. Emuliere die SPI auf dem PORTD des MEGA16 
(Pinbelegung wie hardware SPI nur auf Pord D).

Außerdem hab ich zwischen den PORT-Zugriffen ein delay eingefügt, damit 
die SPI langsamer ist.

Verwede CodeVisoin AVR + MEGA 16.

Was könnte ich übersehen haben? Sind sie delays zulässig?

(Code im Anhang)

MFG
J.K

von J. K. (rooot)


Lesenswert?

hab jetzt zwischen

    SPI_CK = 1;
    SPIData += SPI_MISO;

noch ein delay eingefügt

hat nichts geholfen.

außdem wird diese zeile SPIData += SPI_MISO; nicht so funktioniern wie 
sie soll, oder? Null dürfte trotzdem nicht rauskommen ...

MFG
J.K

von J. K. (rooot)


Angehängte Dateien:

Lesenswert?

auch in der for schleife war ein fehler,

die klammern beim else passten nicht

leider immer noch keine Funktion :(

die zeile
SPIData += SPI_MISO;
hab ich inzwischen verstanden wie die funktionieren soll.

der aktuelle code noch mal im anhang

von holger (Gast)


Lesenswert?

>#define SPI_MISO       PORTD.6

Mit PIND.6 könnte es sogar gehen ;)

von J. K. (rooot)


Lesenswert?

Stimmt, dummer Fehler.

meist kommt noch 0 zurrück, manchmal aber auc 64d.

ist schon mal ein Anfang, wahrscheinlch passt das was mit den delays 
nicht

muss ich mir noch genauer anschaun

Danke soweit.

Ohne delay funktionierts auch nicht besser.

wenn jemand ne idee hat bitte posten.

mfg
J.K

von J. K. (rooot)


Lesenswert?

bin grad wieder am rumprobieren.

rufe die funktio jetzt in einfer schleife auf.

in ca. 5% der fälle wird der wert richtig erkannt,
in ca. 5% der fälle wirden einelne bits richtig erkannt.
(ohne delay, mit delay_us(10) nicht besser)

kann das an zu langen leitungne liegen ? 10 cm? (mein Verdacht)

hilft das delay da was? soll ich dar erhöhen. Im Prinzip will ich ja 
eine niedrigere SPI Frequenz.

MFG
J.K

von J. K. (rooot)


Lesenswert?

So,

hab jetzt die SPI Frequenz auf ein Minimum reduziert (bei jedem 
tastendruck ein takt)

und beobachte mit dem Multimeter den Vorgang.

Der Chip gibt wirklich immer 0 zurrück. nur manchmal ein HIGH.

Wenn der lesevorgang abeschlossen ist, dann wenn ChipSelect wieder auf 1 
geht, kommt ein kurzer Impuls auf der MISO Leitung, was immmer der zu 
bedeuten hat ?

Schön langsam glaub ich, dass der IC ne Macke hat.

Im Datenblatt ist kein TimeOut angegeben. Kann es sein, dass ich dem 
Chip zu langsam bin, beim Takten?

MFG
J.K

(aktueller code im Anhang)

von J. K. (rooot)


Angehängte Dateien:

Lesenswert?

Da ist er

ach ja, wenn HIGHs zurückkommen hab sie einen schönen Pegel.
gemessen = 5.01 V

MFG

von J. K. (rooot)


Lesenswert?

Ich hab mal unabsichtlich MISO und MOSI vertauscht.

Kann es sein, dass ich dabei den Ausgang des MAX beleidigt habe? (Tipp 
mal auf ja :-)

Gibt es das Verhalten bei einem kaputten Transistor (wahrscheinlich 
MOSFET-Gegentaktstufe), dass sie nur manchmal schaltet ?

MFG
J.K

von Wolfgang O. (karlo)


Lesenswert?

Hallo...

habe Deine Versuche hier verfolgt! Benutzt Du das STK500 für Deine 
Schaltung? Wenn ja schalt mal in die SDOUT-Leitung des MAX7456 ein 120 
Ohm Widerstand...

Gruss
Wolfgang

von J. K. (rooot)


Lesenswert?

nein, hab ein selbstgebautes eval-board

was würde dieser bringen?

MFG
J.K

von Wolfgang O. (karlo)


Lesenswert?

Hallo,

hatte das gleiche Problem mit dem STK500 - Grund noch unbekannt!!!

Durch die Entkopplung mit einem 120 Ohm Widerstand kamen die Daten
vom MAX7456 einwandfrei zurück...

Mit einem kleinen selbst gestrickten Versuchsaufbau, nur uC und MAX,
ging es ohne den 120 Ohm Widerstand.

Gruss
Wolfgang

von J. K. (rooot)


Lesenswert?

>Mit einem kleinen selbst gestrickten Versuchsaufbau, nur uC und MAX,
>ging es ohne den 120 Ohm Widerstand.

Mhm, viel mehr als µC und Max hab ich nicht drauf, werd ich aber 
probieren.

Danke, melde mich wenn getestet.

von J. K. (rooot)


Lesenswert?

Der 150 Ohm (120 sind aus) Widerstand halt leider auch nicht geholfen.

mhm...

Ich glaub das wird nie was :-)

MFG
J.K

von Kernighan (Gast)


Lesenswert?

Zeig uns doch mal deinen Schaltplan.

Cheers
Ritchie

von Wolfgang O. (karlo)


Lesenswert?

Hallo J.K.,

versetze mal deinen Code zurück in den Originalcode (ohne Delays etc.)
der SPI des MAX verträgt bis zu 10 MHz...

Dann füge mal die folgende Zeilen für die Intialisierung und die 
Hauptschleife ein und messe mit einem Oszi am SDOUT des MAX die 
zurückkommenden Daten (wenn du einen Zweikanaloszi hast kannst du mit 
Kanal 1 auf CS triggern und auf Kanal 2 SDOUT wunderbar sehen)!


//OSD Initialisierung
delay_ms(200);
SPI_CS = 1;                                 // /CS high
SPI_CK = 0;                                 // CK low
SPI_MOSI = 0;                               // MOSI low
spiWriteReg(VIDEO_MODE_0_WRITE,0x02);       // Reset
delay_ms(100);

//Hauptschleife
while(1)
{
  delay_us(1);
  daten = spiReadReg(0xA0);                 //read Video Mode Register
}
}


Gruss
Wolfgang

von M. H. (doktorgnadenlos)


Lesenswert?

Hallo,

auch wenn der Thread schon eine kleine Ewigkeit alt ist, möchte ich mein 
Wissen nicht vorenthalten.
Der MAX7456 ist per Default im 16-Bit Modus (DMM[6] = 0).
Das ist durchaus ungewöhnlich aber wenn die Geschwindigkeit wichtiger 
ist als die Möglichkeit einer alternierenden Attributumschaltung des 
Charactersstreams wiederum verständlich.

von J. K. (rooot)


Lesenswert?

Falls jemand mal googlet und hierher kommt:

Hab damals das Projekt aufgegeben.

Jetzt aber wieder gestartet, mit neuem Hadware-Aufbau. Zwischen den µC 
Pins und dem Max7456 hab ich jetzt 1k Widerstände, der Rest ist gleich 
geblieben (außer das ich am µc einen anderen Port verwende), wenn auch 
sauber auf eine Lochraster aufgelötet.

Das lesen von Registern funktioniert jetzt mit dem IC von damals. Ob ich 
jetzt am TV was anzeigen kann weiß ich noch nicht, bin noch in der 
Entwicklungsphase.

MfG
j:k

von J. K. (rooot)


Lesenswert?

Hehe, gibt es doch wieder ein Problem, bei dem ich nicht weiterkomme.

Und zwar: Ich habe auf bestimmte Register keinen Zugriff, da diese 
gesperrt sind, und der Chip "sagt", dass er sich noch im Reset-zustand 
befindet (Obwohl ich auf gewisse, nicht gesperrte Zugriff habe).

Und zwar: Lese ich das Statusregister aus (STAT) zeit dieses, das der 
Chip noch im Reset mode ist, außerdem ist der "Character Memory" belegt.

Anmerkung zur Schaltung: Da ich kenen 27Mhz Grundschwingungsquarz 
erhalten habe, verwende ich einen, der auf der 3. Oberschwingung 
schwingt. Damals (Nov. 08) hab ich auch den Ausgang des Oszilators 
gemessen, und dieser hat genau mit 27 MHz geschwungen. Kann das sein, 
dass er das jetzt nicht mehr tut, sondern langsamer? Leider besitzte ich 
kein Oszi, und kann das nicht nochmals messen.
Mein Gedanke war, die Ausgangsfrequenz als Eingang von einem µC zu 
verwenden, und damit auf 1 Hz runterzuteilen. Ist die Periodendauer 
länger, schwingt der Quarz nur auf der Grundschwingung.
Das Problem ist, dass der Mega16 nur auf 16 MHz "zugelassen" ist, und 
dieser wohl 27 nicht schaffen wird. Weiters hab ich noch einen 644er, 
der mit 20 Mhz zertifiziert ist. Sind da die Erfolgsaussichten größer?

MfG
j:k

von J. K. (rooot)


Lesenswert?

push

von osd (Gast)


Lesenswert?

Hab jetzt nicht alles durchgelsen aber vllt könnte dir das hier helfen:

http://www.sparkfun.com/Code/MAX7456_sample_code.zip

Beispielcode mit Initialisierung der das Wort SAMPLE auf den Bildschirm 
schreibt. Damit solltest du eigentlich alles hinbekommen. Viel glück.

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
Noch kein Account? Hier anmelden.