Hallo, ich habe mit dem Controller C167 folgendes Problem: Ein SPI Bauteil gibt einen binären Datenstrom aus. Diesen Daten möchte ich mit der printf - Funktion anzeigen. Wenn ich mir den Port auf dem Oszilloskop anschaue, sehe ich einen Datenstrom der für `1` eine Amplitude von 3V hat und für '0' genau 0V anzeigt. Es scheint aber so, dass der Controller diesen Pegel nicht bemerkt, da ich immer '0' erhalte. Vielleicht kann mir jemand helfen grüße
Hallo der C167 ist also in dem Fall nicht SPI-Master. Hast du den 167er entsprechend als SPI-Slave konfiguriert ? Gerhard
Hallo Gerhard, der C167 hat keine echte SPI Schnittstelle. Mein erster Versuch war es, das Bauteil mit der SSCON anzusprechen. Der Controller hat im Masterbetrieb gearbeitet. Das hat im Prinzip auch funkioniert, doch leider habe ich sehr unsaubere Pegel bekommen, obwohl ich Leitungstreiber davor geschaltet habe. Jetzt versuche ich manuell den CLK, das CS und den Input zu setzen und der Ausgang sieht auf dem Oszilloskop ganz vielversprechend aus, ich kann aber leider den Pegel nicht anzeigen.
Selbst wenn der C167 mit 5 Volt läuft, sollten 3 Volt für ein high reichen. Aber was heisst "er hat unsauber gearbeitet" ? SPI kann ja auf positiven als auch auf der negativen Flanke triggern. Evtl passen C167 und dein SPI-Bauteil nicht zusammen (falls man dies nicht auch einstellen kann). Wenn ich dich richtig verstehhe, simulierts du jetzt über digizale I/O's di SPI-Leitungen. Arbeitest du dann mit Interrupt, oder wie erkennst du den Clock ? Ob der C167 generell 3 Volt als high erkennt, kannst duja auch statisch testen, indem du 3 Volt an einen solchen Eingang anlegst und den Port liest. gerhard
Hallo Gerhard, Mit der SSCON war das so: mit unsauber gearbeitet meine ich, dass ich keine anständigen Pegel bekomme. Manchmal schwanken sie um 1,5V rum und manchmal um 5V. Der Controller hat dann nur die 5V Pegel erkannt und diese können laut Datenblatt des Bauteils nicht stimmen. Ich simuliere jetzt die digitalen Leitungen. Ich arbeite ohne Interrupt, da ich in das SPI - Bauteil nur einen 16 Bit Strom einlesen muss, danach soll das Bauteil Werte ausgeben. Das ist zwar eine nicht so schöne Lösung wie mit SSCON, aber ich bekomme jetzt wenigstens vernünftige Pegel. Ich habe dir mal den Quellcode kopiert. ************************************************************************ ** while(1){ P3_13 = 0; // CLK warte(); P7_0 = 0; // CS for(i=0;i<=16;i++){ P3_13 = 1; //clk high P2_0 = data_in[i]; //daten an Bauteil warte(); P3_13 =0; //Clk low data_gyro[i] = P7_1; // Daten von Bauteil auf Port schreiben if (data_gyro[i]==1) printf("1"); else{ printf("0"); } warte(); } P7_0 = 1; data_in[0]=0; } ************************************************************************ ** Bei data_in und data_gyro handelt es sich um int Felder mit der Größe 16. Der CLK hat laut Oszilloskop einen Pegel von 5V. Leider kann ich nicht einmal diesen anzeigen, also scheint da grundsätzlich etwas falsch zu sein. Grüße Stefan
also nach meinen erfahrungne müsste der c167 ab 2,5V einen hohen pegel an den digitalen io's klar erkennen... hatte da nie probleme... wenn der pegel so unstabil ist, würden sich da nicht pullups aufdrängen?
Hallo Daniel, ich habe den Ausgang an einen Leitungstreiber, der den Pegel etwas verschönert. Wie hast du denn die Pegel ausgegeben? Über printf? Kann ich die Pull - UP Widerstände auch softwaremäßig setzen? Was bei mir unschön ist, dass ich jetzt auf dem Oszilloskop ein schönes Bitmuster mit 3V sehe, ich es aber nicht ausgeben kann Grüße Stefan
Hallo, mir ist noch etwas eingefallen. Wäre es auch möglich, die Werte in ein Register zu schreiben und dieses dann auszulesen, so wie man es mit der SSCON machen würde?
>der C167 hat keine echte SPI Schnittstelle.
Blödsinn, natürlich hat der C167 eine Hardware-SPI (SSCON). Der Pegel
ist wohl unsauber, da Output gegen Output kämpfen muss. Der stärkere
gewinnt..
Hatte noch nie Probleme mit der C167-SPI (Slave oder Master)
Hi Max, vielen Dank für deinen informativen Beitrag, jetzt ist alles klar. Output kämpft gegen Output, warum ich da noch nicht drauf gekommen bin...
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.