- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 23

Thema: Attiny861A - Timer1 läuft viel zu schnell

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.675
    Hi Mario,

    gern geschehen. Leider kann ich Dir mit Bascom nicht (weiter) helfen, ich schreibe meine Programme in C und Spuren von Assembler. Aber es wird sich schon jemand finden. Ich würde halt (in Bascom) versuchen, die Befehle von C nach B zu "übersetzten" - das MUSS gehen.

    ... muß ich den Timer0 vom 8Bit-Mode auf 16Bit-Mode umschalten ...
    Ich will jetzt nicht für Dich die beiden Timerabschnitte durcharbeiten, aber es gibt sicher einen Timer der "per default" läuft. Und den könntest Du ja dann nehmen . . . . OHNE Verrenkungen.

    Übrigens: hast Du die CKDIV8-Fuse ausgeschaltet? ABER - bitte unbedingt davor den Abschnitt 6.2.7 Default Clock Source lesen - denn der tiny861A hat da ein paar Unartigkeiten eingebaut (wozu MUSST Du denn unbedingt diesen nehmen??)
    Ciao sagt der JoeamBerg

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.07.2012
    Beiträge
    201
    Nein, brauchst nicht durcharbeiten hast mir schon sehr geholfen.
    Ich werde jetzt wohl den 8Bit Timer nehmen, mal sehen ob er zu schnell für meinen Schrittmotor ist.

    Bisher hatte ich nur MC's bei denen der Timer0 = 8Bit und der Timer1 = 16Bit waren, deswegen hatte ich mir darüber gar keine Gedanken gemacht.

    Den Teiler hatte ich schon rausgenommen, das overclocking spielt denke ich nur bei niedriger Betriebsspannung eine Rolle. (<2,7V).

    Da ich nicht im Besitz eines Oszilloskop bin, stelle ich gern zum Test den Timer auf 1Hz, um zusehen ob der grundsetzlich erstmal richtig arbeitet.

    Danke nochmal

    mfG
    Mario

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    39
    Beiträge
    647
    Im Datenblatt (S.76) stehen ja die Modes von Timer0. Der ist schonmal der richtige der kann auch 16-bit. Du musst das Register TCW0 auf 1 setzen. Wie man das in Bascom macht? Ehrlich gesagt gaaanz sicher bin ich mir nicht aber versuchs mal so:

    Code:
    $regfile = "attiny861.dat"
     $crystal = 8000000
     $hwstack = 32 
    $swstack = 32 
    $framesize = 32  
    
    Config Timer0 = Timer , Prescale = 256 
    ' Timer0 konfigurieren 
    Tccr0a = &B1000_0000 
    Tccr0b = &B0000_0101  
    
    Config Pinb.4 = Output 
    Led3 Alias Portb.4 
    Led3 = 0 
    Enable Timer0 
    On Timer0 Timer_irq  
    Const Timervorgabe = 34286  
    Enable Interrupts  
    
    Do  
    
    Loop  
    
    Timer_irq:   
    Timer0 = Timervorgabe     
    Toggle Led3    
    'Wait 1 
    Return
    Das rote hab ich hinzugefügt. Damit setzt du die Register manuell. Bascom kennt egtl nur Timer0 = 8bit, Timer1 = 16bit und Timer2 = 8bit.

    Ich übernehme aber keine Verantwortung falls was schief geht!

    Gruß Daniel
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.07.2012
    Beiträge
    201
    Tausend Dank Daniel,

    Jetzt Blinkt die Led deutlich langsamer .

    Nur leider zu langsam die Led toggelt etwa im 5sekunden Takt

    mfG

    Mario

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    39
    Beiträge
    647
    Wenn du sie bei genau 1 sec blinken lassen willst solltest du die Timervorgabe auf "31250" setzen.

    Im 5sec Takt? Da stimmt doch noch irgendwas nicht.

    Edit: Ich weiss auch was nicht stimmt! XD Im Code wird der Prescaler 2 mal gestetzt. Nimm mal die Zeile "Tccr0b = &B0000_0101" raus oder änder sie in "Tccr0b = &B0000_0100". Dann sollte es passen. Guck dir mal auf Seite 84 das Register an.
    Geändert von DanielSan (29.07.2013 um 13:26 Uhr)
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.07.2012
    Beiträge
    201
    Ich muß mich revidieren... genau 8 Sekunden.

    Ich versteh jetzt gar nichts mehr, ich hab den $crystal = 8000000 auf $crystal = 1000000 geändert.

    Er blinkt mit selben Geschwindigkeit weiter. Sowas...

    Das gleiche wenn ich den Teiler durch 8 wieder einschalte.

    mfG

    Mario

    - - - Aktualisiert - - -

    Vielen Dank für deine Hilfe.

    Es blinkt jetzt etwa im 2 Sekunden Takt.

    mfG

    Mario

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    39
    Beiträge
    647
    Meinst du 1 sec Led = AN und 1 sec Led = AUS? Falls ja, das ist auch genau das was dein Code machen soll. Wenn das insgesamt 1 sec dauern soll musst du die Timervorgabe halbieren.

    Gruß Daniel
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.675
    ... $crystal = 8000000 auf $crystal = 1000000 ... selben Geschwindigkeit ... Teiler durch 8 wieder einschalte ...
    Schön, dass es jetzt klappt. Mario ich hoffe, dass Du die Compileranweisung $crystal und eine gesetzte/gelöschte Fuse - in diesem Fall CKDIV8 - nicht verwechselst. Das wären ZWEI grundverschiedene Aktionen - die übrigens nicht dasselbe bewirken. Aber ich vermute, dass Dir das klar ist.
    Ciao sagt der JoeamBerg

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.07.2012
    Beiträge
    201
    Nein, Leider nicht ganz, 2 Sek LED an und 2 Sek LED aus.

    Mit den Einstellungen:
    -$crystal = 8000000
    -8Mhz gefused
    -Teiler aus

    @oberallgeier
    wenn ich 8Mhz und den Teiler 8 reinnehme muß ich ja auch $crystal = 1000000 schreiben und den Timer am neuen Systemtakt anpassen. Ist doch Richtig oder?

    Ich muss leider erstmal bissl Arbeiten gehen.

    Ich melde mich Morgen dann nochmal.

    Tausend Dank euch Beiden.

    mfG

    Mario

Ähnliche Themen

  1. Atmega 32 Uhr läuft zu schnell
    Von Natureengeneer im Forum C - Programmierung (GCC u.a.)
    Antworten: 9
    Letzter Beitrag: 24.10.2012, 16:24
  2. Wie schnell läuft ein Schrittmotor
    Von Hellmut im Forum Motoren
    Antworten: 1
    Letzter Beitrag: 20.03.2008, 19:29
  3. Hilfe! Uhr läuft zu schnell?
    Von HPM im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 28.02.2007, 22:13
  4. PCF 8583 läuft zu schnell
    Von Zeroeightfifteen im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 5
    Letzter Beitrag: 02.04.2006, 17:54
  5. Timer1 Läuft nicht richtig
    Von DeltaEx im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 23.01.2006, 17:19

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen