Frage zur Kommunikation mit zwei Steckkarten

Hier werden Themen zur Elektronik und Abgleich des Port-Motherboards ADA-IO und seiner Tochterplatinen IO8-32, Optoschaltstufe, AD16-8 und DA12-8 diskutiert.
Tobsel
träumt vom eigenen c't-Lab
träumt vom eigenen c't-Lab
Beiträge: 8
Registriert: 21.08.2008, 19:13
Wohnort: Bad Wurzach
Kontaktdaten:

Frage zur Kommunikation mit zwei Steckkarten

Beitrag von Tobsel » 24.08.2008, 14:04

Hallo
Ich schreibe eine Dokumentation über den Aufbau des c't Labs. Beim ADA-IO bin ich mir nicht sicher, wie das mit den Daten der Steckkarten zum Atmega funktioniert. Wenn man die D/A und die A/D Karte gleichzeitig einsteckt, dann verwenden doch beide Karten gleichzeitig den Port B des Mikrokontrollers. Wie geht das, dass die sich nicht in die Quere kommen?

Benutzeravatar
ompf
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 168
Registriert: 19.01.2008, 13:03
Wohnort: Dortmund

Beitrag von ompf » 24.08.2008, 18:59

Die Wandler werden über SPI angesprochen, die Ports über I2C. Beides sind serielle Schnittstellen.

Bei I2C haben die Geräte Adressen. Da kann man 64 Teilnehmer dranhängen.

SPI verwendet Chip Select-Leitungen, um die Adressierung vorzunehmen. Jede Karte hat ihre eigene Leitung, woraus sich auch ergibt, das bei einer AD- und einer DA-Karte der Vollausbau erreicht ist.


Gruß
Patrick

Tobsel
träumt vom eigenen c't-Lab
träumt vom eigenen c't-Lab
Beiträge: 8
Registriert: 21.08.2008, 19:13
Wohnort: Bad Wurzach
Kontaktdaten:

Beitrag von Tobsel » 24.08.2008, 22:02

Danke für die Antwort. Wie meinst du das mit der eigenen Leitung und dass dann der Vollausbau erreicht ist? Kannst du da noch etwas ins Detail gehen? Wär echt stark.
Gruß
Tobi

Benutzeravatar
ompf
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 168
Registriert: 19.01.2008, 13:03
Wohnort: Dortmund

Beitrag von ompf » 24.08.2008, 22:29

Tobsel hat geschrieben:Danke für die Antwort. Wie meinst du das mit der eigenen Leitung und dass dann der Vollausbau erreicht ist?
SPI kann man sich vorstellen, wie zwei verbundene Schieberegister. Auf beiden Seiten packt man Daten rein und nach einer bestimmten Anzahl von Taktzyklen kann man die auf der jeweils anderen Seite wieder auslesen. Hierzu braucht man drei Leitungen: master out, slave in (MOSI), master in, slave out (MISO) und den Takt (SCLK). Wenn mehrere Kommunikationspartner beteiligt sind, gibt's für jeden noch eine eigene Leitung zur Auswahl (chip select, CS). Daran merkt der jeweilige Baustein, daß die Daten für ihn bestimmt sind.

Bei der ADA-C ist das so realisiert:

Pin 32: SCLK (Takt)
Pin 31: SDATAOUT (MOSI, Daten zu den Karten)
Pin 29: STR_DAC (CS für die DA16-8)
Pin 28: STR_ADC (CS für die AD16-8)
Pin 27: SDATAIN1 (MISO, Daten von den Karten)
Pin 26: SDATAIN2 (das ganze nochmal)

Wenn Du weitere Karten mit SPI-Interface einbinden wolltest, bräuchtest Du zusätzliche CS-Leitungen. Leider sind jedoch alle Pins bereits belegt, so daß mit dem bestehenden Konzept außer der AD16-8 und der DA16-8 keine weiteren Module mehr angesprochen werden können.


Patrick

Tobsel
träumt vom eigenen c't-Lab
träumt vom eigenen c't-Lab
Beiträge: 8
Registriert: 21.08.2008, 19:13
Wohnort: Bad Wurzach
Kontaktdaten:

Beitrag von Tobsel » 25.08.2008, 18:16

Spitzen Erklärung, jetzt hab ichs verstanden! Außer dass ich im Schaltplan irgendwie kein SDATAIN finden kann. Danke Patrick. :!:
Wenn du dich da grad so gut auskennst: Weist du, wie die Adressauswahl mit I2C bei der Kommunikation mit den Ports funktioniert?
Gruß
Tobi

Benutzeravatar
ompf
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 168
Registriert: 19.01.2008, 13:03
Wohnort: Dortmund

Beitrag von ompf » 25.08.2008, 19:09

Tobsel hat geschrieben:Weist du, wie die Adressauswahl mit I2C bei der Kommunikation mit den Ports funktioniert?
I2C verwendet 7 Adressbits (also 128 Teilnehmer, nicht 64). Jeder I2C-Befehl beginnt mit der Adresse, gefolgt von einem bit zur Unterscheidung, ob gelesen oder geschrieben werden soll, gefolgt von den Daten, Befehlen oder was halt so übertragen werden soll.

Bei den PCA9554A sind die oberen vier Adressbits fest verschaltet und die unteren vier auf die Pins 1..3 des Käfers gelegt. Damit kann man maximal 8 Stück in einer Schaltung haben.

Auf den IO8-32 sitzen jeweils vier Bausteine, die über die fest angeschlossenen A0 und A1-Leitungen unterschieden werden. A2 ist auf einen Jumper geführt, so daß man zwei Karten verbauen kann, um auf die möglichen acht zu kommen.


I2C ist eine Erfindung von Philips (heute NXP) und war zur Vernetzung von TV-ICs gedacht. Bei Philips findet sich auch eine Application Note, die das Protokoll ausführlich beschreibt.


Gruß
Patrick

Tobsel
träumt vom eigenen c't-Lab
träumt vom eigenen c't-Lab
Beiträge: 8
Registriert: 21.08.2008, 19:13
Wohnort: Bad Wurzach
Kontaktdaten:

Beitrag von Tobsel » 25.08.2008, 19:53

Ich fürcht, da fehlts bei mir am Grundverständnis. Für was genau sind die PCA9554A denn zuständig?
Wenn der Jumper geschlossen ist, funktioniert ja gar nichts mehr, weil die Versorgungsspannung über den Pull up auf Masse liegt oder täusch ich mich?

Benutzeravatar
moosmichel001
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 175
Registriert: 06.12.2007, 10:09
Wohnort: Schwerin

Beitrag von moosmichel001 » 26.08.2008, 09:04

Vereinfacht:
Das sind I2C-Porterweiterungen, die bekommen seriell 8bit übermittelt und legen diese an die I/O-Pins bzw. es werden die Zustände der I/O-Pins ausgelesen. Wir benutzen also nur 2 Pins des Atmega und haben jede Menge I/O-Pins. Bis zu 64.
A0 und A1 sind auf der Platine festverdrahtet.
Mit dem Jumper wird das Adressbit A2 der der 2. IO8-32 gesetzt. Dann wird Vcc an A2 gelegt.

Durch R1(10k) fließt nur ein Strom von 0,5 mA, da sind wir von einem Kurzschluß weit entfernt.
Eine genagelte Schraube hält besser als ein geschraubter Nagel.
FPGA v2.61 CORERAM/COREIO/(LCD)
ADAC v1.73 IO8-32/DA12-8(16bit)/AD16-8/CVC/REL8/OUT8
2 DCG(16bit) v2.91 DCP/BF + EDL 2A v1.78 + DIV v3.10 TRMSC
DDS v3.71 TRMSC + DIV v3.10 TRMSC + EDL 10A

Tobsel
träumt vom eigenen c't-Lab
träumt vom eigenen c't-Lab
Beiträge: 8
Registriert: 21.08.2008, 19:13
Wohnort: Bad Wurzach
Kontaktdaten:

Beitrag von Tobsel » 26.08.2008, 17:32

Und für was kann man das mit den I/O Pins benutzen? Für was braucht man beim internen A/D Wandler die Widerstände und Kondensatoren nochmal? Sorry für die dummen Fragen aber ich glaube, ich stehe kurz vor dem Durchbruch. :lol:
Ich hab das so gemeint, dass dann 0V drauf sind auf dem Versorgungsspannungsanschluss des Bausteins und dieser dann nicht mehr funktioniert, aber des ist nicht so wichtig.
ompf hat geschrieben:Bei den PCA9554A sind die oberen vier Adressbits fest verschaltet
Was genau meintest du damit? Wo sind die verschaltet?
Gruß
Tobi

Benutzeravatar
ompf
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 168
Registriert: 19.01.2008, 13:03
Wohnort: Dortmund

Beitrag von ompf » 27.08.2008, 09:05

Tobsel hat geschrieben:Und für was kann man das mit den I/O Pins benutzen?
Wofür Du die I/O-Pins benutzen willst, solltest Du eigentlich geklärt haben, bevor Du die Platine aufgebaut hast. Terrarienheizung und -lampe, Modelleisenbahn-Weichen, Rolladen und Klolicht, oder die Tasterein- und Relaisausgänge eines Bordnetzsteuergerätes in einem HIL-Simulationsaufbau...

Halt überall da, wo sich die Schaltfunktion auf "ein" und "aus" beschränkt.
Für was braucht man beim internen A/D Wandler die Widerstände und Kondensatoren nochmal?
1) vor jedem AD-Wandler muß ein Tiefpaß sitzen, der die Frequenzen am Eingang auf die halbe Abtastrate begrenzt. Sonst misst man völligen Müll. Der 300k-Widerstand bildet zusammen mit dem Kondensator diesen Tiefpass. Google mal nach "Abtasttheorem" und "RC-Tiefpass".

2) Die Kombination aus 300k und 100k-Widerstand stellt einen Spannungsteiler dar. Der teilt die Eingangsspannung durch vier, so daß der Meßbereich bis 10V geht. "Spannungsteiler" kennt Google auch.

Dass diese eigentlich zur Basisplatine gehörenden Bauteile auf der IO8-32 sitzen, ist nicht wirklich sinnvoll. Grund dafür dürften einfach Platzprobleme gewesen sein.

tobsel hat geschrieben:
ompf hat geschrieben:Bei den PCA9554A sind die oberen vier Adressbits fest verschaltet
Was genau meintest du damit? Wo sind die verschaltet?
Im Inneren des ICs. Du solltest Dir mal die Datenblätter der beteiligten ICs anschauen. http://www.alldatasheet.com , und dann bei "Part Name" die Typenbezeichnung eingeben. In der Ergebnisliste führt dann ein Klick auf das pdf-Symbol zum Datenblatt.


Gruß
Patrick

Tobsel
träumt vom eigenen c't-Lab
träumt vom eigenen c't-Lab
Beiträge: 8
Registriert: 21.08.2008, 19:13
Wohnort: Bad Wurzach
Kontaktdaten:

Beitrag von Tobsel » 27.08.2008, 19:00

Danke für deine Antwort und Mühe.
Okay, soweit kann ich folgen. Außer wie man auf den Eingangsspannungsbereich von 10V kommt kapier ich noch nicht.
Gruß
Tobi

Benutzeravatar
moosmichel001
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 175
Registriert: 06.12.2007, 10:09
Wohnort: Schwerin

Beitrag von moosmichel001 » 28.08.2008, 06:37

Der ADC kann aufgrund der Spannungsreferenz nur bis 2,5V messen und hat dann den Maximalwert 1023 erreicht.
Wenn du nun 10V an den Spannungsteiler legst kommen am ADC 2,5V an.
Eine genagelte Schraube hält besser als ein geschraubter Nagel.
FPGA v2.61 CORERAM/COREIO/(LCD)
ADAC v1.73 IO8-32/DA12-8(16bit)/AD16-8/CVC/REL8/OUT8
2 DCG(16bit) v2.91 DCP/BF + EDL 2A v1.78 + DIV v3.10 TRMSC
DDS v3.71 TRMSC + DIV v3.10 TRMSC + EDL 10A

Tobsel
träumt vom eigenen c't-Lab
träumt vom eigenen c't-Lab
Beiträge: 8
Registriert: 21.08.2008, 19:13
Wohnort: Bad Wurzach
Kontaktdaten:

Beitrag von Tobsel » 31.08.2008, 19:39

Danke!
Hab mir jetzt nochmal das mit den Wandlern überlegt.
ompf hat geschrieben:Bei der ADA-C ist das so realisiert:

Pin 32: SCLK (Takt)
Pin 31: SDATAOUT (MOSI, Daten zu den Karten)
Pin 29: STR_DAC (CS für die DA16-8)
Pin 28: STR_ADC (CS für die AD16-8)
Pin 27: SDATAIN1 (MISO, Daten von den Karten)
Pin 26: SDATAIN2 (das ganze nochmal)
Wie kommt es, dass der MISO Anschluss des Atmega nicht mit den Wandlern verbunden ist? Wie können die dann ein Signal zurückschicken?
Oder kann es sein, dass in den Schaltplänen etwas mit der Pinbelegung nicht stimmt (siehe Bild)?
Bild

Was bringt es beim IFP, dass die 3 Empfangsleitungen über Dioden, wie in der Beschreibung beschrieben, "verodert" sind?

Benutzeravatar
ompf
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 168
Registriert: 19.01.2008, 13:03
Wohnort: Dortmund

Beitrag von ompf » 01.09.2008, 12:02

Tobsel hat geschrieben:Wie kommt es, dass der MISO Anschluss des Atmega nicht mit den Wandlern verbunden ist?
Weil hier nicht die schnelle Hardware-SPI des ATmega verwendet, sondern die Funktion in Software nachgebildet wird. Das ist zwar langsamer, läßt sich aber universeller an verschiedene Wandlerbausteine anpassen.

Wenn Du in den Code guckst, siehts Du wie es funktioniert.
Was bringt es beim IFP, dass die 3 Empfangsleitungen über Dioden, wie in der Beschreibung beschrieben, "verodert" sind?
So kann man Daten von drei Quellen (RS-232, USB und 10base-T - LAN) empfangen, ohne irgendwas umschalten zu müssen. Du kannst sogar alle drei Schnittstellen gleichzeitig benutzen, wobei natürlich Müll entsteht, wenn auf zweien gleichzeitig Kommandos reinkommen.

Du kannst z.B. Deinen PC mit Labview am LANport anschließen und gleichzeitig zum Fehlersuchen das Notebook mit HyperTerminal am USB betreiben.


Patrick

Tobsel
träumt vom eigenen c't-Lab
träumt vom eigenen c't-Lab
Beiträge: 8
Registriert: 21.08.2008, 19:13
Wohnort: Bad Wurzach
Kontaktdaten:

Beitrag von Tobsel » 07.09.2008, 12:09

Stimmt das, dass wenn bei A/D 16-8 Jumper 1 gezogen ist und dann 1V angelegt wird, dass dann 10V gemesssen werden?
Gruß
Tobi

Antworten