stimmt schon. ich wundere mich nur warum noch spannung anliegt obwohl alles aus ist. isrt aber auch egal.... komisches ding ist das.
kannst du irgendwie ein oszilloskop organisieren (und damit umgehen (lassen))?
am besten tauche ich den asuro ins wasser...
edit: aber was bringt das kurzschliessen der kondensatoren? Die laden sich doch beim erneuten einschalten wieder auf oder?
gruß inka
stimmt schon. ich wundere mich nur warum noch spannung anliegt obwohl alles aus ist. isrt aber auch egal.... komisches ding ist das.
kannst du irgendwie ein oszilloskop organisieren (und damit umgehen (lassen))?
leider nicht...
gruß inka
das ist ärgerlich..
naja. 25mV sind nicht weiter wild... 0,5V sind viel.
trotzdem muss es irgendwas an deiner erweiterungsplatine sein, wenn am mikrofon/receiver keine spannung ist dann ist das schon eigenartig.
ich werde in ein paar tagen wenn ich wiederheim bin mal an meinem asuro messen was da noch für spannung ist nach dem ausschalten.
ich habe neue erkenntnisse:
aus dem code (ich poste den hier mal, damit wir über das gleiche reden)
habe ich die motoren auskomentiert und zufällig festgestellt dass ohne dass ich was tue die status LED die farbe von grün in rot wechselt.Code:#include "asuro.h" void LocalInit(void) { // Change Oscillator-frequency of Timer 2 // to 40kHz, no toggling of IO-pin: TCCR2 = (1 << WGM21) | (1 << CS20); OCR2 = 0x64; // 40kHz @8MHz crystal ADCSRA = 0x00; // ADC off // Analog comparator: ACSR = 0x02; // Generate interrupt on falling edge ADMUX = 0x03; // Multiplexer for comparator to // ADC pin 3 SFIOR |= (1 << ACME); // Enable muliplexing of comparator DDRD &= ~(1 << 6); // Port D Pin 6 is input! } 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 } int main(void) { int pos, i; int posmarker; Init(); LocalInit(); while(TRUE) { posmarker = 0; Ping(20); for(pos = 0; pos < 100; pos++) { Sleep(10); if((ACSR & (1 << ACI)) != 0) { if(posmarker == 0) { posmarker = pos; } } ACSR |= (1 << ACI); } if(posmarker > 10) { StatusLED(GREEN); //MotorDir(FWD, FWD); //MotorSpeed(200, 200); } else { StatusLED(RED); //MotorDir(FWD, RWD); //MotorSpeed(0, 200); for(i = 0; i<100; i++) { Sleep(200); } } } return 0; }
Bin dem nachgegangen und stellte fest, dass wenn ich in einer entfernung von ca. 4-5 cm vor den US kapseln die hand im bereich von ca. 2mm vor und zurück bewege sich das umschalten reproduzieren lässt.
Gleichzeitig mit dem wechsel auf rot ändert sich die spannung am transmitter von ca. 45mV auf 5mV. Bei dem receiver passiert spannungsmässig immer noch nix = 0V. Kann man damit was anfangen?
gruß inka
hmm.... stören die motoren evtl zu stark? hlat den asuro mal in richtung von etwas festem (wand) und teste noch ein wenig... funktioniert das ganze doch?
hi damaltor,
ich wollte nicht zu früh hurraaa schreien, habe also noch ein paar tests gemacht, es funktioniert jetzt. Ich kann es mir nur so erklären, dass ich beim löten doch noch eine kalte löstelle hinterlassen habe und diesen fehler beim nachlöten behoben habe...
danke nochmals
edit:
p.s.
sind die programme von weja mit ultrasonic.c irgendwie in die neue lib als funktionen reingekommen oder nicht?
gruß inka
hi,
ich habe festgestellt, dass die reaktion auf hindernisse bei eingeschalteten motoren doch unzuverlässiger ist als zuerst gedacht. Ich nehme an, die US-kapseln werden (wie im forum schon mal beschrieben) durch den US-anteil bei dem krach den die motoren veranstallten gestört. Was kann ich dagen tun? Ändert sich das bei besser einstellung am poti? Ich habe mir auch überlegt - weil, wenn der asuro schräg gegen die wand ankommt, die US-kapseln nicht reagieren können - die seitlichen taster mit zu richtungsänderun zu nehmen, ich schaffe es einfach nicht, den teil des programms (im code auskomentiert) an die richtige stelle zu bekommen. Könntet ihr mir paar tipps geben? Zumindest wie ich die stelle erkennen kann, wo die US abfrage stattfindet, denn davor müsste ja die abfrage der tasten hin...
danke...Code:#include "asuro.h" unsigned char sw, sw0, sw1, sw2; void LocalInit(void) { // Change Oscillator-frequency of Timer 2 // to 40kHz, no toggling of IO-pin: TCCR2 = (1 << WGM21) | (1 << CS20); OCR2 = 0x64; // 40kHz @8MHz crystal ADCSRA = 0x00; // ADC off // Analog comparator: ACSR = 0x02; // Generate interrupt on falling edge ADMUX = 0x03; // Multiplexer for comparator to // ADC pin 3 SFIOR |= (1 << ACME); // Enable muliplexing of comparator DDRD &= ~(1 << 6); // Port D Pin 6 is input! } 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 } int main(void) { int pos, i; int posmarker; Init(); LocalInit(); while(TRUE) { posmarker = 0; Ping(20); for(pos = 0; pos < 100; pos++) { Sleep(10); if((ACSR & (1 << ACI)) != 0) { if(posmarker == 0) { posmarker = pos; } } ACSR |= (1 << ACI); } /*sw0=PollSwitch(); // Schalter einlesen und für eine Runde speichern sw1=PollSwitch(); sw2=PollSwitch(); if ((sw0==sw1) && (sw0==sw2)) sw=sw0; else sw=0; if (sw==32) {StatusLED (YELLOW); //MotorDir(FWD, RWD); //MotorSpeed(0, 200); } else if (sw==1) {StatusLED (YELLOW); //MotorDir(FWD, RWD); //MotorSpeed(0, 200); } else */ if(posmarker > 10) { StatusLED(GREEN); MotorDir(FWD, FWD); MotorSpeed(200, 200); } else { StatusLED(RED); MotorDir(FWD, RWD); MotorSpeed(0, 200); for(i = 0; i<100; i++) { Sleep(200); } } } return 0; }
gruß inka
ich würde ganz primitiv versuchen, die ultraschallsensoren mit schaumstoff oder watte von hinten auszupolstern... vielleicht dämmt das die motoreneräusche minimal, zumindest von hinten...
So ...
Also ich hab nen Asuro mit der Ultraschallerweiterung
(funzt soweit auch alles ganz gut...)
nun hab ich mal die neue lib 2.7 installiert und da gibts ja nun das
mit dem count72kHz nich mehr...
so... nun wollt ich mal wissen ob jemand das problem schonmal anschaulich
gelöst hat und mir da ggf mal helfen kann...
des weiterem find ich das mit der timebase cool das es ja nun gibt...
sowas in der richtung hab ich bei den älteren lib vermisst...
(und aus dieser anleitung für timer bei AVR prozessoren heraus
was zu testen klappt bei mir auch nich so von daher ist das mit der timebase schon ganz nett...)
gibts denn ne möglichkeit diese 2 funktionen in der lib 2.7 nutzen zu können?
- ultraschall
- timebase...
Vielen Dank schonmal im vorraus...
Lesezeichen