Seniai jau mėtėsi šis prabangus ADC- AD7710AR. Jis toks specifinis: aukštos įtampos maitinimas, beveik SPI ir 24 bitai.

Minimalus maitinimas- 5V, ir jo išėjimas labai arti 5V. Tačiau STM32F103 yra 5V tolerantiškas. Tačiau viskam yra ribos. MCU biški kaista. Todėl prie visų kojų nuosekliai pajungiau 64 omų rezistorius- gal kiek ir padėjo. Dar reikėtu dviejų maitinimo šaltinių- vienas skaitmenai (5V), o štai analoginei daliai kogero geriau net bipoliaris maitinimas. Tačiau iš bėdos galima prijungti prie 5V.
O štai su “SPI” interfeisu biški bėda. Primiausia čia pusė duplekso ir duomenys eina per tą patį laidą. STM32F103 lygtai ir palaiko tokį režimą, tačiau kelių dienų eksperimentai parodė, kad visdėlto neveikia. Arba CLK lieka pastoviai, arba nespėja persijungti ar tai nuskaito bet kokią informaciją. Ir dar, jaučiu problemos su mikroschemos greičiais.
O dabar dar viena kvailystė- jei nuskaitom duomenis kai įjungtas 16 bitų režimas, reikia ir skaityti tik 16 bitų, o jei skaitom 24, tai reikia ir skaityti 24. Ir dar reikia stebėti ar duomenys paruošti skaitymui. O dar yra kita kvailystė- atskiras valdymo pinas skaitymui ir rašymui, o ne vienas R/W pinas. Kodėl taip padaryta aš nežinau.
Internete neradau gyvo pavyzduko, kad viskas veiktu. Tačiau po eksperimentų gavosi, kad grynai “softwarinis” variantas puikiausiai veikia.
Čia eksperimentinis source kodas STM32F103 serijos mikroschemai AD7710. Pagrindas – STM32CubeMX.
P.S. čipo kaina biški nustebino.
Dar 3.3V loginius lygius reikia suderint, STM tolerantiškas 5V, bet ADC input’ai bus 0.7*Vcc tai 3.3V signalai gali būt per maži, kad fiksuotų kaip 1 lygį. Nebent čia ne CMOS logika :D. Labai gerai 3.3V į 5V tiesiog suderina pull-up’ai į 5V, nes vidiniai STM clamp diodai turi kažkokį kritimą tai įtampa pasikelia nuo 3.3 į 3.7-4V ir jau viskas tinka. Aišku, būna veikia ir nieko nedarant, nes ant frontų ir lengvi spike’ai būna, ir CMOS loginiai lygiai kartais būna žemesni nei deklaruojama.
Su lygiais kaip ir viskas gerai, bet va su ADC…. GAIN=1, kintamas rezistorius tarp AGND ir VREF. Kažko labai jau nestabilus skaičiukai.
C:00009064 D:00057468
C:00009064 D:0005786D
C:00009064 D:00057840
C:00009064 D:000575CE
C:00009064 D:000578C7
C:00009064 D:00057654
C:00009064 D:00057761
C:00009064 D:0005743B
C:00009064 D:00057468
C:00009064 D:00057761
C:00009064 D:00057548
C:00009064 D:00057468
C:00009064 D:00057627
C:00009064 D:000575CE
C:00009064 D:00057814
C:00009064 D:00057814
C:00009064 D:000576AE
C:00009064 D:0005743B
C:00009064 D:00057627
C:00009064 D:00057468
C:00009064 D:000574EE
C:00009064 D:00057574
C:00009064 D:000573E2
C:00009064 D:0005751B
C:00009064 D:000577BA
C:00009064 D:000574EE
C:00009064 D:00057495
C:00009064 D:00057681
C:00009064 D:00057468
C:00009064 D:000575A1
C:00009064 D:000575A1
C:00009064 D:0005740E
C:00009064 D:000575A1
C:00009064 D:000575FB
C:00009064 D:0005732F
C:00009064 D:00057468
C:00009064 D:00057468
C:00009064 D:00057548
C:00009064 D:0005786D
C:00009064 D:00057548
C:00009064 D:000575A1
C:00009064 D:000573E2
C:00009064 D:00057574
(C- tai kontrolės registro turinys, D- duomenys)