-         

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

Thema: Zeit am AVR: Delay und Timer-Interrupt lernen

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330

    Zeit am AVR: Delay und Timer-Interrupt lernen

    Anzeige

    Hallo @ alle!

    Da ich nun den Ein- und Ausgang des AVRs beherrsche, und auch der ADC endlich klappt, möchte ich mich an das nächste große Thema wagen:

    Zeitbestimmung mittels des AVRs.


    Also, erstmals muss man ja die MHz definieren am Anfang des Programmes. Bei meinem Programm steht standartmäßig irgend ein Wert drinnen, und das hat mich auch nie gestört. Ich musste halt berücksichtigen, dass "50 ms" in echt 800ms waren oder so...

    Nun ja, nun hängt die Frequenz des Chips laut Datenblatt ja angeblich von der Spannung ab??
    Oder schafft er unter 4V keine 20 MHz??

    Ich betreib ihn meist mit 3V, und wenn ich dann 10 Mhz definiere, sind das dann wirklich 10Mhz oder muss ich irgendwie die Spannung berücksichtigen??

    Das ganze ist vollkommen unübersichtlich für mich, bitte um die Hilfe eines Profis


    Mfg

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.140
    Hi,

    die Frequenzdefinition in der Software dient nur dazu, einigen Funktionen aus der Library (z.B. den _delay-Funktionen) die Taktfrequenz, mir der der Prozessor betrieben wird, mitzuteilen. Nur so können diese Funktionen zeitgenau funktionieren.

    Die reale Taktfrequenz stellst Du in den Fuses ein (ich hoffe, davon hast Du schon mal was gehört ) Du kannst entweder einen internen Takt verwenden (bei den meisten AVRs 1,0-8,0MHz) oder einen externen Takt per RC-Oszillator, Quarz oder Quarzoszillator wählen. Dann kannst Du - je nach Betriebsspannung und verwendetem Controller - bis 20MHz hochgehen. Die angaben im Datenblatt beziehen sich auf die maximal mögliche Taktfrequenz in Abhängigkeit von der Spannung.

    Gruß,
    askazo

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Die reale Taktfrequenz stellst Du in den Fuses ein (ich hoffe, davon hast Du schon mal was gehört )
    Das Wort ist mir schon geläufig, hab aber keine Ahnung was das bezeichnet

    die Frequenzdefinition in der Software dient nur dazu, einigen Funktionen aus der Library (z.B. den _delay-Funktionen) die Taktfrequenz, mir der der Prozessor betrieben wird, mitzuteilen. Nur so können diese Funktionen zeitgenau funktionieren.
    Das heißt, ich stelle per fuse die Frequenz ein, und oben teile ich die gewählte Frequenz dem delay (,..etc) mit??

    Du kannst entweder einen internen Takt verwenden (bei den meisten AVRs 1,0-8,0MHz)
    Ja, geanu den würde ich gerne verwenden... Kennst du dazu einen guten Link??
    Dann kannst Du - je nach Betriebsspannung und verwendetem Controller - bis 20MHz hochgehen
    Das ghet nur mit exterenem Taktgeber?

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.140
    Zitat Zitat von runner02
    Das heißt, ich stelle per fuse die Frequenz ein, und oben teile ich die gewählte Frequenz dem delay (,..etc) mit??
    Genau!
    Zitat Zitat von runner02
    Ja, geanu den würde ich gerne verwenden... Kennst du dazu einen guten Link??
    Hier findest Du ein recht gutes Tutorial über Fusebits: http://www.wiki.elektronik-projekt.d...sebit_tutorial
    Zitat Zitat von runner02
    Das ghet nur mit exterenem Taktgeber?
    Ja, Frequenzen über 8,0MHz gehen bei den Tiny-/Mega-AVRs nur über externe Taktgeber.

    Gruß,
    askazo

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Die wohl am häufigsten geänderten Fusebits sind CKSEL0 bis CKSEL3 (Select Clock Source). Mit ihrer Hilfe wählt man die Taktquelle aus der der Controller seinen Takt erhält. Hier ist etwas Vorsicht geboten da eine falsche Einstellung den Controller lähmen kann. Eine falsche Einstellung lässt sich jedoch relativ leicht beheben. Die genauen Parameter können zwischen den einzelnen Typen variieren

    Default: Interner RC Oszillator mit 1MHz (bzw 8MHz bei Typen mit Vorteiler)
    Was ich der Seite entnehmen kann ist der interne Quarz automatisch auf 1Mhz gestellt?

    Dann müsste ich es doch gar nicht verstellen?


    Vor einer Stunde habe ich die Frequenz von 3.864 MHz (standartmäßig im AVR Studio) auf 8 Mhz verstelt, das war wohl nichts, dann hab ich es auf 1Mhz eingestellt. Da waren 10 sek in waitMs etwas über 8 sek....
    Ist das WaitMs so ungenau, oder stimmt die Taktrate immer noch nicht??

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.10.2008
    Ort
    Wulferstedt
    Beiträge
    1.042
    Es gibt keinen "internen" Quarz im AVR. Das wäre schön, dann brauchte
    man keinen Externen. Ohne Quarz, also freilaufend intern mit 1MHz
    hatte ich bisher bis ca. 2Prozent Abweichung und auch
    temperaturabhängig. VG Micha

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.140
    Standardmäsig ist der interne Oszillator auf 1MHz eingestellt. Wenn Du mit 1MHz hinkommst, brauchst Du nichts zu verändern. Das lohnt sich aber eigentlich nur für Batterieanwendungen, wenn man Energie sparen muss. Ansonsten sehe ich keinen Sinn darin, nur 1MHz zu benutzen wenn man ohne Aufwand auch 8MHz nutzen kann.

    Bist Du sicher, dass Du an der richtigen Stelle die Frequenz verstellt hast?
    3.864MHz kommt mir nämclich für den internen Ozillator sehr krumm vor (die mir bekannten AVRs haben immer 1,2,4 und 8MHz zur Auswahl)

    Ansonsten schreib mal bitte, welchen AVR Du verwendest und poste mal Deinen Quellcode.

    Gruß,
    askazo

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.10.2008
    Ort
    Wulferstedt
    Beiträge
    1.042
    3686400 Hz ist ok. und auch ein Standartwert. Damit kriegt man auch
    die UART richtig hin. Doppelte und Vierfache Quarzfrequenzen sind auch
    noch übliche Werte. VG Micha

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Wenn Du mit 1MHz hinkommst, brauchst Du nichts zu verändern.
    Naja, so hochleistungsfähige Programme schreibe ich dann ja doch nicht...

    Momentan arbeite ich (nach wie vor) am ATtiny13.

    3686400 Hz ist ok. und auch ein Standartwert. Damit kriegt man auch
    die UART richtig hin.
    Ja, aber wenn der Attiny automatisch auf 1MHz eigestellt ist, müsste ich ihn dann doch auf 3,68..MHz umfusen, sonst käme ich ja nicht auf die richtigen Zeiten bei wait/delay/...


    Klapppt UART auch mit 1 MHz??? Der ist mein nächstes Ziel, gleich nach den Zeiteinstellungen!
    Und da will ich dann gleich mit der richtigen Frequenz einsteigen...


    ___
    Ach ja, die waitMs waren bei mir ja nicht sehr akkurat... Ist die delay-Funktion besser? Aber die hat ja auch nur die ungenaue Frequenz, oder ist da das Programm genauer?

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.140
    Ich bin immer noch ein wenig von den Taktfrequenzen verwirrt, die Du hier angibst....
    Der Tiny13 kann intern doch nur auf 128kHz, 4,8MHz oder 9,6MHz eingestellt werden (Zusätzlich noch CKDIV. Wie kommst Du da auf 1MHz bzw. 3,68...Mhz???

    Um auf die richtigen Zeiten bei wait/delay zu kommen, muss lediglich der gefuste Takt mit dem in der Software unter F_CPU angegebenen Wert übereinstimmen.

    UART klappt eigentlich mit fast jeder Taktfrequenz. Allerdings bekommst Du mit einigen Frequenzen manche Baudraten nicht vernünftig hin.
    Dein Tiny13 hat allerdings keine Hardware-UART, so dass Du Dir eine Soft-UART bauen müsstest. Ich würde da eher einen größeren Controller mit UART verwenden.

    Gruß,
    askazo

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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