-         

Ergebnis 1 bis 4 von 4

Thema: Anfänger braucht Hilfe

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.09.2010
    Beiträge
    5

    Anfänger braucht Hilfe

    Anzeige

    Hallo,

    Ich wollte mich an ein Programm für einen Servostrecher machen, also eine Schaltung, die die eingehenden Signale auseinander spreizt und weitergibt an den servo. Nun ist mir noch einiges unklar, deshalb hier der Code:

    Code:
     $regfile "m8def.dat"
              $crystal = 1000000
    
    
    
    Config Portd = Output
    Config Portb = Input
    
    Dim Esignal As Byte
    Dim Msignalplus As Byte
    Dim Msignalminus As Byte
    Dim Aplus As Byte
    Dim Aminus As Byte
    Dim Bplus As Byte
    Dim Bminus As Byte
    
    
    Aplus = Esignal - 150
    Bplus = Aplus * 2
    Msignalplus = Bplus + 150
    
    Aminus = 150 - Esignal
    Bminus = Aminus * 2
    Msignalminus = 150 - Aminus
    
    
    
    
    Do
       Start:
       Pulsein Esignal , Pinb , 0 , 1
    
       Select Case Esignal
    
       Case Is < 150:
       Pulseout Portd , 0 , Msignalminus
    
       Case Is = 150:
       Pulseout Portd , 0 , Esignal
    
       Case Is > 150:
       Pulseout Portd , 0 , Msignalplus
    
       Case Else:
       Goto Start
       Waitms 10
       End Select
    
    
    Loop
    
    End
    Ich habe auf jedenfall verstanden, dass ich mehr mHz brauch als den einen, den der Mega8 hat, möglichst 8mHz aber nun versteh ich das mit Pulseout nicht, gibts da irgendwie einen Umrechenfaktor, den ich vergessen habe? Warum kann man nicht einfach Pulseout = 150 schreiben?
    Ja ich hatte bereits die Bascom-Hilfe mir angeschaut, wurde aber daraus auch nicht schlauer.
    Danke im Voraus!
    mfg

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    19.02.2010
    Beiträge
    67
    PULSEOUT PORT , PIN , PERIOD

    PORT
    Name of the PORT. PORTB for example

    PIN
    Variable or constant with the pin number (0-7).

    PERIOD
    Number of periods the pulse will last. The periods are in uS when an XTAL of 4 MHz is used.



    Eigentlich klärt diese hilfe doch ausreichend auf.
    uS sollte man da wohl als µs=Mikrosekunden lesen.
    Abhängig von der Variable Period (oder dem Wert der dort an der Stelle steht, wird ein Highsignal von entsprechender Länge ausgegeben.

    Wie lang diese Länge ist, bestimmt der Wert und die Geschwindigkeit des Rechners.

    hast du also 4MHz Taktfrequenz so würde ein Wert von 150 gleich 150µs entsprechen.

    Hast du nur 1 MHz Taktfrequenz, so ist der entsprechende Puls also 4 mal so lang, also 600µs.


    Was mir ansonsten auffällt - die Rechnerei am Anfang, vor dem Main, da ist die Variable Esignal=0, da ihr kein Wert zugewiesen wird.

    In der Schleife liest du dann Esignal ein und gibst die Pulse aus...allerdings was macht das Case Else? egal welchen Wert nun Esignal hat - es ist definitiv größer, kleiner oder gleich 150....für welchen Zustand sollte dann die Else-Bedingung zutreffen?

    Weiterhin, ich weiß nicht was ein Servostretcher ist - aber wenn es sich da um die Ansteuerung von Servomotoren handelt, gibt es einfachere Befehle, die das Timing gleich mit sich bringen, anstelle Pulseout.

    Suche mal unter CONFIG Servos


    Gruß BoGe-Ro

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    29.09.2010
    Beiträge
    5
    Danke für die Antwort, hatte mir da was falsches gedacht.
    Aber im Pulsein-Befehl habe ich richtig verstanden, dass die Schleifen gezählt werden, richtig? Also bei Servomittelstellung entspricht dies Pulsein =150 oder muss diese Zahl auch an den Quarz angepasst werden? In der Bascom Hilfe steht davon nichts genaueres.
    Und die Servomittelstellung würde ich also über Pulseout mit einem Wert von 750 bei einem 8Mhz Quarz realisieren?
    Und müssen Rechnereien in meinem Fall unterhalb der Messerfassung stattfinden und können somit nicht am Anfang stehen bzw. vor der Messwerterfassung?
    Schlussendlich, steht der Pulseout-Befehl dem Servobefehl außer im Code in etwas nach?
    Viele Fragen, aber danke schonmal für deine Hilfe

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    19.02.2010
    Beiträge
    67
    So, wie ich die Hilfe zu dem Pulsein-Befehl verstehe, werden ganze 10µs-Schritte gezählt. Wobei direkt im nachfolgenden Satz relativiert wird - es würde von der Quarz-Frequenz abhängig sein.

    Ich würde das so deuten, dass es halt nur annähernd 10µs sind.

    Zum Pulseout: 150 entspricht 150µs bei 4MHz
    dann dürften 150 bei 8 MHz nur 75µs entsprechen.

    beim Pulseout-Befehl musst du dich aber letztlich selber um die Frequenz deiner Ausgabe kümmern - also letztlich die Zeit ausrechnen, wann der nächste Pulseout-Befehl kommen muss.

    Wenn du das Config Servos - Construct nutzt, wird dir dies alles abgenommen. Einmal initialisiert, änderst du nur noch die Variable, welche den Ausgabewert darstellt, Bascom nutzt dann einen Timer, um immer wieder zum richtigen Zeitpunkt die richtige Pulsbreite auszugeben

    Und dies zum Preis von einem Timer - den du wahrscheinlich auch benötigen würdest, um den Startzeitpunkt des nächsten Pulses zu finden.

    gib einfach mal Config bei Bascom ein, drücke F1 und Suche die Stelle wo Config Servos steht


    Gruß BoGe-Ro

    Gruß BoGe-Ro

Berechtigungen

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