Bascom BASCOM ; Erste Schritte zum Ausprobieren

aber da Heini irgendwann gegen den UART war, jetzt stattdessen über einen Taster.
Huch, das hab ich irgendwo verpasst. Oder war das die Reset Sache? Ist ja egal.

Man könnte ja den Taster auch langsam den PWM Wert erhöhen lassen. Aber Schritt für Schritt :)
 
hatte als Zwischenschritt vorgeschlagen, erstmal auf Tastendruck die rote Led zu toggeln. Zum entprellen beim Pollen bieten sich die halben Sekunden der grünen Led an.
Wenn das klappt, dort stattdessen PWM umschalten.
Wenn das alles klappt, kommt der Flackercode rein - die Pwm-Steuerung via UART also auch raus.
 
aber da Heini irgendwann gegen den UART war,
Ich bin nicht gegen das UART. Im Gegenteil, es ist etwas neues für mich und neues ist immer Interessant.
Ich springe halt immer wieder auf sie If Anwendungen und Zählfunktionen zurück, weil es das ist, was ich mir selbst beigebracht habe (wenn auch nicht perfekt) und ich halbwegs verstehe. Dadurch tu ich mir leichter. Das neue ist zwar interessant, aber wenn es nicht gleich in meinen Kopf sitzt und ich mir keine praktischen Beispiele selbst zusammen bauen kann, verliere ich die Geduld.
Also, wenn Ihr nicht die Geduld bei meinen vielen Fragen verliert, ich möchte unbedingt mehr lernen.
 
Also, so schnell verlieren wir die Geduld nicht, zumindest so lange man höflich ist, wie du :)
Außerdem, jeder hat mal klein angefangen. Manche (wie ich) bleiben auch klein. Ich zumindest was Analogtechnik angeht. 1 und 0 ist ok, aber von 2 bekomm ich Alpträume
happy.gif

Dino, Dirk und LotadaC haben sich wohl damit abgefunden
biggrin.gif


Also, wenn ich nichts vergessen habe sind Lernziele noch:
* PWM Wert ändern, PWM (de-/re-)aktivieren
* Taster (und Entprellen dieser)
* Unterprogramme und Sprünge
* Interrupts
(nicht unbedingt in dieser Reihenfolge)

Was hättest du gern als nächstes?
Bevor wir durcheinander kommen
wink2.gif
 
Dann also so wie wir es schon hatten.
Der Timer soll ja auch nicht deaktiviert werden, nur dessen PWM Ausgänge.
Müsste also neu CONFIGuriert werden ;)
 
Der Timer1 ist aber schon als Pwm konfiguriert und Pwm1a sowie Pwm1b haben einen Startwert.
Jetzt müsste meiner Meinung nach der Startwert geändert werden.
Oder liege ich da verkehrt?


CodeBox BascomAVR
'Phasenkorrekter 8-Bit-PWM, PWM-Frequenz=245Hz
Config Timer1 = Pwm , Prescale = 64 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Pwm1a = 250
Pwm1b = 50

 
Jetzt habe ich den ganzen UART Teil herausgenommen und die Rote Led mit Taster ein / ausschalten wollen.
Sie geht mit Tastendruck an (auch schon, wenn ich an die Nähre des Tasters komme) und danach langsam ca.5 sek. wieder aus.
Was habe ich angestellt?


CodeBox BascomAVR
$regfile = "m8def.dat"                  'Controllerdefinitionsdatei einbinden
$crystal = 8000000                      'Systemtakt angeben (Baudrate)
$hwstack = 40                           'Stacks
$swstack = 16
$framesize = 32
$baud = 19200                           'Baudrate UART

Dim Zeichen As Byte                     'UART-Empfang
Dim Z As Byte                           'Timerüberlaufzähler

Rot Alias Portd.7                       'Namen für LED-Beine
Gruen Alias Portc.3
Ta1 Alias Pinb.0
Config Rot = Output                     'Ausgänge
Config Gruen = Output
Config Ta1 = Input
Ta1 = 1
Rot = 1                                 'LEDs erstmal an
Gruen = 1

'Phasenkorrekter 8-Bit-PWM, PWM-Frequenz=245Hz
Config Timer1 = Pwm , Prescale = 64 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Pwm1a = 250
Pwm1b = 50

Do                                      'Hauptschleife Begin
   If Ta1 = 0 Then
      Rot = 1
   Elseif Rot = 1 Then

      Rot = 0
   End If

'zweites Teilprogramm - LED durch timer blinken lassen
   If Tifr.tov1 = 1 Then                'wenn Timer übergelaufen ist
      Tifr.tov1 = 1                     'Überlaufflag zurücksetzen
      Incr Z
      If Z = 245 Then                   'Überläufe zählen (245)
         Z = 0                          'Zähler zurücksetzen
         Toggle Gruen                   'LED toggeln
      End If
   End If

Loop                                    'Hauptschleife Ende
 
Also. Schau dir den Timer mal genauer an.
Ich zerlege den Befehl mal:
Config Timer1 = Pwm
Der Timer1 läuft also im PWM Betriebsmodi
Prescale = 64
Mit einem 64tel der Systemfrequenz
Compare A Pwm = Clear Down
Compare B Pwm = Clear Down
Die Pins die als alternative Funktion OC1A / OC1B haben werden bei einem bestimmten Wert auf High oder Low gesetzt.
Letzteres wollen wir nicht mehr, da es bei Grenzwerten nicht (gut) funktioniert.
Du kannst aber den Config Befehl noch mal ausführen, mit Compare... = Disconnect.
Damit wäre PWM, also die Ausgabe, deaktiviert, der Timer selbst läuft aber weiter.

Zu deinem 2. Code, schau dir da mal die If und ElseIf Zeilen an. Vielleicht findest du den Fehler selber ;)
Du bist die CPU. Führe in Gedanken mal deine Befehle aus.
Rot wird nicht lange 1 sein ;)
 
Jetzt ist richtig.
Aber frag dich mal was du machen möchtest und was du machst.
Aktuell weist du ja eigentlich nur den Zustand vom Taster der LED zu, invertiert.
Du hast also quasi einen Inverter programmiert, durch den Timer mit etwas mehr oder weniger Verzögerung.

Du möchtest ja aber etwas schalten.

p.s.: das Elseif Ta1 = 1 Then kannst du dir fast sparen, da Ta1 nur 1 oder 0 sein kann. Ein simples Else reicht hier aus.
 
Der Taster schließt gegen Gnd?
Sie geht mit Tastendruck an (auch schon, wenn ich an die Nähre des Tasters komme) und danach langsam ca.5 sek. wieder aus.
Was habe ich angestellt?
Das Bein hängt in der Luft/ist potentialfrei, solange Du den Taster nicht betätigst. (das Bein wirkt also dann als Antenne, und kann alles mögliche Einfangen - deswegen reicht die Annäherung ggf)
Du willst aber, wenn der Taster nicht betätigt ist 'n High-Pegel haben, und wenn er betätigt wird 'nen Low-Pegel.
Du müßtest also 'nen Pullup-Widerstand haben - bzw den Pullup des Beines aktivieren.
Das machst Du, indem Du dem Bein einen High-Pegel zuweist (nicht dem Pin-Register in Zeile 17 - die ist beim Mega8 Wirkungslos).
wie in #242 die Aufgabe gestellt wurde. Also nicht die Led per Tastendruck an/ausschalten, sondern toggeln.
Ja, toggeln - derzeit schaltest Du sie an oder aus (->Thomas).

Was beobachtest Du dann, und warum?
 
Was beobachtest Du dann, und warum?
Erst einmal habe ich den Pull-Up Widerstand gar nicht oder Falsch gesteckt bzw. den Code nicht richtig geschrieben.
Den Aufbau mit Taster abfragen und Pull-Up / Pull-Down hatte ich vor längerer Zeit schon einmal begriffen gehabt, aber leider muss ich das gelernte, nach einer gewissen Zeit bei nicht Benutzung, wieder auffrischen.
Taster - Pull Up - Pull Down - Widerstand - LED
Ich sollte aber nicht die Rote Led aus / einschalten, sondern toggeln lassen. Diese habe ich nun mit dem "Timer Interups Flagg Register" gelernt. Vorher kannte ich nur das toggeln mit Wartezeiten.
Gibt es ein anderes Register, mit dem ich die Rote Led ebenfalls toggeln lassen kann oder welche
Möglichkeiten bestehen noch?
Du kannst aber den Config Befehl noch mal ausführen, mit Compare... = Disconnect.
Wie schaltet man in der Schleife die Pwm an oder aus?
 
Also das lesen eines Bein-Pegels (und das machst Du, wenn Du den Taster auswertest) ist natürlich grundsätzlich erstmal unabhängig von irgendwelchen Pull-Widerständen.
Deine Controller (Mega8, Teina13a) besitzen die klassische Bein-Ansteuerung. Dazu hab ich hier mal was geschrieben. (1) ist das Bein, (5) ist das D-Q-Latch, aus dem das Pin-Register-Bit gelesen wird. Der "Pegel" des Beines wird in dieses Latch übertragen, und zwar synchronisiert mit der I/O-Clock. Das geschieht übrigens immer, unabhängig ob das Bein Ein- oder Ausgang ist (Das Bein ist immer Eingang, und kann zusätzlich Ausgang sein).
"Pegel"? Die können ja auch analog sein - wie ist das zu verstehen?
Direkt vor dem Synchronizer befindet sich ein Schmitt-Trigger (Hysterese), der bewirkt, daß nur dann ein High übertragen wird, wenn die Spannung mindestens etwa 0,6*Vcc ist (bei Vcc=5V also mindestens 3V); und ein low, wenn die Spannung höchstens bei etwa 0,2*Vcc ist (bei Vcc=5V also bei höchstens 1V).
Wenn die Spannung irgendwo dazwischen rumeiert (also bei Vcc=5V irgendwo zwischen 1V..3V), wird der Inhalt des Latches, und damit der gelesene Pegel nicht verändert.
Um einen High oder Low Pegel zu lesen, mußt Du also eine Spannung größer 0,6*Vcc oder kleiner 0,2*Vcc anlegen. Dazu könntest Du einen … äh … Um-Taster (also einen Wechsler zwischen den beiden Spannungen) einsetzen (wenns sowas gibt), oder Du benutzt den Taster als einstellbaren Widerstand (0 Ohm oder unendlich Ohm) als Teil eines Spannungsteilers in Verbindung mit einem anderen Widerstand.
Der andere Widerstand zieht (pull) dann nach Vcc oder Gnd, der Taster entsprechend nach Gnd oder Vcc.
Ob der Pull-Widerstand nach Vcc oder Gnd zieht ist dabei eigentlich egal, in Deinem Controller integriert sind aber nur Pull-Widerstände gegen Vcc - wenn die verwendet werden sollen (und somit externe Widerstände gespart werden können), muß der Taster halt nach Gnd schließen.

So, wenn der Taster also in Deiner Hauptschleife abgefragt wird, bei erkannter Betätigung 'ne LED getoggelt werden soll und die Hauptschleife sich mit einer Frequenz von … sagen wir mal 100kHz wiederholt, würde die LED während der Betätigung mit einer Frequenz von 50kHz blinken - so kurz kannst Du den Taster gar nicht betätigen.
Dem kannst Du durch eine Zwangspause (wait) begegnen - aber wenn das Programm steht, sind auch alle anderen Prozesse (Teilprogramme) blockiert.
In unserem Programm wird aber durch den Timer eine 0,5s-Zeitbasis bereitgestellt, die ausgenutzt werden kann. Das erschlägt dann auch das Tastenprellen.
Ich sollte aber nicht die Rote Led aus / einschalten, sondern toggeln lassen. Diese habe ich nun mit dem "Timer Interups Flagg Register" gelernt. Vorher kannte ich nur das toggeln mit Wartezeiten.
Hier hast Du zwei unterschiedliche Sachen zusammengewürfelt:
Toggeln bezeichnet das Umschalten des logischen Pegels des Beines. Die Bascom-Instruktion liest dazu den Pegel ein (also das Pin-Register-Bit), wertet Ihn aus, und schreibt den komplementären Wert ins PORT-Register-Bit. (Einige modernere AVR toggeln das Port-Register-Bit (und damit den Pegel) selbst automatisch wenn in das korrespondierende Pin-Register-Bit eine 1 geschrieben wird - der Tiny13(a) kann das, der Mega8 nicht).
"Toggle" kippt also einfach jedesmal den Pegel.

Wann Du toggeln willst, ist 'ne andere Sache, und hier kannst Du halt warten lassen, oder irgend'ne Zeitbasis nutzen (von einem Timer abgeleitet, durch den Watchdog generiert (ist ja sowas ähnliches wie'n Timer), jedesmal wenn der ADC 'ne Messung fertig hat, jedesmal nach dem Senden eines Bytes via UART/SPI/I²C, …)

Wie schaltet man in der Schleife die Pwm an oder aus?
Thomas hats in #249 nochmal angedeutet - Du kannst zB den Timer rekonfigurieren.
(Ich hatte das übrigens auch schon in #240 und #225 vorgeschlagen. Und vorher in #219 (dort sogar mit Link zu meinem anderen Thema. Hintergrund: Eigentlich sieht Bascom vor, daß man mehrere alternative Konfigurationen definieren kann, und die Konfiguration dann jederzeit mit Start Timer, Konfigurationsname ändern kann - das wirkt sich aber bei mir nur auf den Prescaler aus, und nicht auf den Compare-Mode (möglicherweise ein Bug))
In #20 hatte ich ähnlich wie Thomas auch schon die Config-Timer-Instruktion auseinandergenommen - dort ist auch erkennbar, welche Bits in welchem Register direkt geändert werden könnten (wäre schneller/sparsamer, aber ggf später schwerer wartbar/nachvollziehbar))
 
Das sind wieder sehr viele und zu fachmännische Erläuterungen mit Verlinkung zu anderen Skizzen.
dieses
  • DDRB: &B00000110
  • TCCR1A: &B11110001
  • TCCR1B: &B00000011
habe ich als erstes ausprobiert und wird von Bascom erst angenommen, wenn der "Doppelpunkt" durch ein"Istgleich" ersetzt wird. Ich habe auch über das TCCR1A und TCCR1B etwas gelesen, womit ich allerdings auch nichts anfangen kann.
Bei meiner Suche nach "Disconnect" bin ich auf diese Seite gestoßen und habe folgendes ausprobiert.


CodeBox BascomAVR
$regfile = "m8def.dat"
$crystal = 8000000

Ddrb = &B_1111_1110                     '1 ist Ausgang 0 ist Eingang
Portb = &B0000_0001                     'auf Hi oder Low setzen

Ta Alias Pinb.0

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1

Do
   Compare1a = 20
   Compare1b = 254
   If Ta = 0 Then                       'Ta = Taster
      Compare1a = 254
   Else
      Compare1a = 20
      Start Timer1                      ' Timer muss neu gestartet werden, PWM-Ausgang wird mit gleichem Wert aus Ocr1a ausgegeben
   End If
Loop

End

Damit bin ich auch nicht zufrieden, weil die Pwm sich nicht so schalten lässt, wie ich es mir erhofft hatte. Ich wollte doch irgendwie die Pwm mal ganz abschalten. Mit Timer1 Stop, wurde schon gesagt, geht nichts. Disconnect habe ich auch verschiedene Mölichkeiten versucht, Ergebnis war entweder es ist alles aus oder gar keine Änderung.

Ich brauche noch eine Bestätigung, damit ich mir nicht etwas falsches einpräge.
Ein Ausgang wird mit PORTx und ein Eingang mit PINx bezeichnet, wie in Zeile 7 mein Taster.
Ist das Richtig?
 
habe ich als erstes ausprobiert und wird von Bascom erst angenommen, wenn der "Doppelpunkt" durch ein"Istgleich" ersetzt wird.
Das war ja auch kein Code, sondern die Aufschlüsselung, was Config Timer1 = Pwm , Prescale = 64 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down bewirkt.
Die farbigen Markierungen zeigen außerdem, welche Bits welche Funktion haben. Wenn Du die drei "Zuweisungen" so als Code einbaust (mit Gleichheitszeichen), macht Bascom genau dasselbe, wie in der Config-Zeile.
Thomas hatte es vor kurzem ja nochmal erläutert:
Ich zerlege den Befehl mal:
Config Timer1 = Pwm
Der Timer1 läuft also im PWM Betriebsmodi
Prescale = 64
Mit einem 64tel der Systemfrequenz
Compare A Pwm = Clear Down
Compare B Pwm = Clear Down
Der Timer soll nicht gestoppt werden, der Modus (PWM) auch nicht geändert werden - bleibt die Kopplung der Output-Beine an den Timer. Compare A/B = ??? In #20 hatte ich geschrieben, daß sich das (beim Mega8) auf die oberen vier Bits im TCCR1A auswirkt. Was findet man im Datenblatt dazu?
Seite 96:
16-bit
Timer/Counter
Register
Description

Timer/Counter 1
Control Register A –
TCCR1A
Bit7​
Bit6​
Bit5​
Bit4​
Bit3​
Bit2​
Bit1​
Bit0​
COM1A1​
COM1A0​
COM1B1​
COM1B0​
FOC1A​
FOC1B​
WGM11​
WGM10​
COM steht für Compare Output Mode - wegen unserem PWM-Mode gilt Table 38. Compare Output Mode, Phase Correct and Phase and Frequency Correct PWM
COM1A1/COM1B1COM1A0/COM1B0Description
0​
0​
Normal port operation, OC1A/OC1B disconnected.
0​
1​
WGM13:0 = 9 or 14: Toggle OC1A on Compare Match, OC1B
disconnected (normal port operation). For all other WGM1
settings, normal port operation, OC1A/OC1B disconnected.
1​
0​
Clear OC1A/OC1B on Compare Match when up-counting. Set
OC1A/OC1B on Compare Match when downcounting.
1​
1​
Set OC1A/OC1B on Compare Match when up-counting. Clear
OC1A/OC1B on Compare Match when downcounting.
...Compare A = Clear Down... setzt also die beiden COM1A-Bits, und schaltet damit 'ne PWM auf das Bein. ...Compare A = Clear Up... würde nur COM1A1 setzen und COM1A0 löschen, also genau den dazu invertierten PWM auf das Bein schalten.
Um ein Bein vom Timer abzutrennen, und dessen normale Funktion zu nutzen, wären die beiden jeweiligen Bits zu löschen.
Wie Thomas und auch ich mehrfach hingewiesen haben, kannst Du dazu einfach den Timer entsprechend rekonfigurieren.
Du kannst aber den Config Befehl noch mal ausführen, mit Compare... = Disconnect.
Also aktiviert haben wir das ganze mit:
Config Timer1 = Pwm , Prescale = 64 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Zum deaktivieren der Ausgabe auf den Beinen (re)konfigurierst Du den Timer einfach nochmal - nur eben jetzt mit disconnect statt mit clear down:
Config Timer1 = Pwm , Prescale = 64 , Compare A Pwm = Disconnect , Compare B Pwm = Disconnect
Bascom schreibt dann die Register neu, geändert haben sich dabei nur die vier COM1xx-Bits.

Config Timer1 beschreibt die Register, durch den Vorteiler wird dabei der Timer auch gleich gestartet
Stop Timer1 löscht die Bits, die den Prescaler festlegen. Der Timer steht dann (eingefroren) - inklusive des Ausganges, der zufällig gerade an oder aus sein kann. Output Compare- und Waveform Generation Mode werden nicht verändert.
Start Timer1 sollte die letzte (?) festgelegte Konfiguration wiederherstellen - zumindest den Vorteiler (der Timer läuft wieder).
Der/den Konfiguration/en kann man optional (je) einen Namen verpassen, beim Starten kann man dann angeben, welche der Konfigurationen gestartet wird - wie gesagt scheint sich das aber nicht auf den Compare Output Mode auszuwirken. Der Prescaler reagiert, aber nicht die COM-Bits.
 
Richtig. Wobei ich mir jetzt nicht sicher bin welchen Zustand die Pins nach dem Disconnect haben werden. Bleibt der beim letzten Zustand oder wird der genullt? Naja, kann man ja nach dem Deaktivieren vorsorglich selbst setzen.

Und ja. PORTx = Ausgang, PINx = Eingang.
DDRx definiert ob Eingang oder Ausgang, macht Bascom aber selbst, über den Config Befehl.
PORTx kann aber auch beim Eingang geschrieben werden, eben um umzuschalten zwischen Tristate (hochohmig) und Pull-Up.
Wenn ich mich richtig erinner kann man auch beim Ausgang durch Schreiben an das PINx Register das Beinchen toggeln lassen.
Aber darum kümmert sich Bascom idR.
 
Richtig. Wobei ich mir jetzt nicht sicher bin welchen Zustand die Pins nach dem Disconnect haben werden. Bleibt der beim letzten Zustand oder wird der genullt?
Oh, das ist interessant...
Config Timer1 scheint Beine bei Bedarf auf Ausgang zu schalten, aber (bei nicht-Bedarf) nie wieder zurück...


CodeBox BascomAVR
Config Timer1 = Pwm , Prescale = 64 , Compare A Pwm = Disconnect , Compare B Pwm = Disconnect
Config Timer1 = Pwm , Prescale = 64 , Compare A Pwm = Disconnect , Compare B Pwm = Clear Down
Config Timer1 = Pwm , Prescale = 64 , Compare A Pwm = Clear Down , Compare B Pwm = Disconnect
Config Timer1 = Pwm , Prescale = 64 , Compare A Pwm = Disconnect , Compare B Pwm = Disconnect

In der ersten Zeile wird DDRB erwartungsgemäß nicht manipuliert.
In der Zweiten wird erwartungsgemäß nur DDRB.2 gesetzt.
In der Dritten wird zwar wie erwartet DDRB.1 gesetzt, aber nicht wie erwartet DDRB.2 gelöscht - beide Beine sind Ausgang.
In der Letzten wird dann auch keines der beiden Bits gelöscht - bleiben beide Beine Ausgang...
Das, was in DDR und PORT steht gilt (wieder), also Ausgang und die PORT-Vorgabe. Durch Config Timer1 wurden die Beine auf Ausgang gesetzt (DDR), das PORT wird nicht gesetzt, sondern durch den Compare Output Mode übersteuert (Override) - durch die Hardware selbst, PORT bleibt also null. Wenn der Compare Output Mode zurückgesetzt wird (disconnect), greift also das gesetzte DDR-Bit, und das (weiterhin) gelöschte PORT-Bit.
Wenn ich mich richtig erinner kann man auch beim Ausgang durch Schreiben an das PINx Register das Beinchen toggeln lassen.
Wie gesagt: können nicht alle Controller. Der Tiny13 kanns, der Mega8 nicht.
Aber darum kümmert sich Bascom idR.
Ob Bascom das dann bei "Toggle" ausnutzt (wenn möglich), oder einfach immer das Port-Bit liest, kippt und zurückschreibt, weiß ich nicht/hab ich nicht ausprobiert (dazu müßte man das Hexfile reassemblieren, und dazu hab ich grad keine Lust...)
 
Zuletzt bearbeitet:
Ich blicke nicht mehr durch. Kann mir einer von euch ein Programm Beispiel Code schreiben, wo die In #257 und #259 verwendeten Erklärungen enthalten sind. Dann könnte ich mir vielleicht durch Veränderungen klar machen, was dabei passiert. Ich hatte bisher nicht die blasseste Ahnung, was in so einen µC alles vorhanden ist und schon gar nicht, wie man damit umgeht.
So ein Beispiel würde mir bestimmt helfen.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)