Hallo, ich steuere über die beiden PWM Kanäle 1a und 1b eines MEGA32 jeweils eine LED Kette mit 9 LED an. Das mach ich mit jeweils einer For - next Schleife. Wie kann ich es anstellen, dass Timer1a eingeschaltet wird und seine For next Schleife durchläuft und der Timer1b nach X Sekunden ebenfalls startet ? Habe da wohl gerade eine gedankliche Blockade . Danke
Das ist ja das Problem. Er ist auf 0 und fängt durch die Schleife erst dann an, die LED zu dimmen, wenn Timer 1a mit seiner Schleife durch ist.
Ich habe das Listing gerade nícht hier. Aber der Aufbau ist etwa so enable timer1a (alias Led1) enable timer1b (alias Led2) for i = 0 to 254 Led1 = i waitms 10 next for i = 0 to 254 Led2 = i waitms10 next Wobei die beiden Schleifen als Sub-Routine definiert sind und im main loop nacheinander mit call aufgerufen werden
Du solltest über Deinen Programmierstil nachdenken: > nacheinander mit call aufgerufen Sowas verträgt sich nicht mit: > Wie kann ich es anstellen, dass Timer1a eingeschaltet wird und seine For > next Schleife durchläuft und der Timer1b nach X Sekunden EBENFALLS > startet ?
Herzlichen Dank, WEIL es so anscheinend nicht funktioniert, stelle ich ja auch hier meine Frage. Wie muss ich die Sache denn angehen ?
Da muss ich wirklich sagen, erst einmal das Beispiel aus der BASCOM-Hilfe ausprobieren und dann den ganzen Code hier posten. B.
Probiere: 'And the TIMER can be used in PWM mode 'You have the choice between 8,9 or 10 bit PWM mode 'Also you can specify if the counter must count UP or down after a match 'to the compare registers 'Note that there are two compare registers A and B Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 1 'to set the PWM registers, just assign a value to the compare A and B registers Compare1a = 100 Compare1b = 200 'Or for better reading : Pwm1a = 100 Pwm1b = 200 Wenn Pwm1a oder 1b verändert werden, dann ändert sich auch die Helligleit der LED's an den entsprechenden Ausgängen des Mega32. Waitms o.ä ist verboten weil absolut überflüssig. B.
Tom schrieb: > Ich habe das Listing gerade nícht hier. Aber der Aufbau ist etwa so > > enable timer1a (alias Led1) > enable timer1b (alias Led2) > > for i = 0 to 254 > Led1 = i > waitms 10 > next > > for i = 0 to 254 > Led2 = i > waitms10 > next In dem Moment, in dem du Warteschleifen mit waitms realisierst, wirst du immer wieder genau in dieses Problem reinlaufen. Daher ist das offensichtlich der falsche Ansatz. Der richtige Ansatz führt über einen weiteren Timer, der dir alle 10ms (zb. kann auch ein anderer Zahlenwert sein) eine ISR aufruft. Die ist deine Zeitbasis, dort schaltest du Led1 weiter. Und wenn du dann nach dem 100 Aufruf der ISR anfängst, Led2 ebenfalls zu bedienen, dann fängt Led2 zu dimmen an, während Led1 noch immer weiter dimmt.
JAAA :-) Das ist eine Antwort. Vielen Dank dafür. Habe mir schon fast gedacht, dass ich da nicht um einen weitern Timer herum komme. Werde das mal versuchen.
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.