Forum: Mikrocontroller und Digitale Elektronik SPI - wie bekomme ich meine Werte??


von Robert P. (roberticusmaximus)



Lesenswert?

hey leute ich habe eine ganz wichtige Frage
ich baue ein CO2-Messgerät als mein Maturaprojekt und ich habe den 
Sensor ZG01 bestellt.
Ich scheitere an einem einfachen problem... wie kann ich das Teil über 
den SPI ansteuern, sprich wie bekomme ich die Werte die er mir sendet
1
#use spi(DI=PIN_C7, CLK=PIN_C6, BITS=8)
2
3
// uses software SPI
4
5
byte value;
6
7
void spi_init (){
8
  setup_spi (SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_16);
9
  value = spi_read(PIN_C7);

könnt ihr mir helfen??

hier ist der Link zum Datenblatt des CO2-Sensors

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Keine Ahnung, was dein spi_read() da veranstaltet ...

Ein grundlegendes Verständnisproblem bei SPI ist für die Leute immer,
dass man nie nur lesen kann: das Ganze ist ein Schieberegister,
und eine Eingabe ist immer nur parallel zu einer Ausgabe möglich.
Wenn man Daten lesen will und sonst nichts weiter zum Slave zu senden
hat, muss man also Dummybyte(s) senden, damit man auf dem "Rückweg"
die Daten empfangen kann.

von Robert P. (roberticusmaximus)


Lesenswert?

also ich verwende den 18F2550 und möchte gern vom Sensor die CO2-Werte 
bekommen
doch leider hab ich nichts im internet gefunden was mor helfen könnte...
wie mach ich das mit den rückweg und wie kann ich den clockpin PIN_C7 
auf 2000 Hz einstellen?

von Naseweis (Gast)


Lesenswert?

Hi,
bin mir zwar nicht ganz sicher, aber es scheint, basierend auf diesem 
Dokument http://www.umarket.com.tw/ImguMarket/20080712085132.pdf
das der SPI Anschluß eine bidirektionale Funktion besitzt, auch wenn nur 
CLK und DATA vorhanden sind. Zudem scheint das Modul selbst, also als 
Master, die Daten auszugeben. Du müßtes also Dein SPI als Slave 
programmieren. Dies ist relativ leicht zu prüfen. Spannung anschließen, 
kurz RESET und dann sollten die Datenblöcke im Abstand von 20ms mit 
einem Takt von ca. 2kHz rauskommen.

von Robert P. (roberticusmaximus)


Lesenswert?

danke mr. Naseweis habs grad an ein Oszi angeschlossen und getestet... 
du hast recht, der sensor schickt die daten und ist somit der Master... 
aber wie kann ich beim µ-kontroller über SPI die daten empfangen??
kann mir jemand einen beispielcode schicken wie man daten empfangen 
kann??

wäre euch sehr dankbar

lg Robert

von J.-u. G. (juwe)


Lesenswert?

Welchen µC verwendest Du denn?

von Robert P. (roberticusmaximus)


Lesenswert?

18F2550 - ich steuere den CLK über den C6 PIN und Data über C7 - 
http://www.create.ucsb.edu/~dano/CUI/PIC18F4550datasheet.pdf

von Stu-D (Gast)


Lesenswert?

Du meinst wohl PIC18F2550
Also...wenn du mal im Datasheet Seite 193(195) Abbildung 19-1 guckst, 
wirst du sehen, dass wenn du dein MSSP-Modul im PIC im SPI Modus 
benutzen willst, Pin B1 dein Clockeingang ist und B0 dein Datainput.

von J.-u. G. (juwe)


Lesenswert?

Robert Paduretu schrieb:
> 18F2550 - ich steuere den CLK über den C6 PIN und Data über C7 -

Als SPI-Slave hast Du mit der Steuerung von CLK nichts zu tun. Das macht 
der Master.

von citb (Gast)


Lesenswert?

Robert Paduretu schrieb:
> ich baue ein CO2-Messgerät als mein Maturaprojekt und ich habe den

Ist das sowas wie eine Diplomarbeit?

citb

von Ernst B. (puravida)


Lesenswert?

citb schrieb:
> Robert Paduretu schrieb:
>> ich baue ein CO2-Messgerät als mein Maturaprojekt und ich habe den
>
> Ist das sowas wie eine Diplomarbeit?
>
> citb

Matura wird in D-Land Abitur genannt.

von Robert P. (roberticusmaximus)


Lesenswert?

ja du hast recht Matura ist in Deutschland die Abitur
und die Maturaarbeit wird auch Diplomarbeit genannt

von Stephan H. (stephan-)


Lesenswert?

im Abitur lernt man eben nichts über Datenblätter.
Komisch, mit SPI arbeiten wollen aber sich nicht mal grundlegende 
Gedanken machen wer Master und Slave ist. Spätestens an der Stelle muß 
das auffallen.

Wie ging die Werbung im Fernsehen ???
"Wir denken nicht, wir gurgeln"......

Und was der Detnkrake nicht kennt muß wohl erst erfunden werden.
traurig

von Robert P. (roberticusmaximus)


Lesenswert?

Stu-D schrieb:
> Du meinst wohl PIC18F2550
> Also...wenn du mal im Datasheet Seite 193(195) Abbildung 19-1 guckst,
> wirst du sehen, dass wenn du dein MSSP-Modul im PIC im SPI Modus
> benutzen willst, Pin B1 dein Clockeingang ist und B0 dein Datainput.

ja aber das problem ist diese PINs werden bereits verwendet für den 
Display den ich verwende... ist es nicht möglich andere PINs zu 
verwenden?

von Robert P. (roberticusmaximus)


Lesenswert?

Stephan Henning schrieb:
> im Abitur lernt man eben nichts über Datenblätter.
> Komisch, mit SPI arbeiten wollen aber sich nicht mal grundlegende
> Gedanken machen wer Master und Slave ist. Spätestens an der Stelle muß
> das auffallen.

tja ich dachte bis jzt der PIC ist der Master

von Stud-D (Gast)


Lesenswert?

>ja aber das problem ist diese PINs werden bereits verwendet für den
>Display den ich verwende... ist es nicht möglich andere PINs zu
>verwenden?

hmm, habe no nie Software-SPI benutzt. Denke bis zu einer gewissen 
Übertragungsrate sollte es möglich sein (jedenfalls I2C klappt). Jedoch 
wird der Programmieraufwand deutlich grösser als wenn du mit der 
Hardware-Schnittstelle arbeitest.
Meiner Meinung nach die einfachste Lösung ist, dass du den Sensor an den 
Leitungen B0, B1 anschliesst und das Display an anderen PINs 
anschliesst.
Falls die Hardware bereits besteht, was ich mal annehme, musst du halt 
die Leiterbahnen trennen und das Display mit dünnem isoliertem Draht an 
anderen Pins anlöten.
Hoffe du lernst was daraus und nimmst dir beim nächsten Mal die Zeit 
einen Blick ins Datenblatt zu werfen. Spart dir unter Umständen lange 
Fehlersuche und aufwändige Reperaturarbeiten.

von Robert P. (roberticusmaximus)


Lesenswert?

dann hätte ich mal eine frage... wie greife ich bei einen pic18f2550 
aufs port C zu??

fürs port B hat das so ausgesehen:
1
#byte lcd = 0x0F81                       // This puts the entire structure
2
                                         // on to port B (at address 0x0F81 für pic18F2550)

von Ernst B. (puravida)


Lesenswert?

Robert Paduretu schrieb:
> ja du hast recht Matura ist in Deutschland die Abitur
> und die Maturaarbeit wird auch Diplomarbeit genannt

OT: Nachdem eine Schule mit Matura kein Diplomstudium ist, ist die 
Maturaarbeit auch keine Diplomarbeit. Selbst wenn Wiki da behauptet, daß 
in Österreich eine Maturaarbeit auch Diplomarbeit genannt wird.

von __ (Gast)


Lesenswert?

Ernst B. schrieb:
> Robert Paduretu schrieb:
>> ja du hast recht Matura ist in Deutschland die Abitur
>> und die Maturaarbeit wird auch Diplomarbeit genannt
>
> OT: Nachdem eine Schule mit Matura kein Diplomstudium ist, ist die
> Maturaarbeit auch keine Diplomarbeit. Selbst wenn Wiki da behauptet, daß
> in Österreich eine Maturaarbeit auch Diplomarbeit genannt wird.

Aber wir sagen nunmal "Diplomarbeit" dazu. Und wenn uns jemand sein 
Maturaprojekt vorlegt dann ist das für uns auch die Diplomarbeit. Aus, 
Ende, Basta!

von Diplomosarbeitos (Gast)


Lesenswert?

Ernst B. schrieb:
> Robert Paduretu schrieb:
>> ja du hast recht Matura ist in Deutschland die Abitur
>> und die Maturaarbeit wird auch Diplomarbeit genannt
>
> OT: Nachdem eine Schule mit Matura kein Diplomstudium ist, ist die
> Maturaarbeit auch keine Diplomarbeit. Selbst wenn Wiki da behauptet, daß
> in Österreich eine Maturaarbeit auch Diplomarbeit genannt wird.

Es ist eine Diplomarbeit! Denn die Matura ist eine "Reife- und 
Diplomprüfung". Wenn du Wikipedia nicht vertraust kannst du gerne die 
Website des Bundesministerium für Unterricht, Kunst und Kultur besuchen.

http://www.bmukk.gv.at/schulen/bw/bbs/tgkg.xml
>Ein zentraler Teil der Reife- und Diplomprüfung ist die 35-stündige 
>Klausurarbeit „Projekt“. Diese Klausurarbeit kann auch in Form einer 
>Diplomarbeit abgelegt werden, in der ein Thema aus dem Fachbereich >umfassend und 
eigenständig zu bearbeiten ist. Die im letzten Jahrgang unter >Leitung erfahrener 
Lehrkräfte durchgeführten Diplomarbeiten (viele davon in >Zusammenarbeit mit der 
Wirtschaft) haben sich besonders bewährt, da dabei >nicht nur grundlegende 
fachliche Erfahrungen an realen Projekten gesammelt >werden, sondern vielfach 
bereits die ersten Brückenschläge für spätere >Berufseinstiege erfolgen.

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

Jaja,
egal ob Matura oder Diplom...

Erstmal - Datenblatt vom 18F2550 studieren,

Zweitens - mal etwas Googlen über den Unterschied von Hardware-SPI und 
Software-SPI.
Dank der Zombie-Libs in C denkt da ja anscheinend niemand mehr drüber 
nach.
Drittens - mach Dich schlau über Master und Slave.

Für so einen blöden Sensor sollte Soft-SPI reichen und ich wette sehr 
viel darauf, daß der uC der Master ist.

Evtl. ist das Wort SPI ja etwas zu viel für den Sensor. Da gibt es 
Sachen, daß Data-In und Data-Out auf einen Pin realisiert wird, da muß 
evtl. noch eine Zusatzbeschaltung (Widerstand) hinzu oder da kommt etwas 
mit Open-Collector und Pull-Up ins Spiel.
Da solltest Du das Datenblatt des Sensors studieren und auch nach 
application-notes suchen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stephan Henning schrieb:
> im Abitur lernt man eben nichts über Datenblätter.

Zu seiner Ehrenrettung muss man allerdings sagen, dass dies eins
der bekn***testen Datenblätter ist, die ich bislang gesehen habe.

Nirgends da drin steht, ob das Teil sich nun wie ein Master oder
wie ein Slave benimmt.  Die haben es ja nicht einmal nötig gehabt,
an die Pinbeschreibungen "Input" oder "Output" dran zu schreiben.

Leider gibt es nicht einmal eine Synchronisationsleitung, die den
Beginn eines Telegramms anzeigt.  Man muss also letztlich die
Synchronisation über einen Timeout machen: wenn lange (mehr als 20
Millisekunden) nichts mehr gekommen ist, dann nimmt der Controller
an, dass danach mit der nächsten Taktflanke ein neues Telegramm
beginnen wird.

Bei nur 2 kHz kann man das gewiss auch in Software abfragen.  Selbst
ein Interrupt pro Taktflanke sollte hier noch OK sein.

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.