ein arduino bzw. Computer wird ja mithilfe von Impulsen gesteuert, sprich, 5v bei high und 0 v bei Low. Jetzt habe ich gestern etwas mithilfe von pwm programmiert und da habe ich gesehen, dass beispielsweise bei einer Zahl 255 lautet 11111111 in Form von Impulsen übertragen werden. Meine Frage ist, wie werden diese Impulse gesteuert bzw. Übertragen? Es werden ja Impulse mit einer Frequenz von beispielsweise 300 hz versendet. Also 300 mal in der Sekunde. Wie funktioniert das genau?
Ich habe mir das versucht langsamer und einfacher vorzustellen, indem ich mir dachte, dass ich ja den Lichtschalter zu Hause ja auch manuell in der Minute 100 mal an und aus stellen kann und somit entweder Strom durchlasse oder sperre. Aber wie funktioniert das mit so ner Geschwindigkeit und so einer Frequenz im Computer bzw. Arduino?
Beim Empfänger wird 300mal die Sekunde geprüft, ob High oder Low anliegt.
Beim Sender wird 300mal die Sekunde High oder Low angelegt.
Es gibt ein Bauteil, Quarz, Oszillator oder Resonator, das den Takt vor gibt. Pro Takt wird ein was gemacht. Bei 16MHz wird sozusagen 16 Millionen mal pro Sekunde etwas gemacht.
Eine serielle (bitweise) Übertragung kann synchron oder asynchron erfolgen. Asynchron wäre Serial und OneWire, mit nur einer Datenleitung, sonst (SPI, I2C...) wird eine zweite Leitung für den Takt benutzt. Im Prinzip wird jeweils ein Schieberegister mit den Datenbits gefüllt. Der Takt dafür wird entweder mit übertragen (synchron), oder die Bits haben eine unterschiedliche Impulslänge (OneWire) oder die Frequenzen von Sender und Empfänger müssen gleich hoch sein (Serial UART).
Die Taktrate kann bei den meisten Arduinos bis 2 MHz gehen, USB und Ethernet gehen mit spezieller Hardware noch viel höher. Viele diskrete Schieberegister können Bits mit 50 MHz und mehr einlesen oder ausgeben, in (Mikro)Prozessoren können sie bis zur Taktrate des Controllers benutzt werden (GHz).
Ein Lichtschalter ist ein mechanisches Bauteil. Da gibt es ziemlich schnell eine Grenze wie schnell man ein mechanisches Bauteil hin- und herbewegen kann.
Je schneller man es bewegen will desto größere Kräfte bräuchte man.
Chips sind elektronische Bauteile. Da gibt es null mechanische Bewegung. Null. Null mechanische Bewegung = null mechanische Kräfte.
Die Zeit die ein elektronisches Bauteil braucht um vom Zustand "leitet den Strom" in den Zustand "leitet keinen Strom" oder umgekehrt umzuschalten liegt im Bereich von Nanosekunden. Nano milliardstel Sekunden.
0,000000001 Sekunden.
Bei extrem schnell schaltenden Bauteilen im Bereich von pico-sekunden. Billionstel Sekunden. 0,000000000001 Sekunden.
Für diese Art Schaltvorgänge fällt mir jetzt kein einfacher Vergleich ein.
Diese elektronischen Schaltelemente nennt man Transistoren.
In einem Arduino-Uno microcontroller dürften mehrere zehntausend sein.
In einem Mikroprocessor eines PCs sind es hunderte Millionen.
Diese beiden Videos erklären wie ein Transistor funktioniert.
Wenn man das in die Tiefe verstehen will dann gehört da eine Menge Physik dazu
Habe mir jetzt beide Videos angeschaut, das hat mir schonmal geholfen das Prinzip zu verstehen.
Somit kann man mit einem Transistor Stromstärke und Frequenz steuern.
Aber wie funktioniert das mit dem ein und ausschalten genau? Das haben die im Video jetzt nicht genau erklärt. Ich meine die wirkliche Übertragung von 1 und 0.
Für LED etc. statisch: Strom fließt = 1 = leuchtet. Kein Strom: 0.
Wie kommst Du jetzt auf Impulse? Für eine serielle (dynamische) Übertragung muß vereinbart werden, wie Nullen und Einsen übertragen werden sollen - siehe #3.
Je genauer du es wissen willst, desto komplizierter wird es.
Aber das gilt auch für den Schalter, mit dem du eine Lampe ein- und ausschaltest.
Nimmst du den Begriff "Spannung" oder "Potential" an einem Datenpin deines Controllers als klar?
Da ein Uno mit einer Taktfrequenz von 16 MHz ( 62,5ns je Takt ) arbeitet, ist das die höchstmögliche Geschwindigkeit eines Wechsels. Wenn es eine Million mal langsamer geht, fängt eine LED an diesem Pin für ein menschliches Auge an, zu flimmern. Dazwischen kannst du einen Helligkeitsunterschied erkennen, wenn z.B. bei 300 Ein/Aus-Wechseln je Sekunde die Zeit für Ein bzw. Aus unterschiedlich lang ist.
Wenn es um Datenübertragung über lange Leitungen geht, wird es mit höherer Geschwindigkeit kompliziert. ( MHz ist eine Größenordnung in der Radios Signale empfangen, ohne über Leitungen mit dem Sender verbunden zu sein )
Ein bißchen genauer:
Synchrone Übertragung.
Man hat ein Taktsignal und ein (seriell) oder mehrere (Paralell) Datensignale.
Die Flanke des Taktsignals sagt wann das Datensignal gültig ist.
Asynchron:
Der Takt ist im Datensignal selbst versteckt zb bei den WS2812 oder durch Start und Stopbits wird jedes Byte synchronisiert (TTL, RS232, RS485 Schnittstelle).
Eingänge lesen Spannung und bestimmte Spannugsbereiche ( Beim Controller des Arduino Atmega328 mit 5V Versorgung) von 0 bis 1,5V bedeuten LOW und von 3 bis 5V bedeuten HIGH. Ein Ausgang wird darum mittels Transistoren enweder auf 5V geschaltet für HIGh oder auf Masse für LOW signal.
Es gibt einige Schnittstellen die andere Spannungsbereiche verwenden zB RS232 RS485 USB usw oder Strom statt Spannung 4-20mA.
Die Auswahl der Schnittstelle erfolgt nach deren Eigenschaften oder Anforderungen oder einfach weil das Gerät, das man auslesen oder steuern will diese Schnittstelle hat.
Da spielen jetzt ganz unterschiedliche Ebenen hinein.
Wenn du jetzt wirklich im Detail verstehen willst wie eine Datenübertragung
Microcontroller sendet das Wort "Hallo" an den seriellen Monitor der Arduino-IDE
funktioniert dann wird das ein halbes Elektrotechnik Studium.
Der Mikrocontroller hat einen Taktgenerator der ihm den Takt vorgibt.
Quarz-Schwingkreise oder Keramik-Resonator-Schwingkreise
Wenn der Strom eingeschaltet wird, wird im Mikrocontroller ein erstes fundamentales "Startprogrämmchen" ausgeführt
"Hole aus Speicheradresse XY den ersten Befehl und arbeite diesen Befehl ab."
Da werden im Mikrocontroller schon dutzende Nullen und Einsen intern aus dem Flash-Speicher in die Arbeitsregister des Mikrokontrollers übertragen.
an diesem Prozess sind mindstens hunderte Transistoren beteiligt.
Das kann dir aber vollkommen schnurz-wurscht sein wie der µC das intern macht. Wirklich interessant ist nur die C++-Ebene = dein Arduino-Programm und wenn das Programm besonders schnell abgearbeitet werden muss die Steuerungsregister des µClers.
Der µC hat einen Bereich UART-Schnittstelle die das senden / empfangen der Nullen und Einsen macht.
Im Prinzip werde da immer Transistoren zwischen leitend und nicht leitend hin- und hergeschaltet. Nur das es eben nicht einzelne Transistoren sind die das machen sondern eine größere Anzahl Transistoren die da auf komplizierte Weise zusammengeschaltet sind und dadurch zusammenarbeiten.
Analogie: Jetzt erkläre mal in drei Sätzen wie ein Auto mit Verbrennungsmotor funktioniert. Und zwar alle wichtigen Details:
Motorsteuerung
Lambda-Sonde
Luftmassensensor
Motorkennlinien
Einspritzpumpe
Einspritzdüsen
Kühlwasserkreislauf
Kupplung
Getriebe (vor allem die Drehzahlsynchronsiation der Zahnräder beim Schalten)
Bremse
Antiblockiersystem
ESP,
ASR
Das alles in drei Sätzen. Geht nicht!
Der Vorgang von der Takterzeugung für den Microcontroller bis zum Senden eines einzelnen Buchstabens über den Hardware-UART hat aber mindestens so viele Aspekte wie die die ich beim Auto aufgezählt habe.
Ein bischen genauer:
Das Datensignal muß eine bestimmte Zeit vor und nach der Taktflanke gültig sein (Schieberegister...) oder während des ganzen Taktimpulses (I2C: SCL=0).
Aber solange der TO noch nicht verstanden hat, daß es unterschiedliche Verfahren gibt, um Bits seriell zu übertragen, sind solche Feinheiten eher hinderlich für das Verständnis. Ich bin gespannt, wer als erster dahinterkommt, wo das Problem von @anon87859591 wirklich liegt.
Haha danke erstmal für die Antworten.
Also ich studiere selber Elektrotechnik und habe deshalb viele technische Fragen und mein Wissen zu verstärken.
Und es genauer zu machen: Meine Frage bezieht sich eher auf das pwm beim arduino. Da habe ich gestern LEDs mit pwm programmiert und habe mich gefragt wie die ganzen Nullen und Einsen gesteuert werden. Deswegen hatte ich es mit dem Lichtschalter verglichen. Nu halt viel schneller. Jetzt habe ich die Information bekommen, dass nichts mechanisch abläuft. Sondern elektronisch. Genau da habe ich Verständnisprobleme. Wie genau passiert das ? Im Grunde funktioniert ja jeder Computer der Welt so. Deswegen frag ich mich das. Also wie genau und was genau schaltet die verschiedenen Impulse, sprich, wie wird 5v geschaltet und anschließend 0v? Und wie geht das mit so einer Geschwindigkeit?
@StefanL38 hat mir sehr mit der Erklärung geholfen. Vor allem mit der Erklärung der Geschwindigkeit der Elektronen und der damit einhergehenden Wechsel…..
Wenn du wirklich wissen wolltest, wie PWM funktioniert, dann würdest du z.B. den zugehörigen Wikipedia Artikel lesen (es gibt tausende Erklärungen im Netz) und das Datenblatt des µC den du verwendest, denn der generiert schließlich PWM mit seinen Timern.
Da du das offensichtlich nicht tust, bzw. getan hast, sehe ich auch kein ernsthaftes Interesse.
Würdest du Interesse haben, wären deine Fragen anders gestellt, z.B. die richtigen Bezeichner verwendet worden.
Wie kommt es, dass an manchen Stellen in der Welt manchmal mehr Elektronen sind als an anderen, was sind diese sogenannten Elektronen überhaupt genau, und was hat das mit meinem Handy zu tun?
Das besprechen wir am besten, wenn @StefanL38 s Erklärung aus #10 (Verbrennungsmotor) keine Fragen mehr offen gelassen hat.
Ein Bekannter hat einmal gelästert, daß viele Leute Elektrotechnik nur studieren um herauszubekommen, wie ein Transistor funktioniert. Ein Transistor kommt aber selten allein, für brauchbare Schaltungen braucht man mehrere und/oder Widerstände, Kondenstoren und mehr. Diese Technik lernt man nicht in der Schule, dafür gibt es schlaue Schaltungsbücher ohne Ende. So wie es einem Maler wenig hilft, alles über seine Farben zu wissen, wenn er damit schöne Bilder malen möchte.
Für den Einstieg in die Digitaltechnik empfiehlt sich ein Studium der Datenblätter mit dem Innenleben von Gattern, Flipflops, Schieberegistern usw., und dann die Anwendung dieses Wissens in eigenen Experimenten.
Ein Transistor zieht das Signal auf 5V, ein anderer auf 0V. Natürlich darf dann immer nur einer von beiden eingeschaltet sein. Oder keiner, dann hat main einen tri-state Ausgang.
ich möchte gerne verstehen, wie der Computer bzw. der Prozessor 5v oder 0v schaltet. Mir wird ständig erklärt, dass er es macht und wie schnell er es macht. Aber wie funktioniert denn das Schalten? Ich habe mir nun alle Videos dazu angeschaut und es wird immer ein Beispiel mit einem Schalter gemacht. Wer oder WAS ist aber dieser Schalter ?
Wenn ich beispielsweise mein Stromkabel an mein PC schließe, ist er ja mit 230V versorgt. Das Stromkabel wandelt dann die Wechselspannung in Gleichspannung um und sehr wahrscheinlich auch noch in die richtige Voltzahl die der PC benötigt (Bps. 5V). Wie werden diese 5 V Gleichspannung denn jetzt als PWM Signal ausgegeben ? Sprich, wie werden 5 V Gleichspannung in die jeweiligen Tastgrade umgewandelt bzw. wie wird in einer Periode die Spannung unterbrochen, sodass wir beispielsweise 11001100 versenden ? Durch 5V Gleichspannung erhalten wir ja eigentlich 11111111. Wie wird daraus 11001100? Also wie wird die Spannung im Prozessor in der jeweiligen Periode unterbrochen, sodass wir gewünschte Bytes bekommen. Das war auch meine Frage bezüglich wie funktioniert die Byteübertragung im PC. Ich hoffe, dass ihr mich nun versteht und mir helfen könnt. Danke!
Wie gesagt Totem Pole.
Da schaltet ein FET auf Masse und ein anderer auf 5V. Die beiden Transistoren werden abwechselnd angesteuert. In den genannten Zeichnungen sind diese beiden FET-Transistoren in Dreieck in der mitte versteckt.
Da jedes Pin auch ein Eingang sein kann können beide Transistoren auch gleichzeitig ausgeschaltet sein. Auch wird ein Pullupwiderstand bei setzen eines Bits in einem Register auf das Pin geschaltet. Die beiden in den Zeichnungen sichtbaren FETs sind oben für den Pullupwiderstand und unten für Stromsparen im Sleep-Modus.