- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Programm hängt

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    03.11.2007
    Ort
    München
    Beiträge
    23

    Programm hängt

    Anzeige

    Praxistest und DIY Projekte
    Hallo zusammen,
    ich habe ein Problem mit meinem Programm, wenn ich es durch den Simulator laufen lasse springt es von der Stelle Pind.2 = 1 wieder in die erste Zeile. Es sollte doch eigentlich in der Do - Loop Schleife hängen bleiben. Wer hat eine Erklärung warum das so ist.
    Viele Grüsse Kalle

    $regfile = "m32def.dat"
    $crystal = 1000000
    $hwstack = 132
    $swstack = 132
    $framesize = 164
    $baud = 19200

    Config Pinb.0 = Input 'Starttaster
    Config Pinb.1 = Input 'MV manuell ein / ausschalten
    Config Pinb.2 = Input 'im Menü scrollen
    Config Pinb.3 = Input 'Wert im Menü erhöhen
    Config Pind.2 = Input 'Wert im Menü verringern
    'config pind.3 = input(Res)
    'config pind.4 = input(Res)
    'config pind.5 = input(Res)
    Config Portc.2 = Output 'Magnetventil 1
    Config Portc.1 = Output 'Magnetventil 2
    Config Portc.0 = Output 'Kamera
    Config Portd.7 = Output 'Blitz

    Kamera Alias Portc.0
    Mv1 Alias Portc.2
    Mv2 Alias Portc.1
    Blitz Alias Portd.7
    Taster_start Alias Pinb.0 ' starttaster
    Taster_mm Alias Pinb.1 ' Taster_mv_manuell
    Taster_ms Alias Pinb.2 ' Taster_menü_scroll
    Taster_we Alias Pinb.3 ' Taster_wert_erhöhen
    Taster_wv Alias Pind.2 ' Taster_wert_verringern

    Pinb.0 = 1 'Pull Up einschalten da taster gegen gnd
    Pinb.1 = 1 'Pull Up einschalten da taster gegen gnd
    Pinb.2 = 1 'Pull Up einschalten da taster gegen gnd
    Pinb.3 = 1 'Pull Up einschalten da taster gegen gnd
    Pind.2 = 1 'Pull Up einschalten da taster gegen gnd

    Dim Wert1 As Word
    Dim Wert2 As Word
    Dim Wert3 As Word
    Dim Wert4 As Word
    Dim Wert5 As Word
    Dim Wert6 As Word
    Dim A As Byte
    Dim B As Byte
    Dim C As Byte

    Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0
    Config Lcd = 16 * 2

    Do
    If Taster_ms = 0 Then
    Incr A
    End If
    Cls
    Lcd A

    Loop


    End

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    Hallo Kalle,

    welche Bascom Version nutzt Du? Bei mir gibt es dieses Problem nicht. Allerdings würde ich nicht ständig ein CLS vor LCD A setzen.

    z.B. so:
    Code:
    Cls
    Do
       If Taster_ms = 0 Then
          Incr A
       End If
       Locate 1 , 1
       Lcd A ; "  "
    
    Loop
    End
    Einzelschritte werden da aber schwierig

    Auffällig:
    Die Baudfehlerrate ist recht hoch.
    Der Stack ist großzügig gewählt. Kommt wohl noch bissel was 'vermaschtes' dazu? Eingang ist Standard bei PINs, kann man aber ruhig trotzdem konfigurieren, wenn der Platz reicht.
    Mehrere Pullups kann man zusammenfassen. Für Pullups das Port nutzen setzen.

    Statt
    Code:
    Pinb.0 = 1                                                  'Pull Up einschalten da taster gegen gnd
    Pinb.1 = 1                                                  'Pull Up einschalten da taster gegen gnd
    Pinb.2 = 1                                                  'Pull Up einschalten da taster gegen gnd
    Pinb.3 = 1                                                  'Pull Up einschalten da taster gegen gnd
    also besser so:
    Code:
    Portb = &B00001111                                          'Pullups
    Geändert von peterfido (14.06.2015 um 07:43 Uhr)
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.11.2013
    Ort
    Home
    Beiträge
    213
    Hallo Kalle,

    habe deine Anfrage nicht so richtig verstanden. Erste Zeile im Programm oder LCD. LCD währ normal, hast kein Locate festgelegt.
    Nach Cls wird der komplette Puffer der LCD gelöscht.(sieht meistens auch hässlich aus wenn die Anzeige flackert)
    Siehe Hinweis von Peterfido.

    Zum Simulator. In der alten BASCOM- Testversion wird Zeile für Zeile abgefragt. Auch „End“.
    Mit Terminal müsstest Du am besten mit (Print A) sehen ob sich A bei jedem Tastendruck um eins erhöht.

    Gruß

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    03.11.2007
    Ort
    München
    Beiträge
    23
    Hallo zusammen,
    @peterfido ich benutze die Version 2.0.7.5 . Das mit dem Port ist eine gute Idee. Die Baud brauche ich eigentlich gar nicht da es keine Verbindung nach außen gibt. Ich hab mir nur mal so ein Grundgerüst erstellt damit ich es nicht dauernd tippen muss. Es soll dann auch ein Menue entstehen in dem ich dann verschiedene Werte einstellen kann. Das Cls brauche ich für das Menue wenn der nachfolgende Eintrag kürzer ist als der vorige damit keine Textfetzen zurückbleiben, oder?
    @fredred Er springt zur ersten Zeile im Programm zurück also zu $regfile.
    Gruß Kalle

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    Bei meinem Beispiel oben werden die nächsten evtl. vorhandenen Zeichen hinter A geleert. Gibt natürlich noch bessere Methoden dafür.

    Bei meinen Projekten schreibe ich nur aufs LCD wenn sich was geändert hat. Spart Programmlaufzeit, braucht aber mehr RAM. Das sind dann aber meist Grafik-LCDs.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    03.11.2007
    Ort
    München
    Beiträge
    23
    Hallo zusammen,
    habe das Programm geändert und neu kompeliert, jetzt läuft es wie es soll. @peterfido du meintest sicher Pinb = &B00001111 nicht Portb = &B00001111.
    Gruß Kalle

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    @peterfido du meintest sicherPinb = &B00001111 nicht Portb = &B00001111.
    Nein, das stimmt schon so mit PORT! In die PIN-Register werden mit jeder Taktflanke die logischen Zustände übernommen, die in diesem Moment an den korrespondierenden Anschlüssen des Controllers anliegen. Es macht also wenig Sinn sie aktiv zu beschreiben, oder anders gesagt, sie sind reine "Auslese"-Register.

    Die PullUp-Widerstände werden daher über das PORT-Register ein- und ausgeschaltet, wenn der I/O-Anschluss ein Eingang ist. In Deinem Code sind die PullUps im Moment also definitiv abgeschaltet.

    Gruß,

    Daniel

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.11.2013
    Ort
    Home
    Beiträge
    213
    Hallo Kalle,

    Variable A ist ein Byte. Mit Incr A wird diese mit Taster hochgezählt. Ist A>255 könnte es sein ein Fehler wird generiert und Do Loop wird unkontrolliert verlassen. Ein END nach Loop ist nicht zwingend aber wie Du erfahren hast hilfreich. Programmablauf wird ortendlich beendet. Sollten nach Loop weitere Programmteile stehen, und kein END eingefügt, geht es weiter und die Fehlersuche wird Aufwendig.

    Kleiner Hinweis zum LCD- Menü:
    Ich mache es mit einer Statusabfrage der verschiedenen Auslöser für Anzeige.

    Dim Lcd_aktualisieren As Byte 'Zähler für LCD-Anzeigen
    'Warte bis LCD bereit, falls gleichzeitig Spannung eingeschaltet wird
    Waitms 250
    Lcd_aktualisieren = 255 'ist Startanzeige

    Nun lege ich mal mein bescheidenes Programm “Bus-Modul“ im Anhang. Dort findest Du bestimmt eine Anregung wie eine LCD-Anzeige „Schick“ aussieht.

    Gruß
    Angehängte Dateien Angehängte Dateien

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    03.11.2007
    Ort
    München
    Beiträge
    23
    Hallo fredred,
    bis ich das gelesen geschweige kapiert hab vergeht ein halbes Jahr. Bin absoluter Programmieranfänger .Hab mir gedacht A wird hochgezählt (Anzahl der Menueeintrage max. 7). Mit select case springe ich in die Menue´s und verstelle dort die Werte.

    Gruß Kalle

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.11.2013
    Ort
    Home
    Beiträge
    213
    Hallo Kalle,
    bitte um Entschuldigung, sollte doch nur eine Anregung sein. Dein Hinweis(„es sollten keine Textfetzen zurückbleiben“),sollte nur in meinem Code zeigen, wie es auch funktioniert könnte um dies zu vermeiden. Persönlich finde ich es immer besser ein Teil eines bewerden Programms zu übernehmen, um das „Fahrrad nicht neu zu erfinden“.
    Musst kein halbes Jahr lesen, um Anhang zu begreifen. Einfach die Kommentar und Anhänge ignorieren.
    So einfach ist es.

    Mit freundlichen Grüßen

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Asuro hängt oft bei Motorbetrieb
    Von der_smo im Forum Asuro
    Antworten: 7
    Letzter Beitrag: 02.02.2013, 22:41
  2. Problem: Programm hängt & Error 0x20[gelöst]
    Von copcom-weber im Forum Robby RP6
    Antworten: 10
    Letzter Beitrag: 21.01.2010, 10:34
  3. Programm hängt sich auf
    Von martin66119 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 07.10.2007, 22:06
  4. LCD hängt sich auf
    Von hotijack im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 30.05.2007, 17:47
  5. Lade Programm geht nicht (hängt sich auf)
    Von REX im Forum Robby CCRP5
    Antworten: 1
    Letzter Beitrag: 11.09.2004, 05:19

Berechtigungen

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

Solar Speicher und Akkus Tests