-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Frage Drehfeldausgabe

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118

    Frage Drehfeldausgabe

    Anzeige

    Hallo,
    anbei ein Codeauszug.
    Nacheinander werden jeweils Ports auf H gesetzt.
    Es werden 3 Pins dann abgefragt.Und gibt pro Port 1 Pin(Durchgang)
    aus.Das klappt auch alles.Es können jetzt mehrehre Ausgabevarianten
    entstehen.L1,L2,L3... L3,L2,L1...usw.Die Ausgabevariante bestimmt
    das Drehfeld(rechts oder lins).Meine Idee war jetzt im Speicher
    für L1,L2,L3 die Ziffer 123 abzulegen und am Ende der Schleife
    auszulesen und auszuwerten.
    Also wie kriege ich die Ziffer hin 100ter,10ner,1ner.
    Und kann ich readeprom und writeeprom verwenden.
    Hat jemand eine Idee?


    Code:
    Do
    'Pinauswertung
    Portd.1 = 1
     If Pind.1 = 1 Then
     Print "L1"
     Elseif Pind.2 = 1 Then
     Print "L2"
     Elseif Pind , 3 = 1 Then
     Print "L3"
     End If
    Portd.1 = 0
    
    Portd.2 = 1
     If
    'wie oben
     End If
    Portd.2 = 0
    
    Portd.3 = 1
     If
    'wie oben
     End If
    Portd.3 = 0
    
    'Drehrichtung
    'If "L1" ; "L2" ; "L3" Then
     'Print "rechts"
     'Elseif "L2" ; "L3" ; "L1" Then
     'Print "rechts"
     'Elseif "L3" ; "L1" ; "L2" Then
     'Print "rechts"
     'Else
     'Print "Links"
    'End If
    
    Loop
    Wigbert

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Und kann ich readeprom und writeeprom verwenden.
    Natürlich kannst du das. Aber wofür?

    Also wie kriege ich die Ziffer hin 100ter,10ner,1ner.
    A=0
    A=A+100 'A ist 100
    A=A+20 'A ist 120
    A=A+3 'A ist 123



    Dim A As Byte


    Do

    If Pind.1 = 1 Then
    A = 100
    Gosub L2
    End If

    Print A
    If A = 123 Then Print "Rechts" Else Print "Links"

    Wait 3

    Loop

    L2:

    Do
    If Pind.2 = 1 Then A = A + 23
    If Pind.3 = 1 Then A = A + 32
    Loop Until A > 100
    Return

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118

    Re Drehfeldaugabe

    Hallo,
    ganz so einfach ist es nicht .Jeder Eingangspin kann mit jeden
    Ausgangspin angeschlossen werden.Es entstehen maximal
    6 Varianten 3x rechts, 3mal links.Aber aus der Idee kann ich was
    machen.Danke.
    Aber mein Programm meckert, wenn ich im Gosub Programm Do und Loop until.... einsetze.

    W.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118

    Re Drehfeld

    Sorry,
    es geht, hatte sich ein kleiner Fehler eingeschlichen.Aber warum muss
    das Do-Loop Until... rein.

    W.

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Das Programm startet quasi, wenn die erste Phase anliegt. Im Prinzip hätte man mit jeder beliebigen starten können. Aber so ist es evtl etwas einleuchtender.
    Welche Phase garde anliegt wenn das Programm startet ist unbekannt. Also muss man sich einen Startpunkt setzen. In diesem Fall L1.

    Nachdem L1 da war, folgen L2 oder L3. Wer zuerst kommt wissen wir ja nicht. Der Controller fragt die Eingänge aber um einiges schneller ab, als die Phasen den Eingang auf High schalten. Also muss für die Erkennung L2 oder L3 sichergestellt werden, das der Controller wartet, bis eine der beiden da war.

    Nach L1 hat A=100. Also 100er-Stelle eine 1 für L1.
    Loop Until wartet, bis A größer als 100 ist. Also bis A=123 oder A=132 ist. Weil erst dann war die nächste Phase da.
    Wenn die Erkennung abgeschlossen ist, läuft das Programm weiter und und gibt das Drehfeld aus.

    Es ist auch egal, ob du L2, L3 und dann L1 hast. Oder mit L3 anfängst. Alle möglichen Varianten abzufragen benötigt nur unnötig Speicherplatz!

    Das ganze kann auch ohne das Label L2: programmiert werden.

    ganz so einfach ist es nicht .Jeder Eingangspin kann mit jeden
    Ausgangspin angeschlossen werden.
    Ich verstehe nicht, was du meinst. In deinem Programm hast du doch nur drei Eingänge.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118

    Drehfeldausgabe durch Multiplikation

    Hallo,
    um das Drehfeld ausgeben zu lassen, multipl. ich Ausgangspin
    mit Eingangspin.Da der Messzyklus Ausgangspins nacheinander
    ein bzw. ausschaltet, muss sich das Programm den Wert merken.

    portd.1 = 1 , welcher Pin hat 1?, merke Dir Ergebnis !
    portd.1 = 0
    portd.2 = 1 , wie oben
    Portd.2 = 0
    portd.3 = 1 , wie oben
    portd.3 = 0

    'gemerkte Ergebnis berechnen.

    Also muss ich zwischenspeichern ?Und wenn ja wie kriege ich den Zwischenspeicher hin?

    • Berechnung Drehsinn

      Ausgang

      L1= 1
      L2= 2
      L3= 3


      Eingang

      L1' = 1
      L2' = 2
      L3' = 3


      rechtsdrehsinn

      1*1=1
      2*2=4
      Summe=5

      1*2=2
      2*3=6
      Summe=8

      1*3=3
      2*1=2
      Summe=5

      linksdrehsinn

      1*1=1
      2*3=6
      Summe=7

      1*2=2
      2*1=2
      Summe=4

      1*3=3
      2*2=4
      Summe=7


    Also habe ich Wertzuweisungen für links und rechtsdrehsinn.
    Den dritten Leiter braucht man nicht mehr auswerten.
    Macht die Industrie auch nicht anders.

    W.

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118

    Re Drehf.

    Hallo Marco 78,
    jetzt haben sich unsere Beiträge überschnitten.
    Hatte wohl das nicht richtig verstanden.Probier Deine Variante noch
    mal aus.

    W.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118

    Re Drehf.

    Marco 78,
    ich noch mal.Ich hab wohl nur die Hälfte beschrieben.
    In jeden Messzyklus wird nur einer der 3 Eingänge H sein.
    Dann der nächste, wieder nur einer, beim dritten Messzyklus
    wieder nur ein Pin auf H.Welchen weiss ich nicht.
    Müsste da nicht auch bei Deiner Variante ein zwischenspeichern
    erfolgen?.

    W.

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Ich speichere es doch in A zwischen.
    Deine Ausgänge hast du im Programm aber nicht beschrieben. Ohne das man weiss, das du irgendetwas mit Ausgängen vor hast kann dir keiner helfen.
    Außerdem kann ich nicht nachvollziehen, was du vor hast, bzw wie du es vor hast.

    Wenn du den AVR nur nutzt, um Ausgänge 1:1 bei einem Eingangssignal zu schalten, kannst du ihn dir doch auch sparen?!?

    Ich kenne es so, das Drehfeldprüfer entweder einen Drehfeldabhänigen Motor haben (gibt's die eigentlich heutzutage noch zu kaufen) oder es wird mit der Zeit der folgenden Phase gemessen. Kommt die nächste Phase zu spät, hat man linkes Drehfeld. Kommt sie wie erwartet, hat man ein rechtes.

    Poste doch mal deinen ganzen Code und die Schaltung dazu. Dann kann man evtl besser nachvollziehen, was du eigentlich vor hast.

    Hast du den Code von mir schon ausprobiert? Funktioniert er?

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118

    Re Drehfeld

    Hallo Marco,
    Du hast natürlich recht .Manches kann man nur im Zusammenhang
    erkennen.
    Es wird ein Durchgangsprüfer fur 5 pol Verlängerungsleitungen.
    Grunidee:
    1.Messzyklus PE Leiter Portx = 1
    -nur ein Pin darf H haben wenn nicht "Kurzschluss"
    wenn ja, der richtige?wenn nicht "Unterbrechung"
    sonst " SL OK"
    Portx = 0
    2.Messzyklus N-Leiter .....wie oben
    3.Messzyklus L1-Leiter ....wie oben
    " L1-L1 "( L1-L2 ,L1-L3)
    4.Messzyklus L2......
    5.Messzyklus L3......
    6.Messzyklus Drehfeld
    Code:
     $regfile = "attiny2313.dat"                                'AT90S2313-Deklarationen
    $crystal = 9216000                                          'Verwendeter Quarz: 9,2160 MHz
    $baud = 9600
    
    
    
    Ddrb = &B11100000
    Portb = &B00011111
    Ddrd = &B1111100
    E1 Alias Pinb.0
    E2 Alias Pinb.1
    E3 Alias Pinb.2
    E4 Alias Pinb.3
    E5 Alias Pinb.4
    '$hwstack = 32
    '$swstack = 8
    '$framesize = 16
    'Config Serialout = Buffered , Size = 10
    Config Com1 = Dummy , Synchrone = 0 , Parity = Even , Stopbits = 1 , Databits = 8 , Clockpol = 0
    Dim B As Byte
    Dim D As Byte
    Dim Summe As Byte
    Declare Sub Summe
    Declare Sub Leiter
    
    Do
    'Waitms 100
    Portd.2 = 1
    Summe
     Print Summe
     If Pinb.0 = 1 Then
      Printbin &H04 ; &H53 ; &H04 ; &H00 ; &H53;                'Kursor
      Printbin &H08 ; &H50 ; &H50 ; &H45 ; &H2D ; &H20 ; &H4F ; &H4B ; &H44;       'PE- OK
      Else
      Do
      Printbin &H04 ; &H53 ; &H03 ; &H00 ; &H54;                'Kursor
      Printbin &H0A ; &H50 ; &H50 ; &H45 ; &H2D ; &H42 ; &H72 ; &H75 ; &H63 ; &H68 ; &H2C;       'PE- Bruch
      Loop
     End If
    Portd.2 = 0
    
    Portd.3 = 1
     Summe
     If Pinb.1 = 1 Then
      Printbin &H04 ; &H53 ; &H04 ; &H01 ; &H52;                'Kursor
      Printbin &H08 ; &H50 ; &H4E ; &H4C ; &H2D ; &H20 ; &H4F ; &H4B ; &H53;       'NL- OK
      Else
      Do
      Printbin &H04 ; &H53 ; &H03 ; &H01 ; &H55;                'Kursor
      Printbin &H0A ; &H50 ; &H4E ; &H4C ; &H2D ; &H42 ; &H72 ; &H75 ; &H63 ; &H68 ; &H3B;       'NL- Bruch
      Loop
     End If
    Portd.3 = 0
    'Wait 1
    
    Portd.4 = 1
     Summe
     Printbin &H04 ; &H53 ; &H04 ; &H02 ; &H51;                 'Kursor
     Printbin &H04 ; &H50 ; &H4C ; &H31 ; &H29;                 'L1
     Leiter
    Portd.4 = 0
    'Wait 1
    
    Portd.5 = 1
     Summe
     Printbin &H04 ; &H53 ; &H04 ; &H03 ; &H50                  ';                 'Kursor
     Printbin &H04 ; &H50 ; &H4C ; &H32 ; &H2A;                 'L2
     Leiter
    Portd.5 = 0
    'Wait 1
    
    Portd.6 = 1
     Summe
     Printbin &H04 ; &H53 ; &H04 ; &H04 ; &H57;                 'kursor
     Printbin &H04 ; &H50 ; &H4C ; &H33 ; &H2B;                 'L3
     Leiter
    Portd.6 = 0
    'Wait 1
                                                                 'Drefeld
    Portd.4 = 1
    Portd.5 = 1
    Portd.6 = 1
    If Pinb.2 = 1 Then
     D = 100
     Gosub Drehfeld
     End If
    If D = 123 Then
     Print "rechts"
    Else
     Print "links"
    End If
    'Wait 1
    Loop
    End
    
    Sub Summe
     B = E1 + E2
     B = B + E3
     B = B + E4
     Summe = B + E5
     If Summe >= 5 Then
    
       Printbin &H02 ; &H43 ; &H41;
       Do                                                       'Löschen
       Wait 1
       Printbin &H04 ; &H53 ; &H02 ; &H03 ; &H56;
       Printbin &H0D ; &H50 ; &H4B ; &H75 ; &H72 ; &H7A ; &H73 ; &H63 ; &H68 ; &H6C ; &H75 ; &H73 ; &H73 ; &H0A;       'Kurzschluss
       Wait 1
      Loop
     End If
    End Sub
    
    Sub Leiter
    If Pinb.2 = 1 Then
      'Printbin &H04 ; &H53 ; &H06 ; &H02 ; &H53;
      Printbin &H05 ; &H50 ; &H2D ; &H4C ; &H31 ; &H05;         '-L1
     Elseif Pinb.3 = 1 Then
      'Printbin &H04 ; &H53 ; &H06 ; &H03 ; &H52;
      Printbin &H05 ; &H50 ; &H2D ; &H4C ; &H32 ; &H06;         '-L2
     Elseif Pinb.4 = 1 Then
      'Printbin &H04 ; &H53 ; &H06 ; &H04 ; &H55;
      Printbin &H05 ; &H50 ; &H2D ; &H4C ; &H33 ; &H07;         '-L3
     Else
       Printbin &H02 ; &H43 ; &H41;
       Wait 1
       Do
       Printbin &H04 ; &H53 ; &H02 ; &H03 ; &H56;
       Printbin &H0D ; &H50 ; &H4C ; &H65 ; &H69 ; &H74 ; &H65 ; &H72 ; &H62 ; &H72 ; &H75 ; &H63 ; &H68 ; &H10 ;       'Leiterbruch
      Loop
     End If
    End Sub
    
    Drehfeld:
    Do
    If Pinb.2 = 1 Then D = D + 23
    If Pinb.3 = 1 Then D = D + 32
    Loop Until D > 100
    Return
    schau Dir den Code mal an ,im groben läuft er.Aber wenn ich die
    Pullupwiderstände einschalte,geht es auf Kurzschluss.Aber das ist wohl klar da alle Pins auf 1 gesetzt werden.
    Da die Ausgänge 1 zuschalten und die Eingänge auf 0 geschaltet werden
    müssen ist ein Simulation nur bedingt möglich.
    Schau es Dir an und sag ich soll es wegschmeissen.
    Ausgabe erfolgt über ein Miniteminal,deshalb der Hexcode.


    W.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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