PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Motorensteuerung über Pc und µC



Thomas$
24.05.2009, 20:17
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

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




$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

Thomas$
25.05.2009, 21:08
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

Thomas$
26.05.2009, 21:41
bascom code geändert trotzdem noch nicht voll funktions fähig



$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