www.mikrocontroller.net

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


Autor: J. K. (rooot)
Datum:
Angehängte Dateien:

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

Autor: J. K. (rooot)
Datum:

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

Autor: J. K. (rooot)
Datum:
Angehängte Dateien:

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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>#define SPI_MISO       PORTD.6

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

Autor: J. K. (rooot)
Datum:

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

Autor: J. K. (rooot)
Datum:

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

Autor: J. K. (rooot)
Datum:

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

Autor: J. K. (rooot)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Da ist er

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

MFG

Autor: J. K. (rooot)
Datum:

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

Autor: Wolfgang O. (karlo)
Datum:

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

Autor: J. K. (rooot)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein, hab ein selbstgebautes eval-board

was würde dieser bringen?

MFG
J.K

Autor: Wolfgang O. (karlo)
Datum:

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

Autor: J. K. (rooot)
Datum:

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

Autor: J. K. (rooot)
Datum:

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

mhm...

Ich glaub das wird nie was :-)

MFG
J.K

Autor: Kernighan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zeig uns doch mal deinen Schaltplan.

Cheers
Ritchie

Autor: Wolfgang O. (karlo)
Datum:

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

Autor: M. H. (doktorgnadenlos)
Datum:

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

Autor: J. K. (rooot)
Datum:

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

Autor: J. K. (rooot)
Datum:

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

Autor: J. K. (rooot)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
push

Autor: osd (Gast)
Datum:

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

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.