-         

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

Thema: Timer0 und Timingprobleme

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    15.12.2005
    Ort
    Bayern
    Alter
    34
    Beiträge
    86

    Timer0 und Timingprobleme

    Anzeige

    Ich wollte mir mit hilfe des timers eine waitus funktion basteln(die im basic vorhanden befehle stimmen ja leider gar nicht(mehr als über 100% abweichung)

    aber leider funktioniert der simulator nicht oder ich mach was falsch. kann das sein?

    auch fertige sampels von Bascom gehen im simulator nicht(zb die timer0.bas)

    kann mir einer einen tipp geben

    gruss
    markus

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.05.2005
    Ort
    Rott am Inn
    Alter
    29
    Beiträge
    373
    hallo
    dass liegt warscheinlich daran, dass beim Bascom Simulator
    keine Taktquelle (Quarz) vorhanden ist. Bei Timern ist es desshalb
    immer sinnvoll sie direkt mit einen µC auszuprobieren.

    mfg franzl

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.09.2004
    Beiträge
    124

    Re: Timer0 und Simulator

    Hallo Markus,

    > aber leider funktioniert der simulator nicht oder ich mach was falsch. [...]
    > auch fertige sampels von Bascom gehen im simulator nicht

    "Sim Timers" eingeschaltet?

    Ciao,
    Werner

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    15.12.2005
    Ort
    Bayern
    Alter
    34
    Beiträge
    86
    hatte gestern abend dann auch noch gefunden den hacken. aber jetzt auch gleich das nächste problem bzw frage:

    ich hab einen 20 mhz quart und will mit einer sub genau eine 1us pause machen.
    ich dachte mir, nehm ich dazu den timer 0 und lass ihn einfach 20 tackte zählen(bei einen teiler von 1)

    wenn ich dann mit set einen pin auf high mach dann die sub laufen lasse und das wieder mit reset auf low mache zeigt mir aber mein impulse von ~3,5 usec an. kann das dein das der set und reset befehl so lange dauert? gibs da eine schneller möglichkeit? ich wollte eigendlich zum programmieren schon baisc verwenden, da ich kein c profi bin und asembler kann ich garnicht :/

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    29
    Beiträge
    470
    machs mit einem ASM-Code:

    !Rcall wait 'Damit rufst du die Sub auf


    Die Sub selber:

    wait:

    !ldi R17, $03
    !WGLOOP0: dec R17
    !brne WGLOOP0
    !nop

    !ret

    Das ist ganz genau 1µS bei 20Mhz, genauer bekommst dus nicht ( erst recht nicht mit dem Timer, da du ja für den Timer Start / stop / int schon mehr als 20 MIs benötigst.

    Und die Schnelste möglichkleit einen Pin zu setzen ist auc wieder ein ASM befehl:

    !SBI PortX, PINNummer

    Und das Resetzen:

    !CBI PortX, PINNummer

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    15.12.2005
    Ort
    Bayern
    Alter
    34
    Beiträge
    86
    ich kan einfach mit ! asm code in avrbascom einfügen? das ist ja super, danke für euere hilfe. bin mal gespannt wie das alles klappen wird.

    gruss
    markus

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    Zitat Zitat von teslanikola
    machs mit einem ASM-Code:

    !Rcall wait 'Damit rufst du die Sub auf


    Die Sub selber:

    wait:

    !ldi R17, $03
    !WGLOOP0: dec R17
    !brne WGLOOP0
    !nop

    !ret

    Das ist ganz genau 1µS bei 20Mhz, genauer bekommst dus nicht ( erst recht nicht mit dem Timer, da du ja für den Timer Start / stop / int schon mehr als 20 MIs benötigst.

    Und die Schnelste möglichkleit einen Pin zu setzen ist auc wieder ein ASM befehl:

    !SBI PortX, PINNummer

    Und das Resetzen:

    !CBI PortX, PINNummer
    Mal so nebenbei:

    das wird dennoch nicht zwangsläufig 1 µs ....
    Der Grund:

    Interupts.
    Denn ein Interupt kann diese Warteschleife durchaus unterbrechen ....


    Grüße,

    da Hanni.

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    29
    Beiträge
    470
    @Hanni: Da haste auch wieder recht aber ich denke das das CLI und SEI lösen das problem

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    15.12.2005
    Ort
    Bayern
    Alter
    34
    Beiträge
    86
    obs jetzt stadt 1usec 2 usec ist , ist mir relativ egal aber es sollten nicht auch 1 usec 6 usec oder mehr werden wie es mit den waitus 1 befehl ist :/

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    Zitat Zitat von rathma
    aber es sollten nicht auch 1 usec 6 usec oder mehr werden
    Ein kleines Rechenbeispiel:

    20 MHz = 50 ns / Takt
    => 20 Takte = 1µs

    Bei einem ATmega 32 benötige ich um in die ISR zu springen, 6 Takte.
    Der Rücksprung nimmt mal eben 4 Takte ein.

    Damit sind schon alleine dadurch, das ein Interupt aufgetreten ist, mal eben 10 Takte weg.

    Bedenkt man noch, das in ISR zumindest das Statusregister SREG gesichert und wiederhergestellt werden sollte, sind im einfachsten Fall weitere 2 Takte verbraten (bei Basecom typischerweise 6, da dieses danach noch aufn Stack gepusht wird).

    Damit sind wir nun schonmal bei 12 - 16 Takten ... nur, weil mal eben nen Interupt auftrat.

    In einer ISR wird ja nun noch das eine oder andere gemacht ...
    z.B. weitere Register auf den Stack geschoben und wieder runtergeholt, irgendwelche Rechenoperationen etc.

    Fakt ist daher, so wie der Code dort steht ist er (leider) nicht wirklich genauer wie waitms von Basecom.



    Zitat Zitat von teslanikola
    aber ich denke das das CLI und SEI lösen das problem
    jo, sicher tut es das, allerdings sollte man dann auch die 2 Takte von der Schleife abziehen.

    Im übrigen, sollte man vor allem längere Wartezeiten nicht mit Schleifen sondern mit einem Timer realisieren.

    So, ich hoffe nun einmal ein paar Denkansätze gegeben zu haben.

    Grüße,

    da Hanni.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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