Liebe Bascom-Freunde, hier wurde mir schon einmal mit einem zündendem Tipp weitergeholfen. Heute möchte ich Euch noch einmal ansprechen. Ich versuche mich ja mit Bascom anfängermässig in die Amtel-Welt einzuarbeiten. Macht ja auch Spass. Ich benutze das STK500. Nun zu meinem "Problem": Ich versuche (ohne die vorgegebene PWM-Funktion) Pulsweiten zu erzeugen. Hierzu wollte ich versuchsweise eine LED an PortB.0 ab- und aufdimmen (faden) lassen. Ich hatte dies primitiv durch kontinuierliches Ändern der Ein/Aus-Zeiten in FOR-NEXT-Schleifen zu erreichen versucht. Zunächst hatte ich in der ersten Schleife die Aus-Zeiten hoch, sowie die Ein-Zeiten runter zählen lasen. Das funktioniert, bis die LED dann nur noch ganz müde glimmt. Mit einer zweiten Schleife sollte nun die LED wieder langsam an Helligkeit zunehmen. Auch das funktioniert. NUR: Nach Ablauf der ersten Schleife (LED ganz dunkel) gibt es einen ca. 500mSek. langen Doppelpuls, der die LED hell aufleuchten lässt. Danach ist sie wieder schwach glimmend und wird dann in der zweiten Schleife -wie erwartet- hochgedimmt. Warum nur dieser Doppelpuls zwischen den beiden Schleifen? Ich hatte einiges versucht, bin aber zu keiner Lösung (Doppelpuls weg) gekommen. Gelesen hatte ich viel, aber sicheerlich noch nicht alles. Ich bin eben noch Anfängerin. Hier mein simpler Code: 'Versuch einer PWM-Erzeugung mit Atmega8 durch Ändern 'des Duty Cicle einer Rechteckschwingung an Port B.0 (Fading ab/auf), 'kein externer Quarz. $regfile = "m8def.dat" $crystal = 1000000 Config Portb.0 = Output 'LED an Port B.0 Dim Hell As Integer 'Ein-Zeit Dim Dunkel As Integer 'Aus-Zeit Dim Zaehler As Integer 'Schrittzähler Zaehler = 1000 'Menge Schritte für Duty Cicle Do 'Beginn der Endlosschleife For Dunkel = 1 To Zaehler 'Aus-Zeit höher, Ein-Zeit runter Portb.0 = 1 Waitus Dunkel Portb.0 = 0 Hell = Zaehler - Dunkel Waitus Hell 'LED wird dunkler Next ' Hier gibt's dann den doppelten Imp. '(LED hell) so ca. 500mSek, nur 'WARUM ? For Dunkel = Zaehler To 1 Step -1 'Aus-Zeit runter, Ein-Zeit höher Portb.0 = 1 Waitus Dunkel Portb.0 = 0 Hell = Zaehler - Dunkel Waitus Hell 'LED wird heller Next Loop 'auf ein Neues :-)) End 'wird nie erreicht Ich würde mich freuen, wenn Antworten wie z.B. "zu faul zum Lesen", "doof" und so weiter nicht eintrudeln würden. Nobody is perfect, maybe you are, me NOT. Vielen, vielen Dank, sagt Ruth
Das war jetzt kein Scherz sondern eine ernstgemeinte Frage. Hast du mal überprüft, was passiert, wenn Hell=0 ist und du dann Waitus Hell ausführst? Das ist der Grund für die "Pause".
Es kommt der Moment, wo Hell=Zähler-Dunkel zu Hell=1000-1001 wird. Dann gibt es einen Hieb. MfG Paul
Diese Pause (siehe Bild) muss raus. Wenn man also For Dunkel = 1 To 999 und For Dunkel = 999 To 1 Step -1 schreibt, dann klappt's. Aus der BASCOM-Anleitung: "The number of microseconds to wait. (1-65535)". Sorge dafür, dass die Funktion (der Befehl) waitus nicht einen Wert unter 1 übergeben bekommt.
Super, Freunde, es klappt jetzt einwandfrei. Gestern konnte ich nicht mehr antworten. Ich danke Paul Baumann und Martin N. für den entscheidenen Tipp. Ich Trotteline hätte eigentlich auch selbst darauf kommen. :-( Aber ich denke, dass man als Anfängerin auch mal solche Fehler machen darf. @Martin N. Da hattest Du Dir extra die Mühe gemacht Dein Oszi-Bild hier einzustellen. Exakt das gleiche Bild konnte ich auf meinem Oszi auch sehen. Mich wundert nur das enorm hohe Rauschen bei Dir (bei 2V/Div!). Das habe ich nicht. Nochmals herzlichen Dank, sagt Ruth
Das Rauschen stammt daher, dass ich auf die Schnelle statt des Tastkopfes eine einfache ungeschirmte BNC-Messleitung mit Prüfklemmen benutzt habe. Viel Erfolg bei deinen weiteren Experimenten!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.