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
Dann beschwere dich bei Atmel weil die in den Tiny13 nur einen Timer einbauen. avr
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
>Danach würde ich die Config Anweisung für den Timer1 anders machen.
ATTiny13 hat keinen Timer1.
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
noch ein Fehlerteufel: muss so heissen Enable Timer0 'Timer0 Interrupt zulassen 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, ich habe hänge mal die Fehlermeldugen nach dem Compilieren mit an.Vielleicht hilft es zur Klärung. Vl. Grüße und Danke Maxx.
Hallo, melde mich nochmal da ich noch keine Lösung weiß. Vielleicht schaut Ihr es Euch nochmal an. Schönes WE(Wochenende) Maxx.
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
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.