...Was bedeuten dann die Informationen zu den OKs, dass die geltend für '24VDC' bzw. '5VDC' sind in den Unterlagen? Ich dachte, dass dort direkt 24VDC bzw. 5VDC geschalten werden kann...
Was hast Du denn für konkrete Unterlagen/Optokoppler?
"Normale" haben 'ne IR-Diode drin, die aus dem Bauch heraus 'ne Vorwärtsspannung von knapp 1,5V bei knapp 50mA haben sollten.
Irgendwo hattest Du mal den CNY66 bezeichnet - da wären es laut Datenblatt 50mA bei 1,25V.
...Ich dachte, dass die LED direkt im 5V-Kreis zu Instabilitäten führen...
???
Die hängt doch bei Dir genau so an denselben 5V - lediglich der OK zwackt noch seine ca 0,7V CE-Spannung ab. Ohne OK muß der Vorwiderstand der LED halt auf 5V dimensioniert werden, mit OK auf 4,3V. Wird aber wahrscheinlich eh auf denselben Wert in der E-Reihe rauslaufen...
...Damit befasse ich mich in einem nächsten Projekt (nocht nicht geplant, aber Ideen vorhanden...). Im Moment bin ich mal froh, die einzelnen I/O-Ports richtig anzusteuern ^_^...
Hatte ich vielleicht falsch verstanden (oder Du mich...) - nochmal deutlicher: Dein Controller besitzt 'ne interne Hardware-SPI. Das ist auch ein Schieberegister, welches die Beine B7 (SCK) B6 (MISO) B5 (MOSI) und B4 (/SS) nutzt (bzw nutzen kann). Allerdings nutzt Du das Schieberegister ja nur in einer Richtung (AVR->HC595), dabei wird dann in den AVR der jeweilige Zustand von B6 eingetaktet. (anders gesagt, wenn Du
Hardware-SPI zum austakten von Bytes über B5 (und B7 als Clock) nutzt, ist B6 zwangsläufing MISO, also Master Input. SPI würde also das die Datenrichtung von B6 auf Eingang festlegen (auch wenn Du das nicht nutzt), Du könntest aber trotzdem den Pullup aktivieren und/oder den tatsächlichen Zustand des Beins (Eingang) auslesen. aber zurück zum Thema: Wenn Du Deine externen 595-Schieberegister an B5 (und B7) anschließt, kannst Du natürlich wie gehabt die Bits in Software rausschubsen lassen, Du hast dann aber bereits die Möglichkeit vorbereitet, irgendwann "in einem nächsten Projekt" in SPI-Hardware schubsen zu lassen, ohne umverdrahten zu müssen.
...Naja, kann man diesen 'intern enable-ten' Pullups trauen? Ich meine nur, kann ich dies kontrollieren, dass diese auch wirklich im Innern des uC 'greifen'?
Dann werde ich dies sicher so lösen, dann kann ich diese I/Os auch nach aussen führen, um evtl. nachträglich gewünschte Signale umzusetzen...
Natürlich! (wenn Du den nicht irgendwie zerstört hast)
folgende Dinge beeinflussen die Pullups:
- Fusebits könnten alle anderen Einstellungen übersteuern - mir ist lediglich bei kleineren Controllern RSTDISBL bekannt, welche den Pullup am Reset aktiviert
- wird innerhalb des Programmes irgendeine Hardware enabled, die die normale I/O-Funktion übersteuert, kann das auch den Pullup betreffen - das machst Du dann aber auch mit Absicht, oder?!
- ansonsten schaltet bei Deinem Controller eine "1" im Datenrichtungsbit den Ausgangstreiber des Beins an und gleichzeitig den Pullup ab, das PORT-Bit legt dann entweder den Pegel des Treibers, oder den Zustand des Pullups fest, ein eventuelles Pullup-Disable-Bit kann da allerdings noch ein Machtwort sprechen
Hat Dino auch im FAQ-Sammelthread was zu. Ich hatte das
hier auch mal angerissen, da gings dann aber eigentlich um neuere Controller mit abweichendem Aufbau - Dein Mega gehört dort zu den "bisherigen"...
Üblicherweise liegen die internen Pullups irgendwo zwischen 20k und 50k
...Aufgrund des Unklaren, welche Ports ich auch als Input und welche als Output benutzen darf, habe ich mal diese genommen, welche wirklich keine andere Funktion haben bzw. gewisse Signale nicht angelegt werden dürfen...
Du kannst jedes Bein (abgesehen von der Spannungsversorgung, dem /Reset und den Quarz-Anschlüssen (XTAL)) als Ein- oder Ausgang verwenden, solange Du keine alternative Funktion dieses Beins aktivierst. Bei Deinem Controller kann jeder I/O irgendeine alternative Funktion übernehmen - die Frage ist, welche Du nicht benötigst... (oder ob alles über alternative Funktionen erreicht werden kann, und man gar keine konventionellen I/Os braucht). Bei anderen (insbesondere kleineren) Controllern, ggf mit mehr integrierten HW-Modulen gibt es sogar Beine, die mehrere unterschiedliche alternative Funktionen haben könnten - die sich dann gegenseitig ausschließen...
...D.h. somit, dass ich die internen Pullups aktiviere (auf ständiges +5VDC setze) und diese nur mittels Taster, den Pin direkt auf Masse schalte?
Genau. Das Bein liegt ja dann nur "schwach" auf 5V, also eben über einen mindestens 20k-Widerstand. Solange der Taster gegen Gnd offen ist, liefert das PIN-Bit des Beins 'ne "1" (Vcc, High). Wenn der Taster betätigt wird, fließen durch das Bein und den Taster I=U/R=5V/20kOhm=250µA, das Pin-Bit liefert (da "unter" dem Pullup) 'ne "0" (Gnd, Low).
...Ok. Vom uC geschaltene Komponenten also immer NACH dem 'Verbraucher' setzen/schalten...
Hmm... Wenn nur geschaltet werden soll, und der Koppler 'n NPN-Transistor als Schaltglied hat, kann dieser Transistor irgendwas "davor" auf Gnd durchschalten.
...IRQs, also Interrupt-Routines - im Moment möchte ich dies noch nicht miteinbeziehen, nur Einlesen und Ausgeben. Ist es somit auch so möglich, dass ich die internen Pullups aktiviere und mit dem OK den Pin (am OK-Kollektor) auf Masse (OK-Emitter) schalte?...
Egal ob ein eventueller Pegelwechsel (oder 'n Pegel) jetzt 'n IRQ triggern soll, oder nicht - es sind digitale Pegel. Also entweder, oder... wenn der Eingang offen ist (tristate) wirkt der als Antenne, und empfängt werweißwas, daß dann zu 1 oder 0 wird. Wenn Du das Bein mit aktiviertem Pullup auf den Kollektor eines OK legst, und diesen dann auf Gnd durchschalten läßt, ist das dasselbe, wie bei den Tastern. Ob Du den Pin nun zu Fuß ausliest, oder 'n IRQ dranbindest ist 'ne andere Sache.
Dein Controller hat nur 3 Beine, die 'n konventionellen externen IRQ triggern können - von hinten durch de Brust ins Auge kann man natürlich auch andere alternative Funktionen als externen IRQ zweckentfremden, zB den AnalogComperator, die T-Pins der Timer, vielleicht auch über die Clock-Signale von USART oder SPI - aber das macht natürlich die jeweiligen HW-Module umbrauchbar...
...Ja, die sollen nur den Zustand anzeigen, haben aber keine spezielle Funktion sonst. Ich werde dies berücksichtigen...
Faustregel für die Treiber der Beine Deines AVR ist:
- durch jedes einzelne Bein sollten höchstens 20mA fliessen (von Vcc oder nach Gnd)
- Alle Beine der B-Ports und D-Ports zusammen höchstens 100mA
- Alle Beine der A-Ports, C-Ports und E-Ports zusammen höchstens 100mA
- Alle Beine aller Ports zusammen höchstens 200mA
Wenn Du also den Strom entsprechend begrenzt...