Forum: Mikrocontroller und Digitale Elektronik C167 Port auslesen


von sneube (Gast)


Lesenswert?

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

von Franko P. (sgssn)


Lesenswert?

Hallo

der C167 ist also in dem Fall nicht SPI-Master. Hast du den 167er 
entsprechend als SPI-Slave konfiguriert ?

Gerhard

von sneube (Gast)


Lesenswert?

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.

von Franko P. (sgssn)


Lesenswert?

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

von sneube (Gast)


Lesenswert?

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

von Daniel (Gast)


Lesenswert?

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?

von sneube (Gast)


Lesenswert?

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

von sneube (Gast)


Lesenswert?

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?

von Max Murks (Gast)


Lesenswert?

>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)

von sneube (Gast)


Lesenswert?

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