mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik BASCOM PWM mit Timer1a und 1b


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Bernadette (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
timerwert 1b so lange auf 0 lassen.

B.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Route_66 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Der Fehler steckt in Zeile 42!

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Route_66 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ?

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Herzlichen Dank,

WEIL es so anscheinend nicht funktioniert, stelle ich ja auch hier meine 
Frage. Wie muss ich die Sache denn angehen ?

Autor: Bernadette (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da muss ich wirklich sagen, erst einmal das Beispiel aus der 
BASCOM-Hilfe ausprobieren und dann den ganzen Code hier posten.

B.

Autor: Bernadette (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.