Archiv verlassen und diese Seite im Standarddesign anzeigen : Suche Bascom PWM Beispiele für Megas
Hi
Suche Bascom PWM Beispiele für Mega16. Konkret suche ich ein Beispiel zur Geschwindigkeitsregelung von 2 Motoren.
Vielleicht funktioniert das:
' 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
What is the frequency of the PWM this code?
I was just wondering.
Thanks
Pascal
Skorpion011152
29.08.2004, 18:35
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.