mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik [Attiny45] Audio über ADC und PWM laufen lassen


Autor: Sam .. (sam1994)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich versuche gerade über einen Tiny45 Sound laufen zu lassen. Der Quelle 
wird mit dem ADC digitalisiert und per FastPWM wieder ausgegeben. 
Problem: Es funktioniert nicht. Die Hardware müsste stimmen die hab ich 
schonmal verwendet. Hier ist der Code:
#include <avr/io.h>
#define F_CPU 8000000
#include <util/delay.h>

int main()
{
    DDRB = 2;
    ADMUX = (1 << MUX0);
    ADCSRA = (1 << ADEN) | (1 << ADPS1) | (1 << ADPS2);
    TCCR0A = (1 << COM0B1) | (1 << WGM00) | (1 << WGM01);
    TCCR0B = (1 << CS00);
    while(1)
    {
        ADCSRA |= (1 << ADSC);
        while (ADCSRA & (1<<ADSC));
        OCR0B = ADCL;
    }
}

Der Audio Eingang wir übrigens mit einem 2W Verstärker angesteuert. Wenn 
man den Eingang direkt an den Lautsprecher hängt ist es relativ laut.

Link zum Datenblatt falls jemand es braucht: 
http://www.atmel.com/dyn/resources/prod_documents/...

Autor: Fragender (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wo is nu dein Problem???

Autor: Nn Nn (jaytharevo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schaut nicht so schlecht aus.

Aber, warum lagerst du denn die A-D Umwandlung nicht aus.
Du könntest den ADC im Freerunnig-Mode lauf lassen. Bei fertiger 
Wandlung einfach die eine Zeile
OCR0B = ADCL;
 in der ISR ausführen. In der Main() könntest du den Controller schlafen 
legen (IDLE Mode), oder andere Dinge veranstalten.

Kleinigkeiten:
Du:
ADMUX = (1 << MUX0);
TCCR0B = (1 << CS00);

"Richtig":
ADMUX |= (1 << MUX0);
TCCR0B |= (1 << CS00);

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Samuel K. schrieb:
> Der Audio Eingang wir übrigens mit einem 2W Verstärker angesteuert. Wenn
> man den Eingang direkt an den Lautsprecher hängt ist es relativ laut.

Da Dein Eingang keinen Spannungsteiler für Wechselspannung besitzt, 
dürftest Du den Tiny bereits gegrillt haben. 2mW hätten gereicht!

Autor: Sam .. (sam1994)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Julian Schild schrieb:
> Schaut nicht so schlecht aus.
>
> Aber, warum lagerst du denn die A-D Umwandlung nicht aus.
> Du könntest den ADC im Freerunnig-Mode lauf lassen. Bei fertiger
> Wandlung einfach die eine ZeileOCR0B = ADCL; in der ISR ausführen. In
> der Main() könntest du den Controller schlafen
> legen (IDLE Mode), oder andere Dinge veranstalten.

Ich wollte auch erst freerunning machen. Aber beim Tiny45 gibts 
anscheinend nur so ein AutoTrigger-Mode. Und in den wollte ich mich 
nicht noch einlesen müssen.

> Kleinigkeiten:
> Du:ADMUX = (1 << MUX0);
> TCCR0B = (1 << CS00);
>
> "Richtig":ADMUX |= (1 << MUX0);
> TCCR0B |= (1 << CS00);

Als erste Anweisung ist es doch egal.

Fragender schrieb:
> Und wo is nu dein Problem???

Es kommt nichts aus dem Lautsprecher raus.

Knut Ballhause schrieb:
> Da Dein Eingang keinen Spannungsteiler für Wechselspannung besitzt,
> dürftest Du den Tiny bereits gegrillt haben. 2mW hätten gereicht!

Ich hab den Schaltplan oben angehängt. PS: Die gleiche Eingangsschaltung 
hab ich auch bei meinen Spektrumanalyer auf dem Steckbrett verwendet. 
Die hat funktioniert (ebenfalls mit 2W verstärker).

Mir ist noch eingefallen, das ich eigentlich ADCW >> 2 nehmen muss um 
den Wert abzufragen: Wenn das Signal größer ist als 256 kommt Murks 
heraus.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Samuel K. schrieb:
> Ich hab den Schaltplan oben angehängt.

Das habe ich gesehen. Du hast den ADC gleichspannungsseitig auf Vcc/2 
vorgespannt. Über den Kondensator ist der Verstärker angeschlossen. 
Liefert dieser nun eine Wechselspannung von mehr als 5Vss, geht es dem 
Tiny schlecht, weil er die volle Spannung sieht. Bei mehr als 6Vss 
brennen die Portdioden durch, bei mehr als 7Vss geht der gesamte 
Controller in Rauch auf.

Samuel K. schrieb:
> PS: Die gleiche Eingangsschaltung
> hab ich auch bei meinen Spektrumanalyer auf dem Steckbrett verwendet.
> Die hat funktioniert (ebenfalls mit 2W verstärker).

Zufall oder Glück.

Autor: Sam .. (sam1994)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Knut Ballhause schrieb:
> Zufall oder Glück.

Oder das ich nur 2/3 aufdrehe.

Autor: Julian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey,


schau mal hier:

"If the result is left adjusted and no more than 8-bit precision is 
required, it is sufficient to read
ADCH. Otherwise, ADCL must be read first, then ADCH, to ensure that the 
content of the data
registers belongs to the same conversion. Once ADCL is read, ADC access 
to data registers is
blocked. This means that if ADCL has been read, and a conversion 
completes before ADCH is
read, neither register is updated and the result from the conversion is 
lost. When ADCH is read,
ADC access to the ADCH and ADCL Registers is re-enabled."

Samuel K. schrieb:
> Mir ist noch eingefallen, das ich eigentlich ADCW >> 2 nehmen muss um
> den Wert abzufragen: Wenn das Signal größer ist als 256 kommt Murks
> heraus.

Da du im Programm nur das Low Byte gelesen hast brauchst du das Ergebnis 
nicht um 2 Stellen verschieben.


Der ATTiny hat sehr wohl einen Freeruning Mode. Schau da noch mal ins 
Datenblatt.
Im Register ADCSRB, die Bits ADTS2 ADTS1 ADTS0 sind dafür 
verantwortlich.

MfG,
Julian

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.