>Und wie unterscheidest du dann z.B. zwischen 2µs und 4µs-Pulsen?
Das geht mit diesem Verfahren nicht,
es wird nur 100%ig erkannt, dass ein Impuls vorhanden war
Druckbare Version
>Und wie unterscheidest du dann z.B. zwischen 2µs und 4µs-Pulsen?
Das geht mit diesem Verfahren nicht,
es wird nur 100%ig erkannt, dass ein Impuls vorhanden war
@Sprinter: Laut Datenblatt (Mega168) ist es genau umgekehrt:
[/quote]Zitat:
12.2.1
If PORTxn is written logic one when the pin is configured as an input pin, the pull-up resistor is activated. To switch the pull-up resistor off, PORTxn has to be written logic zero or the pin has to be configured as an output pin.
...
12.2.4 Reading the pin value
Independent of the setting of the Data Direction bit DDxn, the port pin can be readt through the PINxn Register bit. ...
Schon klar, aber man will die Pullups an den Ports doch nicht verändern. Also muss PORTX so geschrieben werden (zumindest für die nichtbetroffenen Bits) wie es war. Dazu liest man es einfach aus. PINX hingegen liest die Eingänge.
Beispiel: PORTx=1, also ein IN mit Pullup. Dieser Port soll so bleiben, also nicht zu den Ports gehören, an denen ICP1 angezeigt werden soll.
Nun lesen wir PINx, es sei 0.
Schreiben wir nun 0 nach PORTx, wird der Pullup deaktiviert!!!
Liest man stattdessen PORTx, liest man 1 und beim Schreiben ändert man der Wert des PORTx nicht (zumindest dieses Bits), was man hier haben will.
Nein,
wenn Du PORTx = 0 schreibst, wird nur der Pullup abgeschaltet, wie es im Datenblatt auch steht. Um den Port von Eingang auf Ausgang zu schalten müsste das Datenrichtungsregister beschrieben werden.
IOPortX als Ausgang: DDRx = 0xff
IOPortX als Eingang ohne Pullups: DDRx = 0x00; PORTx = 0x00;
IOPortX als Eingang mit Pullups: DDRx = 0x00; PORTx = 0xff;
IOPortX als Ausgang schreiben: PORTx = value;
IOPortX als Ausgang lesen: value = PINx;
IOPortX als Eingang lesen: value = PINx;
Beim Lesen ist egal, ob der IOPort als Ausgang oder Eingang definiert ist. Es wird immer über das PINx Register gelesen.
Üsch glaub, wir reden aneinander vorbei...
Was passiert denn deiner Meinung nach, wenn der PU (=PullUp) aktiv ist (PORT=1) und wir an PIN eine 0 lesen?
Was willst du dann nach PORT schreiben? 1 (wie es war) oder willst du ein einem Port, der nix mit der Ausgabe zu tun hat, an den PUs drehen?
An PIN liest man den Eingang, richtig. Aber der Wert am Eingang interessiert ja gar nicht! Was interessiert, ist wie die PUs einzustellen sind. Und das liest (und schreibt) man via PORT.
Oder man merkt sich ein einer Variablen, wie man die PUs einstehen hat (was aber mehr Overhead ist.)
Das hatte ich auch schon vermutet (mit dem aneinander vorbei reden :) )
Wenn's nur um die PUs geht hast Du natürlich recht.
Um die PUs geht's doch, oder? bzw darum, daß sich an den nichtbeteiligten Ports nix ändert. Dazu müssenb die PUs gleich bleiben (falls es IN sind) bzw die Port-Werte müssen gleich bleiben (diese liest man auch via PORT, falls es OUT sind).
:-)