Hallo eGemeinde! Ich sitzte hier nun schon seit einiger Zeit vor einem MCP3428 (12-16bit Sigma-Delta ADC). Irgendwie will das Teilchen nicht so recht mit mir reden. :-( Hat einer von Euch dies schon geschafft? Oder vielleicht habe ich auch das Datenblatt falsch verstanden - schaut doch mal bitte über meinen Weg und holt mich wenn nötig vom Holz-selbigen. :-) z.Z. versuche ich es noch mit Bascom, da ich in C noch nicht so recht fitt bin. (Ub = 3,3V / Abtastrate = 10 Hz) Aber seis drum - erstmal abstrakt - vielleicht fällt Euch da schon etwas auf. Hier das Datenblatt: http://ww1.microchip.com/downloads/en/DeviceDoc/22226a.pdf ADC_w_Adr=208 (A0 und A1 auf low) ADC_r_Adr=209 Vor dem Lesen der ADC-Werte muss ertmal der Kanal gewählt und div. Einstellungen gesetzt werden. Bit 7 = 0 Bit 6-5 = 00 (Kanel =1) Bit 4 = 1 (Continuous Conversion Mode) Bit 3-2 = 00 (12bit / 240Sps) Bit 1-0 = 00 (Gain x1) -> 00010000 = 16 = ADC_conf So und nun zum theoretischen Programmablauf Konfiguration setzen: I2Cinit I2Cstart I2Cwrite ADC_w_Adr, ADC_conf I2Cstop ADC-Werte abrufen: I2Cinit I2Cstart I2Cread ADC_r_Adr, ADC_h_Byte, ADC_l_Byte_, ADC_conf, NACK I2Cstop So habe ich es jedenfalls verstanden. Ist es so Richtig? Als Ausgabe bekomme ich aber (bin) das hier: 0000011 00100010 00100010 Beim Durchfahren des Potis ändert sich nur das 1. also ist das h-Byte OK. Das 2. Byte bleibt gleich -> Sollte hier nicht das l-Byte sein? Selbst wenn das 3. Byte das Conf-Byte sein sollte, so steht da ja nicht das drin, was ich vorher reingeschrieben habe. Ich steh auf'm Schlauch! Irgendjemand ne Idee??? Gruss...Harpax
Hallo Ingolf, hier mal ein C-Code von mir der funktioniert. War nur ein "Proof of concept", also nur mal schnell hingeschrieben. Das Prinzip müsstest Du aber nach BASCOM übernehmen können. Gruß Johannes
N'Abend Johannes! Dickes Danke! Werd's mir gleich mal ansehen! Gruss...Harpax
Nochmal N'Abend Johannes! Vom Prinzip her ist es das Gleiche wie bei meinem Bascom-Code. Also habe ich das Datenblatt wohl nicht falsch verstanden. Mist! Tja...dann werde ich mich mal ans STM32-Bördchen setzen müssen und dort meine ersten i2c-Gehversuche absolvieren um einen BASCOM-Fehler auszuschließen. Wenn dort der gleiche Müll ausgespuckt wird...hmmm tja was dann? Trotzdem nochmal Denke für Deinen Code! Gruss...Harpax
Ingolf Geißler schrieb: > meine ersten i2c-Gehversuche absolvieren um einen BASCOM-Fehler Der Fehler sitzt, wie so oft, hinter dem Bildschirm. Ingolf Geißler schrieb: > I2Cread ADC_r_Adr, ADC_h_Byte, ADC_l_Byte_, ADC_conf, NACK Du fantasierst... Oder zeigst alles Mögliche, nur nicht den tatsächlichen Code. Es gibt unter Bascom weder ein I2CRead, noch ein I2CWrite, das heißt dort entweder I2CRByte, oder I2CWbyte und kann, wie's der Name schon impliziert, nur ein einzelnes Byte bearbeiten. Dann tät's noch I2CSend und I2CReceive geben, welche mehrere Bytes handhaben können, gleichzeitig aber die gesamte Sequenz I2CStart,...,I2CStop beinhalten. Wird da noch ein extra Start/Stop gesendet, geht das auch in die Hose. Vielleicht beschäftigst Du Dich erst mal mit den Grundlagen, bevor Du auf Basis ungültigen Codes Deine Fragen stellst.
Hey WMS...komm mal runter - Bitte! Wie ich oben schrieb, sind dies die abstrakten Vorgänge! Also kein so funktionierender Code (obwohl ich zugebe, das die Programm-ähnliche Schreibweise dazu verleiten könnte)! Das der Fehler oft vorm Moni sitzt...da gebe ich Dir durchaus Recht! Aber wenn der eingeschlagene Programmweg fehlerhaft ist, tja, was dann? Da kannste x-fach die selben Zeilen tippern - immer in der Annahme, das ja alles stimmt - und Du kommst doch wieder in Deiner eigenen Falle an. Also was wäre ne Alternative? Richtig... Auf nem anderen System das Gleiche probieren. Und da Du Dich ja so gut auskennst, werde ich Deinem Wunsch nach dem Bascom-Code erfüllen. Vielleicht findest Du ja den Fehler. Würd mich wirklich drüber freuen. (Hintergrund meiner Zurückhaltung bezüglich der Bascom-Zeilen: Sobald jemand hier Bascom erwähnt, blenden die C-User aus. Dies wollte ich vermeiden. OK?) Noch kurz zur verwendeten Hard- und Software: ATXMega32A4 mit 32MHz. Dadurch muss abweichend vom ATMega-Code jeweils die Kanal-Nummer hinten dran geschrieben werden. Aus einem "I2CInit" wird dann z.B. ein "I2CInit #4". (MCP3428 und ATXMega werden vom gleichen Wandler mit 3,3V versorgt.) BASCOM-v2.076 OK, wer findet den Fehler? (Bitte kein Gesabbel a la "BASCOM ist Müll" etc. sowas zeigt nur ungenügende Hirnreife um auch über dem C-Tellerrand blicken zu können!) Gruss...Harpax
Hallo Mitstreiter! Ich hau mir gleich selber nen Knüppel über! Wenn man NACK mit ACK tauscht, dann funktioniert es!!! Himmel A*sch und Zwirn!!! Das hätte mir auch schon am Fr auffallen können! Naja - was solls! Wäre der Schnipsel nicht was für die Code-Sammlung (Also bitte ohne mein Getexte!) Gruss...Harpax (mit Beule!)
Ingolf Geißler schrieb: > Wie ich oben schrieb, sind dies die abstrakten Vorgänge! Einen Code-Fehler auf Basis abstrakter Vorgänge zu suchen, ist wie der Besuch beim Zahnarzt, wenn der Fuß schmerzt. > (Hintergrund meiner Zurückhaltung bezüglich der Bascom-Zeilen: Sobald > jemand hier Bascom erwähnt, blenden die C-User aus. Dies wollte ich > vermeiden. OK?) Da Du genau den selben "abstrakten" Code in's Bascom-Forum gepostet hast - wer sollte sich denn dort nicht "ausblenden" ?
Ingolf Geißler schrieb: > Wenn man NACK mit ACK tauscht, dann funktioniert es!!! Ja, so macht man das normalerweise, das letzte gelesene Byte ist mit NACK zu quittieren.
@MWS Und der Zahn-Doc stellt dann nen Nierenschaden fest ... ja-ja :-) Tja, und wenn Du richtig gelesen hättest, dann wäre DIR der Fehler vor mir aufgefallen und auch die Erklärung für's Doppelposting wäre Dir sicher dann auch nicht entgangen. Bin selber kein Freund vom Doppelposting, da aber die Zeit arg mächtig drückt, musste es leider sein. Wer mich hauen möchte - bitte gern - auch für die NACK/Ack-Verwechslung. Da stehe ich jedem Knüppel gern zur Verfügung! Gruss...Harpax
Ingolf Geißler schrieb: > Tja, und wenn Du richtig gelesen hättest, dann wäre DIR der Fehler vor > mir aufgefallen und auch die Erklärung für's Doppelposting wäre Dir > sicher dann auch nicht entgangen. Ich hatte erst die Unlogik Deines Posts beantwortet und mir danach den Code angesehen, der Rest hat sich überschnitten. Bei meiner Aussage ging's nicht um's Doppelpost an sich, sondern um den Umstand, dass Du hier erklärst, Du postest abstrakten Code, weil Du die Jünger des C nicht verärgern willst. In's Bascom-Forum setzt Du dagegen denselben unbrauchbaren Code rein, obwohl Dir dort wohl kein C'ler böse sein wird. Das war nicht besonders schlüssig.
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.