Michał Wysocki
Guest
Fri Apr 30, 2004 3:14 pm
Witam
mam sobie takiego DACa - TDA1543
http://boss.iele.polsl.gliwice.pl/data/Philips/docs/tda1543.pdf
16bitow, format wejsciowy I2S, wyjscie pradowe, przetwornik I/U zrobilem na najprostszym oporniku 1k, wyjscie Iref tez przez 1k do
masy
DACa podlaczylem do AVRka i probuje udawac I2S - czyli 16bitow, zmiana stanu na WS, kolejne 16bitow i tak w kolko
na DATA caly czas zero (albo jeden...)
na wyjsciu nie zmienia sie kompletnie NIC

caly czas dac jest ustawiony w polowie (8000h) czyli ok 3V
z tego co widze w nocie, DAC nie ma zadnych wynalazkow jak cyfrowe filtry itp.
powinien dzialac praktycznie przy kazdej czestotliwosci taktowania - probowalem w zakresie 4Mhz ... 200Khz - totalnie nic
Zachowuje sie tak jakby w ogole nie dostawal danych wejsciowych
wejscia sprobowalem tez podlaczyc przez bufor - 74LS04, ale to tez nic nie dalo
probowalem przesuwac faze sygnalu WS wzgledem zegara, ale tez bez roznicy
czy grupowi eksperci mogli by przejzec note tego scalaka - moze znajda cos ciekawego co mi umknelo?
mam 6 sztuk, wszystkie nowe i wszystkie zachowuja sie tak samo
ma ktos pomysl gdzie moze byc haczyk? wiem ze pewnie nikt tego scalaka nigdy nie uzywal w ten sposob, ale kazdy pomysl jest na wage
zlota... :(
pzdr i dzieki z gory!
mw
B
Guest
Fri Apr 30, 2004 5:50 pm
"Michał Wysocki" wrote:
Quote:
Uwaga na wzajemne polozenie danych i sygnalu left/right.
Ostatni bit jest transmitowany po zmianie tego sygnalu a nie od razu jak
moznaby sądzic. Moze to jest to.
B.
Michał Wysocki
Guest
Fri Apr 30, 2004 6:04 pm
Quote:
Uwaga na wzajemne polozenie danych i sygnalu left/right.
Ostatni bit jest transmitowany po zmianie tego sygnalu a nie od razu jak
moznaby sądzic. Moze to jest to.
dzieki, ale wiem..... wysylam albo same 0 albo same 1 - wtedy to nie ma znaczenia, a na wyjsciu i tak nic sie nie zmienia :(
jakies inne pomysly? brak mi juz sil
Michał Wysocki
Guest
Fri Apr 30, 2004 9:08 pm
Quote:
jakies inne pomysly? brak mi juz sil
trafilem na
http://www.telesys.ru/wwwboards/fpga/65/messages/23844.shtml
babel fish wyplul cos takiego (jedna z odpowiedzi) ale to taki belkot ze trudno cokolwiek zrozumiec.... moze ktos domysli sie o co
chodzi? glownie na poczatku (shreds? generil? velveteen?)
moze ktos przetlumaczy oryginal? (http://www.telesys.ru/wwwboards/fpga/65/messages/23853.shtml)
it wore out, it was necessary to make more rapidly, also, without the jitter. Saved that I2S makes it possible to transfer excess
shreds, that drop, on which it is loaded the parallel register TSAP (it renews vykhodny current) of generil with the aid of compare,
and rest - with the aid of SPI. Mega8 spend on the load of one channel less than 3 s. Thus it managed without VELVETEEN, savings,
pancake! Actually the question: TSAP has a conclusion Vref, to which it is necessary to connect resistor to the earth. The rating of
this resistor and resistors of load must be selected so that with any code voltage on outputs would be entered in the permissible
range. Otherwise output diagrams TSAP leave from the linear conditions, consumption and entire such. Although on the mind it is
necessary to place the normal converter of current in the stress on OU. So that the standard diagram from Datasheet- A would work,
OU must have bipolar nourishment
Andrzej Sarbinowski
Guest
Sat May 01, 2004 5:03 am
On Fri, 30 Apr 2004 18:14:17 +0200, "Michał Wysocki"
<mwsoft@satkabel.com.pl> wrote:
Quote:
Witam
mam sobie takiego DACa - TDA1543
http://boss.iele.polsl.gliwice.pl/data/Philips/docs/tda1543.pdf
16bitow, format wejsciowy I2S, wyjscie pradowe, przetwornik I/U zrobilem na najprostszym oporniku 1k, wyjscie Iref tez przez 1k do
masy
DACa podlaczylem do AVRka i probuje udawac I2S - czyli 16bitow, zmiana stanu na WS, kolejne 16bitow i tak w kolko
na DATA caly czas zero (albo jeden...)
Czesc !
Kiedys opanowywalem tego scalaka wiec podziele sie tym co napisalem,
Program napisany dla 8051 dla obslugi TDA1543 - D/A 2x16 bit :
procedura dziala poprawnie na 100 %.
Porownaj ten kod ze swoim, jak chcesz to podesle schemacik jak to-to
jest popodlaczane na priv.
Pozdrawiam :
Andrzej Sarbinowski
PS: Przepraszam ze wale zrodla na liste, ale nie sa zbyt dlugie, a
moze komus jeszcze sie przydadza : a widze ze temat sie raz poraz
pojawia na liscie.
; Plik i2s.asm
PUBLIC SendI2S
$DEFFN SendI2S(0,0,0,0,0,4,0,0)
EXTERN _R
I2SWR EQU P1.1
I2SCL EQU P1.2
I2SDA EQU P1.3
RSEG CODE
macro %W10us
MOV R5,#4
DJNZ R5,$
endmac
SendI2S: MOV R0,#$LOCBI SendI2S
MOV @R0,_R+6
INC R0
MOV @R0,_R+7
MOV R0,#$LOCBI SendI2S
MOV A,@R0
XRL A,#80h
CLR KTORYKAN
LCALL SendI2SB
MOV R0,#$LOCBI SendI2S+1
MOV A,@R0
CLR KTORYKAN
LCALL SendI2SB
MOV A,#0
SETB KTORYKAN
LCALL SendI2SB
MOV R0,#$LOCBI SendI2S+2
MOV A,@R0
XRL A,#80h
SETB KTORYKAN
LCALL SendI2SB
MOV R0,#$LOCBI SendI2S+3
MOV A,@R0
SETB KTORYKAN
LCALL SendI2SB
MOV A,#0
CLR KTORYKAN
LCALL SendI2SB
RET
SendI2SB: MOV R7,#7
NastBIT: RLC A
MOV I2SDA,C
%W10us
SETB I2SCL
%W10us
CLR I2SCL
DJNZ R7,NastBIT
RLC A
MOV I2SDA,C
MOV C,KTORYKAN
MOV I2SWR,C
%W10us
SETB I2SCL
%W10us
CLR I2SCL
RET
RSEG BITVARS
KTORYKAN DS 1
END
/* Plik przyklad.c */
typedef unsigned char byte;
typedef unsigned int word;
extern void SendI2S(word,word);
void init_I2S(void);
void main(void)
{ word KanalL,KanalP;
init_I2S();
do
{
/* ........ */
SendI2S(KanalL,KanalP);
} while(1);
}
void init_I2S(void)
{ SendI2S(0,0);
SendI2S(0,0);
}
megaraptor
Guest
Sat May 01, 2004 7:25 am
Quote:
A próbowałeś ten rezystor podczepić nie do masy tylko do zasilania ?
Pzdr
megaraptor
Michał Wysocki
Guest
Sat May 01, 2004 10:26 am
Quote:
PS: Przepraszam ze wale zrodla na liste, ale nie sa zbyt dlugie, a
moze komus jeszcze sie przydadza : a widze ze temat sie raz poraz
pojawia na liscie.
hmm splodzilem cos takiego, na szybko w C - chyba dziala identycznie jak Twoj kod... generuje mi piekne przebiegi, dokladnie takie
jak powinny byc, ale DAC nadal milczy

((
powiedz jak od strony hardwareowej masz podlaczonego DACa - jak zrobiles przetwornik I/U, co z Iref itp.
void wait()
{
unsigned char i;
for(i=0;i!=100;++i);
}
void sendi2s(unsigned int l, unsigned int r)
{
unsigned char i, j;
#define DATA PB2
#define WS PB1
#define CLK PB0
#define O PORTB
DDRB = 0xFF;
cbi(O,CLK);
cbi(O,DATA);
cbi(O,WS);
j = l >> 8;
for(i=0;i!=8;++i)
{
cbi(O,CLK);
if(j & 0x80) sbi(O,DATA); else cbi(O,DATA);
j <<= 1;
wait();
sbi(O,CLK);
wait();
}
j = (unsigned char)l;
for(i=0;i!=7;++i)
{
cbi(O,CLK);
if(j & 0x80) sbi(O,DATA); else cbi(O,DATA);
j <<= 1;
wait();
sbi(O,CLK);
wait();
}
cbi(O,CLK);
sbi(O,WS);
if(l & 0x80) sbi(O,DATA); else cbi(O,DATA);
j <<= 1;
wait();
sbi(O,CLK);
wait();
j = r >> 8;
for(i=0;i!=8;++i)
{
cbi(O,CLK);
if(j & 0x80) sbi(O,DATA); else cbi(O,DATA);
j <<= 1;
wait();
sbi(O,CLK);
wait();
}
j = (unsigned char)r;
for(i=0;i!=7;++i)
{
cbi(O,CLK);
if(j & 0x80) sbi(O,DATA); else cbi(O,DATA);
j <<= 1;
wait();
sbi(O,CLK);
wait();
}
cbi(O,CLK);
cbi(O,WS);
if(l & 0x80) sbi(O,DATA); else cbi(O,DATA);
j <<= 1;
wait();
sbi(O,CLK);
wait();
cbi(O,CLK);
}
Michał Wysocki
Guest
Sat May 01, 2004 11:41 am
dzieki wszystkim za odpowiedzi
juz sobie poradzilem
ale problem byl ........ dziwny
na zasilaniu byl zwykly kondensator 100nF
TDA podlaczylem na plytce experymentalnej z PLD, AVRkiem i innymi szpejami
no i jak sie okazalo szum na zasilaniu skutecznie ukatrupial DACa, tak ze nie reagowal na zadne dane wejsciowe :(
dopiero dolozenie 100uF (!!!) bezposrednio na zasilanie TDA sprawilo ze zaczal dzialc perfekcyjnie :)
pzdr dla wszystkich
mw