Forum: Mikrocontroller und Digitale Elektronik Warum will mein (Anfänger-) Bascom-Code nicht so wie ich will ?


von RRR R. (ich-weiss-das-nicht)


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

von mue-c (Gast)


Lesenswert?

Was passiert denn bei
Waitus 0?

von RRR R. (ich-weiss-das-nicht)


Lesenswert?

mue-c schrieb:
> Was passiert denn bei
> Waitus 0?

Dann gibt es kein PWM, trotzdem Dankeschön.

Ruth

von mue-c (Gast)


Lesenswert?

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".

von Paul Baumann (Gast)


Lesenswert?

Es kommt der Moment, wo Hell=Zähler-Dunkel zu Hell=1000-1001 wird.
Dann gibt es einen Hieb.

MfG Paul

von Martin N. (emsen)


Angehängte Dateien:

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.

von Better not... (Gast)


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

von Martin N. (emsen)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.