Forum: Mikrocontroller und Digitale Elektronik Atmega Input und Output


von Manfred S. (Firma: Manfred) (xfred343)


Lesenswert?

Das Ein- und Ausschalten wird meines Erachtens bei 
Mikroprozessor-Büchern, Artikeln etc. viel zu einfach gesehen, wie ich 
jetzt bei vielen Schaltungen schon bemerkt habe.

Beim Einschalten einer LED ists ja wirklich recht einfach.
1
Config PORTD.1=Output
2
PORTD.1 = 1 'wieder ein
3
PORTD.1 = 0 'wieder aus

Aber beim Schalten eines Senders gegen Masse wirds komplizierter, noch 
dazu wenn der auch manuell gegen Masse geschaltet werden kann.
1
CONFIG PORTD.1=Output
2
PORTD.1 = 0 'Sender ein
3
Waitms 500
4
PORTD.1=  1 'Sender aus
5
'wenn jetzt der Anwender seine Taste drückt, wird der arme Atmega-Port kurzgeschlossen!!

Daher ist es in solchen Fällen notwendig, immer dir Richtung zu ändern, 
um so den Input als "neutralen TriState" zu nutzen.
Beispiel:
1
CONFIG PORTD.1=Input
2
PORTD.1=1 'Pullup
3
'Beim Schalten, hier ist meines Erachtens die Reihenfolge wichtig,
4
damit beim parallelen manuellen Schalten kein Kurzschluss entsteht.
5
PORTD.1=0
6
CONFIG PORTD=Output
7
Waitms 500
8
CONFIG PORTD=Input
9
PORTD.1=1 'Pullup

Stimmen meine Überlegungen?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Manfred S. schrieb:
> Stimmen meine Überlegungen?

Es ist nur in absoluten Ausnahmefällen Praxis, einen Pin sowohl für 
Eingabe als auch für Ausgabe zu benuzen. Die Ausnahmen sind 
bidirektionale Bussysteme wie I2C, bei denen die Datenrichtung und 
-umschaltung aber streng definiert ist und von allen Busteilnehmern 
eingehalten wird.
Normalerweise hängt also an einem Portpin entweder ein Taster oder 
eine LED und nicht beides gleichzeitig. Also ein Pin ist Eingang und 
bleibt das auch.
Einen AVR Portpin auf Masse zu ziehen ist schon doof, aber führt 
meistens nicht zum Tod des Ports. Einen low Ausgang auf Vcc zu ziehen, 
nehmen die meisten Chips viel übler.
Wenn du in deinem Projekt den Sender sowohl mit MC als auch mit Taster 
aktivieren willst, tun das 2 Dioden als 'Wired-Or'.

von spess53 (Gast)


Lesenswert?

Hi

>Stimmen meine Überlegungen?

Stimmen schon. Aber der interne Pull-Up ist für viele Anwendungen schon 
zu groß. Mit einem externen Pull-Up brauchst du Port=0 und dann nur 
zwischen Ein- und Ausgang umschalten.

MfG Spess

von void (Gast)


Lesenswert?

> Stimmen meine Überlegungen?

Ja, du hast gerade 'Open Collector' erfunden. ;-)

schau mal hier danach
http://www.mikrocontroller.net/articles/Ausgangsstufen_Logik-ICs

von Manfred S. (Firma: Manfred) (xfred343)


Lesenswert?

Vielen herzlichen Dank,

also ich finde, auch das muss gesagt werden, in diesem Forum hat man zu 
jedem Gedanken, zu jeder Unsicherheit und Frage sofort eine passende und 
kompetente Antwort.

@spess53:
Perfekt, in diesem Fall steuere ich einen FS20S4M-Sendemodul, die hat 
den Pullup wirklich schon on board, also brauche ich PORTD.1 nur auf 0 
setzen und dann zwischen IN und OUT umschalten.

@void (Gast):
der Link ist interessant, steht endlich einmal systematisch drinnen, was 
man als Hobbybastler schon (intuitiv) gewusst hat - genau es ist ein 
open Collector.

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
Noch kein Account? Hier anmelden.