- LiFePO4 Speicher Test         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 28

Thema: Servo ansteuern mit dem Atmega88 - Basics.

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    21.05.2009
    Ort
    Deutschland/Südhessen
    Beiträge
    12
    Anzeige

    E-Bike
    Schade, dass es mit dem Umstecken nicht (so einfach) geklappt hat. Aber welches Programm hattest Du denn am laufen, als Du das Servo umgesteckt hattest? Dieses von Dir oben genannte?

    Do
    Servo(1) = 90
    Waitms 300
    Servo(1) = 50
    Waitms 300
    Loop
    End

    Dann würde es sich ja korrekterweise (etwas) hin- und herbewegen...

    Ich hatte mal was für den ATtiny25 geschrieben, vielleicht kannst Du ja was aus dem Code rauslösen und modifizieren - und probieren, ob es damit funktioniert.

    http://www.jurmo.de/AVR/

    Cheers
    Christoph

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Hallo Sand64,

    der "Servo"-Befehl läuft erst ab Taktfrequenzen von mindestens (!) 8 MHz korrekt. Warum weiss ich auch nicht, hab´s aber mal bei 1 MHz probiert, und grotesk falsche Pulsweiten mit dem Oszi gemessen (die jedes Servo sofort an den Anschlag zwingen).

    Wie Besserwessi ja schon vorgeschlagen hat, solltest Du als erstes checken, mit welchem Takt Dein µC läuft. Das stellt man nicht mit $Crystal ein, sondern mit den Fusebits. Die $Crystal-Angabe ist "nur" wichtig, damit der Compiler programmierte Zeiten (wie z.B. bei waitms XX) richtig berechnen kann. Läuft der Controller mit einer anderen Frequenz als bei $Crystal geschrieben, kommen falsche Zeiten raus - Und so kannst Du es auch checken:

    Code:
    $Crystal = 80000000
    DDRX.Y = 1   'Port X.Y als Ausgang konfigurieren
    
    Do
    Toggle PortX.Y  'logischen Zustand von PortX.Y wechseln
    waitms 500       '0,5 Sekunden Pause
    Loop
    Wenn Deine LED an PortX.Y mit 1 Hz blinkt, stimmen Taktfrequenz und $Crystal-Angabe überein.

    Servo(1) ist eine Variable die die mit Reload 10 alle 10 ms an den Servo geschickt wird ?
    Nicht ganz - der Befehl Servo generiert Rechteckimpulse und schickt sie automatisch alle 20ms raus. Die Länge der Impulse ist Servo(x) * Reload (in µS). Bei Reload = 10 und Servo(1) = 90 dauert der Impuls also 900µS, wobei Servos i.d.R Impulsbreiten zwischen 800 und 2200µS verarbeiten.

    Wenn Du schon ein Oszi hast, schau Dir die Impulse doch mal an!

  3. #13
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    28.03.2008
    Ort
    Huntlosen
    Alter
    32
    Beiträge
    391
    Habe zufällig gerade das gleiche Problem, dass das Servo einfach nur richtung anschlag läuft und dann nix. egal was ich mache. (Wollte die ganze Schaltung schon fast Richtung Mülltonne werfen).
    Der Servo befehl läuft erst ab 8 MHZ?
    Dann muss ich woll n externe Quarz anschließen, oder sehe ich das falsch
    Hunni

  4. #14
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Also, bevor Du zur Mülltonne gehst, sag Bescheid - dann schicke ich Dir meine Adresse per PN

    Ab wecher Taktfrequenz der Servo-Befehl genau funktioniert, weiß ich nicht 100% genau. Ich hab´s mir aber mal bei 1 und 2 MHz auf dem Oszi angesehen, und da kamen Impulsbreiten heraus, die so garnichts mehr mit dem erwarteten Wert zu tun hatten. 8 MHz ist glaube ich schon o.k., und die können viele Controller ja auch über den internen Oszillator generieren. Über die genaue minimale Taktfrequenz findest aber Du bestimmt was, wenn Du hier im Forum rumstöberst...

  5. #15
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    28.03.2008
    Ort
    Huntlosen
    Alter
    32
    Beiträge
    391
    öhhh...... ich dachte immer die internen Oszilatoren können nich mehr als 1 MHZ!!!! ohhh man dann brauch ich ja gar nichts ändern.

    Ich werd das gleich ma ausprobieren.
    hunni

  6. #16
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Die internen Oszillatoren können auch mehr als 1 MHz. Bei den neueren Chips wie Mega88 sind wenigstens 8 MHz möglich, bzw. der Interne RC takt ist eigentlich immer 8 MHz und wird für NIedreigere Frequenzen geteilt. Voreingestellt ist ein Teiler von 8. Das kann aber sogar zur Laufzeit geändert werden.

    Beim Tiny26 / Tuny461 usw. gehen sogar 16 MHz mit dem internen RC.

  7. #17
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    28.03.2008
    Ort
    Huntlosen
    Alter
    32
    Beiträge
    391
    mhhh... kann ich das unter Bascom einfach mit $crystal machen oder muss ich da i welche fusebits setzten? Habe bis dato immer nur mit 1 MHZ gearbeitet, bin mir jetzt nicht mehr sicher wie das geht.

    hunni

  8. #18
    Neuer Benutzer Öfters hier
    Registriert seit
    21.05.2009
    Ort
    Deutschland/Südhessen
    Beiträge
    12
    Für ATtiny25 (siehe Post oben) ein Zitat:

    Code:
    $crystal=8000000 ' externer Quarz oder interner Oszillator mit Vorteiler 1 (Fuse CKSEL0=0 CKSEL1=0 CKSEL2=1 CKSEL3=0 SUT0=0 SUT1=0) 0=programmiert, 1=nicht programmiert
    
    ' Hier noch 1 MHz
    ' Setzt CLKPR auf Vorteiler=1 -> Kein Vorteiler -> 8 MHz statt 1MHz
    $ASM
        Ldi R16 , &B10000000
        Out CLKPR,R16
        Ldi R16, &B00000000
        Out CLKPR,R16
    $END ASM
    ' ... und hier geht's mit 8 MHz weiter...


    Cheers
    Christoph

  9. #19
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    28.03.2008
    Ort
    Huntlosen
    Alter
    32
    Beiträge
    391
    super cool man kann das einfach umschalten? genial =D>
    Danke schön für eure schnelle Hilfe

  10. #20
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    28.03.2008
    Ort
    Huntlosen
    Alter
    32
    Beiträge
    391
    bitte schön was ist daran falsch? ich habe versucht (ja ich habe noch nie assembler geproggt) den Assembler Code für einen Atmega8 umzuschreiben, anscheinend mache ich da etwas falsch. Könntet ihr bitte noch mal gucken.

    Code:
    $regfile "m8def.dat"
    $crystal = 8000000
    $baud = 300
    
    
    
    
    $ASM
    
        Ldi R16, &H0x0003 'Hier versuche ich den OSCCAL Register passenden
        Out Osccal , R16     'zu bringen
    $END ASM
    ' ... und hier geht's mit 8 MHz weiter...
    
    
    Config Servos = 1 , Servo1 = Portb.4 , Reload = 10
    Config Portb.4 = Output
    Enable Interrupts
    
    Do
    Servo(1) = 70
    Waitms 1000
    Servo(1) = 100
    Waitms 1000
    Servo(1) = 50
    Loop
    Hunni

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test