Forum: Mikrocontroller und Digitale Elektronik ATTiny13 / Timer1 + Bascom =PWM


von Maxx (Gast)


Lesenswert?

Hallo,

ich habe folgendes Programm, welches die LED an Portb1 langsam dimmen 
sollte.
Aber es kommt beim Compilieren schon eine Fehlermeldung. Benutze ich 
Timer0 funktioniert es so. Ziel ist es beide Timer unabhängig 
voneinander " laufen" zu lassen.


$regfile = "attiny13.dat"
$crystal = 1000000
Config Portb.1 = Output
Config Timer1 = Pwm , Pwm = 8 , Compare B Pwm = Clear Down , Prescale = 
1

Do
  Pwm = Pwm - 1

  Wait 1

Loop

End

Wer weiß Rat? Danke Maxx

von avr (Gast)


Lesenswert?

Dann beschwere dich bei Atmel weil die in den Tiny13 nur
einen Timer einbauen.

avr

von Rene (Gast)


Lesenswert?

Hoi Maxx

als erstes musst du erstmal deine Variable deklarieren (hier PWM)

Da du dich für eine 8-Bit Pwm entschieden hast reicht eine Byte Variable

Also:

Dim Pwm as Byte

pwm = 255    'damit deine Led am anfang auch hell ist und nicht erst 
eine sekunde lang dunkel ?????!!!!! :-))

Danach würde ich die Config Anweisung für den Timer1 anders machen. 
Obwohl du Compare1A nicht brauchst soltest du ihn schreiben. nur als 
disconnect.

Also:

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

Nun musst du die Interuppts freigeben. entweder auf registerebene (sehr 
schwer führ dich, mehr Erfahrung notwendig) oder ganz einfach damit:

Enable Timer1              'Timer1 Interrupt zulassen
Enable Interrupt           'Interrupts Global freigeben


Als nächstes musst du nur noch deine Pwm Variable in das Compare1B 
register schreiben:


Do

Pwm = pwm - 1

wait 1

Compare1B = pwm

Loop


Im übrigen steht im Bascom Help alles drin was du "normalerweise" 
brauchst

Wenn du dich mehr damit beschäftigen willst und die dinger auch mal auf 
Registerebene und damit schon sehr Hartwarenah (Ja das geht trotz 
anderer Meinungen auch mit Bascom) programmieren willst hilft nur das 
Atmel Datenblatt.

Ciao, Rene

von holger (Gast)


Lesenswert?

>Danach würde ich die Config Anweisung für den Timer1 anders machen.

ATTiny13 hat keinen Timer1.

von Rene (Gast)


Lesenswert?

Hoi,

hast recht....

der hat nur nen 8-Bit Timer (timer0) .... hab grad das datenblatt 
gesehen :-)

Dann eben so Configurieren:

'####################################################################### 
##

$regfile = "attiny13.dat"
$crystal = 1000000

Dim Pwm as Byte
Pwm = 255

Config Timer0 = Pwm , Pwm = 8 , Compare A Pwm = Disconnect, Compare B
Pwm = Clear Down , Prescale = 1

Enable Timer1              'Timer1 Interrupt zulassen
Enable Interrupt           'Interrupts Global freigeben


Do

Pwm = pwm - 1

wait 1

Compare0B = pwm

Loop

End

'####################################################################### 
###

So nun hab ich auch gleich ungewollt den ganzen Code geschrieben, den 
rest machst du aber selber.


Ciao , Rene

von Rene (Gast)


Lesenswert?

noch ein Fehlerteufel:

muss so heissen

Enable Timer0              'Timer0 Interrupt zulassen


Ciao, Rene

von Maxx (Gast)


Lesenswert?

Hallo,
ich danke allen, die sich um mein Problem bemüht haben, besonders Rene. 
Leider komme ich nicht richtig weiter.
Sorry,aber das Datenblatt hätte ich auch selbst bemühen können....
Also es gibt nur einen 8-Bit-Timer, der hat zwei Kanäle. Einmal PB0 = 
OC0A und zum zweiten PB1 = OC0B.

Ich wollte es so programmieren, daß beide Kanäle unabhängig  laufen, 
d.h. beide Kanäle von 0 bis 255.

Mein "Programm" mit Ausgabe an PB0 steht hier. Es klappt!

$regfile = "attiny13.dat"
$crystal = 100000
Config Pinb.0 = Output
Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Up

Do
  Pwm = Pwm - 1

  Waitms 100
Loop

End

Was kann man nun tun damit es eine Ausgabe auch an PB1 = OC0B (aber 
unabhängig hiervon) gibt.
Die Sache mit dem Interrupt habe ich schon verstanden. Ich nahm bisher 
an, daß ein äußeres Ereignis (Taster) oder internes (Zählerüberlauf)
sowas bewirkt.Hier ist aber beides nicht der Fall.
Ich habe Dein Programm compilieren wollen, es kopmmen Fehlermeldungen. 
Woran könnte es liegen?
Vielleicht sollte ich einen anderen Chip nutzen ?
Gruß Maxx

von 123 (Gast)


Lesenswert?

?????????????????????????

von Peter D. (peda)


Lesenswert?

Maxx schrieb:
> Ich habe Dein Programm compilieren wollen, es kopmmen Fehlermeldungen.

Psst, ich verrate Dir mal ein ganz großes Geheimnis:

Es gibt den Dateianhang, um genau den Quelltext zu posten, den Du 
compilierst.
Und es gibt copy&paste, um den exakten Wortlaut der Fehlermeldung zu 
posten.

Und Du wirst staunen, dann könnte sogar jemand antworten, der nicht 
Hellseher ist.


Peter

von Maxx (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe hänge mal die Fehlermeldugen nach dem Compilieren mit 
an.Vielleicht hilft es zur Klärung.
Vl. Grüße und Danke Maxx.

von Maxx (Gast)


Lesenswert?

Hallo,
melde mich nochmal da ich noch keine Lösung weiß.
Vielleicht schaut Ihr es Euch nochmal an.
Schönes WE(Wochenende)
Maxx.

von Klaus E (Gast)


Lesenswert?

Hallo Maxx,

hier eine Version für den anderen Ausgang.
Wenn Du statt der ersten For/Next Schleife Pwm0a = 255 setzt, wird deine
LED gedimmt

Achte auf crystall = 1200000  (Auslieferungszustand)

' Anschluss an Pin 5 (PB0) und Masse (GND)

$regfile = "attiny13.dat"
$crystal = 1200000
Config Portb = Output

Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Down

Dim I As byte

Do
  For I = 0 To 255
       Incr Pwm0a         ' = Pwm0a + 1
       Waitms 10
  Next I

  For I = 255 To 0 Step - 1
       Decr Pwm0a         ' = Pwm0a - 1
       Waitms 10
  Next I

Loop
End

von Jens S. (jens_s56)


Lesenswert?

Es fehlt aber was:

$regfile = "attiny13.dat"
' $regfile = "attiny13a.dat"  ' oder neuerer Tiny13A
$crystal = 1200000

$swstack = 10    ' ohne geht es nicht
$hwstack = 10    ' muss rein

Config Portb.0 = Output  ' Anschluss an Pin 5 (PB0) und Masse (GND)

Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Down

Dim I As byte

Do
  For I = 0 To 255
       Incr Pwm0a         ' = Pwm0a + 1
       Waitms 10
  Next I

  For I = 255 To 0 Step - 1
       Decr Pwm0a         ' = Pwm0a - 1
       Waitms 10
  Next I

Loop
End

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Jens S. schrieb:
> Es fehlt aber was:

 Wie stehst du mit Kalender und Datum ?

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.