Forum: Digitale Signalverarbeitung / DSP / Machine Learning ADV7611 Inbetriebnahme


von Kai L. (klaute) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich bin momentan dabei eine Platine in Betrieb zu nehmen. Auf dieser 
befindet sich ein XMega192A3 (I2C Master) und zwei Signalprozessoren.
Einen von Texas Instruments, welcher als I2C/TWI-Slave angesprochen 
werden kann, und einer der den (lesenden) Zugriff per I2C vehement 
verweigert.

Es handelt sich bei dem zweiten um einen ADV7611. Die Schaltung habe ich 
laut Datenblatt aufgebaut (siehe Bild). Die PullUps an den I2C-Leitungen 
betragen jeweils 2,2kOhm an 3,3V. Das funktioniert mit dem TI-Prozessor 
einwandfrei.
Ich habe auch 4,7k und 10kOhm ohne Erfolg beim Zugriff auf den ADV7611 
getestet.

Ein lesender Zugriff auf die Adresse 0x98 (default siehe Datenblatt 
ADV7611 UG-180, Rev. B S.173 mit 0x99 als "leseadresse") ist schlicht 
nicht möglich. Der XMega meldet bei jedem lesen ein NACK auf dem Bus. 
Als Software verwende ich den TWI-Master-Driver von Atmel aus der 
Application Note AVR1308: Using the XMEGA TWI in der Version 1569.

Zur Initialisierung resette ich den ADV7611, indem ich den RESET-Pin für 
10ms auf 0V setze und darauf hin wieder 3V3. Darauf hin folgt eine 
Sequenz von Schreibvorgängen in verschiedene Register der IO-Adresse 
0x98 (laut Paper: ADV7611 Recommended Register Settings Rev. 1.4 S.4).
Zudem setze ich Register 0x04 die Frequenz auf 24,567 MHz (Datenblatt 
ADV7611_UG-180.pdf S.19) bzw. wird diese Änderung nicht angenommen da 
der Zugriff auf den Baustein ja nicht möglich ist.

Im Bild (Beschaltung des ADV7611) ist ein 28,63636MHz und zwei 47pF 
Kondensatoren zu sehen. Allerdings verwende ich einen 24,567MHz mit zwei 
mal 15pF. Das Quarz ist in der Liste der möglichen Frequenzen im 
Datenblatt angegeben und die Kondensatoren sind laut Datenblatt 
berechnet (Datenblatt ADV7611 UG-180, Rev. B S.178).

An den Leitungen XTALN/P des Prozessors messe ich mit dem Multimeter 
eine Spannung von jeweils (etwa) 0,68V, was in etwa den Spannungen 
entsprechend welche ich am Quarz des anderen Ti-DSP gemessen habe (ich 
weiß, ist leider nicht sonderlich aussagekräftig). Ein entsprechendes 
Oszilloskop steht mir leider momentan nicht zur Verfügung.

Elektrisch gesehen habe ich jedoch Kurzschlüsse oder Fehler in der 
Schaltung soweit möglich ausgeschlossen.
Der Chip sitzt auf einer kleinen 4Layer Paltine mit kurzen Leitungswegen 
zwischen den Bauteilen usw... 
(http://1.bp.blogspot.com/-jhBLEBkuqmE/Ut10mCfFIJI/AAAAAAAAAMU/K2e0BKf1-bM/s1600/alle_bauteile_verloetet.png)

Ich hoffe jemand von Euch kann mir einen Tipp geben was hier schief 
läuft oder ich schlicht vergessen habe um das Bauteil zum laufen zu 
bringen.

Danke!

Kai

: Bearbeitet durch User
von Kai L. (klaute) Benutzerseite


Lesenswert?

Hallo nochmal,

hier ein kurzer Zwischenstand...

Das ADV7611 scheint bei der Kommunikation per I2C im Lesevorgang etwas 
anders als vom I2C-Standard erwartet zu arbeiten, siehe [1].

Da ich (wie im vorherigen Post bereits beschreiben) den 
TWI-Master-Driver von Atmel verwende frage ich mich nun wie ich diesen 
dazu bringen die Kommunikation auf die benötigte Weise zu modifizieren.

Der Code hierzu stammt von Atmel und wird mit den entsprechenden 
Parametern für lesende und schreibende Zugriffe verwendet.
Ich sehe hier momentan keine Möglichkeit in die Kommunikation auf dem 
Bus tiefer einzugreifen.

Ich hoffe weiter auf Tipps und Anregungen/Ideen zu meinem Problem.

Danke!

---
1
bool TWI_MasterWriteRead(TWI_Master_t *twi,
2
                         uint8_t address,
3
                         uint8_t *writeData,
4
                         uint8_t bytesToWrite,
5
                         uint8_t bytesToRead)
6
{
7
  /*Parameter sanity check. */
8
  if (bytesToWrite > TWIM_WRITE_BUFFER_SIZE) {
9
    return false;
10
  }
11
  if (bytesToRead > TWIM_READ_BUFFER_SIZE) {
12
    return false;
13
  }
14
15
  /*Initiate transaction if bus is ready. */
16
  if (twi->status == TWIM_STATUS_READY) {
17
18
    twi->status = TWIM_STATUS_BUSY;
19
    twi->result = TWIM_RESULT_UNKNOWN;
20
21
    twi->address = address;
22
23
        /*char tmp[14];
24
        sprintf(tmp,"1> 0x%02x\r\n", address);
25
        sys_log(tmp);*/
26
27
    /* Fill write data buffer. */
28
    for (uint8_t bufferIndex=0; bufferIndex < bytesToWrite; bufferIndex++) {
29
      twi->writeData[bufferIndex] = writeData[bufferIndex];
30
    }
31
32
    twi->bytesToWrite = bytesToWrite;
33
    twi->bytesToRead = bytesToRead;
34
    twi->bytesWritten = 0;
35
    twi->bytesRead = 0;
36
37
    /* If write command, send the START condition + Address +
38
     * 'R/_W = 0'
39
     */
40
    if (twi->bytesToWrite > 0) {
41
      uint8_t writeAddress = twi->address & ~0x01;
42
      twi->interface->MASTER.ADDR = writeAddress;
43
            /*sprintf(tmp,"2> 0x%02x\r\n", writeAddress);
44
            sys_log(tmp);*/
45
    }
46
47
    /* If read command, send the START condition + Address +
48
     * 'R/_W = 1'
49
     */
50
    else if (twi->bytesToRead > 0) {
51
      uint8_t readAddress = twi->address | 0x01;
52
      twi->interface->MASTER.ADDR = readAddress;
53
            /*sprintf(tmp,"3> 0x%02x\r\n", readAddress);
54
            sys_log(tmp);*/
55
    }
56
    return true;
57
  } else {
58
    return false;
59
  }
60
}

[1]: http://ez.analog.com/message/77452#77452

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.