- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 8 von 8

Thema: Tonausgabe über µC

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
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Auch ohne Prescaler kann der Timer nicht schneller als der Kontroller zählen.

    Das Widerstandsnetzwerk ist ein variabler Spannungsteiler den man in 2er-Potenzen ansteuern kann.

    Letztlich ist das Sinussignal ja für einen Lautsprecher gedacht. Aber der verschleift das Signal wohl sowieso, deshalb kannst du dir die Mühe vermutlich sparen.

    Gruß

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

  2. #2
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    74
    Beiträge
    11.077
    Hallo!

    Ausserdem ist ein Unteschied zwischen Sinus und Dreieck aus Lautsprecher nur für Musiker deutlich erkennbar. Für Frequenzen über ca. 10 kHz lässt sich sogar kein Unterschied zwischen Sinus und Rechteck nur mit dem Ohr erkennen.
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    28.12.2011
    Alter
    31
    Beiträge
    11
    Hmm ok also ein Widerstandsnetzwerk ...
    trotzdem versteh ich nicht warum sich die töne überhaupt nicht ändern ...
    hier hat jemand das selbe versucht und auch hinbekommen
    --> http://www.mikrocontroller.net/topic/110106
    leider kenne ich mit der Programmiersprache von dem nicht genügen aus um das nachzuvollziehen

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Ich habe den gezeigten Thread durchgelesen, aber irgendwie scheint mir das nicht schlüssig. Der Timer läuft ohne Vorteiler im Mode 1 (WGM10 im TCCR1A ist gesetzt). Mode1 bedeutet: PWM, Phase Correct, 8-bit. Beim Match wird die ISR aufgerufen und OCR1A wird mit dem nächsten Wert aus der Tabelle geladen:

    ISR(TIMER1_COMPA_vect){
    OCR1A=pgm_read_byte(&sinewave[tone][(i>>8)]);
    i += scale;
    }

    Es werden je nach Größe von scale einige Werte in der Tabelle übersprungen, so dass die Dauer einer Periode durch die Anzahl der Werte pro Periode beeinflusst werden kann. Soweit, so gut. Aber PhaseCorrekt bedeutet, dass der Counter von 0 nach 255 und wieder zurück zählt. Beim Aufwärtszählen wird beim Match der Ausgang zurückgesetzt, beim Abwärtszählen wird beim Match der Ausgang wieder gesetzt (COM1A1:0 in TCCR1A ist 10: Clear OC1A/OC1B on compare match when
    up-counting. Set OC1A/OC1B on compare match when downcounting.) Der neue OCR1A-Wert wird zwar in der Match-ISR geschrieben, aber erst bei TOP upgedatet (Mode1: Update of OCR1x). Dazu kommt noch, dass nur jeder zweite aus der Tabelle gelesene und ins OCR1A geschriebene Wert auch wirklich Wirkung zeigt.

    Es gibt noch viel zu erforschen.

    Gruß

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

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    28.12.2011
    Alter
    31
    Beiträge
    11
    Hi,
    hab heut morgen noch mal experimentiert und kann jetzt unterschiedliche Töne erzeugen.
    Gut tun sie sich aber noch nicht wirklich anhören, aber immer hin lässt sich der Ton überhaupt verändern ^^

    Ich hab die Liste runter gekürzt auf 128 Werte und den Vorteiler verändert.
    Code:
    int delval;                      // globale Variablendeklaration
    int i;
    int k;
    float rate;
    
    int Sinustabele[128] = {
    
    0 , 0 , 0 , 1 , 2 , 3 , 5 , 7 , 9 , 12 , 14 , 17 , 21 , 24 , 28 , 32,
    36 , 41 , 46 , 51 , 56 , 61 , 66 , 72 , 78 , 83 , 89 , 95 , 101 , 107 , 114 , 120,
    127 , 133 , 139 , 145 , 151 , 157 , 163 , 169 , 175 , 181 , 186 , 192 , 197 , 202 , 207 , 212,
    216 , 221 , 225 , 228 , 232 , 235 , 238 , 241 , 244 , 246 , 248 , 250 , 251 , 252 , 253 , 253,
    253 , 253 , 253 , 252 , 251 , 250 , 248 , 246 , 244 , 241 , 239 , 236 , 232 , 229 , 225 , 221,
    216 , 212 , 207 , 202 , 197 , 192 , 187 , 181 , 175 , 169 , 164 , 158 , 151 , 145 , 139 , 133,
    127 , 120 , 114 , 108 , 102 , 96 , 90 , 84 , 78 , 72 , 67 , 61 , 56 , 51 , 46 , 41,
    37 , 33 , 28 , 25 , 21 , 18 , 15 , 12 , 9 , 7 , 5 , 3 , 2 , 1 , 0 , 0};
    
    #define Led1 5
    
    
    void main(void)
    {
    
        Port_DataDirBit(Led1,1);
        Port_WriteBit(Led1,1);
    
        rate = 6;
    
        while(1)
        {
    
            Sound(35.3,1500);  //vermutlich 700 Hz
    
            Sound(6,1500);
        }
    
        Port_WriteBit(Led1,0);
    }
    
    
    void Sound(float Rate, int Time)
    {
        for(k=0; k<(1/(128/Rate))*Time; k++)     // Berechne zyklen
        {
            for(i=0; i<128; i=i+Rate)
            {
                Timer_T0PWM(Sinustabele[i],PS0_8);
            }
    
        }
    }
    Kann sich einer Vortstellen wie man die Frequenz berechnen kann?
    Ich hab sie heute jetzt mit Headset und Audacity gemessen und komme auf Frequenzen zwischen 570 und locker 900 Hz...
    Ich weiß nur nicht ob das stimmt ^^

Ähnliche Themen

  1. Asuro mit Tonausgabe ?
    Von IDG im Forum Asuro
    Antworten: 2
    Letzter Beitrag: 19.04.2011, 16:08
  2. Antworten: 1
    Letzter Beitrag: 19.04.2011, 12:36
  3. Antworten: 3
    Letzter Beitrag: 29.10.2008, 14:21
  4. Über C-Konsolenanwendung Daten über RS232 übertragen
    Von WDragon91 im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 03.07.2008, 19:23
  5. Chip für Tonausgabe???
    Von JayCool im Forum PIC Controller
    Antworten: 7
    Letzter Beitrag: 13.02.2006, 11:36

Stichworte

Berechtigungen

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

Labornetzteil AliExpress