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
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
Meine Glaskugel sagt: Du hast die Pulldowns vergessen. Das sind Widerstände mit vllt. 10kOhm vom µC-Pin nach GND.
ne die habe ich nicht die 10 kohm, sondern 1 kohm habe ich drin. wie so muss es ein 10 kohm sein ?????
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
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?????
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
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?????
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
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.
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
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??????
$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.
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.
Sascha Möwert schrieb: > o das programm läuft schon mal ich bin zufrieden. Das reagiert aber nicht auf deinen Taster.
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
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
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
ja den gibt es bestimmt. Kann mir einer von euch helfen mit dem zufallsgenerator bei pwm. mfg wo kann man was finden.?????
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
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
Hat es einen Grund warum dein Programm nach Z = 0 aufhört? Gruß Jens
ja damit das programm beendet ist. so jetzt bin ich dabei mit einem taster es wieder zu starten.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.