Port oder Pin - ich blicks jetzt gar nicht mehr ......

Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2084
Registered: 03 / 2003
Subject:

Port oder Pin - ich blicks jetzt gar nicht mehr ......

 · 
Posted: 12.01.2019 - 16:28  ·  #1
Hallo,

wieder einmal habe ich ein seltsames Phänomen und bin dabei auf etwas gestoßen, was ich mal eindeutig klären möchte.

Das sollte doch richtig sein:
Code
PortE:=PinE or %00000011;

Port beim setzen eines Ports, Pin beim lesen eines Ports oder?

Wo ist denn dann bitte da der Unterschied (beides compilierbar):
Code

Var
  Hold_3V3[@PortE, 0]     : Bit;
  Hold_5V0[@PinE, 1]     : Bit;


Ich habe obige Deklaration (beide mit PortE) in meinem Programm und setze das mit
Code

DDRE:=%00000011;

Hold3V3:=1;
Hold5V0:=1;


Gruss
Harry
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: Port oder Pin - ich blicks jetzt gar nicht mehr ......

 · 
Posted: 12.01.2019 - 16:46  ·  #2
Hi,
PortE := setzt den Pin wenn DDRE = 0 ist
PinE liest den Pin wenn DDRE = 1 ist
Das Lesen von PinE bei einem als Ausgang deklarierten Pin ergibt den
Wert des letzten Schreibens und nicht was da gerade anliegt.

(Das Schreiben von PinE bei einem Augang ist die Sache mit den internen PullUps)
Oder habe ich die Frage noch nicht ganz verstanden ?
Gunter
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2084
Registered: 03 / 2003
Subject:

Re: Port oder Pin - ich blicks jetzt gar nicht mehr ......

 · 
Posted: 12.01.2019 - 18:56  ·  #3
Hi Gunter,

also was ist dann richtig?

PortE:=PortE or %00000011;
oder
PortE:=PinE or %00000011;

Und wieso kann ich bei der Variablen-Definition [@PinE,0] und [@PortE,0] schreiben? Was stimmt und wieso? Was ist falsch und warum gehts trotzdem?

Harry
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Port oder Pin - ich blicks jetzt gar nicht mehr ......

 · 
Posted: 12.01.2019 - 21:48  ·  #4
Hallo Harry
port ist das Output Register
Pin ist das input Register
Auf beide kann man Bits plazieren
Beide kann man lesen und schreiben
Ein Blick in ein Mega oder xmega
Datenblatt hilft da weiter
rolf
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: Port oder Pin - ich blicks jetzt gar nicht mehr ......

 · 
Posted: 13.01.2019 - 06:16  ·  #5
Hallo Harry,

ich fürchte, auch die Antwort von rh hat dir oben nicht wirklich weitergeholfen.
Dehalb jetzt mal konkret zu deiner Frage:

ich zitiere aus dem Mega8 Manual (AFAIK hat sich da auch bei XMegas nix geändert):
Reading the Pin Value Independent of the setting of Data Direction bit DDx, the port pin can be read through the PINn Register.


Bei Unklarheiten hilft mir oft das Prinzip Schaltbild (s.u.).
Das solltest du wirklich mal intensiv studieren !
Was an zig Stellen wortreich beschrieben ist, steckt da alles "auf einen Blick" drin.

Man sieht (grün), dass über Pin Register die tatsächlich anliegenden Pegel gelesesen werden.
Über das Port Register wird der Stand des Ausgangs-Latch gelesen, was aber ja gar nicht dem aktuellen Zustand entsprechen muss, wenn man dynamisch zwischen Input und Output wechselt/gewechselt hat (rot).
Also musst du das PinE benutzen.
Bei der Variablen Def geht nur deshalb scheinbar beides, weil du zwischendurch
die Ausgänge nicht als Eingänge umdefinierst und das Ausgangslatch bei den
Ausgängen auch immer dem Pin Pegel entspricht. Die Inputs Pins sind über PortE gar nicht zu lesen. Da bekommst du den (zufälligen) Stand des Output Latch (oder den Wert, der da beim letzten Mal -als der Pin mal Output war- ausgegeben wurde)

Gruß,
Gunter

p.s.:
ich selber halte mich daran, Ausgänge NIE zu lesen und Eingänge NIE
zu schreiben (abgesehen wg. PullUps). Bei gemischt genutzen Ports
blende uninteressante Bits dann mit AND aus. So ist mir auch noch in
2 Jahren klar, was da passiert.
You must be logged in or your permissions are to low to see this Attachment(s).
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2084
Registered: 03 / 2003
Subject:

Re: Port oder Pin - ich blicks jetzt gar nicht mehr ......

 · 
Posted: 13.01.2019 - 12:30  ·  #6
Hallo Gunter,

danke das war eine hervorragende Erklärung.

Ich möchte aber noch erzählen, warum die Frage aufkam: Ich habe eine Schaltung vorliegen, die es seit 1 1/2 Jahren gibt und deren Programm ich jetzt angepaßt habe. Die Schaltung wird eingeschaltet in dem mit einer Taste das Gate eins P-Kanal-FET auf GND gezogen wird und der µC dieses dann auf GND hält (natürlich wird das Gate mit der Taste über einen R und eine Diode auf GND gezogen und der µC macht das über einen NPN-Transistor). Plötzlich passierte etwas sehr seltsames: der µC hat die Spannung nicht mehr eingeschaltet gelassen. Ich habe dieses Hold3V3:=1 im Programm verschoben und sogar den Port mit PortE:=PortE or %00000011 oder PortE:=PinE or %00000011 direkt angesprochen, aber es funktionierte nicht mehr (immer!). Seltsamerweise ging es (fast) immer, wenn der Progger eingesteckt war und die Schaltung schon eine Weile in Betrieb war (Kondensatoren geladen). Ich habe dann mit den BodLevels rum probiert, aber auch das half nichts.
Gestern habe ich dann den Fehler gefunden und ehrlich damit hätte ich niemals gerechnet: Bisher wurde die Schaltung während des programmierens mit einem alten HP-Netzteil mit Spannung versorgt und da meine Schaltung einen Zigarettenanzünderstecker als Anschluss besitzt, habe ich kürzlich ein anderes, altes 12V/2A-Netzteil mit passenden Buchsen ausgerüstet und dann dieses verwendet und genau dieses Netzteil verursachte die Probleme. Sobald ich dieses verwende bleibt die Spannung nicht eingeschaltet, mit dem alten HP-NT geht es wie erwartet. Ich muß mal demnächst die Spannung des neuen NTs mit dem Oszi anschauen. Selbst wenn das neue NT einen grausamen Rippel hat, dürfte das doch nicht durch den 3.3V-Schaltregler, der den µC versorgt, so durchschlagen? Wenn die Taste nämlich gedrückt bleibt, arbeitet der µC und das Display ganz normal.

Gruss
Harry
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   108   122 · Page-Gen-Time: 0.028421s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI