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
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
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
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
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
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
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