Hallo,
ich habe hier ein HF Powermeter Modul von SV1AFN und bekomme es nicht
richtig zum laufen.
https://www.sv1afn.com/ad8318.html
Schaltplan:
https://nebula.wsimg.com/d41306bc9bd03c6e4d0503ceb3a5fab8?AccessKeyId=DAA432FA80C5DABC0234&disposition=0&alloworigin=1
Dort sitzt ein AD7887 12-Bit ADC drauf. Ich kann ihn auch per SPI
auslesen, allerdings sind die Werte um die Hälfte falsch.
Wenn ich den Eingang des AD8318 mit 50Ω terminiere, erhalte ich 2,13V am
Ausgang des AD8318, die auch am Eingang des ADC anliegen.
Die Referenzspannung beträgt 2,49V, so wie es sein soll.
Als ADC Wert würde man jetzt etwa 3500 erwarten, ich erhalte aber nur
etwa 1750, also die Hälfte.
Damit ist natürlich auch die berechnete Spannung nur halb so groß.
Ich vermute, dass der ADC nicht die externe Referenz, sondern VDD (5V)
als Referenz verwendet. Das wäre der Fall, wenn das "SIN/DUAL" Bit auf 0
gesetzt wird. Ich setze es jedoch auf 1 und deaktiviere die interne
Referenz.
Vielleicht habe ich auch nur das Kontrollregister auf S. 10 des
Datenblatts falsch verstanden.
http://www.analog.com/media/en/technical-documentation/data-sheets/AD7887.pdf
Was läuft hier falsch?
Hier noch der Code:
Füge mal
Config Adc = Single , Prescaler = Auto , Reference = Internal
ein.
Danch kannst du ja das Kontrollregister auslesen und vergleichen, ob
deine Bits richtig waren.
Bernadette schrieb:> Füge mal>> Config Adc = Single , Prescaler = Auto , Reference = Internal>> ein.
Damit würde ich ja den internen ADC des Atmega88 ansprechen. Ich habe
aber einen externen ADC, der per SPI angesprochen wird.
Hallo Luca,
SV1AFN sendet als Control Word 10100001 während Du 00100001 sendest.
Quelle: https://www.sv1afn.com/ad8318.html
Das MSB ist zwar aut Datenblatt "Don't care", aber einen Versuch ists
doch wert!
Thomas schrieb:> Das MSB ist zwar aut Datenblatt "Don't care", aber einen Versuch ists> doch wert!
Habe ich alles schon versucht. Keine Veränderung.
Thomas schrieb:> Vergleiche doch> mal, was er vielleicht anders macht!
Er macht die SPI Ausgabe manuell, weil er die SPI Bibliothek nicht zum
laufen bekommt. Außer dass er, nachdem er /CS auf low gezogen hat, mit
den 10x digitalWrite(SPICLOCK,HIGH); ein Delay einfügt, sehe ich da
jetzt keine Unterschiede.
Ich habe mir die Clock und die MOSI Leitung mal mit dem Oszi angesehen.
Offensichtlich hatte ich den falschen SPI Mode erwischt. Mit CPOL = 1
und CPHA = 1 bekomme ich jetzt den Wert 4090. Das ist wiederum etwas zu
hoch.
Dann ist mir aufgefallen, dass da 9 Clockpakete rausgehen. Der Fehler
war also offensichtlich:
1
spiin adc_value_2, 8
Die 8 steht also nicht für die Anzahl der Clockpulse, sondern für die
Anzahl der einzulesenden Bytes. Nachdem ich das auf
1
spiin adc_value_2, 1
geändert habe, erhalte ich den Wert 3480. Das scheint also jetzt zu
passen.
Was lernen wir daraus? Nächstens direkt das Oszi auspacken...
Luca E. schrieb:> Die 8 steht also nicht für die Anzahl der Clockpulse, sondern für die> Anzahl der einzulesenden Bytes.
Würdest Du die Hilfe zur Programmiersprache und dort zu Spiin lesen,
wäre Dir das zu Beginn an klar gewesen.
> Was lernen wir daraus? Nächstens direkt das Oszi auspacken...
Nein, wir lernen daraus, dass man das Werkzeug beherrschen sollte, mit
dem man arbeitet.
Luca E. schrieb:> Dann ist mir aufgefallen, dass da 9 Clockpakete rausgehen. Der Fehler> war also offensichtlich:spiin adc_value_2, 8
War mir gar nicht aufgefallen. Stimmt natürlich.
Insofern war es doch gut, das Du den Oszi zumindest soweit beherrschst,
um den Fehler damit zu finden =;-)
Luca E. schrieb:> Was lernen wir daraus? Nächstens direkt das Oszi auspacken...
Das wäre sogar mit einem kleinen Logikanalysator für unter 5€
aufgefallen.