Serious
12.04.2007, 00:04
Hallo,
Vor kurzem hab ich mir die Teile für die Ultraschallerweiterung bestellt. Nachdem ich etwas ratlos auf die den Schaltplan im Mehr-Spaß-mit-Asuro-Buch geschaut hab, hat mir dann ide Anleitung von Iuma weitergeholfen.
Leider funktioniert das Ganze noch nicht so, wie ich es gerne hätte. Der Spannungskomparator meldet anscheinend kein einziges Mal eine auseichend hohe Spannung. Nachdem ich ersteinmal die Senderkapsel falschherum eingelötet hatte, bin ich mir jetzt auch ohne Katze eigentlich ziemlich sicher, dass gesendet wird. Zumindest höre ich ein ganz leises Knacken von der Kapsel, und mit einem empfindlichen Kondnesatormikrofon habn ich sogar einen Ton gehört. Hat mich zwar ein bisschen gewundert, dass ich den Ton so im Kopfhörer hören konnte und dass ich den Ton auch mit lediglich 48kHz Samplingrate aufnehmen konnte, aber ich nehm einfach mal an, dass das Mikrofon quasi einen "Unterton" afgenommen hat.
Ich hab mich jezt mal ein bisschen schlau gemacht, wie das funktioniert, den ADC zu verwenden, und hab dann einfach mal gemessen, was den an ADC3(also dem Pin, an dem das Signal der Empfängerkapsel anleigen sollte) so reinkommt. Mehr als 0 und 1 krieg ich aber nicht rein. Hier mal der Code, da ich mir nicht so sicher bin, ob das stimmt, was ich so abgeschrieben hab:
void Ping(unsigned char length)
{
count72kHz = 0;
TCCR2 = (1 << WGM21) | (1 << COM20) | (1 << CS20);
// Toggling of IO-Pin on
// generate the Chirp
while(count72kHz < length) {
OCR2 = 0x64 + length / 2 - count72kHz;
}
TCCR2 = (1 << WGM21) | (1 << CS20); // Toggling of IO-Pin off
OCR2 = 0x64; // set frequency to 40kHz
}
volatile unsigned int adc_wert;
SIGNAL (SIG_ADC)
{
adc_wert = ADCL + (ADCH << 8);
char text[6];
itoa(adc_wert,text,10);
SerWrite(text,strlen(text));
SerWrite(" ",2);
}
int main(void)
{
Init();
//LocalInit();
ADMUX = (1 << REFS0) | IR_RIGHT;
ADCSRA = (1<<ADEN) | (1<<ADFR) | (1<<ADSC) | (1 << ADIE) | (1<<ADPS0) | (1<<ADPS1) | (1<<ADPS2); // clk/128
while(TRUE) {
Ping(100);
}
return 0;
}
Für WHEEL_LEFT und RIGHT bekomm ich übrigens nur Werte im Bereich 1-5 rein, unabhängig von der Beleuchtung und von der Radstellung. Sollte das nicht mehr sein? Für die Batterie bekomm ich nur 466 rein.
Ich wäre sehr dankbar, wenn mir jemand sagen kann, ob meine ersten Ausflüge in die Bitschubserei und den ADC richtig sind, und was ich noch überprüfen könnte, um der Fehlerquelle im US-Modul auf die schliche zu kommen.
Ach ja, in der Anleitung von Iuma waren immer die Farbcodes für die Metallschichtwiderstände(blau) ich habe aber Kohleschichtwiderstände(besch, braun oder was auch immer) die Toleranz ist aber 5%, genau wie auf der Stückliste angegeben. Macht das was?
Dominik
Vor kurzem hab ich mir die Teile für die Ultraschallerweiterung bestellt. Nachdem ich etwas ratlos auf die den Schaltplan im Mehr-Spaß-mit-Asuro-Buch geschaut hab, hat mir dann ide Anleitung von Iuma weitergeholfen.
Leider funktioniert das Ganze noch nicht so, wie ich es gerne hätte. Der Spannungskomparator meldet anscheinend kein einziges Mal eine auseichend hohe Spannung. Nachdem ich ersteinmal die Senderkapsel falschherum eingelötet hatte, bin ich mir jetzt auch ohne Katze eigentlich ziemlich sicher, dass gesendet wird. Zumindest höre ich ein ganz leises Knacken von der Kapsel, und mit einem empfindlichen Kondnesatormikrofon habn ich sogar einen Ton gehört. Hat mich zwar ein bisschen gewundert, dass ich den Ton so im Kopfhörer hören konnte und dass ich den Ton auch mit lediglich 48kHz Samplingrate aufnehmen konnte, aber ich nehm einfach mal an, dass das Mikrofon quasi einen "Unterton" afgenommen hat.
Ich hab mich jezt mal ein bisschen schlau gemacht, wie das funktioniert, den ADC zu verwenden, und hab dann einfach mal gemessen, was den an ADC3(also dem Pin, an dem das Signal der Empfängerkapsel anleigen sollte) so reinkommt. Mehr als 0 und 1 krieg ich aber nicht rein. Hier mal der Code, da ich mir nicht so sicher bin, ob das stimmt, was ich so abgeschrieben hab:
void Ping(unsigned char length)
{
count72kHz = 0;
TCCR2 = (1 << WGM21) | (1 << COM20) | (1 << CS20);
// Toggling of IO-Pin on
// generate the Chirp
while(count72kHz < length) {
OCR2 = 0x64 + length / 2 - count72kHz;
}
TCCR2 = (1 << WGM21) | (1 << CS20); // Toggling of IO-Pin off
OCR2 = 0x64; // set frequency to 40kHz
}
volatile unsigned int adc_wert;
SIGNAL (SIG_ADC)
{
adc_wert = ADCL + (ADCH << 8);
char text[6];
itoa(adc_wert,text,10);
SerWrite(text,strlen(text));
SerWrite(" ",2);
}
int main(void)
{
Init();
//LocalInit();
ADMUX = (1 << REFS0) | IR_RIGHT;
ADCSRA = (1<<ADEN) | (1<<ADFR) | (1<<ADSC) | (1 << ADIE) | (1<<ADPS0) | (1<<ADPS1) | (1<<ADPS2); // clk/128
while(TRUE) {
Ping(100);
}
return 0;
}
Für WHEEL_LEFT und RIGHT bekomm ich übrigens nur Werte im Bereich 1-5 rein, unabhängig von der Beleuchtung und von der Radstellung. Sollte das nicht mehr sein? Für die Batterie bekomm ich nur 466 rein.
Ich wäre sehr dankbar, wenn mir jemand sagen kann, ob meine ersten Ausflüge in die Bitschubserei und den ADC richtig sind, und was ich noch überprüfen könnte, um der Fehlerquelle im US-Modul auf die schliche zu kommen.
Ach ja, in der Anleitung von Iuma waren immer die Farbcodes für die Metallschichtwiderstände(blau) ich habe aber Kohleschichtwiderstände(besch, braun oder was auch immer) die Toleranz ist aber 5%, genau wie auf der Stückliste angegeben. Macht das was?
Dominik