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
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.
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.
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
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.
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.
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
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?
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.