Autor |
Kann man Ausgänge am ATtiny2313 als TriState oder OpenDrain definieren? |
|
|
|
|
BID = 473126
cosmoxx Gerade angekommen
Beiträge: 13 Wohnort: Oberhausen
|
|
Hallo zusammen!
Eine Frage an die Atmel-AVR Experten:
Beim tiny2313 möchte ich Port B und D als Ausgänge, aber mit open drain (open collector) benutzen. geht das?
Wenn ja, mit welchen Registern definiere ich das?!
Die Ausgänge sollen also bei Logisch 0 auf GND gezogen werden und bei logisch 1 offen sein und keinen Pegel haben.
Einen zusätzlichen Treiber zu benutzen fällt leider komplett raus. Ich hoffe der Tiny kann das
MfG
Cosmoxx |
|
BID = 473127
Benedikt Inventar
Beiträge: 6241
|
|
PORTx Register auf 0, dann
DDRx Register auf 1: Ausgang wird auf Low gezogen
DDRx Register auf 0: Ausgang ist tristate
[ Diese Nachricht wurde geändert von: Benedikt am 17 Nov 2007 16:45 ] |
|
BID = 473131
cosmoxx Gerade angekommen
Beiträge: 13 Wohnort: Oberhausen
|
Ja, dachte ich auch, aber funktioniert nicht. Kann es sein, dass die internen PullUp Widerstände den Tristate verhindern???
|
BID = 473133
Benedikt Inventar
Beiträge: 6241
|
Wenn du es so machst wie ich es geschrieben habe: Nein.
|
BID = 473134
Ltof Inventar
Beiträge: 9334 Wohnort: Hommingberg
|
Bei einem PIC würde die von Benedikt beschreibene Vorgehensweise nicht funktionieren. Die in PORTx geschriebene 0 würde ignoriert werden, falls am als Input konfigurierten Port von außen eine 1 anliegt. Beim Umschalten auf Ausgang behält er die 1. Es müsste also erst auf Ausgang geschaltet werden und danach der Wert 0 in das Register geschrieben werden.
Vielleicht ist das beim Atmel ähnlich?
Gruß,
Ltof
_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)
|
BID = 473139
cosmoxx Gerade angekommen
Beiträge: 13 Wohnort: Oberhausen
|
Also ich habe von +10V eine LED mit Vorwiderstand an jedem Portpin von Port B und D.
Wenn ich das so definiere wie Du beschrieben hast, fliessen im Low-Pegel 25mA (das ist OK) und im "Tristate" 7µA (das ist nicht OK) in den Pin rein. Könnte das vielleich mit den internen Schutzdioden zusammenhängen?
Am Pin liegt ja mehr Spannung an als An Vcc des Controllers...
|
BID = 473158
Benedikt Inventar
Beiträge: 6241
|
Zitat :
Ltof hat am 17 Nov 2007 17:16 geschrieben :
|
Vielleicht ist das beim Atmel ähnlich?
|
Nein, zum Glück nicht. Die PORT Geschichte bei einem PIC ist ja nur ein einziger Bug (Port wird von extern auf Low gezogen, und wenn man dann den Port ausliest, liefert er logischerweise eine 0, obwohl von der Software her der Ausgang auf 1 ist).
Zitat :
cosmoxx hat am 17 Nov 2007 17:30 geschrieben :
|
Könnte das vielleich mit den internen Schutzdioden zusammenhängen?
Am Pin liegt ja mehr Spannung an als An Vcc des Controllers...
|
Ja.
|
BID = 473608
hajos118 Schreibmaschine
Beiträge: 2453 Wohnort: Untermaiselstein
|
Die angegebenen 7µA entstehen durch die interne Beschaltung des Pin als Eingang.
Ein Ausgang ("PORT") kann beim Atmel nur High oder Low sein - nie Tristate (="open Drain / open Collector") - dies erreicht man nur durch den "Umschalttrick" mittels dem Data-Direction-Register (DDRx) - wobei dann aber tatsächlich nur die Ausgangstreiber im Chip abgeschaltet sind - die vorhandene Eingangsbeschaltung bleibt aber elektrisch angeschlossen...
|
BID = 473634
Ltof Inventar
Beiträge: 9334 Wohnort: Hommingberg
|
Zitat :
Benedikt hat am 17 Nov 2007 18:08 geschrieben :
|
Die PORT Geschichte bei einem PIC ist ja nur ein einziger Bug (Port wird von extern auf Low gezogen, und wenn man dann den Port ausliest, liefert er logischerweise eine 0, obwohl von der Software her der Ausgang auf 1 ist). |
Als Bug würde ich das nicht bezeichen. Für normale Anwendungen muss man das beim Programmieren einfach wissen und berücksichtigen. Diese Eigenschaft ließe sich daneben sogar dazu verwenden, einen überlasteten/kurzgeschlossenen Port softwaremäßig zu erkennen.
Wie ist denn das beim AVR gemacht? Hat der zwei verschiedene Port-Register für Eingabe und Ausgabe?
Gruß,
Ltof
_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)
|
BID = 473663
Benedikt Inventar
Beiträge: 6241
|
Zitat :
Ltof hat am 19 Nov 2007 09:56 geschrieben :
|
Wie ist denn das beim AVR gemacht? Hat der zwei verschiedene Port-Register für Eingabe und Ausgabe?
|
Ja, mit der Richtungsumschaltung eigentlich sogar 3. Ich finde das ganz hilfreich. Klar, es ist gewöhnungssache, aber ich halte das für eine böse Fehlerquelle.
|
BID = 473671
perl Ehrenmitglied
Beiträge: 11110,1 Wohnort: Rheinbach
|
Zitat :
| Ja, mit der Richtungsumschaltung eigentlich sogar 3. Ich finde das ganz hilfreich. Klar, es ist gewöhnungssache, aber ich halte das für eine böse Fehlerquelle. |
Falscher Relativsatz. Du meinst mit Fehlerquelle wohl den PIC.
Der Assemblerprogrammierer muss aber sowieso aufpassen, was er tut. Dafür bekommt er aber auch das, was er bestellt hat.
Die Basic- und C-Leute wundern sich nur über rätselhafte Resultate.
Die Read-Modify-Write-Problematik findet sich aber schon in den ältesten Single Chips von Intel wie 8048 & Co.
Hier gilt also wirklich "It's not a bug, it's a feature"
_________________
Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.
Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !
|
BID = 473673
Benedikt Inventar
Beiträge: 6241
|
Zitat :
perl hat am 19 Nov 2007 14:18 geschrieben :
|
Die Read-Modify-Write-Problematik findet sich aber schon in den ältesten Single Chips von Intel wie 8048 & Co.
Hier gilt also wirklich "It's not a bug, it's a feature"
|
Wobei das bei denen aber wieder anderst war, denn diese Controller hatten garkeine Richtungsumschaltung, denn alle Ports waren gleichzeitig Ein und Ausgang. Ein starker P Kanal Fet über einen Takt an, nachdem man einen Pin auf High schaltet, um die Anstiegszeit ordentlich hinzubekommen, danach nur noch einen Pullup. Das fand ich bei den 8051er echt genial.
|
BID = 473709
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
[OT]
Zitat :
|
Die Basic- und C-Leute wundern sich nur über rätselhafte Resultate.
|
Moin perl,
Zumindest was Basic betrifft stimme ich dir voll und ganz zu, das ist meiner Meinung nach das reinste Gekrüppel...
Was C betrifft jedoch nicht, denn der Maschienenkode ist schon sehr krass; das bekommt man kaum besser hin. Die Optimierung des avr-gcc' macht das schon sehr gut.
Zumal man über den Präprozessor und das Einbinden externer Programme, z.b. nen Treiber für ein LCD, sein Programm sehr gut und überschaulich gestalten kann. Weiterhin lassen sich Mnemonics per Inline-Assembler einbauen oder ganze Maschienenkode-Teile einbinden.
Also, so genialen Asm-Kode bekommt man kaum selbst hin - Es sei denn, man will das Programm nie portieren o.ä. Da bekomme ich dann auch wesentlich besseren Asm-Kode als avr-gcc es könnte.
[/OT]
_________________
|