Hallo
Hier erzeuge ich das Servosignal mit Software-PWM und 36kHz Taktfrequenz:
Bild hier
http://www.youtube.com/watch?v=G836SWiYA_c
https://www.roboternetz.de/community...l=1#post437989
Gruß
mic
Hallo
Hier erzeuge ich das Servosignal mit Software-PWM und 36kHz Taktfrequenz:
Bild hier
http://www.youtube.com/watch?v=G836SWiYA_c
https://www.roboternetz.de/community...l=1#post437989
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!
Hey radbruch,
danke für deine schnelle Antwort - leider erst jetzt dazugekommen, mir das anzuschauen.
also nur grundlegend.. meiner Berechnung nach habe ich eine PWM Taktfrequenz von 7,3 kHz (15MHz/8/256)...oder ?
deinen Code schnall ich noch nicht wirklich ganz..
zu meiner Frage oben, kannst du dazu bitte noch was sagen => wenn ich alle 0,136ms einen Interrupt bekomm, behindert das doch sehr das restliche Programm der Bee, oder ? (fahren, US messen, ..)
danke & Grüße,
xmaniix
Ja dein Programm wird alle 0.136ms unterbrochen, egal was es macht (nicht wenn zu diesem Zeitpunkt Interrupts gesperrt sind weil z.B. ein anderer Interrupt abgearbeitet wird). Deswegen sollte man die Ineterrupt service Routinen kurz halten, z.B. nur eine Variable hochzählen, Flag setzten o.ä., damit das Programm nicht allzulange unterbrochen wird.wenn ich alle 0,136ms einen Interrupt bekomm, behindert das doch sehr das restliche Programm der Bee, oder ? (fahren, US messen, ..)
MfG Torrentula
Hallo
Kein Problem, ich habs nicht eilig.leider erst jetzt dazugekommen, mir das anzuschauen.
Mir ist völlig schleierhaft, was du da berechnest. Im oben verlinkten Beitrag findest du das:meiner Berechnung nach habe ich eine PWM Taktfrequenz von 7,3 kHz (15MHz/8/256)
TCCR2 = (1 << WGM21) | (1 << CS20); // CTC-Mode, no prescaling, no OC2-PIN!
OCR2 = 208; // 36kHz @15MHz
Der Timer2 zählt in diesem Modus von 0 bis 208, das ergibt 15000000/208 oder etwa 72000 Aufrufe der ISR pro Sekunde. Mit diesem Takt werden die LinienLEDs umgeschaltet, deshalb ist ihr Signal mit 36kHz moduliert:
if(status) {LineLEDs_on; status=0;} else {LineLEDs_off; status=1;}
(In der ISR)
Ein 36kHz-TSOP kann so modulierte Daten problemlos lesen. Und der Rest ergibt sich dann ebenfalls: 1/72000*1440 sind genau 20ms für die Wiederholfrequenz des Servosignals:
if(count<1440) count++; else {count=1; if(p) p--;};
(Ebenfalls in der ISR)
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!
Hey,
sry bin erst jez wieder im Lande, also hab nicht vergessen zurück zu schreiben !
Hab mir den Code jetzt genauer angeschaut und ist gut verständlich !
nur eins, was macht
Code:echo[14-servopos]=analog_getValue(ANALOG_EXT3);
Vielen Dank für den Code !
Grüße xmaniix !
PS: Bezüglich dem Video, was ist das, durch die leider schlechtere Qualität, nicht erkennbare halbrunde "Ding" (mit rotem Streifen) in der Mitte auf der Bee ? *neugierig*![]()
Eines meiner vielen unfertigen Projekte:
https://www.roboternetz.de/community...l=1#post436013
Echo ist ein Array in das ich die Sharpwerte der Positionen speichere:
Nach jedem Schwenk werden die Daten gesendet.Code:uint16_t echo[16]; while(1) { servo=35+servopos*10; delay(100); echo[14-servopos]=analog_getValue(ANALOG_EXT3); if((servopos==0) || (servopos==14)) { for(c=0; c<15; c++) { writeInteger(echo[c], 10); writeString("-"); } writeString("\n\r"); } servopos+=schwenk; if(!servopos) schwenk=1; else if(servopos==14) schwenk=-1; }
Geändert von radbruch (21.08.2012 um 19:02 Uhr)
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Sieht cool aus, dachte für nen kurzen Moment das ist ein Echolotwär natürlich auch cool !!
Ah ok, dann mach ich mich jetzt mal daran meinen Servo zum Laufen zu bringen ! (:
Greetz
Lesezeichen