Warum will mein (Anfänger-) Bascom-Code nicht so wie ich will ?

OP #2342775
Lesenswert?

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
#2343136
Lesenswert?

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.
Angehängte Dateien:
Gast #2343542
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren