www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit ADC0804


Autor: The_Beginner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ein Problem mit dem o.g. ADC.

Ich versuche das Blockdiagramm zu verstehen, den englischen Text 
verstehe ich nur sehr schlecht, weil mein Englisch miserabel ist.

Es gibt dort die Kontakte

CS_quer
WR_quer
RD_quer
INTR_quer

CLK IN
CLK R

INTR_quer scheint kein Eingang zu sein, sondern ein Ausgang, wo ich z.B. 
eine Diode anschließen könnte. INTR_quer leuchtet also theoretisch auf, 
wenn ein Zyklus abgelaufen ist, der ADC die Spannung gemessen hat und 
die entsprechenden Datenleitungen D0-D7 dann den Wert low/high annehmen.

CS_quer interpretiere ich als eine Art Ein- und Ausschalter. Es gibt die 
beiden Kombinationen CS+WR und CS+RD in dem Funktionaldiagramm, einmal 
unten, einmal oben jeweils auf der linken Seite, die dann in die 
Und-Verknüpfung reingehen.

Die ersten vier Signalkontakte haben ja das _quer dabei, also einen 
Strich darüber. Dass heisst doch, dass das Signal umgepolt zu verstehen 
ist - wenn CS_quer an Masse anliegt, also auf LOW, dann heisst es, der 
Eingang ist aktiv?

Schalte ich CS_quer und WR_quer gegen Masse, dann führt der ADC eine 
Spannungsmessung aus und speichert das Ergebnis in dem Shift-Register.

Wenn ich jetzt CS_quer und RD_quer gegen Masse schalte, dann bekommen 
die Datenausgänge D0-D7 das Ergebnis der Spannungsmessung zugewiesen, 
vorher kann ich keine Signale auswerten (also der Inhalt des 
Shift-Registers wird auf D0-D7 zum Auslesen gelegt).

Jetzt kommt oben in dem Funktionsdiagramm nach dem ersten UND von 
CS_quer und WR_quer noch ein UND-Gatter, wo ein CLK A noch eine Rolle 
spielt. In dem Funk.-Diagramm kommt auch noch ein CLK B drinnen vor, 
leider habe ich aber an dem ADC nur CLK R und CLK IN, sind die beiden 
equivalent, also CLK A entspricht CLK R???

Irgendwie ist das noch komisch und ich kapiere es einfach nicht :-(

Autor: Weinbauer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
The_Beginner schrieb:
> Ich habe ein Problem mit dem o.g. ADC.
>
> Ich versuche das Blockdiagramm zu verstehen, den englischen Text
> verstehe ich nur sehr schlecht, weil mein Englisch miserabel ist.
>
> Es gibt dort die Kontakte
>
> CS_quer
> WR_quer
> RD_quer
> INTR_quer
>
> CLK IN
> CLK R

Der Querstrich bedeutet, dass der Anschluss invertiert ist.
Das bedeutet, normalerweise wird eine logische 1 mit High-Pegel
signalisiert, z.B. 5V. Bei invertierten Signalen ist es dann
die 0, also 0-Volt bzw. Low-Pegel der das Signal gibt.

>
> INTR_quer scheint kein Eingang zu sein, sondern ein Ausgang, wo ich z.B.
> eine Diode anschließen könnte. INTR_quer leuchtet also theoretisch auf,
> wenn ein Zyklus abgelaufen ist, der ADC die Spannung gemessen hat und
> die entsprechenden Datenleitungen D0-D7 dann den Wert low/high annehmen.

Ne LED wird da eher selten angeschlossen. Normalerweise hängt man diesen
Pin bei seinem Mikrocontroller an einen Pin, evtl. sogar an einen
Interrupt-Pin, damit dieser mitgeteilt bekommt, dass ein neuer Messwert
abrufbar ist.


> CS_quer interpretiere ich als eine Art Ein- und Ausschalter. Es gibt die
> beiden Kombinationen CS+WR und CS+RD in dem Funktionaldiagramm, einmal
> unten, einmal oben jeweils auf der linken Seite, die dann in die
> Und-Verknüpfung reingehen.

CS ist Chip Select. Man kann hier eben diesen Chip auswählen für eine
Aktion.

> Die ersten vier Signalkontakte haben ja das _quer dabei, also einen
> Strich darüber. Dass heisst doch, dass das Signal umgepolt zu verstehen
> ist - wenn CS_quer an Masse anliegt, also auf LOW, dann heisst es, der
> Eingang ist aktiv?

siehe obig.

> Schalte ich CS_quer und WR_quer gegen Masse, dann führt der ADC eine
> Spannungsmessung aus und speichert das Ergebnis in dem Shift-Register.

Ja, er sampled dann einmal und dann bleibt er hängen
in einem Resetstatus, erst wenn WR High und wieder Low wird
wird wieder gesampled

> Wenn ich jetzt CS_quer und RD_quer gegen Masse schalte, dann bekommen
> die Datenausgänge D0-D7 das Ergebnis der Spannungsmessung zugewiesen,
> vorher kann ich keine Signale auswerten (also der Inhalt des
> Shift-Registers wird auf D0-D7 zum Auslesen gelegt).

Wenn ich das Datenblatt richtig interpretiere dann muss dazu
der WR kurz gezogen werden. RD

> Jetzt kommt oben in dem Funktionsdiagramm nach dem ersten UND von
> CS_quer und WR_quer noch ein UND-Gatter, wo ein CLK A noch eine Rolle
> spielt. In dem Funk.-Diagramm kommt auch noch ein CLK B drinnen vor,
> leider habe ich aber an dem ADC nur CLK R und CLK IN, sind die beiden
> equivalent, also CLK A entspricht CLK R???

Der AD-Wandler braucht einen Takt um zu laufen. Der kann entweder
extern von nem Oszillator kommen oder per RC-Glied an CLR_In und CLR_R.


> Irgendwie ist das noch komisch und ich kapiere es einfach nicht :-(

also ... zusammengefasst:

Um eine Messung zu starten:
CS -> low
WR -> low
kurz warten
WR -> high
CS -> high

Wenn Int low ist (Messung fertig)

CS -> low
RD -> low
kurz warten
Port einlesen (die 8 Datenleitungen eben)
RD -> high
CS -> high

Autor: The_Beginner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schade, es klappt irgendwie noch nicht :-(

Weinbauer schrieb:
> Der AD-Wandler braucht einen Takt um zu laufen. Der kann entweder
> extern von nem Oszillator kommen oder per RC-Glied an CLR_In und CLR_R.

Ich habe jetzt zwischen CLK IN und CLK R einen Widerstand von 10K 
gesetzt und von CLK IN zu Masse einen Kondensator mit 47nF. Reicht das 
als RC-Glied aus?

Wenn ich am PIN Vcc/2 gegen Masse ein Voltmeter dranhänge, dann kann ich 
eine Spannung von über 3 Volt messen, dass erscheint mir komisch :-(, 
ich hatte mir einen Spannungsteiler mit zwei gleichen Widerständen 
gebastelt, um 2,50 Volt von der 5 Volt-Spannungsquelle zu bekommen, aber 
wenn am Pin Vcc/2 ja schon eine Spannung liegt, wie soll ich dort dann 
eine Spannung einspiesen?

Oder kann ich Vcc/2 einfach tot lassen - keinen Kontakt am Pin?

Die Datenkanäle D0-D7 - liefern die bei HIGH ein 5Volt-Signal? 
Angenommen, cih messe irgendwas dazwischen - zB. 2,5 Volt an D0, 3,3 
Volt an D2 ... ist das normal oder müssten nicht alle Datenkanaele 
sauber 0V oder 5 Volt anzeigen, je nachdem ob LOW oder HIGH? Ich habe an 
den 8 Kanälen ein 8-Kanal-Oszi dranhängen, da schwirrt es halt als 
zwischen LOW- und HIGH unsauber hin- und her, wie ein Gebirge.

Weinbauer schrieb:
> Wenn Int low ist (Messung fertig)

An INTR messe ich gegenüber Masse immer 5 Volt, also HIGH,

Weinbauer schrieb:
> CS -> low
> WR -> low
> kurz warten
> WR -> high
> CS -> high

Die Reihenfolge hab ich eingehalten - ich habe noch RD an 5 Volt 
geschaltet, damit RD_quer sauber auf HIGH liegt. Aber INTR bleibt immer 
auf +5 Volt, was koennte der Fehler sein :-( ?

Autor: M. H. (elektroniktueftler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aaalso ... der ADC0804 hat Tristate-Ausgänge, was bedeutet,
wenn er nicht aktiv Daten ausgibt, dann ist der Pegel nicht definiert,
ist praktisch offene Leitung. Dementsprechend nur Müll auf den 
Leitungen.

Erst durch ziehen von RD auf Low wird der Datenausgang aktiviert.
Wenn der RD permanent auf High liegt kann das Ding nie irgendwas
ausgeben.

ergänzt:

Um eine Messung zu starten:
RD -> high
CS -> low
WR -> low
kurz warten
WR -> high
CS -> high
RD -> high



Auslesen der Daten Wenn Int low ist (Messung fertig):
WR -> high
CS -> low
RD -> low
kurz warten
Port einlesen (die 8 Datenleitungen eben)
RD -> high
CS -> high
WR -> high


Im Datenblatt steht für das RC-Glied 10KOhm 150pF

Vcc/2 kann unbenutzt bleiben oder per Spannungsteiler gesetzt sein.
Wenn benutzt ist zu beachten, dass laut Schema intern n Pullup in dem
Ding ist und der in den Spannungsteiler mit ein geht.

Autor: The_Beginner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, ich habe das jetzt in dieser neuen Reihenfolge ausprobiert.
RD an Masse, also HIGH
CS, WR an 5 Volt, also LOW
kurz gewartet
CS, WR an Masse, also HIGH (da immer _quer mit dabei), RD bleibt an 
Masse.

INTR_quer = 5 Volt gegenüber Masse - also LOW, dann kann ich mit der 
Auswertung beginnen.

WR bleibt an Masse (high), CS+RD gehen dann an 5Volt (low)

INTR_quer springt plötzlich auf 0Volt, also HIGH.

Das was ich an den Datenausgängen messe, ist immer noch komisch :-(

D0 = 2,3-2,6 V
D1 = 1,9-2,1 V
D2 = 1,8-2,0 V
D3 = 0,35 V
D4 = 0,6 V
...

also es bleibt immern och etwas komisch, keiner der Ausglänge kommt 
annähernd an die 5 Volt dran. Oder könnte ich ein Signal an den 
Ausgängen, dass über 2 Volt liegt auch schon als "gesetzt" 
interpretieren? Aber leite ich 2 Volt z.B. zur Auswertung an einen uC 
weiter, so reichen die 2 Volt aber nicht aus.

Schade :-(, was mache ich falsch?

M. H. schrieb:
> Um eine Messung zu starten:
> RD -> high
> CS -> low
> WR -> low
> kurz warten
> WR -> high
> CS -> high
> RD -> high
>
>
>
> Auslesen der Daten Wenn Int low ist (Messung fertig):
> WR -> high
> CS -> low
> RD -> low
> kurz warten
> Port einlesen (die 8 Datenleitungen eben)
> RD -> high
> CS -> high
> WR -> high

Autor: Weingut Pfalz (weinbauer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
The_Beginner schrieb:
> M. H. schrieb:
 Um eine Messung zu starten:
 RD -> high = 5V
 CS -> low = 0V
 WR -> low = 0V
 kurz warten
 WR -> high = 5V
 CS -> high = 5V
 RD -> high = 5V

 Auslesen der Daten Wenn Int low ist (Messung fertig):
 WR -> high = 5V
 CS -> low = 0V
 RD -> low = 0V
 kurz warten
 Port einlesen (die 8 Datenleitungen eben)
 RD -> high = 5V
 CS -> high = 5V
 WR -> high = 5V

Autor: The_Beginner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe nun noch eine Frage zu Clock.

Was genau macht Clock - es gibt einen Takt vor. Muss ich mir das in der 
Theorie auch vorstellen wie ein Signal, dass immer zwischen LOW und HIGH 
pendelt und ein Wechsel von LOW nach HIGH ist ein Takt? Die CLK-Eingänge 
sind ja in dem Funktionsdiagramm auch immer mit an die UND-Verknüpfungen 
geschaltet.

Angenommen, ein Arbeitszyklus sei 5 Sekunden, dann würde also der ADC 5 
Sekunden für einen Schritt brauche?

Fhutdhb Ufzjjuz schrieb:
> Um eine Messung zu starten:
>  RD -> high = 5V
>  CS -> low = 0V
>  WR -> low = 0V
>  kurz warten

RD, CS, WR werden geschaltet. Kurz warten - damit der Clockzyklus diesen 
Schritt ausführt? Oder kann ich Clock z.B. mit einem Zylinder in einem 
Auto vergleichen? Der Zylinder im Auto verdichtet und verbrennt etc., 
insgesamt ein Zyklus eben.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.