AD7683 - 10 bitów zamiast 16

May 30, 2005 4 Replies

Witam,



czy ktoś bawil się może układem AD7683? Jest to szeregowy 16-bitowy przetwornik A/C, tak prosty w obsłudze, jak tylko można wymyslić (do tej pory tak uważałem ;)



W obwodzie testowym podłączam REF+ do zasilania 5V, IN- do masy, IN+ na suwak potencjometru wieloobrotowego 220k zapiętego też między masę i zasilanie.



Objaw: podczas regulacji potencjometem dolne



4 bity są zawsze 1, kolejne 2 (od dołu) są zawsze
0, pozostałe zmieniają sie tak, jak powinny. Wyjątkiem jest zjechanie do zera - wtedy na wszystkich bitach jest 0. Kolejne wartości (jadąc od zera) sa następujące:
0000 0000 0000 0000
0000 0000 0000 1111
0000 0000 0100 1111 ...
1111 1111 1000 1111
1111 1111 1100 1111

Skok potencjometru jest dostatecznie mały, aby można było zaobserwować bardziej subtelne zmiany



- przy kręceniu nowa wartość pojawia się mniej więcej co 1/2 obrotu.



Czyli mam przetwornik 10-bitowy, a nie 16.



Raczej wykluczam błąd po stronie cyfrowej



- w końcu te górne 10 bitów mierzy prawidłowo, a zwraca wynik w postaci liczby 16-bitowej. Ale też głowy nie dam...



Szybkość próbkowania o dwa rzędy niżej od katalogowych



100 kHz.

Jak odzyskac straconych 6 bitów?



Pozdrowienia, MKi


Użytkownik MKi napisał:

Podaj sekwencje odczytu. Algorytm ,źródła coś w tym typie .. Używam takiego przetwornika i nie ma problemu.

Adam

[...]

A pdf Ty czytal i zgodnie z nim postepujesz ?

Bo ja tam widze ze pierwszych 5bit jest HiZ, potem jedno zero, potem D15..0, potem znow 0, potem HiZ ..

J.

Czytał, czytał. 22 cykle zegarowe. Pierwsze

5 bitów ignorowane, kolejne 16 znaczące (od najważniejszego), ostatni do zignorowania.

Skoro odczyt przy pełnej regulacji potencjometru (od oporu do oporu) zmienia się od 0000 do FFCF (szenastkowo) to raczej nie ma błędu z pomijaniem jakiegoś znaczącego bitu.

Pozdrowienia, MKi

PS. Wyjeżdżam na urlop, może świeże spojrzenie za tydzień pomoże ;) MKi

Dzięki za informację, że ten przetwornik w ogóle działa. Przynajmniej nie muszę rozglądać się za zamiennikiem.

Służę źródłem '51. Zaprezentowany kod wklejony bezpośrednio z ostatniej wersji programu.

PdaSCKL, PdaSC, PdaDO - porty podłączone do odpowiednich wyprowadzeń przetwornika. W wyniku wartość znajduje się w parze R1,R2.

Komentarz do kodu: druga pętla powstała w celach testowych, po w PDF-ie były zaprezentowane 24 cykle. No to mu dorzucałem po kolei, począwszy od 22 w góre, aż przystopowałem na 32. Kolejne zmiany licznika w drugiej pętli (od 1 do 10) nic nie zmienialy. Zwiekszanie/zmniejszanie liczby NOP-ów (zegar procesora 24MHz, czyli instrukcje taktowane 2MHz) nie wpływały na wynik.

<kod>

SETB PdaSCLK CLR PdaCS NOP NOP CLR PdaSCLK MOV R4,#22 MOV R2,#0 MOV R1,#0 SETB PdaDO

RP_Loop1: SETB PdaSCLK NOP NOP MOV C,PdaDO MOV A,R2 RLC A MOV R2,A

CLR PdaSCLK

MOV A,R1 RLC A MOV R1,A

DJNZ R4,RP_Loop1 MOV R4,#10

RP_Loop2: SETB PdaSCLK NOP NOP NOP NOP NOP NOP

CLR PdaSCLK

NOP NOP NOP NOP

DJNZ R4,RP_Loop2

SETB PdaCS

</kod>

Pozdrowienia, MKi

PS. Wyjeżdżam na urlop, może świeże spojrzenie za tydzień pomoże ;) MKi

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required