C167 Port auslesen

Gast #439839
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
Gast #439848
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.
#439920
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
Gast #439929
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
Gast #439931
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?
Gast #439936
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
Gast #440455
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)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren