Forum: Mikrocontroller und Digitale Elektronik TTL? CMOS? Mehrere Interrupts? Mehrfaches OR Gatter?


von Niki Hammler (Gast)


Lesenswert?

Hallo!

Also erstens einmal, der AT90S2333 verfügt über ganze zwei externe 
Interrupts. Einer davon ist für den Input, einen IR Receiver reserviert. 
Jetzt hab ich aber noch viele andere Sachen, die ich gerne per Interrupt 
lösen möchte um nicht immer while(1) durchkauen zu müssen.
Jetzt ist mir folgende Idee gekommen:
Ich lege den OUTPUT einen 4fachen OR Gatters auf EXT INT1 und die 
Eingänge verbinde ich mit verschiedenen Ports und zusätzlich mit der 
Quelle.
Jetzt sollte folgendes passieren: Wenn eine dieser 4 Leitungen auf HIGH 
kommt, ist auch der Output high. Der INT1 wird damit getriggert. In der 
Interrupt Handling Routine frage ich dann alle Portpins ab, die mit den 
Eingängen des OR gatters verbunden sind. Und schon weiss ich woher der 
Interrupt kommt und kann viele, viele Sachen über Interupts dranhängen.

1.) Ist das eine gute Idee? Gibt es eine bessere Möglichkeit? So in den 
ersten Gedanken find' ich die Idee nämlich wahnsinnig toll ;)

2.) Als einziges TTL OR Gatter fand ich jetzt aber das 7432 und das hat 
lediglich 2 Eingänge. Diese Lösung wird jedoch erst dann interessant, 
wenn das OR Gatter mindestens 4 Eingänge hat. Ich konnte so eines aber 
nicht finden. Gibt es so eines überhaupt; falls nein, wieso nicht?
Wie heisst die IC Nummer davon?

3.) Was ich noch immer nicht ganz verstehe: Was ist jetzt WIRKLICH der 
Unterschied zwischen TTL und CMOS? Sind die zu einander kompatibel? Kann 
ich dort, wo ein TTL hineingehört auch ein CMOS Pendant reingeben? 
Welches System ist für den AVR zum Anhängen besser geeignet? Oder ist 
das egal?
Das einzige was ich darüber weiss, ist, dass TTL veraltet ist.
Dann hab ich noch gelesen dass man bei CMOS im Gegensatz zu TTL alle 
Eingänge auf einen definierten Logikpegel schalten muss (VCC || GND). 
Jedoch hab ich (u.a.) hier schon gehört dass das bei TTL auch der Fall 
sein soll. Besteht zwischen den beiden Techniken ausser der Bauart 
überhaupt ein Unterschied?


Niki

von Andreas (Gast)


Lesenswert?

1) Hab das mal in irgendeinem >20 Jahre alten Mikrocontroller-Buch so 
gesehen.

2) Wie wär's mit einem 74HC4078 (8-fach NOR)?

3)
TTL:
     High ist > 2V
     Low ist < 0.7V
     Ub ist 5V
CMOS:
     High ist > 0.66*Ub
      Low ist < 0.33*Ub
      Ub ist 3 bis 15 Volt

von Niki Hammler (Gast)


Lesenswert?

2.) Aja, hab ich ganz vergessen dass NOR ja einfach OR invertiert ist ;) 
Also hätte ich jetzt den Pegel standardmässig auf HIGH und der Interrupt 
triggert wenn er auf LOW fällt...gut :)

3.) Was ist Ub? Klingt zwar nicht danach, aber lt. Zusammenhang 
Versorgungsspannung?

von Michael Schänzler (Gast)


Lesenswert?

Du könntest die Signale auch einfach über Dioden auf den Interrupt 
geben. Bei mehr als vier Signalen ist die Lösung mit dem NOR aber 
wahrscheinlich einfacher.

Michael

von Niki Hammler (Gast)


Lesenswert?

Das war mein erster Gedanke. Doch bei einer Diode fällt ja wieder 
Spannung ab oder?
Ausserdem muss ich dann wieder so viel Kleinklumpat (Dioden) anlöten.

Muss ich bei dem oben beschriebenen CMOS Teil ALLE Eingänge auf 
irgendwas schalten (VCC, GND)?

von Christian (Gast)


Lesenswert?

Hallo,

also ich würde auch Dioden emüfehlen. Die 0,7V Spannungsabfall kann man 
verkraften, ist immer noch High. Und das ist wesentlich weniger 
Verkabelungsaufwand als bei einem NOR o.ä., da z.b. die 
Versorgungsspannung für den IC wegfällt.

Und: nichtbenutzte Eingänge sollten auf Masse gelegt werden. Ansonsten 
braucht der IC mehr Strom bzw. das benutzte Gatter schaltet immer durch 
(wenn's dumm läuft).


ciao

      Christian

von Lothar (Gast)


Lesenswert?

1.) Im Ansatz ist die Idee richtig. Prinzipiell gehts beim heutigen 
Pentium 4 genau so.
     Nur hat der noch einen speziellen Baustein vorgeschaltet, der die 
Selektion übernimmt.

2.) Das tolle an Gattern ist: Man kann sie schachteln. ein 7432 hat 4 
Einzelgatter.
     Wenn ich jetzt die Ausgänge zweier Gatter auf ein drittes lege habe 
ich 4 Eingänge, 1 Ausgang.
     Dieser Ausgang auf das letzte Gatter Eingang 1. Eingang 2 frei für 
Dich.
     Somit 5 Eingänge, ein Ausgang.

3.) Hat Andreas gut angerissen. Zusätzliche Info
    TTL sind intern aus "bipolaren Transistoren" gebaut. Brauchen 
relativ viel Strom. Standard 7432 96mW.
      Und können nur 5V.
     CMOS hat "Feldeffekt-Transistoren" FET drin. Brauchen sehr wenig 
Strom sind aber empfindlicher gegen "offene Eingänge".
     Also Eingänge die nicht irgendwie beschaltet sind.
     Meist überleben die auch noch kurzzeitig 20V.
     An 5V betrieben kann man beide verwenden. CMOS bevorzugt, wegen 
Strom.


Lösung mit Dioden:
Im Prinzip identisch mit ODER-Gattern. Machen nichts anderes wie 
"odern".
Der oder der oder beide. Vom Platz sind Dioden einfacher und 
universeller. Ein 7432 hat 14 "Beinchen", 5 Dioden 10. Bei gleicher 
ODER-Funktion.
Ausserdem entfällt Ub. Der Spannungsabfall an Dioden kann vernachlässigt 
werden. Selbst 3V interpretiert der AVR noch als HIGH. 1n4148 geht 
immer. Und man ist auf der Platine nicht durch das DIL-Gehäuse gebunden. 
Dioden haben "elastischere" Anschlüsse.

von Günter König (Gast)


Lesenswert?

Djambo Niki,

die Idee mit den Interrupts und dem Gatter ist im Prinzip nicht schlecht 
aber das folgendes Beispiel zeigt ein Problem der Schaltung auf:

Grundkonstellation ist
AVR triggert mit fallender Flanke,
Gatter ist vierfach NOR

jetzt gehts los

der Eingang 1 der Schaltung geht auf high
der Ausgang des Gatters fällt von high nach low
der Interrupt wird also abgearbeitet und der aktive Eingang wird erkannt
das Programm läuft entsprechend weiter
der Eingang 1 der Schaltung ist immer noch high
der Ausgang des Gatters noch also noch low
jetzt schaltet ein weiterer Eingang nach high
der Ausgang des Gatters bleibt low
die Änderung am Eingang wird nicht erkannt.

Du siehst schon die Problematik und man kann machen was man will, mit 
dieser einfachen Schaltung (und auch in der Abart mit NAND Gattern) geht 
es nicht.

Erste Hilfe: die Eingeänge des Gatters müssen differenziert werden, das 
heist, über CR-Glieder geführt werden um nur einen kurzen Impuls am 
Ausgang zu erhalten.
Hiermit könnte es gehen.

Besserer Weg: die zu überwachenden Eingänge werden auf einen 
zusätzlichen AVR (2333) geführt.
Per Software wird nun folgendes realisiert:
Ändert ein Eingang seinen Pegel (low/high, high/low), wird auf einem 
Ausgang des zusätzlichen AVR`s ein Impuls definierter Länge ausgegeben 
z.B. 100µs und auf den Interrupteingang des HauptAVR`s gegeben. Nach dem 
Sprung in die Interruptroutine gibt der Hauptcontroller ein Steuersignal 
auf den SlaveAVR, dieser schaltet danach die Ausgänge durch und das 
Eingangsbitmuster liegt am MasterAVR an und kann bearbeitet werden.
Das hört sich kompliziert an, ist es aber eigentlich nicht.

Für eine Tastenabfrage benötige ich ähnliches, will es aber dann über 
die ISP Schnittstelle (also seriell) auf den MasterAVR geben.


so denn,
Günter

von Niki Hammler (Gast)


Lesenswert?

Hallo!
Danke für die Antworten!

Das stimmt natürlich. Aber irgendwie ist das für meine Verhältnisse gar 
nicht so ein Problem.

Jedenfalls ist das mit dem Slave AVR gar keine so schlechte Idee.
Ich hab sowieso noch so viel vor...angefangen bei 
Schrittmotorensteuerung und Betrieb eines LCD Displays. Da sind also 
viel zu wenig Ports übrig. Irgendein kleinerer Slave AVR der nur ein LCD 
steuert und Schrittmotoren.
1.) Ist es möglich, einfach den XTAL Eingang mit dem gleichen 
Quarzoszillator zu verbinden, den der MasterAVR hat?
Irgendwie wäre es ja fast ein Blödsinn, für so einen Spass einen zweiten 
Quarz aus Board setzen zu müssen. Ist das möglich dass ein 
Quarzoszillator 2 AVR's steuert?

2.) Wäre es nicht gleich intelligent bei so einer Konstellation gleich 
ein Bussystem zu entwickeln? Doch was versteht man unter einem 
"Bussystem"? Ab 4Bit? Dann müsste ich bei beiden AVR's 4 I/O Ports 
abtreten? Wie schauts mit I2C aus? Da bräuchte ich an beiden nur 2 Pins 
oder? Oder ist I2C schon so eine Art "Bussystem"?

Niki

von Siegfried (Gast)


Lesenswert?

Wenns um "Bussystem bei AVRs" geht, dann taucht auch immer die 
Buchstabenkombination SPI auf. Doku hierzu auf der Atmel-Homepage, 
einschliesslich Sourcen.

Ein Quarz für alle AVRs sollte funktionieren. Aber Vorsicht: man kann 
den Taktausgang nur mit einem weiteren Eingang belasten.

Noch mal was zu dem Interruptproblem weiter oben.

Die älteren Microcomputersysteme (6502, Z80, 8080 usw.) hatten ja immer 
alles schön getrennt. UART-Baustein, Parallel-IO, Timer-Baustein usw. 
Jeder dieser Bausteine hatte ein oder mehrere Interruptquellen. Die 
Bausteine selbst wurden dann über eine "wired-or-Leitung" mit dem 
Prozessor verbunden. D.h. Pullup an der Interruptleitung und alle 
Interruptquellen, die ihrerseits einen open-Collector-Interruptausgang 
hatten, wurden an diese Leitung angeschlossen. Derjenige Baustein, der 
ein Interruptereignis zu vermelden hatte, hielt die IRQ-Leitung solange 
auf Low, bis das entsprechende Interruptregister - und damit das 
Ereignis - ausgelesen wurde. Allerdings merkte sich jeder Baustein das 
Ereignis. Bei der oben vorgeschlagenen Oder-Gatter-Lösung könnten u.U. 
kurze Impulse unerkannt bleiben, wenn die Interrupt-Service-Routine 
nicht schnell genug ist.

Siegfried

von Niki Hammler (Gast)


Lesenswert?

Hallo!

Du, ich meine keinen QUARZ sondern einen Quarzoszillator!
Der hat einfach nur einen Taktausgang und kommt normal an XTAL dran. 
Kann man den auch ohne Probleme für 2 AVR's verwenden?

Niki

von Andreas (Gast)


Lesenswert?

Ja, kein Problem.

MfG
Andreas

von Günter König (Gast)


Lesenswert?

Hallo auch,
aber Obacht beim zusammenschalten: Ausgang Quarzoszillator --> Xtal1,
der nächste AVR wird dann so angeschlossen:
Xtal2 v. 1. AVR  --> Xtal1 des zweiten AVR`s.
Bei mehr als 2 AVR`s kann es aber Probleme geben.

Gruß,
Günter

von Mark Hämmerling (Gast)


Lesenswert?

Salut,

muß ich den Oszi so anschließen? Habe vor, einen 2313 und einen 8254 
(3x programmierbarer counter) mit demselben Takt zu versorgen. Welches 
Problem ergäbe sich, wenn ich den Oszi-Ausgang sowohl an XTAL1 (am 
2313), als auch an CLK2 (am 8254) lege, anstatt den negierten Ausgang 
XTAL2 des 2313 zu nutzen?

Danke!

Mark H. -- http://markh.de

von wolli_r (Gast)


Lesenswert?

Hi,
warum eigentlich einfach, wenn's auch kompliziert geht...
Üblicherweise verwendet man für das vorliegende
Problem Wired-Or Technik und pollt nach der Auslösung des Interrupts die 
angeschlossenen
IRQ Auslöser.
Wired-or bedeutet in diesem Fall:
Der IRQ Pin wird mit einem Widerstand von ca 1-5KOhm auf high gezogen. 
Alle IRQ-Auslöser ziehen über je eine Diode (Anode an IRQ Pin) den 
IRQ-Pin auf low.
Die IRQ-Auslöser müssen im nichtaktiven Zustand High Signal führen. Die 
Ausgänge der IRQ Auslöser ziehen (wenn aktiv) den IRQ-Pin auf low.
Passieren kann hierbei nichts, den der IRQ Pin kann bestenfalls auf 
Masse (0,7V=low) gezogen werden.
Und durch die Beschaltung mit den Dioden kann kein
IRQ Auslöser den anderen Stören. Nur der erste Auslöser hat den IRQ 
gewonnen. Durch anschließendes Polling der Leitungen kann der Auslöser 
ermittelt werden.
Eine Schaltung kann ich bei Bedarf erstellen...

mfg wolli_r

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.