- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 16

Thema: RC Summensignal Atmega8

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2010
    Beiträge
    356

    RC Summensignal Atmega8

    Hallo, ich habe folgendes Problem:
    Ich möchte mit dem Atmega ein RC Summensignal generieren.
    Die Auflösung sollte mindestens 200 Schritte sein.
    Die wertvorgabe soll über RS232 vom pc kommen.
    Kanalanzahl ist ja eigentlich egal, aber es müssen mindestens 4 sein.

    So nun das, was es zu einem Problem macht:
    Ich habe nur einen Myavr MKII zur verfügung, und der läuft nur mit 3,6468 MHz
    Ich vermute mal, das das ziemlich kanpp wird oder ?
    Ich hab mir schonmal von dem rntool dafür die zeiten für die timer ausrechnen lassen, sowie das beispiel im Wiki angekuckt.
    kann mir vieleicht einer einbeispiel geben wie ich das regeln kann ?
    Hab nicht wirklich ahnung von Bascom und microcontrollern, aber eine fertige lösung, die das summensignal ausspuckt hab ich nicht gefunden.
    DAS RS232 Protokoll soll so aufgebaut sein:
    #S als startmarkierung und dann die werte der einzelnen kanäle als bytes.

    Ne fertiglösung wär mir am liebsten, aber das kann ich hier nicht erwarten oder ?

    MFG Thalhammer

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.04.2008
    Alter
    40
    Beiträge
    557
    Ne fertige Lösung habe ich jetzt nicht parat. Und ich weiß auch nicht ob mein erster Gedanke brauchbar ist oder total ineffizient aber ich probiere es trotzdem und lasse mich gerne korrigieren:

    Ich würde einen Timer mit Compare-Interrupt initialisieren. den ersten Interrupt gleich bei 0 oder 1 auslösen lassen -> Pin auf High, den Wert für den ersten Kanal auf die Timerlaufzeit umrechnen und den Timer bei diesem Wert den nächsten Interrupt auslösen lassen. Bei diesem dann entsprechend den Pin auf Low und neuen Interruptwert festlegen. Das ganze Spiel dann so oft wiederholen lassen bis die gewünschte Anzahl an Kanälen entstanden ist.
    Alles ist möglich. Unmögliches dauert nur etwas länger!

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2010
    Beiträge
    356
    Also hab jetzt ein bischen mit den timerwerten gespielt und nach gerechnet.
    bei dem 16 Bit timer und einem prescaler von 1 währe 0,1 ms ungefär ein timer wert von 369.
    heist: um die werte die vom pc kommen(1 -200) in timer werte umzurechenen währe folgende gleichung nötig:
    1 : pc_wert * 3690 = Timerwert für den impuls
    oder irre ich mich da ?
    heist um die zeit bis zum nächsten interupt einzustellen müsste ich doch nur den timer auf den maximalwert des timers minus diesen wert setzen oder ?
    Ich hab noch nicht viel mit timern gearbeitet, von daher weis ich nicht wie genau man sowas realisieren kann.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.04.2008
    Alter
    40
    Beiträge
    557
    Dein Timer macht bei einem Prozessortakt von 3,6468 MHz und einem Prescaler von 1 entsprechend 3,6468*10^6 Schritte pro Sekunde. Bei einer Periodendauer von 20ms pro Kanal macht der Timer (3,6468*10^6)/50=72936 Schritte. Ein 16bit-Timer läuft bei 2^16-1=65535 (man fängt bei 0 an zu zählen) über. Du musst also einen Vorteiler wählen, damit dein Timer innerhalb von 20ms diesen Wert nicht überschreitet. (3,6468*10^6)/65535 = 55,6 also brauchst du einen Prescaler von 64.

    Damit macht dein Timer in den 20ms Periodendauer, die ein RC-Kanal hat, (3.6468*10^6)/64 = 56981 Schritte. Ein Servosignal ist im Normalfall 1ms (Stellung ganz links) bis 2ms (Stellung ganz rechts) HIGH (man kann den Verfahrweg durch entsprechend kleinere bzw. größere Werte noch aufbohren, das müsstest du dann ausprobieren was du brauchst).

    Wenn du den Verfahrweg jetzt noch in 200 Schritten auflösen möchtest unterteilst du die "High-Zeit" für jeden Kanal in 1ms/200Schritte = 0,005 ms/Schritt. Damit ergibt sich für jeden Schritt Auflösung eine Timerlaufzeit von rund 14,25 Schritten.

    ACHTUNG: In meinen Ausführungen bitte nicht die Schritte, die der Timer macht mit den Schritten deiner Auflösung verwechseln/durcheinander bringen.
    Geändert von Arkon (10.08.2011 um 16:42 Uhr)
    Alles ist möglich. Unmögliches dauert nur etwas länger!

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2010
    Beiträge
    356
    Also ich hab mal meinen code angehangen.
    nur irgendwie funktionierd der nicht
    Der servo macht nicht, und der Controller giebt komischerweise auch nichts über den RS232 aus.
    Angehängte Dateien Angehängte Dateien

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.04.2008
    Alter
    40
    Beiträge
    557
    Wie gesagt habe ich von Bascom keine Ahnung. Da du aber fleißig kommentierst und man sich ja ein paar Sachen ableiten kann versuch ich mal etwas zu dem Code beizutragen:

    Prescale = 1
    Wie oben berechnet musst du den Prescaler auf mindestens 64 setzen, da der Timer sonst zu schnell arbeitet und überläuft bevor die 20ms Periodendauer vom RC-Signal rum ist. Außerdem weiß ich nicht, ob du in Bascom den Interrupt definieren musst. Ein Timer kann wie gesagt bei verschiedenen Einflüssen einen Interrupt. Wir benötigen den "Clear Timer on Compare match" (CTC) wobei man einstellen kann, ob beim treffen des eingestellten Wertes (Compare-Wert) der Timer genullt werden oder weiter laufen soll. Bei meiner Idee müsste der Timer weiterlaufen.

    In deiner Interruptroutine steht der Befehl Timer1=64428. Ich gehe mal davon aus, dass du damit versucht den neuen Wert festzulegen, bei dem der Timer einen Interrupt auslöst. Einen solchen Befehl finde ich aber nicht während der Initialisierung. Dem Tmer würde also ein Wert fehlen bei welchem er den ersten Interrupt auslöst.

    Ausserdem hast du unter
    If Phase = 3 Then
    den Befehl Phase = 3. Da sollte bestimmt =4 stehen damit er in die letzen Phase springt.

    Zudem sieht mir die ganze Interruptroutine nicht so aus, als würde es ein verlässliches Servosignal erzeugen.
    Geändert von Arkon (11.08.2011 um 08:46 Uhr)
    Alles ist möglich. Unmögliches dauert nur etwas länger!

Ähnliche Themen

  1. 12 Kanal Summensignal
    Von MiniMax im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 19.12.2010, 14:08
  2. Summensignal Empfänger
    Von Bongo1st im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 10.11.2010, 20:43
  3. RC Summensignal erzeugen
    Von YaNnIk im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 25.02.2010, 17:44
  4. Welche Timerwerte bei Summensignal?
    Von hunni im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 01.09.2009, 22:34
  5. Summensignal bei RC-Empfänger
    Von robotfreak im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 05.08.2007, 22:53

Berechtigungen

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

Solar Speicher und Akkus Tests