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
bytevalue;
6
7
voidspi_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
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.
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?
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.
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
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.
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.
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.
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
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?
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
>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.
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.
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!
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.
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.
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.