Korrekt - Programmwahl ist eine Byte-Variable, die demzufolge aus 8 einzelnen Bits besteht: Programmwahl.7, Programmwahl.6, Programmwahl.5.... usw.Das mit dem "Bit_Pattern" habe ich noch nicht so ganz verstanden. Bit_Pattern ist eine als Byte definierte Variable, hat aber dennoch Aus- oder Eingangs-Nummerierungen. Wie funktioniert das und was bewirkt es genau?
Bei Bascom kann man jedes einzelne Bit eines Bytes nach diesem Muster setzen, löschen, abfragen etc., etc.
Das ist nicht ganz korrekt. Das DDR-Register legt fest ob ein Anschluss als Ausgang (d.h. führt "aktive" Pegel High oder Low) oder als Eingang (führt keinen eigenen Pegel) konfiguriert ist. Beim Einschalten des Controllers sind alle I/O-Ports erstmal als Eingänge konfiguriert, da sie so keinen Schaden anrichten können.Soweit habe ich verstanden, dass ich die einzelnen Portpins ja ein- und abschalten kann, würde mit DDRA = &B00011111 ja auch gehen, korrekt?
Ist ein Anschluss als Eingang konfiguriert, ist der logische Pegel, der an diesem Eingang anliegt, im entsprechenden PIN-Register.
Legst Du also z.B. den als Eingang konfigurierten Anschluss B.2 auf +5V, ist das Bit PINB.2 "1". Liegt der Anschluss auf Masse, wird PINB.2 = 0.
Wenn ein Anschluss aber als Ausgang definiert ist, muss ja irgendwo festgelegt werden, ob dieser Ausgang ein High oder ein Low führen soll - und genau das macht das PORT-Register. Willst Du z.B. C.3 als Ausgang haben und mit einem High-Pegel eine LED leuchten lassen, müsstest Du folgendes schreiben:
DDRC.3=1
PORTC.3 = 1
Das PORT-Register hat aber noch eine wichtige Aufgabe, und zwar dann, wenn der Anschluss als Eingang konfiguriert ist:
Dadurch dass die Eingänge sehr hochohmig sind (mehrere 100 MOhm) fangen sie jede Menge Störstrahlungen ein, wenn sie frei in der Luft hängen. Wenn Du also z.B. einen Eingang mit einem Taster auf +5V legst, wird er bei gedrücktem Taster zwar eine saubere "1" sehen. Bei offenem Taster befindet er sich aber in einem vollkommen undefinierten Zustand; oft führt 50Hz-Einstrahlung dazu, dass sich der logische Pegel ständig ändert. Eingänge dürfen also nie frei in der Luft hängen, sondern sollten über einen hochohmigen Widerstand (z.B. 50kOhm) auf +5V oder Masse gelegt werden. Liegt der Eingang z.B. auf +5V, kann man ihn über einen Taster trotzdem problemlos auf 0V ziehen, ohne dass ein nennenswerter Strom fließt - ist der Taster offen, liegt am Eingang ein sauberes "High" an.
Solche Widerstände nennt man PullUp- (oder PullDown-) Widerstände, und die Controller haben sie schon eingebaut! Sie werden allerdings nur dann aktiv, wenn im dazugehörigen PORT-Register eine 1 steht.
Also nochmal zusammengefasst:
DDRDX.Y legt fest, ob der Anschluss X.Y ein Eingang oder Ausgang sein soll.
Ist er ein Ausgang, legt PORTX.Y fest, ob der Ausgang eine 1 oder eine 0 führt.
Ist er ein Eingang, kann man an PINX.Y sehen, ob an diesem Eingang eine 1 oder 0 anliegt.
Und ist er ein Eingang, kann man mit PORTX.Y = 1 den PullUp-Widerstand aktivieren, der den Eingang auf ein sauberes High zieht.
Ich habe auch einen Haufen BASCOM-Bücher gekauft - aber zum ersten mal verstanden habe ich es mit dem Buch von Roland Walter![]()
Lesezeichen