- Modernes Energiemessgeraet    Werbung      
Ergebnis 1 bis 10 von 18

Thema: 72kHz / 32kHz

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    63
    Beiträge
    5.799
    Hallo

    36kHz wäre richtiger, denn das ist die Trägerfrequenz des IR-Signals und auch die des SFH5110-36.

    In der orginalen CD-Version der asuro-Library wurde diese Trägerfrequenz über den Timer2 im normalen Modus erzeugt. Beim Überlauf wurde der OC2-Ausgang getoggelt und das Zählregister TCNT2 mit einem Startwert für 72kHz geladen. Bei den späteren Libs wurde das zur CTC-Betriebsart geändert. Dadurch wurde die Timer2-ISR nur noch mit 36kHz aufgerufen. Da die ISR aber auch die Zeitbasis für die Sleep()-Funktionen liefert, dauert eine Millisekunde bei der orginalen Lib 72 Sleep()s und bei den neueren Lib nur 36 Sleep()s. Grundsätzlich, weil die Änderung und Erweiterung gleichzeitig stattfand, funktionieren alle Libs die Msleep() kennen mit 36kHz.

    Wirklich clever wurde die Erzeugung der Trägerfrequenz mit den Änderungen von Waste im Rahmen der IR-Abstandsmessung. Jetzt war es möglich, die Hell- und Dunkelanteile des IR-Signals zu beeinflußen. Dieses Timersetup wird auch in der aktuellen Version der Library verwendet, weil sie auch die IR-Abstandmessung unterstützt.

    Wie das Timersetup genau funktioniert hatte ich hier mal beschrieben:
    https://www.roboternetz.de/community...l=1#post436695

    Gruß

    mic

    Zitat aus dem Beitrag:
    Dieser Absatz erklärt, wie das Timersetup funktioniert, das ist für das Verständniss der IR-Abstandsmessung nicht so wichtig: Beim Start des Counters wird der OC2-Pin auf low gesetzt, beim Erreichen des Wertes im OCR2-Register wird der OC2-Pin nach high umgeschaltet. Der Counter zählt dann weiter bis zum Überlauf, dann wird das Zählregister wieder auf null gesetzt und die Overflow-ISR angesprungen. Bei 8MHz dauert eine 36Khz-Periode ca. 222 Zähltakte, wenn man für den Counter keinen Prescaler verwendet. Beim Berechen des Counterstartwertes und des Umschaltpunktes setzt man nun am Besten am Ende einer Periode beim Überlauf des Zählregisters an. Für 111 Takte vor dem Überlauf muss man den Wert im OCR2-Register auf 256-111=145 oder 0x91 setzen, 222 Takte davor muss das Zählregister starten. Für das Laden des Zählregisters braucht man noch zusätzliche drei Takte: 256-222+3=37 oder 0x25. Die betreffenden Zeilen im Timersetup in asuro.c:
    Code:
    Im Init():
    
    	OCR2  = 0x91; // duty cycle for 36kHz
    
    In der ISR:
    
    SIGNAL (SIG_OVERFLOW2)
    {
    	TCNT2 += 0x25;
    ...
    Das += bewirkt, dass inzwischen schon erfolgte Zähltakte nicht ignoriert werden.
    [Edit]
    Noch 'ne Info zum Tiny13: Der läuft im Auslieferzustand mit 1,2MHz, ohne internen Vorteiler /8 (Fuses) mit 9,6MHz, mit interner Taktquelle. Hier erzeugt mein 1,2MHz-Tiny13 Servoimpulse mit einer 10kHz-Basis:
    https://www.roboternetz.de/community...l=1#post298095

    Bei einem umgefuseten 9,6MHz-Tiny wären das ca. 80kHz. Das Feintuning der Frequenz müßte man am OCR0A einstellen.
    Geändert von radbruch (16.08.2011 um 13:15 Uhr)
    Bild  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    13.07.2011
    Beiträge
    20
    super klasse!!! genau was ich brauchte Bild  

    nur mal so aus neugier... das mit der sleep und Msleep Funktion habe ich verstanden, jedoch ist dem Prozessor ja auch die Taktung bekannt also wieso nimmt man nicht gleich die Funktion delay oder gäbe es da keinen unterschied?

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    63
    Beiträge
    5.799
    Bei delay muss die Dauer der Verzögerung zur Kompilezeit bekannt sein. Nun könnte man auch auf Basis von delay auch eine variable Verzögerung konstruieren, aber dann ist der Aufwand nicht mehr kleiner als wenn man es gleich selbst auf der Basis der eigenen Lib umsetzt. Hier steht wohl der Lerneffekt im Vordergrund.

    Was sich die Macher des asuro damals, als sie das asuro-Konzept erbrütet haben, so alles gedacht haben, kann ich heute nur erahnen. Sowohl hard- wie auch softwaretechnisch eine echte Meisterleistung.
    Bild  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    13.07.2011
    Beiträge
    20
    Moin ich nochmal zu diesem Thema,
    kannst du mir dies nochmal genauer erklären??
    Bei einem umgefuseten 9,6MHz-Tiny wären das ca. 80kHz. Das Feintuning der Frequenz müßte man am OCR0A einstellen.
    wi ekommt man da auf 80 kHz?

    Wenn ich den Tiny mit 9,2 MHz betreibe und durch 72kHz teile bekomme ich ca 128 und wenn ich den Zähler als CTC-Betriebsart programmiere dauert eine Periode 255-128=127 Takte wenn ich also OCR0A auf 127 einstelle, bekomme ich so die 72kHz? oder bin ich völlig auf dem falschen Dampfer?

    danke im Vorraus

    Gruß aus Hamburg
    Geändert von t1001hh (30.08.2011 um 09:32 Uhr)

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    63
    Beiträge
    5.799
    Hallo

    Oje, frag mich nicht, was mich da geritten hat. Der Tiny im Beispielprogramm erzeugt die Servosignale mit 24kHz (1,2MHz/50) und deshalb sind das bei 9,2MHz keine 80kHz. Entschuldigung.

    Deine Berechnung ist fast richtig. Beim CTC-Mode zählt der Timer von 0 bis OCR0X, beim Match beginnt er wieder bei null und führt die ISR aus. Deshalb kannst du die 127,7 direkt ins OCR0X schreiben. Die Berechnung 256-128 gehört zum Overflow-Mode. Man berechnet so den Vorladewert des OCR0X um nach der gewünschten Zählertaktzahl einen Überlauf zu erhalten.

    Gruß

    mic
    Bild  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    13.07.2011
    Beiträge
    20
    so ein mist der Tiny 13 hat ja 9,6MHz... also stimmt die Rechnung ja nicht dann muss ich den Zähler im CTC-Modus betreiben und rechne:
    9,6MHz durch 72kHz = 133,3333-> dies Teile ich durch 2 -> 66,5 sprich 67 also ziehe ich 67 von 256 ab und erhalte
    189 oder oxBD die ich im OCR0A/B Register schreibe
    bei 123 oder ox7B muss ich starten, also schreibe ich im Interrupt

    SIGNAL (SIG_OVERFLOW0)
    {
    TCNT0 += 0x7B;
    ....
    }

    bin ich soweit richtig? würde ich so 72kHz bekommen?
    Gruß aus Hamburg und nochmals vielen dank Bild  

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    63
    Beiträge
    5.799
    Hallo

    CTC-Mode ohne Prescaler, die ISR wird alle 1/72000 Sekunde aufgerufen:
    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    ISR(TIM0_COMPA_vect)
    {
    }
    
    int main(void)
    {
    	TCCR0A = (0 << WGM00) | (1 << WGM01); // CTC-Mode
    	TCCR0A |= (0 << COM0A0) | (0 << COM0A1); // ohne OCR-Pin
    	TCCR0B = (0 << CS02) | (0 << CS01) | (1 << CS00); // kein prescaler!
    	TIMSK0 = (1 << OCIE0A); // Interrupt ein
    	OCR0A = 9600/72; // 9,6MHz/72kHz = 133,3
    	sei();
    
    	while(1)
    	{
    	}
    	return(0);
    }
    Genau sind es 9600/133=72,18kHz.

    Gruß

    mic


    btw.:
    "9,6MHz durch 72kHz = 133,3333-> dies Teile ich durch 2" Wieso denn /2?

    Und dann noch ne Frage: Was willst eigentlich du anstellen mit den 36/72kHz?
    Bild  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. Problem mit 32kHz Uhrenquarz am timer1
    Von FeiaDragon im Forum PIC Controller
    Antworten: 6
    Letzter Beitrag: 29.08.2008, 22:03

Berechtigungen

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

    Werbung      fchao-Sinus-Wechselrichter AliExpress