-         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 23

Thema: Zeitverögerung im ms Bereich

  1. #11
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.06.2006
    Beiträge
    474
    Anzeige

    Ich bin mit C für Controler nicht vertraut und bin nicht sicher, ob ich das aus dem Prog des RN Wissen Bereiche richtig erkenne. Aber das ist doch nur für einen Servo oder?
    Ich hab das in Assembler gemacht. Das Prinzip ist, vier Ad Werte wandeln und im Ram speichern. Dabei wird immer Wert und dann dazugehöriger Pin abwechselnd gespeichert. Also der Kanal, auf dem der AD Wert entstand. Im nächsten Schritt wird alles der Größe nach sortiert. Zum Schluss muss noch der Fall behandelt werden, dass selbe Werte vorkommen. Dann wird der Timer2 mit IRQ alle bei 8 MHz, OCR2 = 32 gestartet und die Interrupte gezählt. stimmt die Anzahl mit einer Sollstellung überein, wird der entsprechende PIN LOW gesetzt und der nächste PIN sammt Stellung aus dem RAM gelesen.

  2. #12
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.373
    Zitat Zitat von The Man
    ... ist doch nur für einen Servo oder? ... Im nächsten Schritt wird alles der Größe nach sortiert ...
    Stimmt wohl schon. So ungefähr will ich es angehen - weil mein kleiner tiny13 eben etwas beschränkt ist mit 5 Pinnen - ohne VCC, GND und notRESET.
    Aber warum die Daten sortieren? Ein Servo braucht maximal 2 ms Aktivzeit und hat danach etwa 18 ms Pause. Dahinein würden also locker 7 weitere Servos (mit ein bisschen Puffer für IRS etc.) hineinpassen. ICH will das mit nur zwei Servos am tiny13 machen und arbeite (manchmal) dran.
    Ciao sagt der JoeamBerg

  3. #13
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    58
    Beiträge
    5.799
    Blog-Einträge
    8
    ICH will das mit nur zwei Servos am tiny13 machen und arbeite (manchmal) dran.
    Und ich will das mit 3-5 Servos am tiny13 machen (und kann den Kleinen noch mal nicht flashen *heul*).

    Ich versuche immer noch einen PWM-Kanal ... hinzukriegen.
    Deshalb verwende ich vorerst die Zählschleifen, weil ich denke, das kann ich dann am einfachsten vom Mega8 auf den Tiny übertragen. Später ist dann schon ein Timer geplant, aber solange das Programm nur die Servos ansteuern muss, reicht die Zählerei vollkommen.

    .. OCR2 = 32 gestartet und die Interrupte gezählt. Stimmt die Anzahl mit einer Sollstellung überein ..
    Genau so würde ich das auch lösen. Man könnte die Impulse auch gleichzeitig für alle Servos starten und dann nacheinander ausschalten.

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #14
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.373
    Zitat Zitat von radbruch
    ... am tiny13 machen (und kann den Kleinen noch mal nicht flashen *heul*) ... mic
    Hmmm, könnt ich (sollt ich) helfen? bitte PM
    Ciao sagt der JoeamBerg

  5. #15
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.06.2006
    Beiträge
    474
    radbruch hat folgendes geschrieben: "Genau so würde ich das auch lösen. Man könnte die Impulse auch gleichzeitig für alle Servos starten und dann nacheinander ausschalten. " So mache ich das auch und deshalb müssen die Werte sortiert werden. Auf die Art bekommt man viel Zeit in der der µC noch anderes machen könnte. Bin mir aber nicht sicher, ob ich die optimale Lösung habe, ich verwende alle drei RAM Pointer.
    (wie zitiere ich?)

    Ich denke es ginge auch, während man zum einen Servos stellt, mit dem selben Prinzip umgekehrt auch mehrere eingehende Signale zu erfassen.
    Chuck Norris kann Windows Vista auf einem Atmel in Assembler implementieren!
    Chuck Norris coded mit 3 Tasten:"1","0" und "compile"

  6. #16
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.373
    Hi, Man,

    zitieren ist einfach (viel einfacher als PWM programmieren).

    Zitat Zitat von The Man
    ...(wie zitiere ich?)...
    Einfach in dem Beitrag, aus dem Du zitieren willst, rechts oben auf den button (zitat) knipsen. Dann geht ein Fenster auf mit allen möglichen buttons zum breitschreiben, zum Einfügen von code, für smilies etc.

    Der Inhalt des Beitrags ist dann gleich in einem weissen Fenster - darin kannst Du editieren, damit Du nur genau das zitierst, was Du möchtest
    Zitat Zitat von The Man
    Hallo,

    ich möchte ein Servosignal mit nem µC generieren.
    OK? Ist das Zitieren jetzt klar?

    Und das mit dem Sortieren - ich mach meine Parallel-Servos auf einem Tiny13 (womit arbeitest Du?), der hat nur einen Timer und nur mit 8 Bit - und das ist dann zu langsam für den High-Pegel der "Servo-PWM". Obwohl ich noch andere Probleme mit dem Prozessortakt habe: - ich hab gerade DEN Erfolg der Woche hinter mir - nach ewiger Suche (fast die ganze Nacht und heute vormittags) und nachdem ich einen Oskar ausgeliehen und einen neuen Servo gekauft hatte, habe ich festgestellt, dass meine Servo-Routine nicht funzt, weil ich den Prozessortakt umgestellt hatte, von 4,8 MHz auf 1,2 .
    Ciao sagt der JoeamBerg

  7. #17
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.06.2006
    Beiträge
    474
    [quote="oberallgeier"]

    Und das mit dem Sortieren - ich mach meine Parallel-Servos auf einem Tiny13 (womit arbeitest Du?), der hat nur einen Timer und nur mit 8 Bit - und das ist dann zu langsam für den High-Pegel der "Servo-PWM". [quote]

    hm... irgendwas habe ich net verstanden

    Ich benutzte dem mega8, hab das mit dem 16 Bit Timer aber noch nicht drauf => Timer2
    ich hab mir das so ausgerechnet: 32/8000000Hz = 4*10^-6 s
    und das multipliziert mit 250 ergibt dann 1ms was ja dem Delta des HIGH Pegels entspricht. daher lasse ich die schleife zuvor einmal "sinnlos" bis 250 durchlaufen, um sozusagen die 1ms offset zu kriegen.
    Chuck Norris kann Windows Vista auf einem Atmel in Assembler implementieren!
    Chuck Norris coded mit 3 Tasten:"1","0" und "compile"

  8. #18
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.373
    Hi, Man,
    Zitat Zitat von The Man
    ... hm... irgendwas habe ich net verstanden....
    Ist ja nicht wirklich wichtig. Dir fehlt im Text der slash - das ist der / ... der Schrägstrich über der "7" - vor dem zweiten "quote" - also direkt nach der zweiten eckigen Klammer-auf. Du hast einfach zuviel gelöscht . Das ist an HTML angelehnt. Ohne Schrägstrich = BefehlsANFANG, mit slash = Befehlsende. Alles was dazwischen ist, wird "ge-quotet".

    Zitat Zitat von The Man
    Ich benutzte dem mega8, hab das mit dem 16 Bit Timer aber noch nicht drauf => Timer2...
    Siehste - ich hab eben NUR den 8 bittigen Timer. Aber demnächst ... in zwei, drei Wochen ... Aber Weihnachten ist ja erst in zwei Monaten
    Ciao sagt der JoeamBerg

  9. #19
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.06.2006
    Beiträge
    474
    ich glaub, wir reden an einander vorbei.
    die sache mit den 8 Bit hat doch nur Auswirkung auf die Auflösung.
    Oder was meinst du mit


    Zitat Zitat von oberallgeier
    ich hab eben NUR den 8 bittigen Timer.
    Weltherrschaft ein Stück näher - MUHAHA!

  10. #20
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    58
    Beiträge
    5.799
    Blog-Einträge
    8
    Warum man die Werte sortieren muss, ist mir auch nicht klar. In C sieht meine ISR jetzt so aus:

    Code:
    ISR(TIMER0_COMP_vect)
    {
    	static int count;
    	if(count>x) PORTA &= ~16; // E_INT1 (Pin8)
    		else PORTA |= 16;
    	if(count>y) PORTC &= ~1; // SCL (Pin10)
    		else PORTC |= 1;
    	if(count>z) PORTC &= ~2; // SDA (Pin12)
    		else PORTC |= 2;
    	if(count<2000)count++;
    		else count=0;
    };
    Und die Timer-Initialisierung sieht so aus:

    Code:
    	DDRA |= 16;				// E_INT1 als Ausgang
    	DDRC |= 3;				// SCL und SDA als Ausgang
    
    	TCCR0 = (0 << WGM00) | (1 << WGM01)
    			| (0 << COM00) | (0 << COM01)
    			| (0 << CS02)  | (1 << CS01) | (0 << CS00);
    	OCR0  = 9;
    	TIMSK =  (1 << OCIE0);
    	sei();
    Weil ich zu faul war um im Datenblatt nachzuschauen (bin Timer-Anfänger) verwende ich als Basis das Beispiel aus dem RN-Wissen und den auf 100kHz "aufgebohrten" Timercode aus der RP6-Library. Das ist aber nur mein aktueller Zwischenstand, ich bin da noch am testen. Soweit ich das Datenblatt durchschaue ist der Timer0 beim ATMega32 einer der 8bitigen Sorte: "8-bit Timer/Counter0 with PWM"

    @oberallgeier:
    Mein ISP-Problem mit dem tiny13:
    https://www.roboternetz.de/phpBB2/viewtopic.php?t=34808

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •