Digitale Temperatur regelnde Lüftersteuerung mit einstellbaren Hysteresewerten

Ich entschuldige mich für meine Abwesenheit hätte mich ja mal melden können ich Depp hab ein bisschen weiter gearbeitet und gegrübelt :stupido2: also hab jetzt mittlerweile ein Standardbildschirm der mit drücken des Encoders verlassen wird und ich in die Menü Führung kommt drücke ich den Encoder jetzt noch mal gehts wieder zurück zur Standardanzeige drehe ich bekomme ich die einzelnen punkte angezeigt (Temp. max, Temp. min , abbrechen)
bei Temp max und min setzte ich mit dem tasten druck eine variable auf 1 bei abbrechen gehts direkt zur Standardanzeige muss das ganze jetzt nur noch in die Basis von Cassio schreiben dann gehts hier online.
 
so hier der Code wollte wissen ob das so geht wahrscheinlich nicht. Hatte mir gedacht das ich vielleicht mit den beiden Variablen X und Y alle Funktionen, bis auf das verstellen der Hysterese werte , zu sperren geht das ??


CodeBox bascom
$regfile = "m8def.dat"
$crystal = 8000000
$framesize = 32
$swstack = 32
$hwstack = 64

Ddrd = &B11100011
Portd = &B00011100

Ddrb = &B11111111
Portb = &B00000000

Config Lcdpin = Pin , Port = Portb , E = Portd.6 , Rs = Portd.5
Config Lcd = 20 * 4
Dim Lcd_flag As Bit
' LCD_flag Dient dazu die daten nur einmal auf die LCD anzeige zuschreiben
Dim Anzeige_flag As Bit
' Anzeige_flag sorgt für den wechsel vom standardbildschirm in die Menueführung
Dim A As Byte
Dim B As Byte
Dim K As Byte
Dim W As Byte
Dim Y As Byte
Dim X As Byte ' Variable zum Zählen mit encoder
Dim Z As Byte ' Variable k für den encoder
Taster Alias Pind.4 ' Taster Alias damit nicht immer PIND.4 Geschrieben werden muss

Bl Alias Portd.1 ' reserve Ausgang

Ein Alias 1 'EIN

Aus Alias 0 ' AUS

'*******************************************************************************

' --------------Systemstart------------------

'*******************************************************************************

' Hier kommt alles rein was für den Systemstart wichtig ist
A = 60
B = 20
X = 0
Y = 0
Z = 0
'**********************************************************

' ----Hauptschleife----

'**********************************************************

Do

If Taster = 0 Then ' ist der Taster betätigt ?
' Ja dann setze Layout auf null oder eins abhänig davon welchen wert es vorher hatte.
Toggle Anzeige_flag

Lcd_flag = 0 ' Setze Flag LC auf 0


End If

If Anzeige_flag = 0 Then
' ist die LCD schon Beschrieben?
Gosub Lcdanzeige ' Nein Springe zur Routine LCDanzeige

Else

Gosub Menue ' ja dan springe in menue

End If

Loop

'*******************************************************************************




'*******************************************************************************

' -----------------------Subroutinen--------------------------

'*******************************************************************************



Lcdanzeige:

If Lcd_flag = 0 Then
X = 0
Y = 0
Z = 0 ' Standart Bildschirm festlegen
Cls

Locate 1 , 1 : Lcd "Kuehlagregat"

Locate 2 , 1 : Lcd "Kuehlhaus"

Locate 3 , 1 : Lcd "Obere Temp."

Locate 4 , 1 : Lcd "Untere Temp."
' festlegung Lcd ist schon beschrieben
Lcd_flag = 1

End If

Bitwait Taster , Set
' darauf warten das taster wieder betätigt wird

Return


Menue:

If Lcd_flag = 0 Then ' festlegen des menues

Cls
Locate 1 , 1 : Lcd Z

Locate 2 , 1 : Lcd "Temp. max."

Locate 3 , 1 : Lcd "Temp. min."

Locate 4 , 1 : Lcd "Abbrechen "

End If

Lcd_flag = 1 ' festlegung Lcd ist schon beschrieben





Bitwait Taster , Set ' darauf warten das taster wieder betätigt wird

K = Encoder(pind.2 , Pind.3 , Runter , Rauf , 0) ' Encoder seine routinen zuweisen

If Z = 1 Then ' Wenn z = 1 gehe zur Subroutine Temperatur max

Gosub Tempmax

End If

If Z = 2 Then

Gosub Tempmin ' Wenn z = 2 gehe zur Subroutine Temperatur min

End If

If Z = 3 Then

Gosub Abbrechen ' Wenn z = 3 gehe zur Subroutine Abbrechen

End If

Return

Runter:


' Routine Z runter zählen
If X = 1 Then

Decr A ' wenn X = 1 dann verringere den oberen Hysteresewert um 5

End If

If A < 40 Then

A = 40 ' minimale grenze für die obere Temperatur

End If

Locate 2 , 13 : Lcd A ' Zeige den aktuellen wert für A



If Y = 1 Then

Decr B ' wenn X = 2 dann verringere den unteren Hysteresewert um 5
End If


If B < 20 Then

B = 20 ' minimale grenze für die untere Temperatur


End If

Locate 2 , 13 : Lcd B ' Zeige den aktuellen wert für B


If K = 0 Then ' ist K = 0 ?

Decr Z ' Ja dann Z = Z - 1

End If

If Z = 0 Then ' ist z = 0 ?

Z = 3 'ja dann Z = 3

End If

Locate 1 , 1 : Lcd Z ' zeige Z auf der Lcd an



Return

Rauf: ' Routine Z rauf zählen und hysterese werte rauftählen
If X = 1 Then

Incr A ' wenn X = 1 dann verringere den oberen Hysteresewert um 5

End If

If A > 60 Then

A = 60 ' minimale grenze für die obere Temperatur

End If

Locate 2 , 13 : Lcd A ' Zeige den aktuellen wert für A

If Y = 1 Then

Incr B
' wenn X = 2 dann verringere den unteren Hysteresewert um 5
End If


If B > 40 Then

B = 40 ' minimale grenze für die untere Temperatur


End If

Locate 2 , 13 : Lcd B
' Zeige den aktuellen wert für B



If K = 0 Then ' ist K = 0 ?

Incr Z ' Ja dann Z = Z + 1

End If

If Z > 3 Then ' ist z = 3 ?

Z = 1

End If

Locate 1 , 1 : Lcd Z ' zeige Z auf der Lcd an


Return

Tempmax: ' subroutine Temperatur Max

' stetze X auf 0 zurück

Locate 1 , 1 : Lcd "Temep. Max." ' zeige auf Display

Locate 2 , 1 : Lcd " " ' wird vor genommen um vorhergehende Werte zu löschen

Locate 2 , 13 : Lcd A ' Zeige den aktuellen wert für A

Locate 3 , 2 : Lcd " " ' wird vor genommen um vorhergehende Werte zu löschen

Locate 3 , 1 : Lcd X

Locate 4 , 1 : Lcd " " ' wird vor genommen um vorhergehende Werte zu löschen
' stetze X = 1


If Taster = 0 Then


Gosub Tempmax2 ' Gehe zur subroutine Ändere Maximum

End If



Bitwait Taster , Set ' darauf warten das taster wieder betätigt wird

Return
Tempmin:

' stetze X zurück auf 0

Locate 1 , 1 : Lcd "Temep. Min." ' zeige auf Display

Locate 2 , 1 : Lcd " " ' wird vor genommen um vorhergehende Werte zu löschen

Locate 2 , 13 : Lcd B ' Zeige den aktuellen wert für B

Locate 3 , 2 : Lcd " "

Locate 3 , 1 : Lcd Y ' wird vor genommen um vorhergehende Werte zu löschen

Locate 4 , 1 : Lcd " " ' wird vor genommen um vorhergehende Werte zu löschen

' stetze X = 2
' ist der Taster 0 dann gehe zur Standardanzeige
If Taster = 0 Then

Gosub Tempmin2 ' gehe zur Subroutine Ändere Minimum

End If
' Zeige den aktuellen wert für B
Bitwait Taster , Set ' darauf warten das taster wieder betätigt wird

Return
Abbrechen:


Locate 1 , 1 : Lcd "Abbrechen " ' zeige auf Display

Locate 2 , 1 : Lcd " " ' wird vor genommen um vorhergehende Werte zu löschen

Locate 3 , 1 : Lcd W ' wird vor genommen um vorhergehende Werte zu löschen

Locate 4 , 1 : Lcd " " ' wird vor genommen um vorhergehende Werte zu löschen


If Taster = 0 Then
Lcd_flag = 0


Gosub Lcdanzeige ' wenn der Taster Betätigt ist gehe zur Standardanzeige zurück

End If

Bitwait Taster , Set ' darauf warten das taster wieder betätigt wird

Return
Tempmax2:

X = 1
Y = 0
Locate 3 , 1 : Lcd X


If Taster = 0 Then ' wenn X = 1 dann setzte den oberen hysterese wert um 5 hoch

Gosub Lcdanzeige

End If

Bitwait Taster , Set

Return
Tempmin2:

Y = 1
X = 0

Locate 3 , 1 : Lcd Y

If Taster = 0 Then

' wenn X = 1 dann setzte den oberen hysterese wert um 5 hoch
Gosub Lcdanzeige

End If

Bitwait Taster , Set

Return


End
 
sry das ich nicht alle deine Variablen gleicb benutz habe ein paar sind auch noch ohne Funktionwie W zum beispiel
 
Hallo Knut!

Ja die Variablenbezeichnungen sind mir auch noch ein Dorn im Auge.....
Warum verwendest du denn immer nur einzelne Buchstaben dafür? :hmmmm:
Gib dem Kind doch einen Namen und das Programm wird leserlicher und verständlicher. ;)


Ich schau mir dein Programm nachher mal an.....

Wie ich aber gesehen habe, hast du an dem letzten Punkt nicht weiter gemacht wo "wir" (oder eher du) plötzlich aufgehört hattest. ;)

Es ging darum den Drehencoder automatisch abzufragen, um auf jede Bewegung auch reagieren zu können.

Das werden wir also erst mal noch "gemeinsam" erstellen und dann geht es mit dem Programmaufbau weiter. ;)

Soweit klar.....?


Grüße,
Cassio


PS:
Ist kurzfristig wieder mit einer spontanen Abwesendheit von dir zu rechnen?
Aus welchen Gründen auch immer..... bitte eine PN an mich!
 
Werde ich ändern. Ja wie ich den Encoder Dauerhaft abfrage ist mir keine Idee gekommen außer über die Interuppts aber das wollte wir ja lassen.
 
Hallo Knut!

OK... dann ändere mal die Variablen.

Ich habe z.B. solche verwendet:
Code:
Dim Temperatur As Byte                                      'aktuelle Temperatur
Dim Max_temp As Byte                                        'oberer Wert
Dim Min_temp As Byte                                        'unterer Wert

Dim Max_wert As Byte                                        'Maximal mögliche Temperatur
Dim Min_wert As Byte                                        'Minimal mögliche Temperatur

Allerdings findet noch keine Temperaturberechnung statt, darum sind es alles nur Bytes und "Temperatur" bekommt zur Zeit noch einen festen Wert.



Was die Interrupts betrifft...
Die Idee ist für die Abfrage des Drehencoders schon in Ordnung.
Stimmt! Zu Beginn wollten wir das erst mal lassen..... weil du sie falsch angewendet hattest.

Für den späteren Programmablauf (und auch später in anderen Programmen) wäre es aber praktischer, wenn der Drenencoder automatisch abgefragt wird und du dich nur noch um die veränderte Variable kümmern musst.
Außerdem lernst du auf diese Weise noch etwas dazu. ;)


OK... es wäre also praktischer, wenn der Drehencoder vom Programm automatisch "im Auge" behalten wird.
So musst du nicht von Hand, an den passenden Stellen im Programm, zum Encoder springen.
Wie wäre es denn, wenn ein Timer z.B. alle 2ms den Drehencoder "überprüft"? :stupido2:

Damit würde dir keine Drehung verloren gehen und du musst dich nicht immer wieder manuell um die Abfrage kümmern. ;)


Schau mal in die BASCOM-Hilfe unter dem Thema "TIMER0".
Versuch mal heraus zu finden was wir benötigen könnten.
Mir geht es nur um die Funktion und eine kurze Erklärung..... keinen fertigen Programmcode!

Grüße,
Cassio
 
Ach so.....

Hallo Knut!

Was mir gerade wieder einfällt...

Hast du deinen AVR mal bezüglich des Systemtaktes überprüft?
Läuft der jetzt wirklich mit 8MHz?


Dann hattest du mal etwas geschrieben, dass dein Drucktaster nicht immer richtig reagiert.
Nimm mal einen 47nF oder 100nF Kondensator und schließ den Parallel zum Taster an.

Also so:
Code:
AVR----------------
            |            |
             /          ---
            |           ---  47nF oder 100nF
            |            |
           ---         ---
          GND       GND



Damit sollte der Drucktaster dann auch besser funktionieren!


Gruß,
Cassio
 
okay also ich kann meinen Timer so Konfigurieren:
Config Timer0 = Counter , Edge = Rising

okay also ich zähle dann auf fallende Flanken oder steigende Flanken mit Edge = rising oder halt falling

mit Prescale kann ich fest legen durch welchen wert der interne Quarz geteilt wird
ich kann dann Timer stoppen und starten
und wenn ich config timer benutze wird das TCCR0 Bit gesetzt.
so das ist das was ich ungefähr verstanden habe mein Englisch ist nicht das beste.
 
So das mit dem Kondensator ist fertig,also mein letzter stand war das ich ein Flag beeinflussen muss um den Quarz von innen nach außen zulegen und da ich dies nicht gemacht habe sondern die Werkseinstellungen gelassen habe müsste der AVR auf 8 MHz laufen aber auf jedenfall mit dem internen Quarz laufen.
 
Hallo Knut!

Klingt schon mal nicht schlecht. :)

Allerdings überlassen wir das (rauf und runter) Zählen lieber unserer Variablen. ;)

Wir benötigen also einen Timer, der als Timer arbeitet..... und nicht als Zähler.
Damit wäre also die Angabe:
Code:
Config Timer0 = Timer

schon mal die bessere Wahl!


Jetzt müssen wir nur noch dafür sorgen, dass auch etwas passiert..... denn sonst haben wir nur einen Timer zugewiesen.

Da der Timer0 nur 8bit breit ist, kann er also nur von 0 bis 255 zählen. Danach fängt er wieder von vorne an.
Genau das wäre doch ein guter Ansatz.
Jedesmal wenn der Timer bei 255 angekommen ist und wieder bei 0 anfängt (also technisch gesehen "überläuft"), soll er ein Signal geben...... also ein Interrupt erzeugen.

Dies kannst du in BASCOM so einstellen:
Code:
On Timer0 ISR_timer0

Das "On" besagt nun, dass bei einem Überlauf von Timer0 die ISR (InterruptServiceRoutine) ISR_timer0 aufgerufen werden soll.



Nun müssen wir aber erst mal schauen, wie oft dies passieren soll.
Da der Timer mit dem Systemtakt läuft, können wir ihn nur durch "Teilung" des Systemtaktes in der Geschwindigkeit beeinflussen.
Dafür gibt es den "Prescaler".... Vorteiler.
Der Prescaler kann mit 1, 8, 64, 256 und 1024 eingestellt werden. Das ist alles! Mehr geht nicht!

Nun müssen wir mal etwas rechnen.....
Wenn ich also 8MHz Systemtakt habe und einen z.B. einen Prescale von 64 verwende dann:
8.000.000 Hz / 64 = 125.000 Hz
125.000 Hz entspricht => 1 / 125.000 Hz = 8 µsec / bit
Timer0 hat aber 256bit..... also: 256 x 8µsec = 2,048 ms !

Wenn wir also den Timer0 mit einem Prescale von 64 betreiben, läuft der Timer0 alle 2,048ms über und erzeugt einen Interrupt. :)


Aus den eben erfahrenen Daten bekommt unser Programm also nun folgende Anweisungen:
Code:
'Timer0 zur Überwachung des Drehencoders-------------------
Config Timer0 = Timer , Prescale = 64                       'Overflow nach 2,048ms
On Timer0 Drehencoder                                       'Drehencoder abfragen


Um das ganze Einstellen der Timer-Register im AVR musst du dich selber nicht kümmern.... dies erledigt BASCOM für dich. ;)

Du musst lediglich den Timer noch "einschalten" und generell (also global) alle Interrupts erlauben.

Das machst du mit:
Code:
Enable Timer0                                               'Timer0 aktiv

Enable Interrupts                                           'Interrupts einschalten



Damit ist die Anweisung für den Timer nun komplett und kann ins Programm eingetragen werden:


CodeBox bascom

'Timer0 zur Überwachung des Drehencoders-------------------
Config Timer0 = Timer , Prescale = 64 'Overflow nach 2,048ms
On Timer0 Drehencoder 'Drehencoder abfragen
Enable Timer0 'Timer0 aktiv

Enable Interrupts 'Interrupts einschalten



Jetzt musst du nur noch die Subrotuine "Drehencoder" erstellen, die alle 2ms vom Timer aus aufgerufen wird.
In der Subroutine wird nun der Drehencoder abgefragt mit:
Code:
'Drehencoderüberwachung per Timer0
Drehencoder:
De = Encoder(pind.2 , Pind.3 , Rauf , Runter , 0)

Return


Das war es dann schon. :)
Von nun an wir dein Drehencoder automatisch überwacht und du kannst dich um andere Dinge im Programm kümmern. ;)


Kannst dein Programm ja mal umbauen....
Ich muss zwischenzeitlich dann auch mal weg.

Grüße,
Cassio
 
....da ich dies nicht gemacht habe sondern die Werkseinstellungen gelassen habe müsste der AVR auf 8 MHz laufen


Hallo Knut!

Also die "Werkseinstellung" eines AVR ist meist 1MHz und nicht 8MHz ! ;)


Wir können das noch überprüfen.
Lies dir erst mal den Beitrag mit dem Timer0 von mir durch.


Bis später...

Gruß,
Cassio
 
coole Sache jetzt läuft das viel saubere durch muss jetzt nur noch hin bekommen das wenn ich die Variable X oder Y gesetzt habe in den entsprechenden punkte bleib also zurück in die Denker Pose.
 
Hab ich dann wohl überlesen...

Hätte allerdings eine Frage zum Drehencoder.

Ich habe mir bei Pollin eine Handvoll Panasonic EVEQDBRL416B Encoder bestellt.
Einer bringt nur Müll, mit den anderen hab ich jetzt lang rumexperimentiert und brings nicht wirklich zum funktionieren.

Meistens gehts 2 hoch oder runter( Encoder Befehl), oder 1 hoch und sofort wieder runter oder es passiert meistens gar nichts.
Mit Encoder Befehl versucht, mit Int0 und/oder Int1, beide Pins verglichen mit und ohne Interrupts, nichts will klappen.

Wie machst Du das?
 
Läuft irgend wie nicht so wie ich das wollte.
kann ich irgend wie veranlassen das wenn y gesetzt ist nur Temp min angezeigt wird und erst mit nem tasten drück zurück gesetzt wird ?? bei X das Selbe für Temp max??
also hier erst mal das was mir eingefallen ist
Code:
Tempmax:
   If Y = 1 Then
   Z = 2
   Gosub Tempmin2
    End If                                                  ' stetze X auf 0 zurück

  Locate 1 , 1 : Lcd "Temep. Max."                          ' zeige auf Display

  Locate 2 , 1 : Lcd "             "                        ' wird vor genommen um vorhergehende Werte zu löschen

  Locate 2 , 13 : Lcd Maxi                                  ' Zeige den aktuellen wert für A

  Locate 3 , 2 : Lcd "                  "                   ' wird vor genommen um vorhergehende Werte zu löschen

  Locate 3 , 1 : Lcd X

  Locate 4 , 1 : Lcd "                    "                 ' wird vor genommen um vorhergehende Werte zu löschen
                                                             ' stetze X = 1


  If Taster = 0 Then


  Gosub Tempmax2                                            ' Gehe zur subroutine Ändere Maximum

  End If



  Bitwait Taster , Set                                      ' darauf warten das taster wieder betätigt wird

  Return
  'SUbroutine für das verstellen des unteren Schwelwertes
  Tempmin:
    If X = 1 Then
    Z = 1
    Gosub Tempmax2:
    End If                                                  ' stetze X zurück auf 0

  Locate 1 , 1 : Lcd "Temep. Min."                          ' zeige auf Display

  Locate 2 , 1 : Lcd "            "                         ' wird vor genommen um vorhergehende Werte zu löschen

  Locate 2 , 13 : Lcd Mini                                  ' Zeige den aktuellen wert für B

  Locate 3 , 2 : Lcd "                   "

  Locate 3 , 1 : Lcd Y                                      ' wird vor genommen um vorhergehende Werte zu löschen

  Locate 4 , 1 : Lcd "                    "                 ' wird vor genommen um vorhergehende Werte zu löschen

                                                      ' stetze X = 2
                                                             ' ist der Taster 0 dann gehe zur Standardanzeige
  If Taster = 0 Then

   Gosub Tempmin2                                           ' gehe zur Subroutine Ändere Minimum

  End If
                                        ' Zeige den aktuellen wert für B
  Bitwait Taster , Set                                      ' darauf warten das taster wieder betätigt wird

  Return
.
 
Hallo Knut!

So, dann wollen wir doch mal schauen, was dein Systemtakt so sagt. ;)
Natürlich kannst du dafür die FUSEBITS kontrollieren, aber es geht auch anders.

Nehmen wir mal den Timer1 und die eben gelernte Formel zu Hilfe....
Du kannst dir ja eine Routine schreiben, die bei einem Timerüberlauf einen Port togglet, an dem eine LED mit Vorwiderstand angeschlossen ist.

Nehmen wir mal den Porrt D.1 , denn den haben wir ja schon als Ausgang definiert. ;)



Wenn also dein Systemtakt 8MHz beträgt und du einen Prescale von 256 bei Timer1 verwendest, dann....

8.000.000 Hz / 256 = 31250 Hz
1 / 31250 Hz = 32µsec / bit
Timer1 ist allerdings 16bit breit und daher 65536 bit.
Demnach---> 65536 bit x 32µsec/bit = 2,097 Sekunden

Wenn du also in deinem Programm folgendes einfügst:
Code:
'Timer1----------------------------------
Config Timer1 = Timer , Prescale = 256                       'Overflow nach 2 Sekunden
On Timer1 Blinker                                       'Sub Blinker ausführen

Enable Timer1                                               'Timer1 aktiv


Die Subroutine enthält lediglich:
Code:
Blinker:

Toggle PORTD.1

Return


Wenn alles stimmt, müsste deine LED an PORTD.1 nun alle 2 Sekunden den Zustand wechseln. :)



Sollte dein AVR mit 1MHz laufen, dann....
1.000.000 / 256 = 3906,25
1 / 3906,25 = 256µsec
65536 x 256µsec = 16,77 Sekunden

Wenn dein AVR also nur mit 1MHz läuft, dann wechselt der Zustand der LED nur alle 16 Sekunden. ;)


Viel Spaß beim Ausprobieren!

Cassio
 
..... nichts will klappen.

Wie machst Du das?


Hallo sBronco!

Lies dir doch bitte mal die Beiträge in diesem Thread ab #31 durch!


Ich denke mal, dann werden deine Encoder am Ende auch funktionieren. ;)

Ein Tipp vorab:
Du benötigst kein INT0 und INT1..... sondern du musst den Rückgabewert des Encoders beim Zählen berücksichtigen!


Gruß,
Cassio
 
Wie machst Du das?

Also wenn mich nicht alles täuscht wird das so um gesetzt
Code:
If De = 0 Then                                            ' ist de = 0  ?

  Incr Z                                                    ' Ja dann Z = Z + 1

  End If

  If Z > 3 Then                                             ' ist z = 3 ?

  Z = 3
du fragst die Variable ab die du in deinem Encoder Befehl also bei mir DE
Code:
De = Encoder(pind.2 , Pind.3 , Rauf , Runter , 0)
sie abfrage findet in den Routinen Rauf oder RUnter statt wenn bei der Routine Runter de = 0 dann incr z also z +1 ,
bei der Routine Rauf de = 0 dann Decr z also Z - 1
hatte ich das richtig verstanden
 
Läuft irgend wie nicht so wie ich das wollte.
kann ich irgend wie veranlassen das wenn y gesetzt ist nur Temp min angezeigt wird und erst mit nem tasten drück zurück gesetzt wird ?? bei X das Selbe für Temp max??


BOAH.... ich platz gleich! :mad:



Habe ich irgendwo etwas von X und Y und Temp_min und Temp_max geschrieben??? :cool:


Keine Panik, wir kommen da noch hin!


Bis später...
Cassio
 
.....abfrage findet in den Routinen Rauf oder RUnter statt wenn bei der Routine Runter de = 0 dann incr z also z +1 ,
bei der Routine Rauf de = 0 dann Decr z also Z - 1
hatte ich das richtig verstanden


Hallo !

Na, da bin ich ja beruhigt, dass im Kopf doch etwas richtiges hängen geblieben ist. ;)


Gruß,
Cassio
 

Ü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)