Also das lesen eines Bein-Pegels (und das machst Du, wenn Du den Taster auswertest) ist natürlich grundsätzlich erstmal unabhängig von irgendwelchen Pull-Widerständen.
Deine Controller (Mega8, Teina13a) besitzen die klassische Bein-Ansteuerung. Dazu hab ich
hier mal was geschrieben. (1) ist das Bein, (5) ist das D-Q-Latch, aus dem das Pin-Register-Bit gelesen wird. Der "Pegel" des Beines wird in dieses Latch übertragen, und zwar synchronisiert mit der I/O-Clock. Das geschieht übrigens immer, unabhängig ob das Bein Ein- oder Ausgang ist (Das Bein ist immer Eingang, und kann zusätzlich Ausgang sein).
"Pegel"? Die können ja auch analog sein - wie ist das zu verstehen?
Direkt vor dem Synchronizer befindet sich ein Schmitt-Trigger (Hysterese), der bewirkt, daß nur dann ein High übertragen wird, wenn die Spannung mindestens etwa 0,6*Vcc ist (bei Vcc=5V also mindestens 3V); und ein low, wenn die Spannung höchstens bei etwa 0,2*Vcc ist (bei Vcc=5V also bei höchstens 1V).
Wenn die Spannung irgendwo dazwischen rumeiert (also bei Vcc=5V irgendwo zwischen 1V..3V), wird der Inhalt des Latches, und damit der gelesene Pegel nicht verändert.
Um einen High oder Low Pegel zu lesen, mußt Du also eine Spannung größer 0,6*Vcc oder kleiner 0,2*Vcc anlegen. Dazu könntest Du einen … äh … Um-Taster (also einen Wechsler zwischen den beiden Spannungen) einsetzen (wenns sowas gibt), oder Du benutzt den Taster als einstellbaren Widerstand (0 Ohm oder unendlich Ohm) als Teil eines Spannungsteilers in Verbindung mit einem anderen Widerstand.
Der andere Widerstand zieht (pull) dann nach Vcc oder Gnd, der Taster entsprechend nach Gnd oder Vcc.
Ob der Pull-Widerstand nach Vcc oder Gnd zieht ist dabei eigentlich egal, in Deinem Controller integriert sind aber nur Pull-Widerstände gegen Vcc - wenn die verwendet werden sollen (und somit externe Widerstände gespart werden können), muß der Taster halt nach Gnd schließen.
So, wenn der Taster also in Deiner Hauptschleife abgefragt wird, bei erkannter Betätigung 'ne LED getoggelt werden soll und die Hauptschleife sich mit einer Frequenz von … sagen wir mal 100kHz wiederholt, würde die LED während der Betätigung mit einer Frequenz von 50kHz blinken - so kurz kannst Du den Taster gar nicht betätigen.
Dem kannst Du durch eine Zwangspause (wait) begegnen - aber wenn das Programm steht, sind auch alle anderen Prozesse (Teilprogramme) blockiert.
In unserem Programm wird aber durch den Timer eine 0,5s-Zeitbasis bereitgestellt, die ausgenutzt werden kann. Das erschlägt dann auch das
Tastenprellen.
Ich sollte aber nicht die Rote Led aus / einschalten, sondern toggeln lassen. Diese habe ich nun mit dem "Timer Interups Flagg Register" gelernt. Vorher kannte ich nur das toggeln mit Wartezeiten.
Hier hast Du zwei unterschiedliche Sachen zusammengewürfelt:
Toggeln bezeichnet das Umschalten des logischen Pegels des Beines. Die Bascom-Instruktion liest dazu den Pegel ein (also das Pin-Register-Bit), wertet Ihn aus, und schreibt den komplementären Wert ins PORT-Register-Bit. (Einige modernere AVR toggeln das Port-Register-Bit (und damit den Pegel) selbst automatisch wenn in das korrespondierende Pin-Register-Bit eine 1 geschrieben wird - der Tiny13(a) kann das, der Mega8 nicht).
"Toggle" kippt also einfach jedesmal den Pegel.
Wann Du toggeln willst, ist 'ne andere Sache, und hier kannst Du halt warten lassen, oder irgend'ne Zeitbasis nutzen (von einem Timer abgeleitet, durch den Watchdog generiert (ist ja sowas ähnliches wie'n Timer), jedesmal wenn der ADC 'ne Messung fertig hat, jedesmal nach dem Senden eines Bytes via UART/SPI/I²C, …)
Wie schaltet man in der Schleife die Pwm an oder aus?
Thomas hats in #249 nochmal angedeutet - Du kannst zB den Timer rekonfigurieren.
(Ich hatte das übrigens auch schon in #240 und #225 vorgeschlagen. Und vorher in #219 (dort sogar mit Link zu meinem anderen Thema. Hintergrund: Eigentlich sieht Bascom vor, daß man mehrere alternative Konfigurationen definieren kann, und die Konfiguration dann jederzeit mit
Start Timer, Konfigurationsname
ändern kann - das wirkt sich aber bei mir nur auf den Prescaler aus, und nicht auf den Compare-Mode (möglicherweise ein Bug))
In #20 hatte ich ähnlich wie Thomas auch schon die Config-Timer-Instruktion auseinandergenommen - dort ist auch erkennbar, welche Bits in welchem Register direkt geändert werden könnten (wäre schneller/sparsamer, aber ggf später schwerer wartbar/nachvollziehbar))