- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 9 von 9

Thema: Timer1 bei ATTiny45 Probleme

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.09.2007
    Beiträge
    5

    Timer1 bei ATTiny45 Probleme

    Anzeige

    Powerstation Test
    Hallo,

    ich programmiere in Bascom ein Projekt, dass nach einer definierten Zeit 2 Servos ansteuern soll.
    Die Zeitspanne sollte recht genau sein, deshalb ist der waitbefehl eher ungünstig.
    Da das System klein sein soll, kommt der ATTiny45 in Frage mit 2*PWM und 2* 8bit Timern.

    Leider funtioniert der Timer1 nicht!

    Benutzt man nur eines der beiden (also entweder Zeitmessung oder Servo) mit Timer0 geht es ohne Probleme

    Bei Zeitmessung und Timer1 springt er nicht in die ISR.
    Bei Servo und Timer1 kommt ein Compilerfehler .EQU nicht gefunden...

    Wass soll ich machen?



    Code:
    '--Einstellungen für den uC--
    $regfile = "ATTiny45.dat"                                   
    $crystal = 1000000                                          
    $hwstack = 32                                               
    $swstack = 10                                             
    $framesize = 40                                           
    
    
    '--Einstellungen für die angeschlossenen Dinge--
    Config Portb.0 = Output                                    
    Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 5 , Timer = Timer1
    Enable Timer1
    
    
    
    Config Timer0 = Timer , Prescale = 1024
    On Timer0 Readrctime:
    Enable Timer0
    
    
    Enable Interrupts
    
    
    Config Portb.3 = Output                                     'LED
    Led1 Alias Portb.3
    
    
    Dim I As Byte                                               
    Dim Zeit As Byte                                                                                
    Dim Timercount As Integer
    Dim Zeit5s As Byte
    
    
    Waitms 10
    Timercount = 0
    
    Led1 = 0
    Zeit5s = 0
    Zeit = 1
    
     Led1 = 0
    
    Servo(1) = 13
    Do
    I = 5 
    Loop
    
    
    '==============================================================================
    'Timer
    Readrctime:                                               
       Led1 = 1
    Return
    
    
    
    
    End
    Ich hoffe es findet sich hier jemand der helfen kann, ich bin mit meinem Latein am Ende

    Grüße
    ScorpionXIII

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Ort
    Dortmund
    Alter
    30
    Beiträge
    1.641
    wie genau soll das ganze denn sein? Eigentlich würde ich, wenns keine Uhr werden soll, durchaus waitms benutzen... bei wartezeiten > 1 Sekunde ist allerdings wait besser. ich habe Timer noch nie gebraucht, aber die Zeile

    Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 5 , Timer = Timer1

    kommt mir komisch vor... geht dass das du den Timer in der gleichen Zeile definierst wie die Servos? Selbst wenn es geht, würde ich das vielleicht in ne andere Zeile schreiben. hab allerdings grad ne Denksperre und konnte sonst keinen Fehler entdecken...

    EDIT: laut Wiki gehört das timer1 = timer und nicht andersrum... keine Ahnung ob das was ausmacht, versuchs mal.
    o
    L_
    OL
    This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat!

    http://de.youtube.com/watch?v=qV1cZ6jUeGE

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    08.09.2007
    Beiträge
    5
    Hi,

    in der Hilfe steht, dass man mit dem Zusatz ", Timer=Timer1" der Servoansteuerungsroutine sagt, dass sie den Timer1 für das PWM benutzen soll. Ohne das arbeitet sie mit Timer0

    Wait hat den Nachteil, dass es nicht immer gleich ist. Also meines Wissens hängt es primär von der benutzten Speichergröße ab wie lange z.B. wait 1 ist. Ob es Temperatur stabil ist kA?
    Außerdem möchte ich die Zeit einstellen können. Also mal 1s warten, dann einstellen auf 3s warten...
    Eine Funktion, die mir x-Mal wait ausführt, geht nicht, da mehrer wait nicht gleich bleiben.
    wait 1 ist ca. 1s

    wait 1
    wait 1
    sind nicht zwangsläufig 2s

    und eine Case-Kaskade mit ausprobierten Zeiten ist etwas unschön

    Edit:
    Scheint nicht so zu gehen, da er jetzt wol doch den timer0 nimmt.
    Compilerproblem: ISR already defined
    In der Zeile ON Timer1 Readrctime:

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Ort
    Dortmund
    Alter
    30
    Beiträge
    1.641
    Eh... mit welchem Timer willst du denn jetzt die Zeit messen? Wenn du mit Timer1 Pwm machst... oder versteh ich grad was falsch?
    Wie gesagt, ich kenn mich mit Timern nicht so aus, da ich noch nie etwas derart genaues gebraucht habe, aber... sollte nicht irgendwo
    on timer1 isrtimer1 stehen? Kann ich bei dir grad nicht finden! ich sehe nur ne ISR für Timer0, der ist meines Wissens aber der, der bei dir benutzt wird um die Servos anzusteuern...? So ganz werd ich aus deinem problem nicht schlau. Jedenfalls sehe ich keine ISR für Timer1 in die er springen könnte.
    o
    L_
    OL
    This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat!

    http://de.youtube.com/watch?v=qV1cZ6jUeGE

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    08.09.2007
    Beiträge
    5
    Servo: Timer1
    Die ISR und so weiter macht alles die Routine Servo alleine, da muss man eigentlich nix definieren.

    Zeitmessung: Timer0
    ISR ist definiert.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    08.09.2007
    Beiträge
    5
    Ist das ein Bug, dass man den Timer1 mit dem ATTiny45 nicht benutzen kann, oder hat das jemand geschafft mit der Bascom Routine Timer1=Timer...?

    Gruß
    ScorpionXIII

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    17.09.2006
    Beiträge
    5
    Hallo, hat es inzwischen vielleicht jemand hinbekommen den Timer1 des ATTiny45 unter Bascom zum laufen zu bekommen? Könnte man nicht direkt aufs Timer1-Register zugreifen um die Bascom-Routine zu umgehen? Oder kann man bei Bascom vielleicht sogar irgendwo einstellen das der Timer1 ein 8bit Timer und kein 16bit Timer ist?

    thx
    Lt. Tuvok

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    08.09.2007
    Beiträge
    5
    Auf www.mikrocontroller.net wusste jemand eine Antwort auf das Problem

    Code:
    $regfile = "ATTiny45.dat"
    $crystal = 1000000 '1MHz
    
    $hwstack = 32
    $swstack = 16
    $framesize = 40
    
    '''TCCR1=&H07 'This will replace Config Timer1 = Timer , Prescale = 64
    TCCR1=&H0D 'This will replace Config Timer1 = Timer , Prescale = 4096
    '''TCCR1=&H0F 'This will replace Config Timer1 = Timer , Prescale = 16384
    ''' See datasheet for more prescaler values
    
    On Timer1 Readrctime
    Enable Timer1
    
    Config PINb.3 = Output  'LED
    Led1 Alias Portb.3
    
    Enable Interrupts
    
    Do
       !NOP
    Loop
    
    End
    
    'ISR
    Readrctime:
       Toggle Led1
    Return
    Funktioniert!!! endlich eine Lösung.
    Manchmal ist es ganz einfach und nur ein paar Zeilen

    Grüße
    ScorpionXIII

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    17.09.2006
    Beiträge
    5
    Also das mit dem Code klappt 1A. Vielen Dank für die Info. Und man hat sogar viel mehr Prescaler zur Auswahl als wenn man über Bascom arbeitet . \/ Dadurch lässt sich auch mit dem 8bit Timer relativ Problemlos ein Sekundentakt generieren.

    Achso die Timerwertvorgabe kann man mit der Variable Tcnt1 verändern(ein Beispiel für 1Hz Ausgangsfrequenz dazu im Codeanhang)

    Code:
    $regfile = "attiny45.dat"
    $crystal = 8000000
    
    Config Pinb.0 = Output
    
    Tccr1 = &H0F                                                  'This will replace Config Timer1 = Timer , Prescale = 16384
    
    Tcnt1 = 11                                                    'This will replace  Timer1 = 11                                    
    
    On Timer1 Generator
    Enable Timer1
    Enable Interrupts
    
    
    Do
    
    nop
    
    Loop
    End
    
    
    Generator:
    
    Toggle Portb.0
    
    Tcnt1 = 11                                                    'This will replace  Timer1 = 11
    
    Return
    Vielen Dank nochmal
    Lt. Tuvok

Berechtigungen

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

12V Akku bauen