Hallo Atreyu, ich hoffe als "Einäugiger" etwas helfen zu können. Mal sehen.
Der Weg wie ich mir einiges erarbeitet habe war mir klar zu machen was eigentlich "Hardware nah" passiert. Damit zu deiner 1. Frage:
Bei Input erwartet der Controller Info über das Bit. Das kann entweder eines von 2 definierten "Werten" haben, also "High" oder "Low", oder einen "analogen Wert", also irgendwo zwischen 0V und 5,5V. Manchmal kann es je nach deinem Programm, auch wünschenswert sein sicher zu stellen das ein "expliziter" Wert anliegt und dann wird dieser Eingang entweder durch interne Widerstände, oder durch externe auf GND oder 5V gezogen oder gedrückt. Tut man das nicht, so kann ein solcher Eingang "floaten" was im allgemeinen nicht Wünschenswert ist.
Je nachdem was du also am Port durch deine Schaltung vorzufinden erwartest musst du bei einem Eingang sicherstellen das es dort so zugeht wie es gewollt ist. Um das tun zu können MUSS man sich mit dem Datenblatt vertaut machen, weil man nur dort wirklich die Detailsinfos bekommt die man bewusst und explizit durch Beschaltung oder durch konfigurieren herstellen muß.
Natürlich gibt es gewisse "Standard" Einstellungen, zum Beispiel bei Datenports die für solche Standardanwendungen von der Konfiguration schon stimmen. Möchtest du aber "verstehen" und "sicherstellen" das alles so passiert und ist wie du es möchtest kommst du um das Datenblatt nicht herum.
Meine Empfehlung ist es, teste auch hier wie du es hier schon für anderes beschrieben hast die verschiedenen Möglichkeiten als Eingang definierte Bits zu benutzen und versuche aus dem Datenblatt zu ersehen wie das gemacht wird. Sehr hilfreich ist es auch dir die Testprogramme zu den diversen Bords hier im Forum anzusehen. Dort werden Pins als Eingang definiert und benutzt. Versuch nachzuvollziehen was und wie und warum gemacht wurde. Für analoge Inputs ist der Kode für die Tastendekodierung zur RN-Control sicher hilfreich und zeigt dir einen Weg das unmittelbar am Bildschirm zu sehen, oder die Anzeige der Batteriespannung.
Dann würde ich mit konkreten Fragen wieder hier her kommen.
Zu deiner 2. Frage, beschäftige dich damit nach der 1. Frage, das geht etwas mehr ins Eingemachte.
Aber kurz, Interrupts sind ein Werkzeug durch welches der Controller auf ein "Ereignis" reagiert in dem er eine bestimmte Programmroutine startet wenn dieses eintritt. Es sind im Datenblatt diverse Ereignisse beschrieben und diverse Interrupts aufgeführt. Man kann sagen, das ein spezifisches Interrupt auf ein ganz klar definiertes Ereignis die Abarbeitung eines aktuellen Programmes unterbricht und an eine zu dem Interrupt definierten Adresse, nennt man auch "Interrupt Vector", springt und das dort abgelegte Programm abzuarbeiten beginnt. Anders als bei dem normalen Aufruf einer Subroutine, endet eine sogenannte "Interrupt Service Roputine" mit dem Befehl "RTI" was soviel heisst wie "return from Interrupt". Der Controller führt dann das urprüngliche Programm dort weiter wo er zuvor abgebrochen hat.
Interrupt sind ausserordentlich wertvolle und mächtige Werkzeuge, deshalb aber auch solche wo man ganz genau wissen muss was passiert und was passieren würde und oder soll je nachdem wann es passiert und weshalb.
Aber wie gesagt davon mehr und später falls gewollt.
Lesezeichen