Anzeige:

Multiplexer an Port D nutzen und ein NEUERstellt sich vor.

Hier finden sie die archivierten Beiträge des alten PHPBB Forums von www.loetstelle.net

Multiplexer an Port D nutzen und ein NEUERstellt sich vor.

Von masterste2000 am 11.07.2011 07:56

Ein wunderschönen guten Morgen,

ich bin 37J alt und habe mir das Entwicklerbord von myAVR + LCD als Bausatz über E B A Y bestellt.
Am Freitag kam dann der Bausatz und war ca. nach 1Std schon betriebsbereit. :lol:
Dann habe ich mir die Demo von BASCOM besorgt und schon die erste kleinen Programme geschrieben.

Ich möchte gerne über vier Datenleitungen den Multiplexer (16bit 4067 bzw. 74HC4067) betreiben.

Welche schönen Lösungen in Bascom gibt es, um die 16 Multiplexerausgänge einfach anzusprechen zu können, ohne das die anderen vier Datenleitungen des Ports mit verändert werden.

Die Lösung über einen Hexwert an dem Port, würde die anderen vier
Datenleitungen mit betrachten.

Hat evtl. jemand eine Programmbeispiel?

Danke!

Gruß
Stephan

Von Sam am 11.07.2011 13:56

Mir fällt gerade nichts besseres als UND und ODER ein:

Code:
'Portx steht auf &b10101010 und soll &b10100101 werden
Portx = Portx AND &b11110000
Portx = Portx OR &b00000101


Ich habe das jetzt nur ganz kurz geschrieben, gebe also keine Garantie, dass dieser Code so stimmt. Aber das Prinzip dürfte korrekt sein.

Von Alv am 11.07.2011 14:26

Sam hat folgendes geschrieben:
Mir fällt gerade nichts besseres als UND und ODER ein:

Code:
'Portx steht auf &b10101010 und soll &b10100101 werden
Portx = Portx AND &b11110000
Portx = Portx OR &b00000101


In Assembler würde ich das genauso machen,
oder die nötigen Bits direkt setzen/löschen. Ich weiß aber nicht, ob BASCOM sowas kann.

Von Sam am 11.07.2011 15:03

Direkt setzen ginge natürlich auch. Das sähe dann so aus:

Code:
'Portx steht auf &b10101010 und soll &b10100101 werden
Portx.0 = 1
Portx.1 = 0
Portx.2 = 1
Portx.3 = 0

Von masterste2000 am 12.07.2011 09:38

Hi Zusammen,

ich habe mal folgende Lösung erstellt. Wie ich schon geschrieben habe, würde ich mich für eine kürzere Lösung interessieren. Kritik ist auch erwünscht!

Gruß
Stephan



'Ausgänge
OutB0 Alias Portb.0
OutB1 Alias Portb.1
OutB2 Alias Portb.2
OutB3 Alias Portb.3
OutB4 Alias Portb.4

Config OutB0 = Output
Config OutB1 = Output
Config OutB2 = Output
Config OutB3 = Output
Config OutB4 = Output


'Prozeduren

Declare Sub Set_MultiplexerPort(Multiplexer_Port As Byte)


Sub Set_MultiplexerPort(Multiplexer_Port As Byte)

Select Case Multiplexer_Port
Case "1"
OutB3 = 0
OutB2 = 0
OutB1 = 0
OutB0 = 0
Case "2"
OutB3 = 0
OutB2 = 0
OutB1 = 0
OutB0 = 1
Case "3"
OutB3 = 0
OutB2 = 0
OutB1 = 1
OutB0 = 0
Case "4"
OutB3 = 0
OutB2 = 0
OutB1 = 1
OutB0 = 1
Case "5"
OutB3 = 0
OutB2 = 1
OutB1 = 0
OutB0 = 0
Case "6"
OutB3 = 0
OutB2 = 1
OutB1 = 0
OutB0 = 1
Case "7"
OutB3 = 0
OutB2 = 1
OutB1 = 1
OutB0 = 0
Case "8"
OutB3 = 0
OutB2 = 1
OutB1 = 1
OutB0 = 1
Case "9"
OutB3 = 1
OutB2 = 0
OutB1 = 0
OutB0 = 0
Case "10"
OutB3 = 1
OutB2 = 0
OutB1 = 0
OutB0 = 1
Case "11"
OutB3 = 1
OutB2 = 0
OutB1 = 1
OutB0 = 0
Case "12"
OutB3 = 1
OutB2 = 0
OutB1 = 1
OutB0 = 1
Case "13"
OutB3 = 1
OutB2 = 1
OutB1 = 0
OutB0 = 0
Case "14"
OutB3 = 1
OutB2 = 1
OutB1 = 0
OutB0 = 1
Case "15"
OutB3 = 1
OutB2 = 1
OutB1 = 1
OutB0 = 0
Case "16"
OutB3 = 1
OutB2 = 1
OutB1 = 1
OutB0 = 1
Case Else
OutB3 = 0
OutB2 = 0
OutB1 = 0
OutB0 = 0
End Select
End Sub

Von Sam am 12.07.2011 14:36

So kann man das machen. Aber ich glaube die Anführungszeichen um die Zahlen müssen weg. Sonst fragst du Strings ab.
Und mit ein bisschen Gestaltung sieht das dann so aus:

Code:
'Ausgänge
OutB0 Alias Portb.0
OutB1 Alias Portb.1
OutB2 Alias Portb.2
OutB3 Alias Portb.3
OutB4 Alias Portb.4

Config OutB0 = Output
Config OutB1 = Output
Config OutB2 = Output
Config OutB3 = Output
Config OutB4 = Output


'Prozeduren

Declare Sub Set_MultiplexerPort(Multiplexer_Port As Byte)

Sub Set_MultiplexerPort(Multiplexer_Port As Byte)
   Select Case Multiplexer_Port
      Case 1
         OutB3 = 0 ; OutB2 = 0 ; OutB1 = 0 ; OutB0 = 0
      Case 2
         OutB3 = 0 ; OutB2 = 0 ; OutB1 = 0 ; OutB0 = 1

   [...]

      Case 16
         OutB3 = 1 ; OutB2 = 1 ; OutB1 = 1 ; OutB0 = 1
      Case Else
         OutB3 = 0 ; OutB2 = 0 ; OutB1 = 0 ; OutB0 = 0
   End Select
End Sub

Anzeige: