Atmega Input und Output

OP (Firma: Manfred) #2713941
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?
(Firma: matzetronics)
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'.
Gast
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
OP (Firma: Manfred)
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.