Forum: Mikrocontroller und Digitale Elektronik AD7712 kommunikation mit avr klappt nicht


von Grobi (Gast)


Lesenswert?

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 :
AVR       AD7712
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

von Thilo M. (Gast)


Lesenswert?

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).

von Grobi (Gast)


Lesenswert?

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...

von Thilo M. (Gast)


Lesenswert?

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.

von Grobi (Gast)


Lesenswert?

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....

von Thilo M. (Gast)


Lesenswert?

Nene, ist definitiv TWI!
Bei mir lief der prima am mega32. ;)

von Grobi (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Grobi (Gast)


Lesenswert?

echt twi???????? aber der 7712 hat doch garkeine slaveadresse adresse...

von Thilo M. (Gast)


Angehängte Dateien:

Lesenswert?

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?

von Grobi (Gast)


Lesenswert?

danke, ich schau es mir mal an... takt am 7712 is dran über n 10MHz 
quarz

von Thilo M. (Gast)


Lesenswert?

Achso, am TWI die externen Pullups von 4k7 nicht vergessen (SCL und 
SDA)! Die internen ca. 30kOhm sind möglicherweise etwas hoch.

von Grobi (Gast)


Lesenswert?

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.

von Michael U. (amiga)


Lesenswert?

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

von Grobi (Gast)


Lesenswert?

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!!!!!!!!!!!!

von Grobi (Gast)


Lesenswert?

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.

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.