-
        

Ergebnis 1 bis 3 von 3

Thema: Motorensteuerung über Pc und µC

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418

    Motorensteuerung über Pc und µC

    Anzeige

    Hallo
    ich hab folgendes Problem: ich hab angefangen eine 3koordinaten Fräßen mit Lego zu bauen. die mechanik lässt mir nur noch malen zu. zwei probleme taten sich auf die motoren zu positioniern um nicht zu schwingen.(das geht noch einigermaßen und funktioniert unter last auch) und mein Hauot problem ist nun das ich die daten nicht richtig zum µC senden kann das will nicht klappen. ich arbeite mit lpt1 und als µC einen atmega16.
    Vb code
    Code:
    Private Sub Timer2_Timer()
    Out (&HBE), 0
    byte1 = byte1 + 1
    
    'Out (&H3BE), byte1 - 1
    
    
    If byte1 = 1 Then Out (&H3BC), erstebytex: Out (&HBE), byte1 - 1 ': Out (&HBE), byte1 + 8
    If byte1 = 2 Then Out (&H3BC), letztebytex: Out (&HBE), byte1 - 1 ': Out (&HBE), byte1 + 8
    If byte1 = 3 Then Out (&H3BC), erstebytey: Out (&HBE), byte1 - 1 ': Out (&HBE), byte1 + 8
    If byte1 = 4 Then Out (&H3BC), letztebytey: Out (&HBE), byte1 - 1 ': Out (&HBE), byte1 + 8
    'If byte1 = 5 Then Out (&H3BC), erstebytez: Out (&HBE), byte1 - 1 ': Out (&HBE), byte1 + 8
    'If byte1 = 6 Then Out (&H3BC), letztebytez: Out (&HBE), byte1 - 1 ': Out (&HBE), byte1 + 8
    'If byte1 = 7 Then Out (&H3BC), erstebytew: Out (&HBE), byte1 - 1 ': Out (&HBE), byte1 + 8
    'If byte1 = 8 Then Out (&H3BC), letztebytew: Out (&HBE), byte1 - 1 ': Out (&HBE), byte1 + 8
    'If byte1 = 9 Then byte1 = 0: Out (&HBE), 8: Timer2.Enabled = False
    If byte1 = 9 Then Timer2.Enabled = False
    
    
    
    End Sub
    Bascom code

    Code:
    $regfile = "m16def.dat"
    $crystal = 7372800
    
    'Config Portd = Input
    Config Portc = Input
    Config Porta = Output
    Config Portb = Input
    Dim Portfeld(10) As Sram Integer
    Dim Programm As Integer
    Portb = 255
    Portc = 255
    Porta = 0
    Waitms 1000
    Porta = 255
    Waitms 1000
    For Programm = 1 To 10
    Do
    If Pinb.0 = 0 Then : Porta.0 = 1 : Else : Porta.0 = 0 : End If
    If Pinb.1 = 0 Then : Porta.1 = 1 : Else : Porta.1 = 0 : End If
    If Pinb.2 = 0 Then : Porta.2 = 1 : Else : Porta.2 = 0 : End If
    If Pinb.3 = 0 Then : Porta.3 = 1 : Else : Porta.3 = 0 : End If
    If Pinb.4 = 0 Then : Porta.4 = 1 : Else : Porta.4 = 0 : End If
    If Pinb.5 = 0 Then : Porta.5 = 1 : Else : Porta.5 = 0 : End If
    If Pinb.6 = 0 Then : Porta.6 = 1 : Else : Porta.6 = 0 : End If
    If Pinb.7 = 0 Then : Porta.7 = 1 : Else : Porta.7 = 0 : End If
    Loop Until Pinc.0 = 0
    
    If Pinc.0 = 0 Then Do
       If Pinb.0 = 0 Then : Porta.0 = 1 : Portfeld(1) = Portfeld(1) + 1 : Else : Porta.0 = 0 : End If
       If Pinb.1 = 0 Then : Porta.1 = 1 : Portfeld(1) = Portfeld(1) + 2 : Else : Porta.1 = 0 : End If
       If Pinb.2 = 0 Then : Porta.2 = 1 : Portfeld(1) = Portfeld(1) + 4 : Else : Porta.2 = 0 : End If
       If Pinb.3 = 0 Then : Porta.3 = 1 : Portfeld(1) = Portfeld(1) + 8 : Else : Porta.3 = 0 : End If
       If Pinb.4 = 0 Then : Porta.4 = 1 : Portfeld(1) = Portfeld(1) + 16 : Else : Porta.4 = 0 : End If
       If Pinb.5 = 0 Then : Porta.5 = 1 : Portfeld(1) = Portfeld(1) + 32 : Else : Porta.5 = 0 : End If
       If Pinb.6 = 0 Then : Porta.6 = 1 : Portfeld(1) = Portfeld(1) + 64 : Else : Porta.6 = 0 : End If
       If Pinb.7 = 0 Then : Porta.7 = 1 : Portfeld(1) = Portfeld(1) + 128 : Else : Porta.7 = 0 : End If
    Loop Until Pinc.0 = 0
    
    
    If Pinc.1 = 0 Then Do
       If Pinb.0 = 0 Then : Porta.0 = 1 : Portfeld(2) = Portfeld(2) + 1 : Else : Porta.0 = 0 : End If
       If Pinb.1 = 0 Then : Porta.1 = 1 : Portfeld(2) = Portfeld(2) + 2 : Else : Porta.1 = 0 : End If
       If Pinb.2 = 0 Then : Porta.2 = 1 : Portfeld(2) = Portfeld(2) + 4 : Else : Porta.2 = 0 : End If
       If Pinb.3 = 0 Then : Porta.3 = 1 : Portfeld(2) = Portfeld(2) + 8 : Else : Porta.3 = 0 : End If
       If Pinb.4 = 0 Then : Porta.4 = 1 : Portfeld(2) = Portfeld(2) + 16 : Else : Porta.4 = 0 : End If
       If Pinb.5 = 0 Then : Porta.5 = 1 : Portfeld(2) = Portfeld(2) + 32 : Else : Porta.5 = 0 : End If
       If Pinb.6 = 0 Then : Porta.6 = 1 : Portfeld(2) = Portfeld(2) + 64 : Else : Porta.6 = 0 : End If
       If Pinb.7 = 0 Then : Porta.7 = 1 : Portfeld(2) = Portfeld(2) + 128 : Else : Porta.7 = 0 : End If
    Loop Until Pinc.1 = 0
    
    If Pinc.0 = 0 And Pinc.1 = 0 Then Do
       If Pinb.0 = 0 Then : Porta.0 = 1 : Portfeld(3) = Portfeld(3) + 1 : Else : Porta.0 = 0 : End If
       If Pinb.1 = 0 Then : Porta.1 = 1 : Portfeld(3) = Portfeld(3) + 2 : Else : Porta.1 = 0 : End If
       If Pinb.2 = 0 Then : Porta.2 = 1 : Portfeld(3) = Portfeld(3) + 4 : Else : Porta.2 = 0 : End If
       If Pinb.3 = 0 Then : Porta.3 = 1 : Portfeld(3) = Portfeld(3) + 8 : Else : Porta.3 = 0 : End If
       If Pinb.4 = 0 Then : Porta.4 = 1 : Portfeld(3) = Portfeld(3) + 16 : Else : Porta.4 = 0 : End If
       If Pinb.5 = 0 Then : Porta.5 = 1 : Portfeld(3) = Portfeld(3) + 32 : Else : Porta.5 = 0 : End If
       If Pinb.6 = 0 Then : Porta.6 = 1 : Portfeld(3) = Portfeld(3) + 64 : Else : Porta.6 = 0 : End If
       If Pinb.7 = 0 Then : Porta.7 = 1 : Portfeld(3) = Portfeld(3) + 128 : Else : Porta.7 = 0 : End If
    Loop Until Pinc.0 = 0 And Pinc.1 = 0
    If Pinc.6 = 0 Th0en Do
       If Pinb.0 = 0 Then : Porta.0 = 1 : Portfeld(4) = Portfeld(4) + 1 : Else : Porta.0 = 0 : End If
       If Pinb.1 = 0 Then : Porta.1 = 1 : Portfeld(4) = Portfeld(4) + 2 : Else : Porta.1 = 0 : End If
       If Pinb.2 = 0 Then : Porta.2 = 1 : Portfeld(4) = Portfeld(4) + 4 : Else : Porta.2 = 0 : End If
       If Pinb.3 = 0 Then : Porta.3 = 1 : Portfeld(4) = Portfeld(4) + 8 : Else : Porta.3 = 0 : End If
       If Pinb.4 = 0 Then : Porta.4 = 1 : Portfeld(4) = Portfeld(4) + 16 : Else : Porta.4 = 0 : End If
       If Pinb.5 = 0 Then : Porta.5 = 1 : Portfeld(4) = Portfeld(4) + 32 : Else : Porta.5 = 0 : End If
       If Pinb.6 = 0 Then : Porta.6 = 1 : Portfeld(4) = Portfeld(4) + 64 : Else : Porta.6 = 0 : End If
       If Pinb.7 = 0 Then : Porta.7 = 1 : Portfeld(4) = Portfeld(4) + 128 : Else : Porta.7 = 0 : End If
    Loop Until Pinc.6 =
    
    If Pinc.6 = 0 Then : Programm = 100 : Else : Programm = 1 : End If
    Next Programm
    Porta = 255
    Waitms 500
    Porta = Portfeld(1)
    Waitms 400
    
    Porta = 255
    Waitms 500
    Porta = Portfeld(2)
    Waitms 400
    
    Porta = 255
    Waitms 500
    Porta = Portfeld(3)
    Waitms 400
    
    Porta = 255
    Waitms 500
    Porta = Portfeld(4)
    Waitms 400
    Do
    Loop
    das Bascom programm empfängt die daten und soll sie dann alle nacheinander anzeigen
    "Porta = 255
    Waitms 500
    Porta = Portfeld(1)
    Waitms 400"
    der teil hier
    Am porta hängen 8 leds und an portb lpt1( Daten) an pinc.0,pinc.1,pinc.6,pinc.7 Hängt lpt1(steuer signale)
    ich hoffe das es diesmal verständlich ist (ich kann schwer irgendwelche sachen zu beschreiben) und mir jemand weiter helfen kann

    mfg thomas

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    hat keiner eine idee (ich bin bissel ungeduldig)
    ich hab lpt1 gewählt weil ich dachte es ist am einfachsten aber ich bekomm das nicht auf die reihe am ende sollen 4* 16bit übertragen werden und das möglichst fix weil mein motor und der Zähler auch arbeiten wollen und beides gleichzeitig geht schief. ist com1 wirklich einfacher für mein problem. das hauptproblem ist der Terminstress es sollte bis zum 31.5.09 klar sein ob ich das bis zum 13.6 fertig bekomme das sich bissel was tut. das programm das mir die koordinaten gibt hab ich fertig und die lego mal machiene ist auch fertig so wie die Zähler (Lichtschranken) ich bekomm halt keine übertragung auf die reihe. mir wäre geholfen wenn mir jemand ein bsp postet wo man mehr als einmal 8 bit übertragen kann oder paar tips dazu gibt
    mfg thomas

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    bascom code geändert trotzdem noch nicht voll funktions fähig
    Code:
    $regfile = "m16def.dat"
    $crystal = 7372800
    
    'Config Portd = Input
    Config Portc = Input
    Config Porta = Output
    Config Portb = Input
    Dim Portfeld(10) As Sram Integer
    Dim Programm As Integer
    Dim A As Integer
    For A = 1 To 10
    Portfeld(a) = 0
    Next A
    Portb = 255
    Portc = 255
    Porta = 0
    Waitms 1000
    Porta = 255
    Waitms 1000
    For Programm = 1 To 10
    Do
    If Pinb.0 = 0 Then : Porta.0 = 1 : Else : Porta.0 = 0 : End If
    If Pinb.1 = 0 Then : Porta.0 = 1 : Else : Porta.0 = 0 : End If
    If Pinb.2 = 0 Then : Porta.2 = 1 : Else : Porta.2 = 0 : End If
    If Pinb.3 = 0 Then : Porta.3 = 1 : Else : Porta.3 = 0 : End If
    If Pinb.4 = 0 Then : Porta.4 = 1 : Else : Porta.4 = 0 : End If
    If Pinb.5 = 0 Then : Porta.5 = 1 : Else : Porta.5 = 0 : End If
    If Pinb.6 = 0 Then : Porta.6 = 1 : Else : Porta.6 = 0 : End If
    If Pinb.7 = 0 Then : Porta.7 = 1 : Else : Porta.7 = 0 : End If
    Loop Until Pinc.0 = 0
    
    If Pinc.0 = 0 And Pinc.6 = 0 Then Do
    Porta.1 = 1
       If Pinb.0 = 0 Then : Porta.0 = 1 : Portfeld(1) = Portfeld(1) + 1 : Else : Porta.0 = 0 : End If
       If Pinb.1 = 0 Then : Porta.0 = 1 : Portfeld(1) = Portfeld(1) + 2 : Else : Porta.0 = 0 : End If
       If Pinb.2 = 0 Then : Porta.2 = 1 : Portfeld(1) = Portfeld(1) + 4 : Else : Porta.2 = 0 : End If
       If Pinb.3 = 0 Then : Porta.3 = 1 : Portfeld(1) = Portfeld(1) + 8 : Else : Porta.3 = 0 : End If
       If Pinb.4 = 0 Then : Porta.4 = 1 : Portfeld(1) = Portfeld(1) + 16 : Else : Porta.4 = 0 : End If
       If Pinb.5 = 0 Then : Porta.5 = 1 : Portfeld(1) = Portfeld(1) + 32 : Else : Porta.5 = 0 : End If
       If Pinb.6 = 0 Then : Porta.6 = 1 : Portfeld(1) = Portfeld(1) + 64 : Else : Porta.6 = 0 : End If
       If Pinb.7 = 0 Then : Porta.7 = 1 : Portfeld(1) = Portfeld(1) + 128 : Else : Porta.7 = 0 : End If
       Porta.1 = 0
    Loop Until Pinc.0 = 0 And Pinc.6 = 0
    
    
    If Pinc.1 = 0 And Pinc.1 = 1 Then Do
    Porta.1 = 1
    waitms 10
       If Pinb.0 = 0 Then : Porta.0 = 1 : Portfeld(2) = Portfeld(2) + 1 : Else : Porta.0 = 0 : End If
       If Pinb.1 = 0 Then : Porta.0 = 1 : Portfeld(2) = Portfeld(2) + 2 : Else : Porta.0 = 0 : End If
       If Pinb.2 = 0 Then : Porta.2 = 1 : Portfeld(2) = Portfeld(2) + 4 : Else : Porta.2 = 0 : End If
       If Pinb.3 = 0 Then : Porta.3 = 1 : Portfeld(2) = Portfeld(2) + 8 : Else : Porta.3 = 0 : End If
       If Pinb.4 = 0 Then : Porta.4 = 1 : Portfeld(2) = Portfeld(2) + 16 : Else : Porta.4 = 0 : End If
       If Pinb.5 = 0 Then : Porta.5 = 1 : Portfeld(2) = Portfeld(2) + 32 : Else : Porta.5 = 0 : End If
       If Pinb.6 = 0 Then : Porta.6 = 1 : Portfeld(2) = Portfeld(2) + 64 : Else : Porta.6 = 0 : End If
       If Pinb.7 = 0 Then : Porta.7 = 1 : Portfeld(2) = Portfeld(2) + 128 : Else : Porta.7 = 0 : End If
       Porta.1 = 0
    Loop Until Pinc.1 = 0 And Pinc.1 = 1
    
    If Pinc.0 = 0 And Pinc.1 = 0 Then Do
    waitms 10
    Porta.1 = 1
       If Pinb.0 = 0 Then : Porta.0 = 1 : Portfeld(3) = Portfeld(3) + 1 : Else : Porta.0 = 0 : End If
       If Pinb.1 = 0 Then : Porta.0 = 1 : Portfeld(3) = Portfeld(3) + 2 : Else : Porta.0 = 0 : End If
       If Pinb.2 = 0 Then : Porta.2 = 1 : Portfeld(3) = Portfeld(3) + 4 : Else : Porta.2 = 0 : End If
       If Pinb.3 = 0 Then : Porta.3 = 1 : Portfeld(3) = Portfeld(3) + 8 : Else : Porta.3 = 0 : End If
       If Pinb.4 = 0 Then : Porta.4 = 1 : Portfeld(3) = Portfeld(3) + 16 : Else : Porta.4 = 0 : End If
       If Pinb.5 = 0 Then : Porta.5 = 1 : Portfeld(3) = Portfeld(3) + 32 : Else : Porta.5 = 0 : End If
       If Pinb.6 = 0 Then : Porta.6 = 1 : Portfeld(3) = Portfeld(3) + 64 : Else : Porta.6 = 0 : End If
       If Pinb.7 = 0 Then : Porta.7 = 1 : Portfeld(3) = Portfeld(3) + 128 : Else : Porta.7 = 0 : End If
       Porta.1 = 0
    Loop Until Pinc.0 = 0 And Pinc.1 = 0
    If Pinc.6 = 1 Then Do
    waitms 10
    Porta.1 = 1
       If Pinb.0 = 0 Then : Porta.0 = 1 : Portfeld(4) = Portfeld(4) + 1 : Else : Porta.0 = 0 : End If
       If Pinb.1 = 0 Then : Porta.0 = 1 : Portfeld(4) = Portfeld(4) + 2 : Else : Porta.0 = 0 : End If
       If Pinb.2 = 0 Then : Porta.2 = 1 : Portfeld(4) = Portfeld(4) + 4 : Else : Porta.2 = 0 : End If
       If Pinb.3 = 0 Then : Porta.3 = 1 : Portfeld(4) = Portfeld(4) + 8 : Else : Porta.3 = 0 : End If
       If Pinb.4 = 0 Then : Porta.4 = 1 : Portfeld(4) = Portfeld(4) + 16 : Else : Porta.4 = 0 : End If
       If Pinb.5 = 0 Then : Porta.5 = 1 : Portfeld(4) = Portfeld(4) + 32 : Else : Porta.5 = 0 : End If
       If Pinb.6 = 0 Then : Porta.6 = 1 : Portfeld(4) = Portfeld(4) + 64 : Else : Porta.6 = 0 : End If
       If Pinb.7 = 0 Then : Porta.7 = 1 : Portfeld(4) = Portfeld(4) + 128 : Else : Porta.7 = 0 : End If
       Porta.1 = 0
    Loop Until Pinc.6 = 1
    
    If Pinc.6 = 1 And Pinc.0 = 0 Then : Programm = 100 : Else : Programm = 1 : End If
    Next Programm
    Do ' hier sollen die werte dann immer wieder ausgegeben werden
    Porta = 255
    Waitms 500
    Porta = Portfeld(1)
    Waitms 400
    
    Porta = 255
    Waitms 500
    Porta = Portfeld(2)
    Waitms 400
    
    Porta = 255
    Waitms 500
    Porta = Portfeld(3)
    Waitms 400
    
    Porta = 255
    Waitms 500
    Porta = Portfeld(4)
    Waitms 400
    
    Loop

Berechtigungen

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