PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro Projekt



hupti
14.01.2008, 09:27
Grüß Euch,

wir sollenten vor einiger zeit in unsere schule ein thema angeben und wir haben uns eine asuro programmierung ausgedacht nun ist das problem das wir nur grundlagen hatten und wir aber ein asuro machen müssen der auf geräusche reagiert kennt ihr da irgendwelche Quellcods?

sloti
14.01.2008, 15:47
Hi Huptim
das video passt zu dem Thema. aber wie genau das funktioniert weiß ich nicht ich habs nur zufällig mal gesehen:
http://www.youtube.com/watch?v=D-anbOj4O1c&NR=1

mfg
Erik

Lunarman
14.01.2008, 15:59
nee Quellcodes hab ich keien aber ist doch simpel.. du brauchst natürlich erstmal nen mikro. Das Signal kannst ja übern AC/DC einlesen (dafür wirst du irgendeine andere funktion weglassen müssen, zum Beispiel Linienfolgen) und wenn der Pegel hoch ist gibts Geräusche ;)

robo.fr
14.01.2008, 19:12
das video passt zu dem Thema. aber wie genau das funktioniert weiß ich nicht ich habs nur zufällig mal gesehen:
http://www.youtube.com/watch?v=D-anbOj4O1c&NR=1

Die Anleitung dazu steht im Elektor-Mikrocontrollersonderheft Nr1.

robo

sloti
14.01.2008, 20:18
Das Signal kannst ja übern AC/DC einlesen (dafür wirst du irgendeine andere funktion weglassen müssen, zum Beispiel Linienfolgen) und wenn der Pegel hoch ist gibts Geräusche ;)

So kann man, aber doch nur die Lautstärke messen oder seh ich das falsch. Ich weiß ja nicht wie Umfangreich das Projekt werden soll, aber die Höhe der Töne herauszufinden wäre doch mal ne nette Herausforderung. Meinen bescheidenen Akustik kenntnissen nach würde ich mal behaupten, dass man dann die Wellenlänge messen müsste. Wäre der ATmega dafür denn schnell genug? Ich hätte nämlich ein Mikrofon zwar keine Zeit aber wenn man mal Zeit hätte könnte man sich ja mal damit beschäftigen, das hat mich sowieso immer mal interessiert. Naja soviel erstmal.

mfg
Erik

robo.fr
14.01.2008, 20:36
Meinen bescheidenen Akustik kenntnissen nach würde ich mal behaupten, dass man dann die Wellenlänge messen müsste. Wäre der ATmega dafür denn schnell genug?

Er ist schnell genug. Meine ich nur oder habe ich es schon mal erwähnt:
Die Anleitung dazu steht im Elektor-Mikrocontrollersonderheft Nr1.

Die Schaltung des Mikrofonverstärkers als auch wie so ein Programm aufzubauen ist.

radbruch
14.01.2008, 20:47
Hallo

Mein 8MHz-ATMega32 (auf dem RP6) liest mit dem ADC ein Audiosignal vom PC/MP3-Player und gibt den Pegel (2-bit) mit LEDs aus. Gleichzeitig wird das Signal noch an zwei DA-Pins ausgegeben. Noch in der Entwicklung mit miesem Sound, als Anregung gedacht:


//RP6 als Tonband Ohne Library Aufnahme: PortA4 Wiedergabe: PortC0 2.1.2008 mic

#include <avr/io.h> // I/O Port definitions
#include <avr/interrupt.h> // Interrupt macros
#ifndef F_CPU
#define F_CPU 8000000
#endif

// Einstellungen für UART und LEDs aus der RP6-Lib
#define BAUD 38400 // 38400 Baud
#define UBRR_BAUD ((F_CPU/(16*BAUD))-1)
#define SL1 (1 << PINC4)
#define SL2 (1 << PINC5)
#define SL3 (1 << PINC6)
#define SL4 (1 << PINB7)
#define SL5 (1 << PINB1)
#define SL6 (1 << PINB0)
// A shadow register that simplifies usage of status LEDs:
union {
uint8_t byte;
struct {
unsigned LED1:1;
unsigned LED2:1;
unsigned LED3:1;
unsigned LED4:1;
unsigned LED5:1;
unsigned LED6:1;
unsigned reserved1:1;
unsigned reserved2:1;
};
} statusLEDs;
void updateStatusLEDs(void)
{
DDRB &= ~0x83;
PORTB &= ~0x83;
if(statusLEDs.LED4){ DDRB |= SL4; PORTB |= SL4; }
if(statusLEDs.LED5){ DDRB |= SL5; PORTB |= SL5; }
if(statusLEDs.LED6){ DDRB |= SL6; PORTB |= SL6; }
DDRC &= ~0x70;
PORTC &= ~0x70;
DDRC |= ((statusLEDs.byte << 4) & 0x70);
PORTC |= ((statusLEDs.byte << 4) & 0x70);
}
inline void setLEDs(uint8_t leds)
{
statusLEDs.byte = leds;
updateStatusLEDs();
}

void Init(void)
{
cli();
// UART:
UBRRH = UBRR_BAUD >> 8; // UART 38400 Baud
UBRRL = (uint8_t) UBRR_BAUD;
UCSRA = 0x00;
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
UCSRB = (1 << TXEN) | (1 << RXEN) | (1 << RXCIE);

// ADC interne Referenz 2,56V, Ergebniss linksbündig, Kanal ADC4 (E_INT1)
ADMUX = (1<<REFS1) | (1<<REFS0) | (1<<ADLAR) | 4;
// setzte free running triggern
SFIOR = (0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
// interupt, Wandler einschalten, prescaller /128 (62500Hz)
ADCSRA = (1<<ADIE) | (1<<ADEN) | (1<<ADPS2) | (0<<ADPS1) | (1<<ADPS0);
// Autotriggern bedeutet jetzt free running aktivieren, altes Flag löschen
ADCSRA |= (1<<ADATE) | (1<<ADIF);
// Initialisierung starten
ADCSRA |= (1<<ADSC);
// und noch die wohl eher unnötige Initiallesung
while (!(ADCSRA & (1<<ADIF)));
ADCSRA |= (1<<ADIF);
DDRC |= 3;
sei();
}

int main(void)
{
uint8_t i;

Init();
setLEDs(1);
for (i='a'; i<='z'; i++)
{
while (!(UCSRA & (1<<UDRE)));
UDR = i;
}
while (!(UCSRA & (1<<UDRE)));
UDR = '\n';
while (!(UCSRA & (1<<UDRE)));
UDR = '\r';
while(1);
return(0);
}
ISR(ADC_vect)
{
static uint8_t adc_temp=0, count=0;

adc_temp=(ADCH & 3);
setLEDs(1);
if (adc_temp >0) setLEDs(8);
if (adc_temp >1) setLEDs(16);
if (adc_temp >2) setLEDs(32);
if (adc_temp == 0)
{
DDRC |= 3;
PORTC &= ~3;
}
else if (adc_temp == 1)
{
DDRC |= 3;
PORTC |= 1;
PORTC &= ~2;
}
/*
if (adc_temp == 2)
{
DDRC |= 1;
PORTC |= 1;
DDRC &= ~2;
PORTC &= ~2;
}
*/
else if (adc_temp > 1)
{
DDRC |= 3;
PORTC |= 3;
}
if (count++ == 3) count=0;
//UDR = adc_temp + '0';
//UDR = '\n';
}

Das Programm verwendet den ADC-Interrupt und gibt den gemessenen Wert in der ISR wieder aus. Die Samplerate ist der prescaler des ADC. Der Eingang hat einen 10K PullUp und das Eingangssignal sollte nicht höher als 5V sein. Ein Kopfhörerausgang sollte genügen, Lautstärke von 0 langsam steigern!

Gruß

mic

hupti
15.01.2008, 10:51
Soweit schon mal ganz gut zu dem Umfang der Arbeit ganz einfach wir sollten uns ein thema aussuchen haben Asuro genommen und speziel uns darauf geeinigt das wir ein machen der entweder sprachgesteurrt ist oda halt von geräuschen!! nun ist halt das ding das ich dachte wir finden was im inet darüber aba ist halt bißchen schwer!!! dachte halt das einer von euch da vllt irgendwo sowas schon mal gesehen hat oda selbst gemacht hat ! das wäre super ich mein man könnt natürlich auch was anderes machen aba da fehlen mir auch wieder die Ideen und die kenntnisse also ich kann nur was mit vorlagen anfangen und dann müssen wir diese auch noch erklären könn nur das würde ich mir dann schon iregendwie hinbiegen !! vllt habt ihr ja ein paar ideen die ganz umfangreich und einfach zu realiesieren sind !!

sloti
15.01.2008, 12:10
Also ein micro an einen ADC port zu schließen und den dann auszulesen wäre relativ simpel so kann man ihn dann auf Klatschen oder andere Laute reagieren lassen. Aber spracherkennung wird dann wohl etwas komplizierter.

mfg
Erik

damaltor
15.01.2008, 16:22
hupti: deine ausrufezeichen-taste klemmt!!!!einseinself

:D

nein im ernst: für eine spachsteuerung ist der prozessor nicht audgerüstet. es wäre vermutlich möglich das mikro am ADC port auszulesen, und dann tonhöhen zu bestimmen. auch klatschen wäre möglich (z.B. einmal klatschen: vorwärts, 2x klatschen: rückwärts... oder so.)