- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: präzises timing für 8mhz

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.08.2006
    Beiträge
    183

    präzises timing für 8mhz

    Anzeige

    E-Bike
    Hallo, ich möchte ein präzises Timing für eine Steuerung haben in Bascom.

    Und zwar: 12us, 6666us, 3333us und 833 us.

    Wie kann ich so etwas in Bascom realisieren?

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    Ich glaube es eher nicht.
    Zeitkritische Dinge sind immer mit Takte abzählen verbunden und soetwas geht nunmal am besten in Assembler.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.03.2004
    Beiträge
    185
    Ich sehe da in Bascom keine großen Probleme, da man nicht unbedingt Takte zählen muss.

    Die 6666us, 3333us und 833 us lassen sich einfach mit dem Clear Timer on Compare Match (CTC) Mode realisieren.
    Ersteinmal solltest Du Dich von den 8Mhz trennen. Man nehme einen 14.7456MHz-Quarz (Standardfrequenz für RS232) und
    setze den 16-Bit Timer in den CTC-Mode mit dem prescaler factor =64.

    Ensprechend dem Wert im Register OCR1A wird jetzt regelmäßig ein Interrupt ausgelöst:
    OCRR1A= 191 -> 833,333 us
    OCRR1A= 767 -> 3333,333 us
    OCRR1A= 1535 -> 6666,6 us
    Man kann das auch mit dem Port OC1A verknüpfen (toggle).

    Die 12µs lassen sich mit dem 14.7456MHz-Quarz nicht exakt relisieren...

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.08.2006
    Beiträge
    183
    der Interrupt soll nur einmal ausgegeben werden.

    wie starte ich den Interrupt, damit er einmal z.b. 833us startet und dann wieder ruht, bis zum nächsten starten.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.03.2004
    Beiträge
    185
    Sag mal, was in/nach den 833µs passieren soll und wie genau Du die 833µs einhalten musst.
    Das ist entscheidend für den Ansatz, 833µs in Atmega-Hardware oder Software zu realisieren. In Hardware lässt sich Taktgenau einfacher umsetzen... Z.B. einen Port für _exakt_ 833µs auf High zu setzen.

    Welchen Atmega verwendest Du?

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    Zitat Zitat von -tomas-
    Ich sehe da in Bascom keine großen Probleme, da man nicht unbedingt Takte zählen muss.

    Die 6666us, 3333us und 833 us lassen sich einfach mit dem Clear Timer on Compare Match (CTC) Mode realisieren.
    Ersteinmal solltest Du Dich von den 8Mhz trennen. Man nehme einen 14.7456MHz-Quarz (Standardfrequenz für RS232) und
    setze den 16-Bit Timer in den CTC-Mode mit dem prescaler factor =64.

    Ensprechend dem Wert im Register OCR1A wird jetzt regelmäßig ein Interrupt ausgelöst:
    OCRR1A= 191 -> 833,333 us
    OCRR1A= 767 -> 3333,333 us
    OCRR1A= 1535 -> 3333,333 us
    Man kann das auch mit dem Port OC1A verknüpfen (toggle).

    Die 12µs lassen sich mit dem 14.7456MHz-Quarz nicht exakt relisieren...
    DAher ist der Grundansatz mit den 14,7456MHz nicht das nonplusultra.

    Praktisch kann er nämlich sehr wohl bei seinen 8 MHz bleiben.

    In Takten (oder Zählschritten):
    12µs = 96
    833µs = 3332
    3333µs = 26664
    6666µs = 53328

    Das sind alles Werte, die man mit dem Timer 1 ohne Prescaler erreichen kann.

    Im übrigen, würde ich mir bei so einer Aufgabenstellung mal Gedanken über den kleinsten gemeinsamen Nenner dieser Zeiten machen.

    Grüße,
    da Hanni.

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.03.2004
    Beiträge
    185
    @Hanni
    Du hast Recht, bei 8Mhz gibt es noch keinen Überlauf im Timer 1
    -also geht CTC bei 8Mhz ohne prescaler

    Mal sehen was robby-fant schalten will...

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.08.2006
    Beiträge
    183
    833us lang ein Ir-Signal von 36khz erzeugen
    6666us lang ein Ir-Signal von 36khz erzeugen

    3333us wartezeit
    12us wartezeit

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.03.2004
    Beiträge
    185
    Na dann lass es uns gleich richtig machen - dazu ein paar Fragen:

    1. Was ist der Auslöser oder ist es eine Endlosschleife?
    2. Ist das die richtige Reihenfolge bzw. was sollen diese 12µs Wartezeit (=96Takte@8MHz) bedeuten bei einem 36Khz-Signal (=27µs Periode)?
    3. Welchen Atmega verwendest Du?

    Code:
    Do
     833us lang ein Ir-Signal von 36khz erzeugen 
     6666us lang ein Ir-Signal von 36khz erzeugen 
     3333us wartezeit 
     12us wartezeit
    Loop

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.08.2006
    Beiträge
    183
    Code:
    Ir_code_6666us
    
    For I = 0 To 7
     If Wert.7 = 0 Then
         Wait 833us
         Ir_code_833us
     Else
        Wait 3333us
        Ir_code_833us
     End If
     Rotate Wert , Left , 1
    
    Next

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress