hallo, MC-Gemeinde. Ich bin ganz neu hier , und wende mich an euch mit einem Problem, das mich schon eine Weile umtreibt, mir aber weder Goooogel noch andere Foren die Augen geöffnet haben. Als Programmiersprache kommt nur Bascom in Frage. Jetzt mein Problem: Ich möchte auf einem Port mehrere Ausgänge (verschiedene Variablen) schalten, wobei eine Variable zwei, drei oder mehr Pins belegt. Die Variablen liegen auch zu unter-schiedlichen Zeiten an (verschiedene Frequenz). Einen Port als Ausgang zu konfigurieren scheidet aus, da sich ja immer der gesamte Port angesprochen fühlt. Die einzelnen Variablen in Bits zu zerhacken und dann einzelne Portpins anzusprechen verbraucht auch sehr viel Rechenzeit und Speicherplatz. Also meine Frage, gibt es in Bascom einen Befehl oder eine Möglichkeit, einer Variablen mehrere Portpins zuzuordnen ? Ich würde mich auf die helfende Hand freuen. Gruß deka65 P.S. die 65 müsste 65+ heißen (so alt,wie unsere Republik)
du willst vermutlich einen Port(=> 8Pins eines AVR) mit verschiedenen Variablen ansteuern. Die Zuordnung geschieht mit diesem Zeichen:"=" PORTB=var1 PortB=var2 setzt die Pins jeweils entsprechend den Bits der Variable var1, var2, etc.
Hi, leluno vielen Dank für die Antwort. Vielleicht habe ich mich auch falsch ausgedrückt. Meine Frage zielte daraufhin , z.B. Variable1 schaltet die Pins B.0,B.1,B.2 , eine andere Variable die Pins B.3,B.4,B.5 . Jede Variable soll aber auch gleichzeitig ihre entsprechenden Ausgänge schalten. Dein Vorschlag würde ja immer den gesamten Port ,wenn als Output definiert, setzen. Ich hoffe, ich habe mich jetzt verständlicher ausgedrückt. Gruß deka65
Dafür gibt es die Verknüpfungen And, Or etc. Musst du im Handbuch nachlesen
Detlef Kahrmann schrieb: > ausgedrückt. Meine Frage zielte daraufhin , z.B. Variable1 schaltet die > Pins > B.0,B.1,B.2 , eine andere Variable die Pins B.3,B.4,B.5 . Geht in Bascom nicht so, wie du die das vorstellst. Per Overlay könnte man eine Bytevariable auf einen Port legen und byteweise oder bitweise ansprechen. > Jede Variable > soll aber auch gleichzeitig ihre entsprechenden Ausgänge schalten. Bitte? Wie ist das gemeint.
Was Du tun kannst, wäre, einzelne Bits aus der Variablen einzelnen Port- pins zuzuweisen. Beispiel: Dim Horst as Byte Dim Alfred as Byte ....und dann: Portb.0=Horst.0 Portb.1=Horst.3 Portb.2=Alfred.5 usw. MfG Paul
Hi, leluno Wie And, Or und Xor geht,weiss ich ja . Hatte weiter oben schon geschrieben "die einzelnen Bits zerhacken" . Das würde aber bedeuten, bei jeder Änderung eine Variablen ,alle Variablen zu bearbeiten. Das sollte, so meine Frage , Bascom für mich erledigen. Aber ich bekomme langsam das Gefühl, man kann nicht alles haben. Einige Sachen muss man halt "zu Fuß" machen. Trotzdem vielen Dank für deine Bemühungen, mir zu helfen. Gruß deka65
Hallo Paul da haben sich einige Antworten überschnitten. Erst mal vielen Dank für die Antwort. Das könnte ich mal probieren, muss es aber erst sacken lassen. komme gegebenenfalls nochmal darauf zurück. Gruß deka65
Hallo live,
habe deine Antwort zu spät gesehen, war gerade am schreiben. Diese
knallharte Aussage,
life schrieb
> Geht in Bascom nicht so, wie du die das vorstellst.
nehme ich jetzt zur Kenntnis. das deckt sich in etwa mit den meisten
Aussagen, die ich gelesen habe. Also doch selber Hand anlegen.
Trotzdem vielen Dank für die Bemühung, mir zu helfen.
Gruß
deka65
hallo detlef
ich weiss nicht ob dein Problem gelöst ist, aber hier mal eine Anregung
mit inline Assebler für Bascom.
entweder nur eine Variable ändern oder alle variablen setzen.
'#######################################################################
########
' Demo Projekt
' ************
' inline Assembler
'
' By COOL-DMX.DE
'#######################################################################
########
$regfile = "attiny2313.dat"
$crystal = 16000000
'------------------------------------
$hwstack = 32
$swstack = 8
$framesize = 24
'------------------------------------
'Variablen
Dim Tmp1 As Byte 'Variable 1
Dim Tmp2 As Byte 'Variable 2
Dim Tmp3 As Byte 'Variable 3
'------------------------------------
Config Portb = &B11111111 'Port's
Configurieren
Portb = 0
'#######################################################################
########
' Hauptschleife
'#######################################################################
########
'einmal alle Var. einen Wert Zuweisen
Tmp1 = &B00000010
Tmp2 = &B00000001
Tmp1 = &B00000101
Gosub All_var
Do
'simple Zählschleife
Incr Tmp1
If Tmp1 > 8 Then
Tmp1 = 0
Incr Tmp2
End If
If Tmp2 > 8 Then
Tmp2 = 0
Incr Tmp3
End If
Waitms 50
' Wahlweise Proc 1 oder 2
'Gosub All_var
Gosub One_var
Loop
'#######################################################################
########
' nur eine Variable aktualiesieren
One_var:
! IN R20,PortB
! LDS R17,{Tmp2} 'lade
Variavlen in Hilfsregister
! andi R17,&B00000111 '3 Bit
benötigt Filtern
! ROL R17 'Bit's an
pos. rollen (PB5-7)
! ROL R17
! ROL R17
! ROL R17
! ROL R17
! andi R20,&B00011111 'entferne
bit 5-7
! ADD R20,R17 'setze neue
Werte
! Out PortB , R20 'Port neu
setzen
Return
'#######################################################################
########
' nur eine Variable aktualiesieren
All_var:
! clr R20
! LDS R16,{Tmp1} 'lade
Variavlen in Hilfsregister
! LDS R17,{Tmp2}
! LDS R18,{Tmp3}
! andi R16,&B00000111 '3 Bit
benötigt Filtern
! andi R17,&B00000111 '3 Bit
benötigt Filtern
! andi R18,&B00000011 '2 Bit
benötigt Filtern
! ROL R17 'Bit's an
pos. rollen (PB5-7)
! ROL R17
! ROL R17
! ROL R17
! ROL R17
! ROL R18 'Bit's an
pos. rollen (PB3-4)
! ROL R18
! ROL R18
! ADD R20,R16
! ADD R20,R17
! ADD R20,R18
!
! Out PortB , R20 'Port neu
setzen
Return
'#######################################################################
########
@ Dirk
Vielen Dank für die Bemühungen. Komme gerade aus dem Urlaub zurück.
Das Problem habe ich aber schon, dank Paul Baumann, lösen können.
Die Variablen werden als Byte dimensioniert.
DIM Var1 as Byte
DIM Var2 as Byte
dann werden den Portpins die Variablenbits zugeordnet.
PORTB.0 = Var1.0
PORTB.1 = Var1.1
PORTB.2 = Var1.2
PORTB.3 = Var2.0
PORTB.4 = Var2.1
PORTB.5 = Var2.2
Das ist nur ein Beispiel, bei dem die Variablen einen Zählumfang von
0 - 7 haben. Die portübergreifende Variante habe ich noch nicht
getestet,
denke aber, das es auch funktioniert.
Damit hat sich meine Frage erledigt.
Ich danke allen, die versucht haben, mir zu helfen
Gruß deka65
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.