PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nur zum Verständnis... Low und Highaktiv



popi
03.09.2008, 12:00
Hallo zusammen,

ich hätte mal eine Veständnisfrage zum Thema PORT und DDRD.

Wenn ich einen Port wie folgt konfiguriere:

DDRD = &B00000000

dann habe ich z.B. PORTD.0 als EIngang definiert und kann mit

if PIND.0 = 1

abfragen, ob ein Pegel anliegt, also ob ich den Pin mit Ub (1) verbinde.

Kann ich aber auch
DDRD = &B00000001
PORTD.0 = 1

IF PIND.0 = 0 then....

abfragen, indem ich den Pin eben mit Masse (0) verbinde???
Oder geht das Bauteil kaput?

Danke im Voraus...

Grüße

popi

radbruch
03.09.2008, 12:10
Hallo

Die Datenrichtung muss trotzdem als Eingang definiert sein:

DDRD = &B00000000

Wenn du jetzt mit PORTD.0 = 1 den internen PullUp einschaltest wird der Pin intern über einen hochohmigen Widerstand (>10k) mit Vcc verbunden. PIND.0 ist dann bei unbeschaltetem Pin gleich 1. Wenn du nun den Pin mit GND verbindest wird PIND.0 gleich 0 sein.

Achtung! Wenn der Pin als Ausgang/High definiert ist wird er durch die Verbindung zu GND durch den Kurzschlußstrom zerstört!

Gruß

mic

T.J.
03.09.2008, 12:15
Jo, so geht's. Aber mit Vorsicht behandeln ;)

Mal ne andere Frage: gibt es auch interne Pulldown mit Porta.0 = 0 ???

ich hab sie nämlich vergessen :-b

Vitis
03.09.2008, 13:27
alle Ports sind damit ausgerüstet
wenn du aber porta.0=0 schreibst ist er
im pulldown, also auf gnd gesetzt.

T.J.
03.09.2008, 13:31
sicher? das hat nicht funktioniert

radbruch
03.09.2008, 13:40
Die AVRs haben keine eingebauten PullDowns.

thewulf00
03.09.2008, 14:54
Die AVRs haben keine eingebauten PullDowns.
So ist es.

Im Inputmodus steht PORTx.y = 1 für das Einschalten des PullUps und PORTx.y = 0 für das Abschalten des PullUps. PullDowns gibt es nicht.

T.J.
03.09.2008, 16:30
ok..dann dreh ich die Logik halt um. Kein Bock jetzt 50 Pulldowns einzulayouten...

thewulf00
03.09.2008, 17:55
Ja, das wäre sehr nervig.

Zeigst Du uns Dein Layout/Deine Schaltung, wenn Du fertig bist?

radbruch
03.09.2008, 18:13
Vielleicht hilft ein Widerstandsnetzwerk:

http://www1.conrad.de/m/4000_4999/4100/4140/4140/414077_BB_00_FB.EPS.jpg (http://www.conrad.de/goto.php?artikel=414310)
Quelle: conrad.de (http://www.conrad.de/goto.php?artikel=414310)

T.J.
04.09.2008, 07:44
Layout zeigen geht nicht Jungs, ich arbeite bei einem großen Automobilunternehmen ;)

Mein Problem ist ja noch viel größer. Nehmen wir mal an ich habe 2 AVRs. Die sind über PORTA.0 verbunden. Da jeder Pin einen Vorwiderstand zum Schutz hat, ist die Verbindung 1kohm.
Ich habe wie gesagt die Pulldowns vergessen. Wie könnte ich jetzt mit AVR A eine Signaländerung erzeugen, die an AVR B erkannt wird?

Interessant ist, dass bei Anfassen der Platine oder einstecken des ISP Steckers die Internen PullUps auch nicht wirklich funktionieren.

Ich habe jetzt PORTA (A) als eingang mit PullUps und PORTA (B) als Ausgang ohne Pullup. Das geht soweit, aber ist das auch sicher und stabil? Meine CAN Leitungen sind noch offen, weil der passende Optokoppler fehlt. Wenn ich da anfasse erkennt er überall Signale :D

radbruch
04.09.2008, 09:48
Wie könnte ich jetzt mit AVR A eine Signaländerung erzeugen, die an AVR B erkannt wird?
Bei AVR A den Pin auf Ausgang, bei AVR B den Pin auf Eingang. Da der Pin bei AVR A Vcc oder GND annimmt brauchst du an AVR B keinen PullUp/PullDown. Weil der Eingang von AVR B hochohmig ist stören die 1k in der Verbindungsleitung nicht.


Ich habe jetzt PORTA (A) als eingang mit PullUps und PORTA (B) als Ausgang ohne Pullup.
A nach B oder B nach A? *kopfkratz* Der "Sender" muß Ausgang, der "Empfänger" Eingang ohne PullUp sein.

PullUp/PullDown benötigt man nur wenn der Eingang nicht beschaltet ist und deshalb "schweben" würde.

Vitis
04.09.2008, 09:54
stimmt, ihr habt recht, kein pulldown, sorry

T.J.
04.09.2008, 10:00
Wie könnte ich jetzt mit AVR A eine Signaländerung erzeugen, die an AVR B erkannt wird?
Bei AVR A den Pin auf Ausgang, bei AVR B den Pin auf Eingang. Da der Pin bei AVR A Vcc oder GND annimmt brauchst du an AVR B keinen PullUp/PullDown. Weil der Eingang von AVR B hochohmig ist stören die 1k in der Verbindungsleitung nicht.


Ich habe jetzt PORTA (A) als eingang mit PullUps und PORTA (B) als Ausgang ohne Pullup.
A nach B oder B nach A? *kopfkratz* Der "Sender" muß Ausgang, der "Empfänger" Eingang ohne PullUp sein.

PullUp/PullDown benötigt man nur wenn der Eingang nicht beschaltet ist und deshalb "schweben" würde.

Gut vielen Dank, dann sollte es passen. So ungefähr hatte ich es auch überlegt. Keine PullDowns, JUHU!

McJenso
04.09.2008, 10:13
Hallo,

will jetzt nicht spießig klingen, aber ich empfehle dir einmal ins Datenblatt zu schauen. Da ich nicht weiß welcher Controller, beziehe ich mich auf das Datenblatt des AtMega8. Auf Seite 52 ab "Configure the Pin" bis einschließlich der Tabelle stehen die Infos die du benötigst. Das PUD Register in der Tabelle ist ein Register, mit dem du die Pullups disablen kannst. Das wird nur selten gebraucht und somit selten genannt.
Es wird dort genau beschrieben, bei welcher Konfiguration der Pin welchen Zustand annimmt. Den nächsten Abschnitt kurz 'anzulesen' schadet auch nicht.


Gruß

Jens

thewulf00
04.09.2008, 10:36
Layout zeigen geht nicht Jungs, ich arbeite bei einem großen Automobilunternehmen ;)

Ja, das weiß ich doch, aber Dein Chef meinte, ich solle fragen. ;)

T.J.
04.09.2008, 17:07
das ist nicht spießig, tatsächlich hast du recht und so genau habe ich mir das Datenblatt tatsächlich nicht angesehen ;)

Dann guck ich morgen früh mal rein :)