Sie befinden sich hier: Lego® - Bauanleitungen - Motor- Multiplexer

Motor- Multiplexer:


Motor- Multiplexer

Schaltplan


Schaltplan Motor Multiplexer
Schaltplan

Bascom Quellcode für ATtiny45

'*************************************************************
'PWM- Signal für Lego mindstorms NXT Motor Port- Expander
'mit ATtiny45 und PCF8574
'2011-05-21 
'*************************************************************

$regfile = "attiny45.dat"
$crystal = 1200000
$hwstack = 10

Config Portb.0 = Output                                     'PWM- Signal M1 bzw. M3
Config Portb.1 = Output                                     'PWM- Signal M2 bzw. M4
Config Portb.3 = Input                                      'Poti M1 bzw. M3
Config Portb.4 = Input                                      'Poti M2 bzw. M4

'PWM
Config Timer0 = Pwm , Prescale = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
'Analogwandler
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc

'Werte von Analogwandler
Dim Analog_m1 As Integer
Dim Analog_m2 As Integer

Do
 '***** M1 bzw. M3 *****
   'AD- Wandler einlesen. Werte zwischen 0-1023
   Analog_m1 = Getadc(3)

   'max. Geschwindigkeit bei Pwm0a=255
   Select Case Analog_m1
    Case 0 To 50:
     Pwm0a = 25
    Case 51 To 100:
     Pwm0a = 35
    Case 101 To 150:
     Pwm0a = 40
    Case 151 To 200:
     Pwm0a = 50
    Case 201 To 250:
     Pwm0a = 60
    Case 251 To 300:
     Pwm0a = 70
    Case 301 To 350:
     Pwm0a = 80
    Case 351 To 400:
     Pwm0a = 90
    Case 401 To 450:
     Pwm0a = 100
    Case 451 To 500:
     Pwm0a = 110
    Case 501 To 550:
     Pwm0a = 120
    Case 551 To 600:
     Pwm0a = 130
    Case 601 To 650:
     Pwm0a = 140
    Case 651 To 700:
     Pwm0a = 155
    Case 701 To 750:
     Pwm0a = 170
    Case 751 To 800:
     Pwm0a = 185
    Case 801 To 850:
     Pwm0a = 210
    Case 851 To 900:
     Pwm0a = 225
    Case 901 To 950:
     Pwm0a = 225
    Case 951 To 1000:
     Pwm0a = 240
    Case 1001 To 1023:
     Pwm0a = 255
   End Select
 '**********************

 '***** M2 bzw. M4 *****
   'AD- Wandler einlesen. Werte zwischen 0-1023
   Analog_m2 = Getadc(2)

   'max. Geschwindigkeit bei Pwm0b=255
   Select Case Analog_m2
    Case 0 To 50:
     Pwm0b = 25
    Case 51 To 100:
     Pwm0b = 35
    Case 101 To 150:
     Pwm0b = 40
    Case 151 To 200:
     Pwm0b = 50
    Case 201 To 250:
     Pwm0b = 60
    Case 251 To 300:
     Pwm0b = 70
    Case 301 To 350:
     Pwm0b = 80
    Case 351 To 400:
     Pwm0b = 90
    Case 401 To 450:
     Pwm0b = 100
    Case 451 To 500:
     Pwm0b = 110
    Case 501 To 550:
     Pwm0b = 120
    Case 551 To 600:
     Pwm0b = 130
    Case 601 To 650:
     Pwm0b = 140
    Case 651 To 700:
     Pwm0b = 155
    Case 701 To 750:
     Pwm0b = 170
    Case 751 To 800:
     Pwm0b = 185
    Case 801 To 850:
     Pwm0b = 210
    Case 851 To 900:
     Pwm0b = 225
    Case 901 To 950:
     Pwm0b = 225
    Case 951 To 1000:
     Pwm0b = 240
    Case 1001 To 1023:
     Pwm0a = 255
   End Select
 '**********************

Loop
End

Programmierung mit NXT-G:

 
    Bsp.: M1 läuft bis Enter- Button betätigt wird, dann läuft M2 bis Left- Button betätigt wird.
    NXT-G Programm

Adresse ermitteln:


PCF8574
fester Bereich variabler Bereich  
0 1 0 0 A2 A1 A0 R/W Adresse
7 6 5 4 3 2 1 0 Bit
128 64 32 16 8 4 2 1 Dezimal
immer Dez.64 Ax an Masse -> Binär 0
Ax an VDD -> Binär 1
0  
Bsp.: A0-A2 an Masse
0 1 0 0 0 0 0 0 Binär
128 64 32 16 8 4 2 1 Dezimal
Adresse = 64 + 0 = 64

WValue ermitteln:

    PCF8574
    P7 P6 P5 P4 P3 P2 P1 P0  
    M4-2     M4-1 M3-2     M3-1 M2-2     M2-1 M1-2     M1-1 Motoren und Drehrichtung
    7 6 5 4 3 2 1 0 Bit
    128 64 32 16 8 4 2 1 Dezimal
    1 1 1 1 1 1 1 1 z.B. alle Motoren AUS:
    --> 1+2+4+8+16+32+64+128
    --> WValue = 255
    1 1 1 1 1 1 1 0 z.B. M1 Richtung 1 EIN:
    --> 0+2+4+8+16+32+64+128
    --> WValue = 254
    Binär "1" --> Motor AUS
    Binär "0" --> Motor EIN
      WValue- berechnen:
      M1 Richtung1 M1 Richtung2
      M2 Richtung1 M2 Richtung2
      M3 Richtung1 M3 Richtung2
      M4 Richtung1 M4 Richtung2

      Checkbox aktiviert      --> Motor x Richtung x EIN
      Checkbox deaktiviert  --> Motor x Richting x AUS

Programmierung mit LabVIEW:


Remote- Modus


SubVI
Sub-VI
 
Bsp.: M1 läuft bis Enter- Button betätigt wird, dann läuft M2 bis Left- Button betätigt wird.
VI VI
VI
 

Direkt- Modus


VI  
VI
VI
Sub-VI
 
Bsp.: M1 läuft bis Enter- Button betätigt wird, dann läuft M2 bis Left- Button betätigt wird.
VI VI
VI


Ich kann keinerlei Haftung für die Schaltungen übernehmen und auch keine Funktionsfähigkeit garantieren. Der Nachbau und Einsatz der hier veröffentlichten Schaltungen erfolgt auf eigene Gefahr. Ich übernehme keinerlei Garantie. Die VDE-Vorschriften sind zu beachten.