- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 8 von 8

Thema: Tonausgabe über µC

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    28.12.2011
    Alter
    30
    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

  2. #2
    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!

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    28.12.2011
    Alter
    30
    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
  •  

fchao-Sinus-Wechselrichter AliExpress