Forum: Mikrocontroller und Digitale Elektronik Led Dimmen , flackern mit Pwm


von Sascha M. (sascha32)


Lesenswert?

guten abend ich bin schon am verzweifeln mit Pwm????? also ich möchte 
gern für mein sohn ein vulak bauen, das bauen ist kein problem. Aber das 
mit dem led dimmen. ich schreibe mit bascom und bin noch anfänger. es 
handelt sich um ein atmega8 .  ich kriege es hin mit dem runter zählen 
von 255 bis 0 und wieder rauf. bitte  um hilfe.

mfg

von yoq (Gast)


Lesenswert?

Poste doch mal deinen Code, dann kann man dir hier eher helfen.

von Husten (Gast)


Lesenswert?

Hallo,

WTF ist ein Vulak?

Grüße

von Sascha M. (sascha32)


Lesenswert?

oh ich meinte ein vulkan .... für seine dino landschaft.







es sind drei taster mit taster 1 hast du die volle leistung. mit taster 
2 unter die hälfte und mit taster 3 ist sie aus. aber ich möchte das so 
haben wenn ich eine taste drücke soll sie flackern mal heller mal 
weniger.


so der code

$sim

$regfile "m8def.dat"
$crystal = 1000000


Config Portb.1 = Input
Config Portb.2 = Input
Config Portb.3 = Input
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Prescale = 
1

Do

If Pb.1 = 1 Then
Compare1a = 1023
Elseif Pb.2 = 1 Then
Compare1a = 400
Elseif Pb.3 = 1 Then
Compare1a = 0

End If

Loop
End

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Meine Glaskugel sagt: Du hast die Pulldowns vergessen. Das sind 
Widerstände mit vllt. 10kOhm vom µC-Pin nach GND.

von Sascha M. (sascha32)


Lesenswert?

ne die habe ich nicht die 10 kohm, sondern 1 kohm habe ich drin. wie so 
muss es ein 10 kohm sein ?????

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Sascha Möwert schrieb:
> wie so
> muss es ein 10 kohm sein ?????

Es ist völlig egal, ob nun 1kOhm oder 10kOhm. Aber hast Du wirklich das 
hier aufgebaut?
1
       /
2
VCC---/  -------------  zum µC-Pin
3
                |
4
               ---
5
               | |
6
               | |
7
               ---
8
                |
9
                |
10
               --- GND

Sonst ist eigentlich alles OK. Du könntest höchstens mal versuchen, den 
PWM-Pin explizit als Ausgang zu definieren.


Gruß
Jonathan

von Sascha M. (sascha32)


Lesenswert?

hallo Jonathan Strobl


wie meinst du das genau mit vcc???? also ist vcc direckt an pin 15 oc1s 
dran, und dann parallel ein 1 oder 10 kohm mit der led. oder wie darf 
ich das verstehn. hast du kein schaltbid?????

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Sascha Möwert schrieb:
> wie meinst du das genau mit vcc

VCC = Deine Versorgungsspannung. Wahrscheinlich 5V.
GND = Masse, Minuspol der Versorgung. 0V.


Sascha Möwert schrieb:
> also ist vcc direckt an pin 15 oc1s
> dran, und dann parallel ein 1 oder 10 kohm mit der led

Halt, halt, halt. Damit schießt Du Dir den µC ab. Das gibt 'nen satten 
Kurzschluss.
1
     Schalter
2
        /              1kOhm
3
 VCC---/  -------------|===|---  zu Portb 1 / 2 / 3 (Taster-Eingang)
4
                 |
5
                ---
6
                | |
7
                | | 1kOhm
8
                ---
9
                 |
10
                 |
11
                --- GND

So musst Du die Taster anschließen. Die Schaltung musst Du für jeden 
deiner drei Taster aufbauen.


Gruß
Jonathan

von Sascha M. (sascha32)


Lesenswert?

Jonathan Strobl

also muss ich vom vcc auf den schalter gehen und dann vom schalter zum 1 
kohm, und dann auf portb1(oc1a). und mit der led dann auf welchen 
port?????

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Sascha Möwert schrieb:
> portb1(oc1a)

Fällt mir jetzt erst auf: Du benutzt den doch schon für die PWM. Du 
kannst einen Pin nur für eine Funktion benutzen. Ich glaub, Dir mangelt 
es noch ein Bisschen an Grundlagen.
Mach doch lieber erst mal das AVR-Tutorial (<-- hier drücken g) durch.


Gruß
Jonathan

von Sascha M. (sascha32)


Lesenswert?

also wenn ich mir das so anschaue dann ist der portb1 (oc1a) der pwm 
ausgang da muss die led mit 1kohm zum gnd. und der schalter / taster 
kann ich ja dann auf portc.1 schalten. sehe ich es richtig. da das 
programm den pwa ausgang schaltet.

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Sascha Möwert schrieb:
> also wenn ich mir das so anschaue dann ist der portb1 (oc1a) der pwm
> ausgang da muss die led mit 1kohm zum gnd. und der schalter / taster
> kann ich ja dann auf portc.1 schalten. sehe ich es richtig. da das
> programm den pwa ausgang schaltet.

Ja, das ist richtig.


Gruß
Jonathan

von Sascha M. (sascha32)


Lesenswert?

so dann kann ich ja mein programm in die tonne hauen weil ich ja die 
ausgänge genommen habe. ich muss den taster auf portc.1 = input setzen 
und den pwm ausgang dann auf  portb.1 output . so muss ich jetzt den 
taster noch den toggle befehl geben??????

von Sascha M. (sascha32)


Lesenswert?

$regfile = "m8def.dat"
$crystal = 16000000

Dim A As Word
Dim B As Word
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm 
= Clear Down , Prescale = 1
Config Portc.1 = Input
Config Portb.1 = Output

Do
Toggle Portb.1

For A = 255 To 10 Step -10
Pwm1a = A
Waitms 50
Next

For A = 10 To 255 Step 10
Pwm1a = A
Waitms 50
Next

Loop
End


so das programm läuft schon mal ich bin zufrieden.

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Sascha Möwert schrieb:
> so dann kann ich ja mein programm in die tonne hauen weil ich ja die
> ausgänge genommen habe. ich muss den taster auf portc.1 = input setzen
> und den pwm ausgang dann auf  portb.1 output . so muss ich jetzt den
> taster noch den toggle befehl geben??????

Vorsicht, Du verwechselst da einiges. Mach doch mal das AVR-Tutorial 
durch und lies doch mal das Datenblatt deines Controllers. Toggle heißt, 
dass Du ein Bit umkehrst, also aus 1 wird 0 und aus 0 wird 1. Toggle ist 
also für Ausgänge (und Bits). Nimm PORTC für die Taster. Und vergiss 
nicht, den AVCC-Pin mit VCC zu verbinden.

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Sascha Möwert schrieb:
> o das programm läuft schon mal ich bin zufrieden.

Das reagiert aber nicht auf deinen Taster.

von Sascha M. (sascha32)


Lesenswert?

ja das werde ich nicht vergessen. so werde jetzt mal ein wenig lesen und 
schlafen gehen. so werde mich morgen melden. gute nacht. und danke schon 
mal für die hilfe

von Sascha M. (sascha32)


Lesenswert?

guten morgen

so habe mich ein wenig am code versucht. so da ist mein neuer versuch..


code:

$regfile "m8def.dat"
$crystal = 16000000

Dim Led1 As Word
Dim Led2 As Word

Config Timer1 = Pwm , Pwm = 10 , Prescale = 1 , Compare A Pwm = Clear 
Down , Compare B Pwm = Clear Down

Config Adc = Free , Prescaler = Auto , Reference = Avcc
Start Adc

Enable Interrupts

Config Portb.1 = Output
Config Portb.2 = Output




Do

Pwm1a = 0
Pwm1b = 0



For Led1 = 0 To 512
Pwm1a = Pwm1a + 1
Pwm1b = Pwm1b + 1

Waitms 1

Next Led1


For Led2 = 0 To 512

Pwm1a = Pwm1a - 1
Pwm1b = Pwm1b - 1

Waitms 1

Next Led2


Loop


End



über einwendung von euch,oder verbesserungen, nehme ich gern an.

mfg

von Jens B. (nixiefreak)


Lesenswert?

Naja, ein Flackern ist das ja nicht, sondern ein Auf- und Abdimmen. Für 
ein echtes Flackern kannst du doch einen Zufallszahlengenerator nehmen 
(den gibt es in BASIC doch bestimmt, oder?) und dann immer in 100ms zum 
nächsten Zufallswert mit Plus/Minus-Eins-Schritten hindimmen.

Gruß
Jens

von Sascha M. (sascha32)


Lesenswert?

ja den gibt es bestimmt. Kann mir einer von euch helfen mit dem 
zufallsgenerator bei pwm.  mfg wo kann man was finden.?????

von Jens B. (nixiefreak)


Lesenswert?

Naja, ein Fragezeichen reicht auch, oder?

Ich habe ca. 20 Sekunden gegoogelt und das hier gefunden:
1
Dim Deine_Zufallsvariable As Word
2
I = Rnd(255)

Gruß
Jens

von Sascha M. (sascha32)


Lesenswert?

so ich habe es es läuft super.

code:

$regfile "m32def.dat"
$crystal = 1100592

Dim R As Word



Dim L As Word


Dim Z As Word





Config Timer1 = Pwm , Pwm = 10 , Prescale = 1 , Compare A Pwm = Clear 
Down , Compare B Pwm = Clear Down

Config Adc = Free , Prescaler = Auto , Reference = Avcc
Start Adc





Enable Interrupts

Config Portd.4 = Output
Config Portd.5 = Output

Z = 1000

Do

R = Rnd(512) + 500
Pwm1a = R
Waitms 700

L = Rnd(512) + 500
Pwm1b = L
Waitms 600


Z = Z - 1


Loop Until Z = 0

Pwm1a = 1023
Pwm1b = 1023




End

von Jens B. (nixiefreak)


Lesenswert?

Hat es einen Grund warum dein Programm nach Z = 0 aufhört?

Gruß
Jens

von Sascha M. (sascha32)


Lesenswert?

ja damit das programm beendet ist. so jetzt bin ich dabei mit einem 
taster es wieder zu starten.

von Jens B. (nixiefreak)


Lesenswert?

Eigentlich laufen Mikrocontroller-Programme in Endlosschleifen (oder 
schlafen), und machen nur etwas, wenn ein Taster gedrückt wird oder ein 
sonstiges externes Event ausgelöst wird.

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.