-         

+ Antworten
Ergebnis 1 bis 4 von 4

Thema: Suche Bascom PWM Beispiele für Megas

  1. #1
    Gast

    Suche Bascom PWM Beispiele für Megas

    Anzeige

    Hi

    Suche Bascom PWM Beispiele für Mega16. Konkret Suche ich ein Beispiel zur Geschwindigkeitsregelung von 2 Motoren.

  2. #2
    Gast
    Vielleicht funktioniert das:

    Code:
    ' PULS WEITEN MODULATION (PWM)
    ' Sprache: Bascom AVR-Basic (Demoversion 1.11.6.2)
    ' Getestet mit 8 MHz auf 90S2333.Ausgabewert wird dann ca. 121 mal pro Sekunde
    ' erneuert.
    ' 3 Kanäle an Port B0, B1, B2
    ' Bewust einfaches Programm zur Erklärung wie eine Software PWM funktionieren kann.
    ' Timerinterupt, der in gleichmäßigen Abständen
    ' das Hauptprogramm unterbricht und ein Unterprogramm (Interupthandler) aufruft
    ' das die Ausgänge ein oder ausschaltet. Im Mittel ergibt sich dann der gewünschte
    ' Ausgabewert (Normale Multimeter sind langsam genug d.h. der Ausgabewert kann
    ' für Testzwecke direkt am Pin gemessen werden)
    ' Sept. 2002 Bernhard T.
    
    
    
    'Timer konfigurieren, Vorteiler auf 1 ist gut fürs Simulieren (evtl. anpassen, dann aber ausgang mit R-C Tiefpass)
    Config Timer0 = Timer , Prescale = 1
    
    'Definiere den Interrupthandler
    On Ovf0 Tim0_isr
    
    'Wichtig:
    Config Pinb.0 = Output        'Port B = Ausgang
    Config Pinb.1 = Output
    Config Pinb.2 = Output
    
    Enable Timer0                 'timer einschalten
    Enable Interrupts             'interrupts  einschalten
    
    Dim R As Byte                 ' In diese Variablen muss man
    Dim G As Byte                 ' im Hauptprogram die gewünschten
    Dim B As Byte                 ' Ausgabewerte laden
    
    Dim Z As Word                 'Byte                 ' Zähler
    
    Dim Ri As Byte                ' Hilfsregister
    Dim Gi As Byte
    Dim Bi As Byte
    
    
    
    
    Z = 0
    
    Do
       'your program goes here
    'Bsp.:
    
     'R = 51                       ' bei Ub= 5V ca. 1Volt
     'G = 102                      ' ca. 2V
     'B = 1                        ' 5V/256 = 0.01953125 V Soll
    
     R = 255
     G = 255
     B = 255
    
    Schleife:
    Goto Schleife
    
    
    Loop
    
    'Interupthandler, wird bei jedem Timerüberlauf(bei 8 MHz und Vorteiler=1 alle 32 µSec.)
    'aufgerufen:
    Tim0_isr:
    
        If Z = 0 Then             'Gewünschte Ausgabewerte an
        Ri = R                    'Hilfsregister übergeben
        Gi = G
        Bi = B
        Z = 255
        End If
    
        Z = Z - 1
    
        If Ri > 0 Then            'R > Port B.0
        Portb.0 = 1               'bei R = 51 wird hier
        Else                      'Port B.0 51 mal auf 1
        Portb.0 = 0               'und 205 mal auf 0 geschaltet
        End If                    'das ergibt bei 5V Ub im Mittel
        Ri = Ri - 1               ' ca. 1 V
        If Ri = 255 Then Ri = 0
    
        If Gi > 0 Then            'G > Port B.1
        Portb.1 = 1
        Else
        Portb.1 = 0
        End If
        Gi = Gi - 1
        If Gi = 255 Then Gi = 0
    
        If Bi > 0 Then
        Portb.2 = 1               'B > Port B.2
        Else
        Portb.2 = 0
        End If
        Bi = Bi - 1
        If Bi = 255 Then Bi = 0
    
        ' Hier könnten eigentlich noch weitere Kanäle eingefügt werden
    
        Return

  3. #3
    Gast
    What is the frequency of the PWM this code?

    I was just wondering.

    Thanks

    Pascal

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    22.07.2004
    Alter
    64
    Beiträge
    6
    Hallo Leute,

    habe das RNBFRA-Bord Fertig und alle mit gelieferten testbeispiele durch getestet... es läuft alles prima.

    Nun hänge ich fest, ich möchte zu dem Beispiel 'testprg5.bas' -ist für schrittmoteren links/rechts drehen- auch die geschwindigkeit ändern -regeln- wie stelle ich das an ???

    Unter den 'samples-dateien' im BASCOM-AVR finde ich keine beispiele dafür. dazu kommt das ich kein englisch kann

    habe schon hier und in suchmaschinen gegooglt aber bin nicht fündig geworden.

    der beitrag weiter oben sollte evtl. sowas sein aber stimmen dort die port's und wie binde ich den code an welcher stelle ein.

    hier mein Code: Testprg5.bas

    'Testprogramm 5
    'für
    'RoboterNetz Standard-Roboter Board RBNFRA 1.2
    '
    'Aufgabe:
    'Testen der Schrittmotortreiber
    'Dreht erst linken Schrittmotor in beide Richtungen
    'und dann rechten Schrittmotor in beide richtungen
    '
    'Autor: Frank
    'Weitere Beispiele und Beschreibung der Hardware
    'unter http://www.Roboternetz.de
    '################################################# ##

    Declare Sub Ledein
    Declare Sub Ledaus


    Const Writepowerport_adr = &H72 'I2C Adr PCF 2
    Const Readpowerport_adr = &H73 'I2C Adr PCF 2

    Dim I2cdaten As Byte 'Datenbyte aus PCF8574


    Dim I As Word


    $crystal = 8000000 'Quarzfrequenz
    Config Scl = Portc.0 'Ports fuer IIC-Bus
    Config Sda = Portc.1
    I2cinit


    '******** Diese 4 Befehle sind nur ab RNBFRA Version 1.2 (nicht in V 1.1)
    ' notwendig und bzw. möglich (erweiterte Energiesparfunktion und LED´s)
    ' Bei Board 1.1 bitte auskommentieren oder löschen
    I2cstart
    I2cwbyte &H74 'Schreibbefehl an PCF3 schicken
    ' Led´s ein ,Motorendstufen ein, Port-Peripherie ein, RBN-Bus Sleep Modus aus (also Peripherie aktiv)
    I2cwbyte &B00000010 'Datenbyte an PCF3
    I2cstop
    '*********




    Config Pind.6 = Output 'Schrittmotoren Ein/Aus
    Config Pinc.5 = Output 'Schrittmotor Links Richtung
    Config Pinc.3 = Output 'Schrittmotor Links Step

    Config Pinc.4 = Output 'Schrittmotor Rechts Richtung
    Config Pinc.2 = Output 'Schrittmotor Rechts Step

    Ledaus
    Portd.6 = 0 'Schrittmotoren erst mal ausschalten

    Wait 2

    Ledein
    Portd.6 = 1 'Beide Schrittmotoren einschalten

    'Linker Schrittmotor
    Portc.5 = 0 'Richtung
    Portc.3 = 0
    I = 400 'Anzahl der Schritte die Motor bewegt werden soll
    Do
    Ledaus
    Portc.3 = 0
    Waitms 5
    Portc.3 = 1
    Ledein
    Waitms 5
    I = I - 1
    Loop Until I < 1

    Portc.5 = 1 'Andere Richtung
    I = 400 'Anzahl der Schritte die Motor bewegt werden soll
    Do
    Ledaus
    Portc.3 = 0
    Waitms 5
    Portc.3 = 1
    Ledein
    Waitms 5
    I = I - 1
    Loop Until I < 1

    Wait 2

    'Rechter Schrittmotor
    Portc.4 = 0 'Richtung
    I = 400 'Anzahl der Schritte die Motor bewegt werden soll
    Do
    Ledaus
    Portc.2 = 0
    Waitms 5
    Portc.2 = 1
    Ledein
    Waitms 5
    I = I - 1
    Loop Until I < 1

    Portc.4 = 1 'Andere Richtung
    I = 400 'Anzahl der Schritte die Motor bewegt werden soll
    Do
    Ledaus
    Portc.2 = 0
    Waitms 5
    Portc.2 = 1
    Ledein
    Waitms 5
    I = I - 1
    Loop Until I < 1



    Portd.6 = 0 ' Schrittmotoren erst mal ausschalten
    Ledaus

    End




    Sub Ledein()
    I2cstart
    I2cwbyte Writepowerport_adr 'Schreibbefehl an PCF schicken
    I2cwbyte 15 'Datenbyte an PCF
    I2cstop
    End Sub

    Sub Ledaus
    I2cstart
    I2cwbyte Writepowerport_adr 'Schreibbefehl an PCF schicken
    I2cwbyte 0 'Datenbyte an PCF
    I2cstop
    End Sub
    ************************************************** ********

    wußte leider nicht wie ich den code anders hier einfügen kann.

    mfg Skorpi

+ Antworten

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

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