-         

Ergebnis 1 bis 5 von 5

Thema: Hallo neues Problem - Hoffe auf Hilfe

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    12.01.2009
    Beiträge
    12

    Hallo neues Problem - Hoffe auf Hilfe

    Anzeige

    Hallo , nach der schnellen Hilfe von gestern heute nun ein neuer Versuch ...

    Da ich mich erst seid kurzem mit dem dem Atlem und der Programmierung befasse ist vielleicht noch nicht alles perfekt .
    hab damit angefangen eine Lichtsteuerung für mein Fahrzeug zu entwerfen erst einmal auf einen Testboard ...

    Jetzt zu meinem Problem...

    Wenn ich mit meinem kleinen Programm in ein Unterprogramm und dieses wird dieses auch ausgeführt -- aber mit Return springt er wieder zurück zu dem zuletzt ausgeführten Unterprogramm eigentlich sollte er zum Hauptprogramm zurückkehren .

    Ich kopier mal den bisherigen Code dazu: vielleicht Hilfs ja ... nicht lachen .. mach das erst seid Samstg!


    $regfile = "m8def.dat"
    $crystal = 4000000
    '--------------------------------------------------------------------- Konfiguration
    Config Portb.1 = Output '-----------Innenleuchte
    Config Pinb.0 = Input '-----------Türkontakt
    Config Pinb.2 = Input 'Zündung an ( Licht soll ausgehen )
    Config Portb.3 = Output 'Testleuchte ( wo das Programm steht entfällt später)
    Config Portb.4 = Output '
    Portb.0 = 1
    Portb.2 = 1

    '---------------------------------------------------------------------- Grundvariablen



    Dim A As Byte
    Dim I As Byte
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1 ' PWM Timer
    Compare1a = 255

    Dim Richtung As Integer
    Richtung = 0

    '------------------------------------------------------------------------ Tasterabfragen



    DO

    Debounce Pinb.0 , 0 , Pr , Sub
    Debounce Pinb.2 , 0 , Pa , Sub

    Loop

    End


    '------------------------------------------------------------------------- Unterprogranmm Abdimmen


    Pr:
    If Richtung = 0 Then


    Do

    Compare1a = Compare1a - 1
    Waitms 10
    Loop Until Compare1a = 0
    Richtung = 1

    Portb.3 = 1
    Wait 1
    Portb.3 = 0
    Gosub Vzr

    Else
    Return
    End If

    Return

    '--------------------------------------------------------------------------- Unterprogramm Andimmen
    Pa:

    '---- If Richtung = 0 Then

    '-------- if richtung = 1 then

    Do

    Compare1a = Compare1a + 1
    Waitms 10
    Loop Until Compare1a = 255
    Richtung = 0



    '------ Else
    ' Return
    '------ End If


    Return

    '--------------------------------------------------------------------------- Timer für Nachleuchten
    Vzr:

    Portb = 1
    Config Timer0 = Timer , Prescale = 1024 'Konfiguriere Timer1
    Enable Timer0 'schalte den Timer1 ein
    On Timer1 Isr_von_timer1
    Enable Interrupts
    Timer1 = 0

    Do


    If Pinb.2 = 0 Then

    Gosub Pr

    Else

    Loop
    End If

    Return

    '------------------------------------------------------------------------------
    Isr_von_timer1: Timer0 'Timer0

    Gosub Pr





    Return








    [/code]

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    53
    Beiträge
    1.080
    Hi

    Es kann bei der Fehlersuche nicht schaden, sich einen lesbaren Stil anzueignen. Wenn man bei Schleifen und IF-Konstrukten sinnvolle Einrückungen vornimmt, kann man leichter feststellen, wo etwas falsch sein könnte.

    Einiges ist arg unsinnig, die das "else return" beim Abdimmen, anderes ist falsch, wie z.B. das loop im IF-Block beim Timer fürs Nachleuchten.

    Ich muss auch ehrlich gestehen, das es nicht grade Spaß macht, dieses Listing zu lesen.

    So ... aber dafür, das du das erst sein ein paar Tagen machst ... Respekt

    Gruß MeckPommER
    Mein Hexapod im Detail auf www.vreal.de

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    Hi!
    Das die Zeilen nicht eingerückt sind könnte daran liegen, dass der Code nicht im [code*][/code*] (ohne*) eingetragen wurde.

    Ich habe, so wie MeckPommER nicht wirklich lust, das ganz genau durch zu arbeiten. Ich würde dich bitte, dein Programm nach dem, was schon gesagt wurde und nach dem, was ich gleich schreiben werde, nochmal zu überarbeiten und dann in dem [code*][/code*] (ohne*) zu posten.
    Mir ist als erstes aufgefallen, dass du in deinen Subs zum Entprellen ein Do anfängst, aber nicht mit nem loop aufhörst.
    Und ob BASOM nen Config Timerx im Programm mag weiß ich auch nicht.

    mfg,
    jon
    Nice to be back after two years
    www.roboterfreak.de

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    12.01.2009
    Beiträge
    12

    Hallo und dank an den MeckPomLer.... Mein KFZ-Innenlichtstg

    So danke erst mal zu dem Tip mit den ganzen Schleifen.... war ja auch verschleift ... [-o<

    vielleicht wenn jamand lust hat ... geht vielleicht auch kürzer ? Oder besser ?

    Stell ich den Code noch mal rein hoffe jetzt Richtig !



    Code:
    $regfile = "m8def.dat"
    $crystal = 4000000
    '----------------------Konfiguration---------------------------------------------
              Config Portb.1 = Output                           '-----------Innenleuchte
              Config Portb.0 = Input                            '-----------Türkontakt
              Config Portb.2 = Input                            'Zündung an ( Licht soll ausgehen )
              Config Portb.3 = Output                           'Testled ( wo das Programm steht entfällt später)
              Config Portb.4 = Output                           'Testled (wo das Programm steht entfällt später )
              Config Portd.4 = Input                            'ZV Eingang Türen auf
              Config Portd.5 = Input                            'ZV Eingang Türen zu
    
    
    
              Pinb.0 = 1                                        'Pull upps
              Pinb.2 = 1                                        'Pull upps
              Pind.4 = 1                                        'Pull upps
              Pind.5 = 1                                        'Pull upps
    
    
    '------------------- Grundvariablen---------------------------------------------
    
    
    
              Dim A As Byte
              Dim I As Byte
              Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1       ' PWM Timer
              Compare1a = 255
    
    
    '------------------ Tasterabfragen----------------------------------------------
    Main:
    
                                                                 'schleife für Tasterabfragen
    Do
              Debounce Pinb.0 , 0 , Pr , Sub                    ' TÜRKONTAKT
              Debounce Pind.4 , 0 , Prr , Sub                   ' ZV Tür auf
    
    Loop
    
    End
    
    
    '--------------- Unterprogranmm Andimmen----------------------------------------
    
    
    Pr:
    
              Do
              Compare1a = Compare1a - 1                         ' Dimmvorgang
              Waitms 5
              Loop Until Compare1a = 0
    
    
    
    
              Gosub Vzr                                         ' geht zur Zeitverzögerung
    
    
    
    
    '-------------------  Unterprogramm langsam Andimmen ---------------------------
    
    
    
    Prr:
    
              Do
              Compare1a = Compare1a - 1                         ' Dimmvorgang
              Waitms 15
              Loop Until Compare1a = 0
    
                                                                  ' geht zur Zeitverzögerung
              Gosub Vzr
    
     Return
    
    
    '------------------Unterprogramm schnell Andimmen -------------------
    
     Paa:
    
    
    
              Do
              Compare1a = Compare1a + 1
              Waitms 5
              Loop Until Compare1a = 255
    
    Goto Main
    
    Return
    
    '-----------------Unterprogramm Langsames Abdimmen -------------------------------
    
    Pa:
    
    
              Do                                                'Abdimmen
              Compare1a = Compare1a + 1
              Debounce Pinb.0 , 0 , Pr , Sub
              Waitms 10
              Loop Until Compare1a = 255
              '
    
    Goto Main
    
    Return
    
    '--------------------- Timer für Nachleuchten ---------------------------------
    Vzr:
    
              For I = 1 To 255                                  ' Timer Schleife
              Debounce Pinb.2 , 0 , Paa , Sub                   ' ZV Tür Zu
              Debounce Pind.5 , 0 , Pa , Sub                    ' ZV Tür Zu
              Waitms 300                                        'Wartezeit
              Next I
    
              Gosub Pa                                          'Aufruf Abdimmen
    
    
    Return
    
    '----------------------------------- ende -------------------------------------
    
    Also für Vorschläge bin ich offen ! Was will ich noch tun ? Coming / Living Home Funktion .. Soll heißen wenn es draußen dunkel ist sollen auch die Scheinwerfer mit andimmen ... Und wenn es draußen kalt ist könnt ja auch die Heizung mit angehen oder das Lenkrad vorwärmen ....
    
    Danke noch mal das Ihr mich hier nicht auslacht aber die Micro Prozessor Geschichte hat mich irgendwie schon immer gereizt.

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    53
    Beiträge
    1.080
    Ok, 2. Runde

    Im Pr: Unterprog. fehlt das Return, und generell müssen Unterprogramme, die mit Gosub angesprungen werden auch mit Return verlassen werden, sonst hängt sich dein Controller auf. Bei einem Gosub "merkt" sich der Controller, woher er kam - und sprint mit dem Return wieder zu der Adresse zurück. Erfolgt kein Return, so merkt er sich die ganzen Ursprungsadressen bis ihm irgendwann der RAM ausgeht, und das kann je nach Programm in einigen Stunden oder auch nach wenigen Millisekunden der Fall sein.

    Übrigens können Sinnvolle Namen für Unterprogramme enorm die Lesbarkeit verbessern

    Generell würde ich das Programm anders aufbauen. Der jetzige Nachteil ist der, das dein Programm die Taster nicht mehr abfragt, sobald eine Aktion wie das Dimmen erfolgt.
    Besser wäre es, in den Unterprogrammen nur über Variablen festzulegen wohin (z.b. 0 oder 255) und wie schnell gedimmt werden soll und das eigentliche Dimmen im Hauptprogramm zu machen.
    So bleibt das System immer "am Ball" und wertet ständig die Sensoren (Taster, später vielleicht auch Helligkeits- und Temperatursensoren) aus.

    Gruß und nie entmutigen lassen

    MeckPommER
    Mein Hexapod im Detail auf www.vreal.de

Berechtigungen

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