mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AD7792/AD7793 Code gesucht


Autor: Bergie B. (bergie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich möchte mit meinem µC (MSP430) meinen ADC (AD7793mit UART) auswertem.

Dafür würde ich gerne einige Beispiele sehen wie das in C umgesetzt 
worden ist. Ich habe schon mal gesucht aber noch nix gefunden.

Vieleicht habt ihr ja nen BeispeilCode für einen AD7793 oder einem 
vergleichbarem Gerät wo ich noch ein paar Tricks abschauen kann, Bzw. 
ihr wisst wo ich sowas finden kann.

LG

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry, aber der hat kein uart-interface?

das ist eine art SPI mit total miesem timing :)

falls du dazu was in C brauchst, kannst gerne meine softspi haben.

Autor: Bergie B. (bergie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Natürlich ist es eine SPI.

Sorry das ich das durcheinander geworfen habe.

Da ich mit einem MSP430F248 arbeite habe ich die Komunikation Hardware 
mäßig gelöst.

Ich habe auch eine Komunikation mit dem AD aufgebau, doch dieser macht 
leider nicht immer das was ich von ihm erwarte.

Ich habe nun gehoft das irgendwer evt. Beispiel Codes für diesen AD hat. 
Ich kann leider nicht sagen in wie weit ein soclhe komunikation auf 
andere Chips übertragbar ist.

Mein Hauzbtproblem ist zZ das ich nicht weis wie ich festelegen kann auf 
welchem Kanel der AD messen soll, und wie ich ihm sage das er mit der 
Messung starten soll.


LG Bergie

Autor: Aehh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na. Der ADC hat einen Befehlssatz, dh diverse Register muessen 
geschrieben werden, steht aber alles im datenblatt.

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bergie B. schrieb:
> Natürlich ist es eine SPI.
>
> Sorry das ich das durcheinander geworfen habe.
>
> Da ich mit einem MSP430F248 arbeite habe ich die Komunikation Hardware
> mäßig gelöst.
>
> Ich habe auch eine Komunikation mit dem AD aufgebau, doch dieser macht
> leider nicht immer das was ich von ihm erwarte.
>
> Ich habe nun gehoft das irgendwer evt. Beispiel Codes für diesen AD hat.
> Ich kann leider nicht sagen in wie weit ein soclhe komunikation auf
> andere Chips übertragbar ist.
>
> Mein Hauzbtproblem ist zZ das ich nicht weis wie ich festelegen kann auf
> welchem Kanel der AD messen soll, und wie ich ihm sage das er mit der
> Messung starten soll.
>
>
> LG Bergie

Nur ein paar grobe Anhaltspunkte für einen AD7794, der bis auf einige 
Details gleich angesteuert wird:
// defines
#define AD_IDREG_READ    0b01100000
#define AD_STATUSREG_READ  0b01000000
#define AD_CONFREG_WRITE  0b00010000
#define AD_MODEREG_WRITE  0b00001000
#define AD_DATAREG_READ    0b01011000
#define AD_STATUSREG_7792       0x80
#define AD_STATUSREG_7793       0x88
#define AD_STATUSREG_7794       0x80 
#define AD_STATUSREG_7795       0x88
#define AD_IDREG_7792           0x0a
#define AD_IDREG_7793           0x0b
#define AD_IDREG_7794           0x0f
#define AD_IDREG_7795           0x0f
#define AD_MODEREGH_IDLE  0b01000000
#define AD_MODEREGL_IDLE  0b00000000
#define AD_MODEREGH_CONT  0b00000000
#define AD_MODEREGL_CONT  0b00000000
#define AD_MODEREGH_SINGLE  0b00100000
#define AD_MODEREGL_SINGLE  0b00000000
#define AD_MODEREGH_INTZSC  0b10000000
#define AD_MODEREGL_INTZSC  0b00000000
#define AD_MODEREGH_INTFSC  0b10100000
#define AD_MODEREGL_INTFSC  0b00000000
#define AD_MODEREGH_PWRDWN  0b01100000
#define AD_MODEREGL_PWRDWN  0b00000000
// initialization

// presence detect, read id and status register
ADCSelect();
SPITransceive(AD_IDREG_READ);
id = SPITransceive(0x00) & 0x0f;
SPITransceive(AD_STATUSREG_READ);
stat = SPITransceive(0x00);
ADCDeselect();

if (res1 != ...) return ...;
...

// write configuration
ADCSelect();
SPITransceive(AD_CONFREG_WRITE);
// set bias, uni/bipolar and gain
SPITransceive(channelConfHigh);
// set reference, buffer and channel
SPITransceive(channelConfLow);

// start conversion, single shot
SPITransceive(AD_MODEREG_WRITE);
// amp only on AD7794/95
SPITransceive(AD_MODEREGH_SINGLE | amp);
SPITransceive(AD_MODEREGL_SINGLE | speed | clock);
ADCDeselect();
  
// get result, byte order!
uint32_t v = 0;
uint8_t* resP = &v;
ADCSelect();
SPITransceive(AD_DATAREG_READ);
resP[2] = SPITransceive(0x00);
resP[1] = SPITransceive(0x00);
resP[0] = SPITransceive(0x00);
ADCDeselect();

Autor: Aehh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Irgendwo muss man dann noch warten bis die Mesung beendet ist. Da kann 
man mit einem timer oder mit einem Signal machen. Das signal bekommt man 
indem man das SPICommand nicht abschliesst, sondern offen laesst, soweit 
ich mich erinnere. Das Timing dazu ist etwas vermurkst, heisst mit 
Hardware SPI nicht machbar.

Autor: Bergie B. (bergie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aehh schrieb:
> Das signal bekommt man indem man das SPICommand nicht abschliesst,
> sondern offen laesst,


was bedeutet offen lassen ?

Kann das meine Hardware SPI auch oder ist das eine Software SPI only 
Geschichte?

ich habe das waren nun so gelöst:



    while (!(P2IN & 0x80)); // warten bis Flanke auf 1 geht
    while (P2IN & 0x80);    // warten bis Flanke auf 0 geht

    MessdatenHolen();

wobei an P2.7 auf Dout und MiSo geht.

LG

Autor: ah (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man kann die SPI Hardware ueblicherweise auf Normal zurueckschalten. Ja 
moeglicherweise wie angegeben. Nur natuerlich nicht blockierend. Man 
kann den Controller ja nicht fuer hunderte von millisekunden lahmlegen.

Autor: Bergie B. (bergie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich habe meinen AD7793 so zum laufen bekommen wir ich mir das vorstelle.

Ich suche nun nach einer Möglichkeit den Code sehr sauber zu 
struckturieren damit ich genau weis was ich nun gemacht habe. Gibt es 
dazu einen Leidfaden  Lehrbuch  Goldeneregeln  die sich auf die 
Komunitkation  mit externen Bauteilen beziehen und die einbindung in den 
Code?

LG Bergie

Autor: Bergie B. (bergie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Nach dem ich mich ja nun ein wenig mit dem AD7793 befasst habe, und 
dieser lange nicht das gemacht hat was er sollte, läuft er nun.


Schilderung meines Problems.

Der AD7793 hat sich nach dem ersten holen der Messergebnisse 
"Verlaufen". Dieses geschah nicht jedes Mal sondern mit einer 
Wahrscheinlichkeit die bei 60% lag.

Die Lösung. Der ADC 7793 verlangt zwingend ein "0x00" Zeichen am Eingang 
wenn er Daten rausgeben soll. Ich bin nach dem durchlesen der Anleitung 
der Meinung gewesen das ein (0x80) nötig sei, da das Comunikations 
Register sämtliche Anweisungen ignoriert welche mit 1Starten (Bit7 
High). Darüber hinaus war ich der Meinung dass es über SPI möglich ist 
gleichzeitig zu senden und zu empfangen (Vollduplex), dieses ist leider 
nicht so. Damit ist es dann auch nachvollziehbar das 0x00 richtige 
Ergebnisse Erzeugt. Wieso hingegen

[0x80 + (0x0 bis 0x7F)]  | ohne 0xFF da dieses einen Rest auslöst

kann ich nicht beantworten

Zusammen fassung:

AD7793:
Halbduplex!
Tackt zum endfangen mit "0x00" erzeugen!

Spaß haben.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.