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
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
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
>#define SPI_MISO PORTD.6
Mit PIND.6 könnte es sogar gehen ;)
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
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
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)
Da ist er ach ja, wenn HIGHs zurückkommen hab sie einen schönen Pegel. gemessen = 5.01 V MFG
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
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
nein, hab ein selbstgebautes eval-board was würde dieser bringen? MFG J.K
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
>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.
Der 150 Ohm (120 sind aus) Widerstand halt leider auch nicht geholfen. mhm... Ich glaub das wird nie was :-) MFG J.K
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
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.