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.