- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 10

Thema: Schrittmotor mit PCF8574

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    27.09.2005
    Beiträge
    5

    Schrittmotor mit PCF8574

    Anzeige

    E-Bike
    Hi,
    ich habe da ein paar Ungereimtheiten, die ich nicht lösen kann.
    Warum hält das Proramm an der Stelle 53 nicht an?
    Der Import ist der gleiche get_Value.bas aus der LIB ohne die LCD Befehle und allen Zeilen in denen Digit vorkommt.
    kann mir jemad helfen?
    1.
    1 import "G:\CControl\PCF8574\get_Zahl.bas"
    2 import "C:\programme\basicpp\lib\Get_Key.bas"
    3 define LIGHT port[16]
    4 define SDA port[9]
    5 define SCL port[10]
    6 define DRIVE byteport[10]
    7 define PCFDATA as byte
    8 define ADDR as byte
    9 define COUNTER as byte
    10 define KEYCode as byte
    11 define Schritte as Word
    12 define UdM as byte
    13 goto INIT
    14
    15 FUNCTION UPSTEP_H(steps as word,speed as byte)
    16 define COUNT as word
    17 define DELAY as byte
    18 define SEQUENCER as byte
    19 define Wert as byte
    20
    21 FOR COUNT=0 TO STEPS
    22 SEQUENCER=(SEQUENCER+1)and 7h
    23 for DELAY=0 to speed ' Zeitschleife
    24 next DELAY
    25 looktab SEQUENCE_H,sequencer,DRIVE
    26 next COUNT
    27 END FUNCTION
    28
    29 #INIT
    30 LIGHT=off
    31 LCD.INIT
    32 LCD.OFF
    33 SDA=on
    34 SCL=on
    35 Pause 2
    36 LCD.INIT
    37 LCD.Pos 1,1
    38 LCD.PRINT " Schrittmotor"
    39 LCD.pos 2,1
    40 LCD.print " mit PCF8574"
    41 pause 10
    42 LCD.CLR
    43 LCD.OFF
    44 #MAIN
    45 LCD.Init
    46 LCD.pos 1,1
    47 LCD.Print " Anzahl Steps?"
    48 Schritte=GET_Value()
    49 LCD.POS 1,1
    50 LCD.PRINT "Steps = " & Schritte & " "
    51 LCD.POS 2,1
    52 LCD.Print " Geschwindigkeit?"
    53 UdM=Get_Value() <-
    54 LCD.Pos 2,1
    55 LCD.print "Speed = " & UdM & " "
    56 UPSTEP_H(Schritte, UdM)
    57 Drive=00h 'Motor stromlos
    58 pause 50
    59 goto main
    60 '-------------------------------------------
    61 Table Sequence_H
    62 09h 01h 05h 04h 06h 02h 0Ah 08h
    63 End Table
    64 End

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von Tido
    Registriert seit
    14.11.2006
    Ort
    OWL
    Alter
    48
    Beiträge
    622
    Hallo,

    hält es denn in Zeile 48 an?
    Welchen Wert hat UdM denn nach Zeile 53 (was zeigt das LCD in Zeile 55 an)?

    MfG
    Tido

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    27.09.2005
    Beiträge
    5
    Danke für deine Antwort.
    in Zeile 48 hält es an und wartet auf Tastatureingaben, die mit E beendet werden. Dann rauscht er durch und ich sehe neue Angabe auf dem LCD
    (Anzahl Steps? - Zeile 47)
    Zeile 55 Udm ist 00.
    Der Motor bewegt sich nicht, er zuckt nur.
    mfg

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von Tido
    Registriert seit
    14.11.2006
    Ort
    OWL
    Alter
    48
    Beiträge
    622
    Hallo

    ich vermute, dass durch deine Änderungen in der Get_Value.bas das Problem hervorgerufen wird.
    Hast du es mal nur ohne die lcd.-Zeilen aber mit digit getestet?

    Tido

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von Tido
    Registriert seit
    14.11.2006
    Ort
    OWL
    Alter
    48
    Beiträge
    622
    Halt, hab' noch was bemerkt:

    Die Funktion Get_value liefert ein 'word' zurück, du hast aber die Variable UdM nur als byte deklariert. Bei 'Schritte' ist's richtig!

    MfG
    Tido

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    27.09.2005
    Beiträge
    5
    Hallo.
    ok, ich habe auch UdM als word definiert und das dann auch in der Function berücksichtigt.
    Die LCD Anzeige zeigt mir, das UdM nach der Get_value Routine den Wert 0
    hat.
    Die Anweisungen um Digit und LCD.. habe ich herausgenommen, weil ich dachte,sie sind schuld.
    Beim ersten Get_value stoppt er und wartet auf eine Eingabe, das zweite Get_Value überfährt er.
    gruß conger

  7. #7
    Erfahrener Benutzer Roboter Experte Avatar von Tido
    Registriert seit
    14.11.2006
    Ort
    OWL
    Alter
    48
    Beiträge
    622
    Hi,

    schreib' mal testweise zwischen Zeile 50 und 51 "pause 50".
    Geht's dann?

    Tido

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    27.09.2005
    Beiträge
    5
    Jo, dann tut er's. Danke aber woran liegt es????

    Aber jetzt kommt es:, wenn ich die Routine aus der LIB nehme "Stepper_Drive.bas"
    und dann das Programm wie folgt um ändere, geht nichts.
    Nicht einmal der Befehl Light=off wird ausgeführt

    import "G:\CControl\PCF8574\Stepper_Drive.bas"
    import "G:\CControl\PCF8574\get_Zahl.bas"
    import "C:\programme\basicpp\lib\Get_Key.bas"

    '------ I/O PORTS ---------
    define LIGHT port[16]
    define SDA port[9]
    define SCL port[10]

    '---- SYSTEM MEMORY -------

    define Schritte as Word
    define UdM as Word

    #INIT
    LIGHT=off
    LCD.INIT
    LCD.OFF
    SDA=on
    SCL=on
    Pause 2

    '----------- EINSCHALT MELDUNG------------------------
    LCD.INIT
    LCD.Pos 1,1
    LCD.PRINT " Schrittmotor"
    LCD.pos 2,1
    LCD.print " mit PCF8574"
    pause 10
    LCD.CLR
    LCD.OFF

    #MAIN
    LCD.Init
    LCD.pos 1,1
    LCD.Print " Anzahl Steps?"
    Schritte=GET_Value()
    LCD.POS 1,1
    LCD.PRINT "Steps = " & Schritte & " "
    LCD.POS 2,1
    LCD.Print " Geschwindigkeit?"
    Pause 10 'neu eingebaut
    UdM=Get_Value()
    LCD.Pos 2,1
    LCD.print "Speed = " & UdM & " "
    LCD.OFF
    beep 10,50,0
    UPSTEP_H(Schritte, UdM)
    Pause 10
    UPSTEP_H(Schritte, UdM)
    Goto main

    Da muß es einen gewaltigen Konflickt mit den Ports geben, den ich aber nicht sehe

    gruß conger

  9. #9
    Erfahrener Benutzer Roboter Experte Avatar von Tido
    Registriert seit
    14.11.2006
    Ort
    OWL
    Alter
    48
    Beiträge
    622
    Zitat Zitat von Conger
    Jo, dann tut er's. Danke aber woran liegt es????

    Hallo,

    Grund 1: Du bist zu langsam oder
    Grund 2: die C-Control ist zu schnell oder
    Grund 3: die Enter-Taste prellt.

    Grund 1 und 2: Wenn du die Schritte eingibst und mit Enter bestätigst, "rast" dein Programm weiter und erwartet als nächstes die Eingabe der Geschwindigkeit. In diesem Moment hast du evtl. den Finger noch auf der Enter-Taste (ist also noch gedrückt)!

    Grund 3: Du hast zwar die Enter-Taste "ganz schnell" gedrückt, aber die Taste prellt und das wird beim Abfragen der Geschwindigkeit als "User hat Enter-Taste gedrückt" interpretiert.

    Durch das Einfügen der Pause (50 * 20ms = 1 Sekunde) hast du Zeit, den Finger von der Taste zu nehmen bzw. das Prellen der Taste wird abgewartet. Du kannst die Pause durch Ausprobieren noch verringern. Eine halbe Sekunde sollte vollkommen reichen (Pause 25).

    Muß jetzt erst mal Geld verdienen...(arbeiten)

    Tido

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    27.09.2005
    Beiträge
    5
    Danke Tido!
    gruß conger

Berechtigungen

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

Solar Speicher und Akkus Tests