Hi Leute, habe jetzt mit Prorgammieren in BASCOM angefangen und ist auch total easy und macht Spass. Aber ich habe eine Frgane: Wie kann ich z.B. Timer1 rückwärsts zählen lassen, sobald es 256 erreicht hat? Also er soll nicht 0,1,2,3,4,5,6,....256,0,1,2,3 machen, sondern 0,1,2,3,4,5,6,.....256,254,253,252,251,250,..... Kann mir jemand helfen?
Hallo, der Timer zählt nur in eine Richtung, das hat nix mit Bascom zu tun. Eine Alternative wäre, das Du das irgendwie per Software löst. Hängt davon ab was Du zählen willst. mfG
Naja. Das wollte ich ja auch immer machen. Den Timer rückwärtszählen lassen. Softwaremäßig. Der soll bis 256 und wieder zurück. Also der soll nix Zählen in dem Sinne. Der soll als timer nicht als counter fungieren.
Robin Tönniges wrote: > > Also er soll nicht 0,1,2,3,4,5,6,....256,0,1,2,3 machen, > sondern 0,1,2,3,4,5,6,.....256,254,253,252,251,250,..... Es gibt PWM Modi, in denen der Timer genau so zählt. Einfach mal das Datenblatt deines Prozessors downloaden und im Abschnitt Timer nachlesen. Nachtrag: Auch wenn dir BASCOM vieles abnimmt und eine Menge fertiger Komponenten bereitstellt, ist das Studium des Daten- blatts immer noch notwendig um rauszufinden was denn die Hardware alles kann.
Robin Tönniges wrote: > Also der soll nix Zählen in dem Sinne. Der soll als timer nicht als > counter fungieren. Für einen Timer (*) ist es aber völlig nebensächlich wie der Timer konkret zählt. Für einen Timer ist die wesentliche Eigenschaft, dass er eine bestimmte Anzahl an Zählvorgängen durchführt und bei einem bestimmten Zählerstand ein Ereignis auslösen kann. Mehr muss ein Timer nicht tun. Edit: (*) Timer ist hier im Sinne von 'Schaltung die eine bestimmte Zeit abzählt' gemeint und nicht als Oberbegriff für die Hardware- einheit im AVR gemeint. Dieser Timer kann ja als Timer, Counter oder PWM-Einheit konfiguriert werden.
Ich habe das Datenblatt ständig im Auge. Sonst wüsste ich nichtmal wo z.B PWM rauskommt. Aber das steht (wenn es da steht) nur in assembler
Außerdem habe ich das Problem wenn ich sage: "Enable Timer1" Sagt er: "Error 85 Unknow Interrupt Source (Timer1)
Aja, 'Phase Correct PWM Mode' schaut nach dem aus was Du suchst.
Robin Tönniges wrote: > Ich habe das Datenblatt ständig im Auge. Sonst wüsste ich nichtmal wo > z.B PWM rauskommt. Aber das steht (wenn es da steht) nur in assembler Das steht da mehr oder weniger gross drinnen. Sieh dir mal die PWM Modi an. Da sind auch ein paar Grafiken im Datenblatt aus denen hervorgeht wie der Timer zählt. Wenn du die Nicht-Fast-Modi mal genauer studierst, kommst du drauf, dass die den Timer genau nach diesem Muster benutzen.
Da muss ich mich erstmal durchfressen. Hat jemand inzwischen eine Antwort auf die Frage vorhin? >Außerdem habe ich das Problem wenn ich sage: "Enable Timer1" >Sagt er: "Error 85 Unknow Interrupt Source (Timer1) Habe in VIELEN Codebeispielen diesen Befehl gesehen. Aber er funktioniert überhaupt nicht :(
Welchen AVR verwendest Du ? Dann findet sich evtl. heraus, was sich mit dem Bascom-Fehler usw. auf sich hat !
Hmm, Welche Bascom-Version, und um sicher zu gehen, hast du den Tiny2313 im Programm angegeben. Wird gerne mit dem 90S2313 verwechselt (dieser kann aber auch den Timer1 IRQ).
1. Ich habe Version 1.11.8.7 2. Nein habe ich nicht verwechselt :)
Das Problem hab ich nicht, bei der 1.11.8.8 Zeig mal etwas von Deinem Programm.
$Regfile = "attiny2313.dat" ' $Crystal = 8000000 DDRD.4 = 0 'Pin PD4/T0 auf Eingang setzen PORTD.4 = 1 'PullUp von PD4/T0 aktivieren DDRB.0 = 1 'Pin PB0 auf Ausgang setzen On TIMER0 OnTimer0 'Interrupt-Routine für Timer0-Overflow Config TIMER0 = COUNTER, EDGE = FALLING Enable TIMER0 'Timer0-Overflow-Interrupt einschalten Enable Interrupts 'Interrupts global zulassen '--------------------------------------------------------- TIMER0 = 246 'Counter initial voreinstellen Do 'Hauptschleife Loop '--------------------------------------------------------- OnTimer0: 'Interrupt-Routine TIMER0 = 246 'Counter (wieder) voreinstellen PORTB.0 = Not PORTB.0 'LED ein bzw. aus Return
Hat keiner die Version 1.11.8.7? Ich glaube nämlich dass das ein ziemlich blöder Bug ist.
Der Timer 0 läuft bei Dir so, daß er zunächst mit 246 geladen wird und dann bei jedem Interupt an PD4 um 1 erhöht wird bis 255. Nach 255 wird er dann wieder auf 246 gesetzt und es geht von vorne los. Das habe ich eben mit der Version 1.11.8.7 getestet. MfG Paul
Robin Tönniges wrote: > Also der soll nix Zählen in dem Sinne. Der soll als timer nicht als > counter fungieren. Und warum dann so kompliziert....?!? Wert= 255 - Timer1 und schon haben wir einen Rückwärtszähler....
Oh man...:( Wieso bin ich da nicht drauf gekommen. Die Welt kann so einfach sein. Vielen Dank
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.