Hallo,
ich versuche den AD7712 mit einem avr (Mega32) über SPI auszulesen,
leider klappt das wohl nicht so ganz richtig, ich erhalte immer den wert
0 wenn ich versuche zu lesen.
Ich habe mich an dem read beispiel aus dem datenblatt des 7712
orientiert.
Anschluss :
AVRAD7712
PortA.0 DRDY
PortA.1 RFS
PortA.2 TFS, A0 // dies ermöglicht nur das lesen der output register
des AD7712 nicht der Controlregister!
PortA.3 MODE
MISO SDATA
SLK SCLK
init:
RFS, TFS, MODE, SCLK als output
DRDY, MISO als input
SPI als master, clock(16MHz) / 16, dataorder = MSB first (AD7712 = MSB
first laut datenblatt)
MODE = Low (external clocking mode des AD7712 einschalten)
read:
RFS, TFS = High // TFS ist mit A0 verbunden!
warten bis DRDY = Low ist //daten zum lesen bereit
RFS = Low
3 x [
SPDR = 0xFF (Dummybyte senden)
warten bis SPIF = High
SPDR auslesen (data0, data1, data2 = 24Bit)
]
RFS = High
die read routine läuft wohl ohne Probleme durch, aber ich lese immer nur
0x00 aus SPDR... wieso? Hat schonmal jemand mit dem 7712 gearbeitet oder
weis wie genau das funktioniert???
Grobi
Ich habe einen anderen ADC per SPI am laufen.
Der ADC hat 16 Bit.
Mit der negativen Flanke von SCK wird das erste Byte der vorhergehenden
Wandlung an MISO übertragen.
Im 2. Byte wird die Einstellung des ADC (MUX) mit der positiven Flanke
von SCK eingestellt (MOSI) und die nächste Wandlung eingeleitet (8 Bit),
die fallende Flanke liefert an MISO gleichzeitig die zweiten 8 Bit der
vorhergehenden Wandlung.
Ich denke, du musst die Wandlung irgendwie einleiten und das SPI vom µC
aus takten (MOSI benutzen).
Habe das DB des AD7712 nicht gelesen).
also das Interface des AD7712 hat nur 2 Leitungen, Clock und Data, Data
ist sowohl input als auch output, also habe ich MOSI gar nicht
angeschlossen, da ich der Meinung bin das das Clock signal mir das Byte
sozusagen raustaktet wenn ich ein byte aufs spi schreibe, scheint ja
auch soweit zu klappen, nur finde ich nirgendswo im db des 7712 etwas
darüber wie man die Wandlung anstößt, scheint nach der einschaltphase
automatisch loszulaufen, wie könnte man denn noch das MOSI mit ins spiel
bringen um wirklich daten an den 7712 zu schicken? Habe irgendwo ne
Lösung gesehen wo einfach der MOSI über nen 1k Widerstand mit dem MISO
zusammen auf SDATA des 7712 gelegt wird, aber bin mir nicht so sicher ob
das wirklich funktionieren kann...
Hi nochmal,
habe mir grade das DB des AD7711 angeschaut.
Ich habe mal mit dem AD7712 gearbeitet (der kam mir so bekannt vor :)).
Das Interface ist TWI (oder I²C), nicht SPI.
also bin mir ziemlich sicher der 7712 hat KEIN TWI interface, hatte das
zuerst auch gedacht wegen der nur 2 leitungen, aber das twi würde eine
star-stop-condition, adresse usw benötigen, das brauch der 7712 aber
alles nicht, ist halt ein SPI mit 2 Leitungen....
Hier mal der sourcecode meines Programms. Funktion : man sendet über die
serielle schnittstelle ein 0x01, darauf hin fängt der avr an alle 10ms
den ADC auszulesen und sendet ein 6Byte Datenpaket(24BitMesswertNummer,
24BitDatenwort) über die ser. zurück. eine 0x02 stoppt das ganze dann
wieder.
Ich stelle dir mal das uuuuuralte Testprogramm von vor vielen Jahren
'rein, kann's selbst nicht mehr so ganz nachvollziehen, ist aber ein
Software-TWI.
Vielleicht hilft's dir ja weiter?!
Achja - den externen Takt haste dran?
ah ok du hast dir ne softwaremäßige Lösung ausgedacht sieht genau nach
dem aus was ich eigentlich brauche, werde das mal ausprobieren, hatte
mich für das hardwareSPI entschieden weil damit ja höhere
übertragungsraten möglich sind.
Hallo,
hab zwar nur kurz ins Datenblatt des AD7712 geschaut, aber ich sehe da
nichts mit I2C und auch nicht SPI.
Das Ding hat ein 24Bit Register, daß auch jeweils komplett geschrieben
oder gelesen werden will.
Könnte zwar mit Hardware-SPI gehen, wenn man eben 3 Byte liest/schreibt,
ich würde das aber wohl lieber erstmal zu Fuß machen.
Gruß aus Berlin
Michael
soo also ich hab mich für eine reine softwarevariante entschieden und es
läuft, mit dem hardware SPI krieg ichs leider nicht hin, wäre schöner
gewesen, aber klappt auch so, vielen vielen dank für eure
Hilfe!!!!!!!!!!!!
btw. kennt jemand vielleicht nen günstigen ADC(24 Bit auflösung wären
schön) mit dem ich 2 Kanäle(-5 bis +5V dürften reichen) zusammen per SPI
oder I2C auslesen kann und das mit ner fequenz von 100Hz oder mehr???
Der AD7712 is schon ganz nett, aber zum einen schon teuer, die auflösung
sinkt auf 18.5 bits bei 100Hz ab und ich würde gerne 2 Kanäle aufeinmal
auslesen und das natürlich so komfortabel wie möglich.