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
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
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?
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
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)?
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
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.
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
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
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.