mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I/O Ports, Standardwerte, Jumper


Autor: Niki Hammler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hello,

Sorry dass ich mit meinen vielen Fragen so nerve. Bei mir ist es immer 
so dass ich mich eine Zeitlang immer nur mit einem Gebiet befasse, dann 
wieder mit etwas anderen. Jetzt ist wieder die Elektronik/uCs dran...
Aber wem die ganzen Fragen stören kann sie eh ignorieren ;)

Was sind eigentlich die Standardwerte in DDRD, DDRB und DDRC? Sind 
standardmässig alle als Ausgang oder als Eingang konfiguriert? (ich 
persönlich tippe als Eingang).

Bezüglich der Datenrichtungen:
mit
sbi(DDRx, Pin) setzt man den Pin als Ausgang, mit
cbi(DDRx, Pin) als Eingang oder?

Bezüglich der Daten:
mit
sbi(PORTx, Pin) setzt man den Pin auf Strom, d.h. ich erhalte draussen 
ein HIGH, mit
cbi(PORTx, Pin) erhalte ich ein LOW oder?


Bei Eingängen, vor allem bei Schaltern muss ich IMMER einen 
Pullup-Widerstand einbauen, damit falls kein Signal kommt, der Zustand 
nicht irgendwas ist sondern auf Masse geht. Hab ich das so richtig 
verstanden? Kann ich die Grösse so eines Pullups generell bei AVR's auf 
1kOhm setzen?

Beim LED im Tuturial ist der Ausgang komplett umgekehrt. D.h. cbi 
schaltet die LED ein, sbi aus, da der andere Pol der LED gegen VCC 
geschaltet ist. Hab ich das richtig verstanden?
Aber wieso ist das so gemacht? Kann ich nicht einfach die LED umdrehen 
(ich gehe vom Tutorial aus), zwischen AVR und der LED einen Widerstand 
und die andere Seite der LED auf GND schalten? So würde nichts 
passieren, wenn ich cbi() auf den Pin mache, aber wenn ich sbi() mache, 
würde aus dem Pin HIGH kommen und der Strom würde fliessen.
Ist da was falsch in meiner Überlegung?

Ich will es ermöglichen, per Jumper einstellen zu können, ob ich 
Hardware oder Software Handshake verwenden will.

In diesem Fall muss ich den Jumper genau so positionieren wie der 
Schalter im Tutorial (Kapitel2, I/O Grundlagen) oder?
Den Pin dann mit cbi(PORTx, Pin) auf Eingang schalten und mit 
bit_is_set(PINx, Pin) lesen.
Wenn das Bit gesetzt ist, ist auch der Jumper gesetzt, wenn es nicht 
gesetzt ist dann ist der Jumper nicht gesetzt. Stimmt das so?


Nun möchte ich auch per Jumper die Baudrate einstellen können. Wenn ich 
das so mache wie oben, brauche ich dafür 5 I/O Ports, ich möchte aber 
nur einen dafür verbrauchen. (Es wäre aber möglich zwar andere I/O Ports 
zu verwenden, die man aber zusätzlich für anderes verwenden kann, aber 
ich weiss nicht ganz wie das möglich sein soll).
Hat da wer nen Tipp wie das mit Jumpern funktioniert?
(Ich hätte ganze 8 I/O Pins die nur als Ausgang dienen und zum Drucker 
gehen. Damit könnte ich doch am Anfang wenn die Leitungen noch nicht 
gebraucht werden die verschiedenen Pins nach der Jumperposition 
abfragen. Doch wenn die Pins jetzt mit dem Drucker verbunden sind, steht 
dann auf einmal die eine Leitung wo der Jumper gesetzt ist immer auf 
einem gewissen logischen Pegel?)


Danke im Vorraus,

Niki

Autor: Jonas Diemer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
soweit ich mich erinnere, werden alle ports beim reset auf 0x00 
gesetzt... also alles was im portfile des avrs ist, sollte auf 0x00 
stehen.

Jonas

Autor: Stefan_H (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Wennst die LED´s umdrehst gibts ein kleines Problem, da der AVR nur 
2-3mA(kann sein das werte nicht ganz stimmen) liefern kann und deine 
LED`s aber mehr brauchen. Doch der AVR kann 20mA nach GND fließen 
lassen, deshalb diese Beschaltung.

lg,

Stefan

Autor: Pi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
[Pullups]

Die externen Widerstände kannst Du Dir ersparen. Du kannst Pullups per 
Software setzen indem Du die entsprechenden PORTx-Bits mit '1' 
beschreibst.

Gruß Axel

Autor: Axel(ojojo) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Niki,

mit folgendem Befehl kannst Du bei einem Eingang die (im AVR) internen 
pullUps aktivieren
  ldi r16, 0xFF
  out PORTD, r16  ;internal pullUps
dann brauchst Du aussen keine Wiederstände mehr
(Ich glaube Andreas hat das im Tutorial absichtlich weggelassen, weil 
man das bei anderen µCs  braucht)

ansonsten reichen auch 10kOhm um die Ports auf high zu setzen (da fließt 
ja kaum Strom - es geht nur um die Spannung)

Bei Ausgängen ist das mit den AVRs so, wie Stefan das schon schrieb:
Man schließ Verbraucher dauerhaft an Plus und mit Minus am AVR an
Man nennt diese Art der PinAnschlussTechnik "OpenCollectorPort"
(vgl. "npn"-Transistor)

jo
Axel

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.