Archiv verlassen und diese Seite im Standarddesign anzeigen : Attiny 13
Vidarodinssohn
25.07.2015, 21:01
30509Hallo an alle da Draußen
Ich bin hier als Neuling mit einem Problem und hoffe auf eure Hilfe.
Zur Vorgeschichte , mit dem Programm das ich geschrieben habe (ich komme leider nur mit Bascom zurecht weil ich früher schon mal mit Basic rumgespielt habe , von C+ und Assembler keine Ahnung ) sollen folgende Abläufe abgearbeitet werden.
1. Das Prog wartet auf den Befehl "Start" durch Fernsteuerung (Taster)
|
|
Funktioniert
|
|
2. Wenn Start erfolgt soll ein Motor über ein Relais (D91A.1.0 , Typ Readrelais) für eine vordefinierte Zeit anlaufen.
|
|
Funktioniert
|
|
3.Unmittelbar danach soll ein Servo mit der Geschwindigkeit x zum Anschlag fahren dann mit watms12 x-1 zurück.
|
|
macht das Prog nicht es dauert in etwa 1-1,5 Sekunden zwischen Motoraus und Servostart (gewünscht 0 Sekunden)
ehe der Befehl Ausgeführt wird
|
|
4. Der Motor soll wieder für eine vordefinierte Zeit anlaufen um zum Ausgagspunkt zurück zu kehren .
|
|
Macht das Prog , aber leider nicht immer sporadisch lässt es diesen Teil komplett weg.
|
|
5.Prog kehrt zum Ausgang zurück und wartet auf nächsten Impuls.
|
|
Funktioniert
Hier der Quelltext:
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 16
$swstack = 8
$framesize = 24
Config Portb.2 = Input
Config Portb.1 = Output
Config Portb.0 = Output
Do 'endlosschleife
Do 'erste für motor 12V
Dim W As Integer 'Variable festlegen
Pulsein W , Pinb , 2 , 1 'Abfrage Fernsteuerung
If W <= 150 Then 'alles unter 150 (cirka die Mitte) keine Aktion
Portb.1 = 0 'port bleibt aus
End If
If W > 150 And W <= 200 Then 'alles über 150 und unter 200 Setzt port PB1 auf 5V
Portb.1 = 1
End If
Waitms 1500 '1,5 Sekunden Warten dann PB1 auf 0V
Portb.1 = 0
Loop Until W > 150 'aus der ersten Schleife springen wenn W größer 150 ist
Hier dritt die Wartezeit auf obwohl keine engetragen ist
Do 'zeite für Servosteuerung
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10 'servo configurieren
Enable Interrupts 'Interrupts einschalten
Dim I As Byte
For I = 100 To 200
Servo(1) = I
Next I
For I = 200 To 100 Step -1
Servo(1) = I
Waitms 12
Next I
Disable Interrupts 'Ganz wichtig was du anschaltest solltest du auch ausschalten
I = 100
Loop Until I = 100 'aus der zweiten Schleife springen wenn I größer 100 ist
Das Teil wird Sporadisch komplett ausgelassen
Dim Z As Integer 'wert für Aussprung aus der dritten schleife festlegen
Z = 0
For Z = 1 To 300
Next Z
Portb.1 = 1 'PB1 auf 5V setzen
Waitms 1500 '1,5 Sekunden Warten dann PB1 auf 0V setzen
Portb.1 = 0
Loop Until Z = 300
Wenn ihr mir helfen könntet könnte ich das Projekt abschließen.
Grüße Henry
Las dein ATtiny über die Serielle-port zu dem PC senden was er macht in jeder stelle der Code und For-loops. Dabei auch die werten von W, I und Z mitsenden. So kannst du das ganze Prozess folgen und seht man wo er stecken bleibt in seiner loops.
Senden von Seriele-daten kostet aber Zeit, und deshalb kann es den Zeit-ablauf schaden.
- - - Aktualisiert - - -
Dein erste I-For-loop kostet kaum Zeit weil es Rasend-schnell von 100 bis 200 die Servo einstellt. Es hat kaum Zeit an zu laufen. Die 2te I-For-loop kostet 12x100 ms, dein 'merkwürdige' 1-1.5 Sekunden Wartezeit, wo den Servo von 200 bis auf 100 ablauft. Den Frage ist aber ob er bei 200 angefangen ist.
Die Z-For-loop kostet auch kaum Zeit weil dort nichts gemacht wird von 1 bis und inklusive 300. Könnte man auch weglassen. Dann schaltet Portb.1 ein, wartet es 1500 ms und schaltet Portb.1 aus. Danach endet den Z-Do-Loop gleich weil Z gerade 300 geworden ist am ende der Z-For-loop. Es wird gar nicht wiederholt.
Du hast kein Information ob das Programm sich in die W oder Z schleife befindet wann die Portb.1 für 1.5 Sekunden Hoch ist. Du vermutest das es zwischen W und I ist, aber wenn W weniger als 150 ist wird den Wartezeit nicht passieren. Das könnte einfach deine Patron-Observierungen irren.
Statt das an-/ausschalten von Portb.1 in beider 1500ms Wartezeiten solltest du in einer von den Wartezeiten die Portb.0 an-/ausschalten. Und mindestens mit beider Pins jeder ein Led leuchten lassen.
oberallgeier
26.07.2015, 09:14
... bin hier als Neuling .. und hoffe auf eure Hilfe .. Las dein ATtiny über die Serielle-port zu dem PC senden was er macht ...Der Tiny13 hat keinen Hardwareport für die serielle Schnittstelle. Ob das in Bascom als Soft-UART so einfach geht weiß ich nicht, aber für einen Neuling ist das sicher eine anspruchsvolle Aufgabe.
Ich selbst hatte die serielle Schnittstelle am Tiny13 schon probehalber in Assembler realisiert, das geht selbst ohne Quarz (!! $crystal = 9600000 !!) ganz ordentlich, sogar bis an die 19200 Baud. Auch reicht ja in diesem Fall nur ein Pinn für den Tx, das verträgt der Aufbau. Ob dann aber das ganze Programm - eigentliches Arbeitsprogramm, dazu Datenwandlung (Integer to ASCII - könnte auch entfallen), Senderotuine, Stack - noch in 1 KByte Flash und 64 Bytes SRAM passt scheint mir eher fraglich.
BTW: mich würde ja interessieren was der Compiler mit dem eingangs genannten Programm nach dem Übersetzen zu Codelänge und SRAM-Verbrauch nennt - das gibts doch sicher bei BASCOM ! ? ! ?
Der Tiny13 hat keinen Hardwareport für die serielle Schnittstelle. ...Oops, habe mich das nicht realisiert das es auch mc ohne gibt.
meldet bascom wenn der stack überlaufen könnte? http://bascom-forum.de/mediawiki/index.php/Stack_%26_Co.
warum in Do...Loop "Dim W As Integer " ? einmal davor reicht doch auch ;)
HeXPloreR
26.07.2015, 13:04
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 16
$swstack = 8
$framesize = 24
Config Portb.2 = Input
Config Portb.1 = Output
Config Portb.0 = Output
Do 'endlosschleife
Do 'erste für motor 12V
Dim W As Integer 'Variable festlegen
Pulsein W , Pinb , 2 , 1 'Abfrage Fernsteuerung
If W <= 150 Then 'alles unter 150 (cirka die Mitte) keine Aktion
Portb.1 = 0 'port bleibt aus
End If
If W > 150 And W <= 200 Then 'alles über 150 und unter 200 Setzt port PB1 auf 5V
Portb.1 = 1
Waitms 1500 'besser hier warten, oder?? 1,5 Sekunden Warten dann PB1 auf 0V
End If
'Waitms 1500 '1,5 Sekunden Warten dann PB1 auf 0V
Portb.1 = 0
Loop Until W > 150 'aus der ersten Schleife springen wenn W größer 150 ist
'Hier dritt die Wartezeit auf obwohl keine engetragen ist
Do 'zeite für Servosteuerung
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10 'servo configurieren
Enable Interrupts 'Interrupts einschalten
Dim I As Byte
For I = 100 To 200
Servo(1) = I
'waitms 12 '?? oder höher wählen
Next I
For I = 200 To 100 Step -1
Servo(1) = I
Waitms 12 '?? oder höher wählen
Next I
Disable Interrupts 'Ganz wichtig was du anschaltest solltest du auch ausschalten
I = 100
Loop Until I = 100 'aus der zweiten Schleife springen wenn I größer 100 ist
'Das Teil wird Sporadisch komplett ausgelassen
Dim Z As Integer 'wert für Aussprung aus der dritten schleife festlegen
Z = 0
For Z = 1 To 300 'diese und nächste Zeile sind unsinnig
Next Z
Portb.1 = 1 'PB1 auf 5V setzen
Waitms 1500 '1,5 Sekunden Warten dann PB1 auf 0V setzen
Portb.1 = 0
Loop Until Z = 300 'unsinnig mit For Z Schleife vorher - Z ist bereits 300
loop
end
Fehlt wohl mindestens noch ein Loop und End, oder?
Wenn keine Wartezeit gewünscht ist dann sollte sie auch nur in einen optional aktiven Block gesetzt werden.
Variablen können am Anfang des Codes gesetzt werden wenn sie eine bestimmte Nutzung haben sollen.
Ich würde dir empfehlen mit dem Pulseout Befehl zu arbeiten anstatt den Servobefehl zu benutzen.
Vidarodinssohn
26.07.2015, 19:25
Hallo
Erst einmal herzlichen Dank für die schnellen Antworten. Suuper.
Vieleicht hab ich mich unklar ausgedrückt darum noch mal.
Das Programm soll nach dem es per Pulsein (wert wird von RC Fernsteuerung zur verfügung gestellt) einen Wert größer 150 erkannt hat das restliche Programm abarbeiten (ohne Pause zwischen den einzelnen Do Loop Teilen).
Die waitms haben die Aufgabe
W es soll der Port Pb1 für 1500ms = 1,5s auf 1 gesetzt werden so das für diese Zeit über ein Relais ein 12V Motor seine Arbeit auf nimmt.
Das Funktioniert ganz ordentlich und wird gebraucht um über den wert Zeit einen Feinabgleich vornehmen zu Können da der Motor am Ende 10 mal exakt die beiden Schritte ausführen muss sonst würde sich durch die
Verschiebung eine heftige Ungenauigkeit ergeben.
Bevor jetzt der Bereich mit I abgearbeitet wird macht das Prog eine mir unerklärliche Pause. Normalerweise sollte Übergangslos von dem vorangehenden Do Loop zu diesem weiter gegangen werden , hier liegt mein
erstes Problem . Die Do Loop Schleife wird korekt abgearbeitet die Wartezeit wird gebraucht für die Optik Schnell rein langsam raus , in der Art eines Stoßdämfers.
Wenn I abgearbeitet ist soll der 12V Motor noch mal anlaufen um in die Startposition zurück zu kehren. Hier ist dann das 2. Problem , dieser Schritt wird völlig unvorhersehbar ausgeführt oder Komplett Ausgelassen.
Valen du hast Recht ich weiß nicht sicher wo das Prog hängen bleibt , doch wenn W < 150 ist sollja nichts passieren (tut es auch nicht) erst wenn der Wert größer wird soll der Rest abgearbeitet werden. Am Pb1 liegt das Relais und an Pb0 der Servo.
ober allgeier bitte sei mir nicht böse aber ich kann mit dem was du sagst im Moment noch nichts anfangen , der Compiler sagt gar nichts weil für ihn alles ok. ist sonst käme eine Fehlermeldung in Form "Error Fehler in Zeihle x"
Thomas$ wie meinst du das , Do Loop ist die Schleife in der gewartet werden soll bis sich der Wert W ändert . Unter deinem Link ist noch nichts enthalten.
HeXPloreR das erste wait in die IF Then zu setzen kann ich nachvolziehen und werde ich übernehmen . Das mit dem Servo habe ich oben noch mal erklärt wir haben es ausprobiert und es sieht fürs erste gut aus. Die letzte Schleife werde ich noch mal überarbeiten da es reichen müsste den Port Pb1 für benötigte Zeit auf 1 zu setzen und dann wieder auf 0. Wegen Loop , oben steht 2 mal Do unter einander ich hatte gedacht das dadurch das ganze verschachtelt ist un der Sprung der erst erfolgen soll wenn
Z = 300 ist darum Loop Until Z = 300. Das müsste dan in etwa so aussehen:
Portb.1 = 1
waitms 1500
Portb.1 = 0
Loop
Wenn jetzt end eingetragen wird bleibt das Programm dann nicht einfach stehen ?
Auf alle Fälle werde ich die Anregungen probieren. Eine Bitte kann jemand untersuchen warum die unerwünschte Pause auftritt ?
danke un freundlich Güße Henry
HeXPloreR
27.07.2015, 18:10
Ich frage mich wie der DC-Motor zu seinem Anfangspunkt zurückfahren soll? Dazu könntest Du ja nochmal was zu sagen.
Warum baust Du nicht eine einfache Schleife auf die genau einmal den Ablauf (Startsignal -> 1500sek Motor dreht -> Servo vor -> Servo zurück -> 1500sek Motor dreht(?) ) durchläuft wenn das Signal kommt? Und wenn das Signal nicht kommt alles aus bleibt.
Ansonsten kannst Du waits nur noch mit einem Hardwaretimer verhindern.
Die Syntax was ein Programm in Bascom betrifft ist ungefähr so:
- Chip
- Crystal
- Configuration
- Variablen ( das was Thomas$ meinte)
Do 'Endlosschleife ??
|
| [tab] ALLES an Code auch do loops die mit Until oder exit sonstwas abgebrochen werden sollen - damit es eine Endlosschleife bleibt!!
|
Loop 'Endlosschleife nur sicher auch wirklich Eine mit dem dazugehörigen "loop"!!
End
ggf Subs
Vidarodinssohn
27.07.2015, 19:42
Der Motor ist an ein Hebelsystem angebaut das eine Trommel bewegt und schrittweise um 36° pro Schritt geschoben wird.
Über den Rest muss ich erst mal nachdenken , gehe aber davon aus das du mir den benötigten Rat gegeben hast. Ich melde mich wieder.
Vidarodinssohn
28.07.2015, 13:52
So jetzt hab ich das ganze noch mal neu geschieben und die halbe nacht getestet und es ist dies hier herausgekommen .
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 16
$swstack = 8
$framesize = 24
Config Portb.2 = Input
Config Portb.1 = Output
Config Portb.0 = Output
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
Do
Do
Dim W As Integer
Pulsein W , Pinb , 2 , 1
If W <= 150 Then
Portb.1 = 0
End If
If W > 150 And W <= 200 Then
Portb.1 = 1
End If
Waitms 1450
Portb.1 = 0
Loop Until W > 150 ' Wiederhole do loop, bis Bedingung W>150 wahr ist.
Enable Interrupts 'Servoschleife
Dim I As Byte
For I = 100 To 200
Servo(1) = I
Next I
For I = 200 To 100 Step -1
Servo(1) = I
Waitms 12
Next I
Disable Interrupts
Portb.1 = 1
Waitms 8
Waitms 1700
Portb.1 = 0
Loop
End
Wie ihr seht hab ich die Anregungen mit berücksichtigt.
Aber wie es immer so ist , erst geht alles und dann nichts mehr , ich war kurz vorm Kollaps . Dann alles noch mal Messen und hol es der Teufel das Relais fällt nicht mehr ab . Gut messen wir doch mal den Anlaufstrom ,3,25A das Relais verträgt aber nur max. 1A , da hatte ich den Grund nun muss ich das ganze Platinenlayout umarbeiten weil der Motor nun mit einem BUZ11 angetrieben wird.
herzlichen Dank für eure Hilfe
Henry
ich mache mal ein paar änderungsvorschläge siehe code
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 16
$swstack = 8
$framesize = 24
//Configs
Config Portb.2 = Input
Config Portb.1 = Output
Config Portb.0 = Output
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
//Variablen
Dim W As Integer
Dim I As Byte
Do
Do
Pulsein W , Pinb , 2 , 1
If W <= 150 Then Portb.1 = 0
elseif W > 150 And W <= 200 Then
Portb.1 = 1
Waitms 1450
Portb.1 = 0
End If
//Nu warten wenn es auch sinvoll ist, sonst wartet der µC 1,5S und merkt dabei nicht das nächste start signal
Loop Until W > 150 ' Wiederhole do loop, bis Bedingung W>150 wahr ist.
Enable Interrupts 'Servoschleife
For I = 100 To 200
Servo(1) = I
Next I
For I = 200 To 100 Step -1
Servo(1) = I
Waitms 12
Next I
Disable Interrupts
Portb.1 = 1
Waitms 8
Waitms 1700
Portb.1 = 0
Loop
End
HeXPloreR
28.07.2015, 17:10
Wie ihr seht hab ich die Anregungen mit berücksichtigt.
Wenn Du das sagst ;)
Da war der Thomas$ wohl etwas schneller ;)
Hier mein Vorschlag (ungetestet) :
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 16
$swstack = 8
$framesize = 24
Config Portb.2 = Input
Config Portb.1 = Output 'Relais
Config Portb.0 = Output
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
Dim Puls as Integer 'dim W As Integer
Dim I As Byte
Enable Interrupts
' Relais Alias Portb.1
Do
Pulsein Puls , Pinb , 2 , 1 'Schelife geht solange in else Zweig bis Pukls größer 150 ist
If Puls > 150 then 'And Puls <= 200 'Then 'Steigt Puls/W überhaupt über 200 oder ist es sogar egal??
Portb.1 = 1 'Relais = 1 'Relais an
Waitms 1450
Portb.1 = 0 'Relais = 0 'Relais aus
' 'Enable 'Interrupts 'siehe oben
For I = 100 To 200 'Servoschleife anfang
Servo(1) = I
Next I 'schnelle fahrt des Servo
For I = 200 To 100 Step -1
Servo(1) = I
Waitms 12 'geregelte Rückfahrt des Servo
Next I 'Servoschleife ende
' 'Disable 'Interrupts 'weglassen! Siehe Hilfe >> mit F1 auf CONFIG (- servo)
Portb.1 = 1 'Relais = 1 'Relais an
Waitms 1708 'Waitms 8 + 'Waitms 1700
Portb.1 = 0 'Relais = 0 'Relais aus
else
Portb.1 = 0 'Relais = 0 'Relais aus
End If
loop
End
Wichtig hierbei ist das dieser Code lesbar ist, und nicht in unnötige Stücke zerhackt die man nicht mehr zuordnen kann.
Viele Grüße
Jörg
Vidarodinssohn
28.07.2015, 22:17
Hallo
Thomas meinst du das Prog bewegt sich in dieser Schleife bis der Wert sich ändert ?
Pulsein W , Pinb , 2 , 1 'also in diesen drei Zeilen
If W <= 150 Then Portb.1 = 0 'wenn nicht würde jedes mal der Rest abgearbeitet das wäre nicht gut
elseif W > 150 And W <= 200 Then
Portb.1 = 1
Waitms 1450
Portb.1 = 0
End If //Nu warten wenn es auch sinvoll ist, sonst wartet der µC 1,5S und merkt dabei nicht das nächste start signal
Ich werde es ausprobieren .
Jörg bei deinem Vorschlag ist die Frage ähnlich.
Do
Pulsein Puls , Pinb , 2 , 1 'Schelife geht solange in else Zweig bis Pukls größer 150 ist
If Puls > 150 then 'And Puls <= 200 'Then 'Steigt Puls/W überhaupt über 200 oder ist es sogar egal??
Portb.1 = 1 'Relais = 1 'Relais an
Waitms 1450
Portb.1 = 0 'Relais = 0 'Relais aus
' 'Enable 'Interrupts 'siehe oben
For I = 100 To 200 'Servoschleife anfang
Servo(1) = I
Next I 'schnelle fahrt des Servo
For I = 200 To 100 Step -1
Servo(1) = I
Waitms 12 'geregelte Rückfahrt des Servo
Next I 'Servoschleife ende
' 'Disable 'Interrupts 'weglassen! Siehe Hilfe >> mit F1 auf CONFIG (- servo)
Portb.1 = 1 'Relais = 1 'Relais an
Waitms 1708 'Waitms 8 + 'Waitms 1700
Portb.1 = 0 'Relais = 0 'Relais aus
else 'hier erst else bis dahin hat das Prog alles davor doch schon durchlaufen oder ?
Portb.1 = 0 'Relais = 0 'Relais aus
End If
loop
End
Sorry aber ich sagte es ja Anfänger , ich versuche es zu verstehen was für künftige Projekte wichtig ist.
HeXPloreR
29.07.2015, 16:51
Sorry aber ich sagte es ja Anfänger , ich versuche es zu verstehen was für künftige Projekte wichtig ist.
Du sagtest aber auch das Du schon ein wenig Basic programmieren kannst. Daher hatte ich vorrausgesetzt dass das grundsätzliche Konstrukt einer if-Schlleife bekannt ist.
Nun zu meinem Vorschlag: Die if-Schleife geht solange in den else-Zweig bis der Wert von Puls über 150 steigt. Dann wird der Code mit allen waits und was da so steht ausgeführt. Nimmst du in der Zeit die die Schleife zum durchlaufen benötigt die >150 wieder weg, dann geht es wieder in den else-Zweig. Im else-Zweig wird nur der Port ausgeschaltet.
Dieser Zweig ist theoretisch dazu da um den Code lesbarer zu haben, man sieht hier was passieren soll wenn "else" ausgeführt wird - OBWOHL es nicht nötig wäre es hinzuschreiben weil der Code sowieso erst in der oberen If-Schleife den Port einschaltet und auch wieder ausschaltet. Er kann also ausserhalb der oberen If-Schleife nie an sein.
Aber um grundsätzlich richtig mit Schleifen zu arbeiten ist es eine gute Übung.
Ich empfehle dir dieses Bascom-Tutorial(klick mich) (http://halvar.at/elektronik/kleiner_bascom_avr_kurs?PageSpeed=noscript) mal anzusehen.
Viele Grüße
Jörg
Vidarodinssohn
29.07.2015, 20:50
Hallo
Jörg , du ast ja recht mit Basic , aber das war zu C64 Zeiten und auch nur so rumgespielt nicht wirklich ernsthaft halt reingeschnuppert . Meinen damaligen Helfer hab ich durch nen Verkehrsunfall verloren später niemanden gefunden der sich damit ernsthaft beschäftigt . Da war dann irgendwann die Luft raus. Als ich dann diese µC für mich enddeckt habe kam ich drauf die für RC-Modellbau zu nutzen (ich weiß ich bin nicht der erste oder einzige ,so vermessen bin ich nicht) .
Ich hab die gemachten Vorschläge getestet .
Thomas bei deinem streikt unter BASCOM-AVR der Compiler mit der Fehlermeldung IF THEN expected oder LOOP expected .
Jörg dein Vorschlag macht zwar keine Faxen unter BASCOM-AVR aber in der Schaltung zuckt der Servo hin und her auf die Fernsteuerung reagiert der µC aber gar nicht.
Zu dem Ganzen muss ich folgendes sagen , den µC der alles so macht wie er soll hab ich beiseite gelegt . Ich habe noch 4 Attiny13 auf denen Blinklichter und solche Progs gehen aber egal ob ich die Vorschläge oder mein Prog aufspiele die machen nichts , nun hab ich mich auf die Suche , nach einer Möglichkeit um diese Fuse bits aus zu lesen , gemacht bin aber noch nicht fündig geworden. Mein Plan wäre diese Fuse bits zu vergleichen , nicht das da was unterschiedlich ist und dadurch das Prog nur auf einem µC funktioniert .
Wenn einer von euch einen Tipp in dieser Richtung hat wäre nett . Meine µC´s habe ich damals gebraucht gekauft weis also im Moment nicht wie die eingestellt sind , neue sind bestellt dauert aber noch.
Mit den besten Grüßen
Henry
PS:
Bie den Chips lag es an den Fuse Bits , ausgelesen bei dem neuen eingeshrieben , siehe da es funktioniert . Jetzt läuft das Prog so wie es soll , jetzt noch der Praxistest und die Laufzeiten des Motors feinjustieren und dann :p:p:p:p
Herzlichen Dank für eure Hilfe
Henry
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.