-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Timer/Counter

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467

    Timer/Counter

    Anzeige

    Hallo,
    wie ich schon im Thread zu IMADEIT geschrieben habe, habe ich mit dem Timer/Counter ein Problem.
    Timer0 geht, aber Timer1 kriege ich einfach nicht hin.
    Mein Code für Timer0:
    Code:
    '##########
    '# by jon #
    '##########
    $regfile = "m32def.dat"
    $crystal = 1000000
    $baud = 2400
    
    Const Ticks = 32
    Dim Count As Byte
    
    Config Timer0 = Counter , Edge = Rising
    Load Timer0 , Ticks
    Set Portb.1
    
    On Timer0 Timer0_isr
    Config Pinb.0 = Input
    
    Enable Timer0
    Enable Interrupts
    
    
    Config Pind.5 = Output                                      'Links
    Config Pind.4 = Output                                      'Rechts
    
    Config Pinc.5 = Output
    R_1 Alias Portc.5
    Config Pinc.4 = Output
    R_2 Alias Portc.4
    
    Config Pinc.3 = Output
    L_1 Alias Portc.3
    Config Pinc.2 = Output
    L_2 Alias Portc.2
    
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
    
       R_1 = 0
       R_2 = 1
       Pwm1b = 50
    
       L_1 = 0
       L_2 = 1
       Pwm1a = 50
    
    Do
       Print "TCNT0 = " ; Tcnt0 ; Spc(3) ; "Count = " ; Count
       Waitms 200
    Loop
    
    End
    
    Timer0_isr:
       Load Timer0 , Ticks
       Incr Count
    Return
    Wie sähe das jetzt mit Timr1 und Timer0 in einem aus??

    Würde mich freuen, wenn sich jemand die Mühe macht und mir hilft!

    jon
    Nice to be back after two years
    www.roboterfreak.de

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2006
    Ort
    Biberach
    Alter
    27
    Beiträge
    485
    Hi,
    ich glaube dir fehlt ein "Enable Timer1". Oder hab ich jetzt deine Frage falsch verstanden? Dein Timer1 geht net oder?

    MfG

    edit: ok ich seh grad, das is bei PWM gar net nötig

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,

    Enable ist nur da um eine Interrupt zu aktivieren.
    Es gibt für Timer1 aber keine ISR, also braucht (jetzt) nix aktiviert zu werden.

    @Jon,
    was soll mit dem Timer0 gemacht werden, der zählt steigende Flanken an PB0, und nach 32 Flanken wird die ISR ausgeführt und eine weitere Variable hochgezählt, und dann, oder wie, was war die Frage ?

    Timer1 soll PWM ausgeben, das wäre dann PD4/5, die Richtung mit PC2-5 ?

    Aja, bei 10Bit PWM ist 50 noch nicht so recht viel !

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    Stimmt. Ich sollte beschreiben, um was es geht *g*. Sorry.

    Also ich habe an Pinb.1 und Pinb.0 jeweils einen Radencoder Marke Eigenbau.
    An Pinb.0 (hab mich im letzten Post verschrieben, werde ich verbessern) habe ich einen Radencoder, der funktioniert auch klasse.
    Den anderen habe ich an Pinb.1. Und da habe ich ein Problem mit.
    Wie "lese" ich den anderen aus?

    Timer1 soll PWM ausgeben, das wäre dann PD4/5, die Richtung mit PC2-5 ?
    Genau.

    Aja, bei 10Bit PWM ist 50 noch nicht so recht viel !
    Soll erstmal nicht so schnell fahren.

    Ich glaube, ich habe mir gerade etwas verstrubbelt (gedanklich).

    jon
    Nice to be back after two years
    www.roboterfreak.de

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    So wie mit Timer0 kannst Du den PB1 Eingang nicht verwenden, da der Timer1 schon mit PWM belegt ist.
    Könntest aber die INT0-2 verwenden und selber zählen, in 'ner ISR.

    Bewegt sich bei 50 überhaupt schon was ?

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    Zitat Zitat von linux_80
    So wie mit Timer0 kannst Du den PB1 Eingang nicht verwenden, da der Timer1 schon mit PWM belegt ist.
    Bullshit.
    Kann ich PWM auch Softwaremäßig machen? Wenn ja, wie?
    Weil dann könnte ich die Motoren über Software-PWM ansteuern und den Timer1 für den Radencoder verwenden.

    Zitat Zitat von linux_80
    Könntest aber die INT0-2 verwenden und selber zählen, in 'ner ISR.
    Schon belegt *g*
    Ich habe gar keinen freien Pin mehr. Kann ich das auch über einen Portexpander machen??

    Zitat Zitat von linux_80
    Bewegt sich bei 50 überhaupt schon was ?
    Ganz langsam schon...

    jon
    Nice to be back after two years
    www.roboterfreak.de

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Also ich würde den schönen 16Bit Timer1 mit PWM nicht für so popeliges zählen verschwenden, vor allem wenn PWM gebraucht wird [-X
    Kannst Du nicht den ein oder andern Draht tauschen, damit Du auf einen INTx-Pin kommst ?

    Ansonsten wäre da noch der Timer2 übrig, kannst du ja mal ausrechnen ob Du mit dessen 8Bit breite eine gescheite PWM Auflösung hinbekommst.
    Geht bestimmt, aber alles per Hand zählen, und das gleich 2mal.
    Schau mal beim Servo-Befehl, so in der Richtung geht das dann hier auch, nur der Servo-Befehl selber geht nicht, weil mit dem keine 100% erreicht werden können. Sondern nur etwa 0-10%.

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    Zitat Zitat von linux_80
    Kannst Du nicht den ein oder andern Draht tauschen, damit Du auf einen INTx-Pin kommst ?
    Kann ich mal nachschauen. Mir fehlt nur für IMADEIT eine ordentliche Doku, in der notiert ist, wohin welcher Pin führt *g*. Sollte ich mal machen

    Den Rest verstehe ich nicht so ganz. Meinst du das in etwas so?:
    Den Timer2 soll ich für die Motoren verwenden? Oder für den Radencoder?
    Geht bestimmt, aber alles per Hand zählen, und das gleich 2mal.
    Was meinst du damit?
    Und was soll mir bei meinem Problem der Servo-Befehl helfen?
    Sorry, aber ich habe heute irgendwie ein paar Probleme beim denken. Das kommt davon, wenn man sich nicht in der Schule warmdenkt.

    jon
    Nice to be back after two years
    www.roboterfreak.de

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Ich meinte mit Timer2, wenn Du den Timer1 für das zählen verwenden willst, bleibt nur der Timer2 übrig um damit ein PWM hinzubekommen.
    Der hat aber nur einen OC-Ausgang, Du verwendest aber scheinbar 2 Motoren, weshalb der Timer2 nicht direkt als PWM-Erzeuger verwendet werden kann.
    Deshalb könnte man den Timer2 so einstellen wie das beim Servo-Befehl auch gemacht wird, ca. alle 10µs das PWM-Signal updaten, dH., der Timer muss alle 10µs einen IRQ auslösen, in dessen ISR dann das PWM-Signal auf einen Ausgang gelegt wird, und entsprechend irgendwelchen Variablen gesetzt oder gelöscht wird. Ob 10µs reichen weiss ich aber auch nicht.

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    Ich werde morgen mal den Bot auseinander nehmen und schauen, ob ich irgendetwas umlegen kann, sodass ich einen INTx frei habe.
    Ich blicke bei den Sachen mit ISR, ISQ usw. irgendwie nie so ganz durch.

    jon
    Nice to be back after two years
    www.roboterfreak.de

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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