- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: 100us an/aus signal?

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Anzeige

    Powerstation Test
    Es geht vor Allem darum eine relativ gerade Zahl zu habe.
    Wenn du halt eine Einheit auf 1 uS genau bestimmen willst, dann muss der Timer nach 256-Quarzfrequen/1Mio überlaufen. Bei einer Quarzfrequenz x,xxx ist das schwer, weil es natürlich keine 0,xxx langen Takte gibt.
    Je nachdem wie genau die Skalierung des cycles sein soll, also 1 uS oder 2 oder 5 bleibt halt mehr oder weniger Zeit für andere und diese Funktion, deshalb ist im Grunde zu einer hohen Qurarfrequenz zu raten. Wenn du Beispielsweise eine Skallierung von 5 nimmst, hast du bei 10 Mhz 50 Takte bis zum nächsten Interrupt, dass ist nicht gerade viel!

    Wie genau darf/muss es sein, reichen auch 10 uS?

    MFG Moritz

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.09.2004
    Beiträge
    124
    Hallo Moritz,

    > hast du bei 10 Mhz 50 Takte bis zum nächsten Interrupt
    der Quarz und der Vorteiler bestimmen die Zeitbasis und damit die Genauigkeit. Warum sollte man dann wieder eine 2. Zeitbasis erzeugen? Das treibt nur unnötig die Genauigkeit in den Keller.

    10 MHz Takt, Prescale = 1 -> Zeitbasis der Timers = 0.1µs
    8MHz, Prescale=8 -> 1µs, usw.

    Ein 8bit Zähler läuft alle 256 Takte über (8Bit Zähler) und jede zu erzeugende Zeit lässt sich als x-mal 256 Takte + y Takte darstellen. Man Zählt einfach die Anzahl der Timerüberläufe und hängt die restlichen Takte dran.

    Egal welche Zeit erzeugt werden soll, die Genauigkeit ist immer gleich.

    Alternativ nimmt man den 16bit Timer. Dann hat man zwischen zwei Überläufen 2^16 Takte Zeit und kann auch das "Anhängen" der restlichen Takte elegant die AVR-Hardware machen lassen.

    Ciao,
    Werner

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    19.02.2005
    Beiträge
    39
    jop reicht vollkommen...
    glaub nicht das der fahrtenregler da so sensibel ist

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    der Quarz und der Vorteiler bestimmen die Zeitbasis und damit die Genauigkeit. Warum sollte man dann wieder eine 2. Zeitbasis erzeugen? Das treibt nur unnötig die Genauigkeit in den Keller.
    Ich glaube, da hast du mich falsch verstanden.
    Ob der Timer jetzt nach einem Count überläuft oder nach 8 oder 10 oder 50 ist doch egal.

    10 MHz Takt, Prescale = 1 -> Zeitbasis der Timers = 0.1µs
    8MHz, Prescale=8 -> 1µs, usw.
    Ja, nur wenn ich das richtig sehe, hat der Prescaler genau 8 Takte Zeit um etwas auszuführen, das ist wenig. Obwohl, vielleicht reicht es.

    Ich würde dass dann schon so machen, dass ich den Timer mit dem entsprechenden Wert vorlade, so dass ich zusammen die 200us voll habe.
    Und nicht wie BloodyNap das gemacht hat erst in der Interruptroutine addieren und auswerten. Gut wäre dann zu wissen, wie lang genau die Berechnung für den nächsten Interrupt dauert.

    Alternativ nimmt man den 16bit Timer. Dann hat man zwischen zwei Überläufen 2^16 Takte Zeit und kann auch das "Anhängen" der restlichen Takte elegant die AVR-Hardware machen lassen.
    Das hab ich nicht verstanden, man hat doch nciht mehr Zeit nur weil man einen 16 Bit Timer nimmt!?

    MFG Moritz

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    19.02.2005
    Beiträge
    39
    so hab nu nen 10Mhz quarz eingebaut...

    hab mein prescale auf 1 gemacht und stelle den timer so vor das er alle 25uS aus gelöst wird...

    überprüft mal bitte ob der gedankengang richtig ist:
    10.000.000 / 1(prescale) / 255(timerüberlauf) = 0.000.025.5 => 25,5uS
    ist ne ungrade zahl deswegen stellt ich den timer auf 5 vor:
    10.000.000 / 1(prescale) / 250(timerüberlauf) = 0.000.025.0 => 25uS
    da ich keine höhere genauigkeit brauche müsste das doch klappen oder?

  6. #16
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Sieht gut aus, ich galube allerdings, dass der Timer erst bei 256 überläuft, bei 255 ist er ja "nur voll".

    MFG Moritz

  7. #17
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.09.2004
    Beiträge
    124
    Hallo,

    warum den Timer nach jedem Overflow neu stellen? Lasst den Timer laufen einfach laufen!

    Anstatt 4x (256 - 6) zu zählen, lass den Zähler (1x 232) + (3x 256) zählen.

    Stellt den Timer einmal vor und zählt in der OVF_Int Routine nur die Anzahl der Interrupts, ohne der Timer neu zu starten. Den Timer neu stellen muß man nur wenn die gewünschte Zeit erreicht wurde.


    BSP:
    100µs, cnt = 1000, HEX = 3E8
    FF - E8 = Voreinstellwert, nach 232 Takten erfolgt er erste Oberflow. Danach erfolgen die Overflows alle 256 Takte.
    3 = Anzahl 256er Overflows

    Der 4. Overflow entsteht nach genau 1000 Takten = 100µs.

    314 µs, HEX = C44
    FF - 44 = BB = Voreinstellwert
    C = Anzahl 256er Overflows

    Der 13. Overflow entsteht nach genau 3140 Takten = 314 µs

    Keine Umrechnungen, keine Ungenauigkeiten da der Timer weiterläuft, jede beliebige Zeit einstellbar.

    Naja, das mit den Ungenauigkeiten stimmt nicht ganz. Beim Zählerstart muß (sollte) man die Zeit mit einrechnen, die man zum Voreinstellen und Zähler starten braucht. Aber das muß nur einmal sein und nicht bei jeden Overflow.

    > Das hab ich nicht verstanden, man hat doch nciht mehr Zeit nur weil man einen 16 Bit Timer nimmt!?
    Doch, zumindest bei langen Zeiten. Der Timer erfordert nicht alle 256 Takte die Aufmerksamkeit des Programms, sondern nur alle 65356 Takte.

    Ciao,
    Werner

  8. #18
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    314 µs, HEX = C44
    FF - 44 = BB = Voreinstellwert
    C = Anzahl 256er Overflows

    Der 13. Overflow entsteht nach genau 3140 Takten = 314 µs
    Worauf willst du hinaus? Was meinst du damit?

    Es geht ja darum, dass man den Cycle noch einstellen können soll.
    Eine Stufe alle 25 uS:
    0 an 200 aus
    25 an 175 aus
    50 an...

    Dazu braucht man dann schon alle 25 uS einen Interrupt, wo dann auch ein 16-bitter nix bringt.
    Was meisnt du, wieviele Takte braucht man unter Bascom um die Routine aufzurufen und nen neuen Timerwert zu setzen? Ich hab mal gehört, das Bascom für eine Anweisung unter ASM, also einen Takt, 3 Takte braucht.
    Stimmt das, kann man das überhaupt so sagen?

    MFG moritz

  9. #19
    Benutzer Stammmitglied
    Registriert seit
    19.02.2005
    Beiträge
    39
    kann ich mir nicht vorstellen...
    wenn dann ist das ein durschnittswert, weil für z.B. varX = 5 braucht ASM auch nur einen befehl... es wird auch sicherlicht andere anweisungen wie Schleifen geben, die wesentlich mehr als 3 takte unter ASM brauchen...

  10. #20
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    wenn dann ist das ein durschnittswert, weil für z.B. varX = 5 braucht ASM auch nur einen befehl
    Befehl? Du meinst vermutlich Takt.
    Du hast mich missverstande, ich muss aber zugeben, dass der Satz auch echt besch... war. Also ASM braucht für die meisten Anweisungen einen Takt, für manche mehr. Bascom braucht meines Wissens nach länger. Ich glaube mal gehört zu haben ca. 3 mal länger. Es wäre natürlich interessant, wie lang es exakt ist, und wie läange der Aufruf der Interruptroutine (warum heißt die IRQ?) braucht.

    MFG moritz

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress