Forum: Mikrocontroller und Digitale Elektronik input logic high PINB, Spannungs-Grenzen ?


von rost (Gast)


Lesenswert?

s
Nachdem ich mit DDRB=0x00 alle Pins des Port A auf Input gestellt habe 
kann ich ja mit
byte read = PINB
den digitalen Wert einlesen.

Doch ab wann ist dieser HIGH ?

Es gibt ja die TTL und CMOS Grenzen, doch die kenne ich nur für 5V.

Den MC kann ich ja auch mit 3.3V betreiben, gibt es da Prozente ab wann 
der Wert HIGH bzw LOW wird?

Übrigens bezieht sich das auf dne ATmega328P.

Würde gerne mehr darüber erfahren, warum gewissen Pins zu einem Port 
zusammengefasst werden.
Auszug aus dem Datenblatt, Pinout:
https://content.solarbotics.com/products/photos/ce7a45084987622821fe5b8ba755eeae/lrg/28960-pinout.jpg
Hier sieht man PDx, PCx, PBx wobei x jeweils eine Zahl ist.

PC scheint für analoge Eingang zu sein, und sind die anderen auch nach 
einem Schema gruppiert?

s

von Malte S. (maltest)


Lesenswert?

Die High/Low-Pegel realtiv zu Vcc stehen im Datenblatt, Section 28.2 DC 
Characteristics.
Die Zusammenfassung der Pins zu Ports hat einerseits mit dem Aufbau des 
Controllers zu tun und natürlich ist es relativ sinnvoll, bei einer 
8-Bit-MCU jeweils 8 Pins (=^ 8 Bits) zu einem Register zu konsolidieren. 
Bei manchen Ports sind es vielleicht nur 6 oder 7, aber es wäre schon 
verschwenderisch, jeden Pin komplett einzeln zu adressieren. Außerdem 
kannst du so bei entsprechender Wahl der Pins für deine externe 
Beschaltung zusammengehörige Signale atomar (wenn auch nicht 
glitch-frei) schalten.
PORTC ist nicht nur für den ADC, du kannst ihn auch als digitalen 
(7-Bit) Port verwenden. Dieser wird allerdings aus AVcc versorgt, was 
sinnvoll zu bedenken ist, wenn du an PORTC digitale Ausgänge mit 
analogen Eingängen kombinieren willst.

von M. N. (Gast)


Lesenswert?

Die High/Low-Pegel realtiv zu Vcc stehen im Datenblatt, Section
30.8.9 Pin Threshold and Hysteresis

von Malte S. (maltest)


Lesenswert?

Da haste nu auch wieder recht! Auch wenn das in dem DB, das ich auf die 
Schnelle am Handy gefunden hatte 29.4.9 ist. Der alles entscheidende 
Hinweis sollte sowieso der grundsätzliche Verweis aufs Datenblatt sein.

von rost (Gast)


Lesenswert?

Hallo,

habe dazu im Complete-Datasheet zwei Einträge gefunden:

Unter 29.2 DC Characteristics wird erklärt ab wann LOW bzw HIGH Pegel 
erkannt wird, dies ist aber keine lineare Funktion, da die Bereich Vcc = 
1.8V - 2.4V / 2.4V - 5.5V unterschieden werden.

Unter 31.1.9 Pin Threshold and Hysteresis wird eine lineare Funktion 
angegeben (graphisch), dafür mir geringfügiger Temperaturabhängigkeit.


Dass das im DB steht dachte ich mir auch, aber ich wusste in dem 
660-seitigen PDF trotz Inhaltsverzeichnis nicht, wo das genau steht.

Was ich auch wissen möchte und nicht weiß wo es da genau steht, ist wie 
viel Strom ein Pin leisten kann??
(Für größere Lasten muss ich ja einen Transistor nehmen, das weiß ich 
schon.)

Danke schon für diese Infos

von Malte S. (maltest)


Lesenswert?

rost schrieb:
> Unter 29.2 DC Characteristics wird erklärt ab wann LOW bzw HIGH Pegel
> erkannt wird, dies ist aber keine lineare Funktion, da die Bereich Vcc =
> 1.8V - 2.4V / 2.4V - 5.5V unterschieden werden.

Hast du es denn mit schwankender Versorgungsspannung zu tun? Du 
schriebst ja 3.3V, was deutlich im Bereich 2.4-5.5 liegt :)

> Unter 31.1.9 Pin Threshold and Hysteresis wird eine lineare Funktion
> angegeben (graphisch), dafür mir geringfügiger Temperaturabhängigkeit.

Was hast du denn für Signale? Wenn du arg in die Grenzbereiche kommst, 
würde ich empfehlen, die vorher schon etwas aufzubessern.

> Was ich auch wissen möchte und nicht weiß wo es da genau steht, ist wie
> viel Strom ein Pin leisten kann??

Naja, unter Absolute Maximum Ratings steht 40 mA pro Pin und 200 mA für 
Vcc/GND. Letzteres deckelt entsprechend den Wert, wieviele Ausgänge 
gleichzeitig höhrere Ströme liefern/schlucken können. Und besser du 
bleibst noch ein gutes Stückchen von diesen Maxima weg.

von rost (Gast)


Lesenswert?

Also ich habe eine stabilisierte Spannung, das gibt wenigstens der 
Hersteller des Netzteils an. Bisher benutze ich den MC auch nur mit 5V 
was ich am Netzteil einstellen kann.

Ich plane allerdings den MC mit 3.3V zu betreiben. Dazu bräuchte ich 
wohl einen belasteten Spannungsteiler. Habe bisher nur mit "normalen" 
Spannungsteilern was gemacht, um z. B. höhere Spannungen für Messungen 
runterzuwandeln. Das ging auch immer problemlos, da hatte ich dann wohl 
einen unbelasteten Spannungsteiler.
Doch kann man hier überhaupt sowas benutzen? Schließlich hat der MC ja 
einen variablen Stromverbrauch... Gibt es für diesen Zweck 5V -> 
3.3V_belastet ein Bautei`?
Habe kein Netzteil gefunden, bei dem sich das direkt einstellen lässt, 
ist bisher auch nicht notwendig sondern eher der Interesse wegen...

Übrigens ist es eigentlich "31.8.9 Pin Threshold and Hysteresis", hatte 
vergessen, dass dieses Datenblatt für eine ganze Reihe von MCs ist. 
Dieser Abschnitt bezieht sich auf den ATmega328P.

von M. N. (Gast)


Lesenswert?

rost schrieb:
> Übrigens ist es eigentlich "31.8.9 Pin Threshold and Hysteresis",

Die Kapitelnummern erhöhen sich bei neueren Datenblättern. Aber es 
sollte unter xx.8.8 stehen, wie die Kennlinie der Ausgänge aussieht:
Pin Driver Strength

von Malte S. (maltest)


Lesenswert?

Spannungsteiler ist dafür unbrauchbar, den Grund hast du ja selbst 
gesehen. Dafür gibt es Spannungsregler. z.B. ganz simple Variante LF33 
bis max. 1A.

von M. N. (Gast)


Lesenswert?

Im allerallerneuesten Datenblatt (02/2013) mit 36MB findet die 
Beschreibung in Kapitel 35 statt.

von rost (Gast)


Lesenswert?

Ok, habe jetzt gesehen, was es auch gibt

ebay: 280819423916, "Perfect High Quality MB102 Breadboard Power Supply 
Module 3.3V 5V Arduino Board"

Ist für Steckbretter mit 400 Kt oder 830 Kt (MB102) gedacht , also 
soclhe die auf beiden Seiten je V+/GND haben.

Schlappe 1,51 EUR


Eine Alternative ist übrigens ein USB 5V Netzteil + USB-Kabel. Da hat 
man 5V stabilisiert. Gibts auch ganz kostengünstig, weil dann die 
verstellbare Spannungseinstellung wegfällt. Wenn man dann das 
A/A-USB-Kabel in der Mitte trennt hat man sogar zwei davon. Dann muss 
man nur noch V+ (meist rot) und GND (meist schwarz) anschließen.

--

Wenn ich einen Pin auf HIGH setze, wird er dann exakt auf Vcc gezogen 
(also quasi damit "verbunden") oder ist da ein Wandler drin, der eine 
gewisse Spannung ausgibt?

Malte S. schrieb:
> Außerdem
> kannst du so bei entsprechender Wahl der Pins für deine externe
> Beschaltung zusammengehörige Signale atomar (wenn auch nicht
> glitch-frei) schalten.

Meinst du so ähnlich wie mit diesen Shiftregistern wo man ein byte 
reinsendet bzw eins rausliest? Da kann ich ja zuerst eine Latch setzen 
dass mir die erst aktualisiert werden wenn ich das byte gesendet habe 
und in 8 bits an die Ausgänge aufgeteilt ist. Dann kann ich den latch 
auf high setzen.  Beispiel: 74HC595

Doch wozu kommt es auf diese Nanosekunden wirklich an? Habe bisher nur 
in C++ geschrieben und da mir eine Funktion gebastelt die prüft ob der 
Status für eine gewisse Zeit (1...50ms) bestehend bleibt für EMV und 
entprelleh

Kennt jemand ein praktishces Beispiel wo dies Glitch eine Fehlerquelle 
ist?

von Malte S. (maltest)


Lesenswert?

Das ist immer dann ein Problem, wenn ein parallel ausgegebenes Signal 
nicht zusätzlich durch einen Takt synchronisiert wird.

Wenn am Ausgang z.B. eine H-Brücke hängt, die einen Motor ansteuert, 
möchtest du nicht, dass auch nur für kurze Zeit ein Kurzschluss 
geschaltet wird. Da brauchst du explizit eine Totzeit, musst also 
nacheinander erst den einen Treiber sperren, dann den anderen öffnen. 
Okay, hier spielt die Zeit, die der Treiber zum Sperren benötigt, eine 
größere Rolle als geringe Asynchronität direkt am µC-Ausgang.
Solange du ein zusätzliches Signal hast, das die Gültigkeit der anderen 
Pins anzeigt, ist alles gut, vergleichbar dem genannten Latch beim 
595er. Dann hast du den Vorteil, dass du die Daten-Pins gleichzeitig (im 
Sinne des Programmcodes) schalten kannst. Im Unterschied zum seriell 
angebundenen Register, das zwar weniger Pins zur Anbindung, dafür aber 
mehr Taktzyklen zum Ansteuern braucht.

Je nachdem, was du machst, sind die Glitches durchaus wesentlich. 
Verstärkt durch unterschiedliche Signallaufzeiten zur Peripherie können 
die einiges machen. Sieh dir mal einen Mainboard oder einen 
Speicherriegel an, da laufen einige Leiterbahnen in Meandern, um diese 
Laufzeiten auszugleichen. Bei der Arbeit mit AVRs wird dir das eher 
keine Probleme machen, ich wollte es nur erwähnt haben, weil sonst 
jemand anderes darauf aufmerksam macht:
1
PORTB = 0x55;
setzt zwar alle Pins des PORTB mit einer Instruktion (bin jetzt zu faul 
die exakte Anzahl der Taktzyklen nachzuschlagen), aber nicht absolut 
gleichzeitig.

rost schrieb:
> ebay: 280819423916, "Perfect High Quality MB102 Breadboard Power Supply
> Module 3.3V 5V Arduino Board"

Sowas ist fürs Steckbrett praktisch. Für die fertige Platine machen sich 
die einzelnen Bauteile dann besser.

von rost (Gast)


Lesenswert?

Ok, vielen Dank.
Das sollte mir fürs erste genügen.

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.