Forum Strippenstrolch

Forums-Ausgangsseite

log in | registrieren

zurück zur Übersicht
Thread-Ansicht  Board-Ansicht
Hagie(R)

07.06.2006, 17:29
 

loop über ein halbes Byte / I2C

Ich weiss nicht wieviel Leute hier und im PICAXE Forum lesen, ich wage es mal diese Posting auch hier zu posten, ich hoffe niemand nimmt das mir übel...ich hab hier ein Problem und ich bin mir sicher es ist gar nicht so schwer zu lösen aber ich komm wirklich nicht drauf. Boolches Algebra und die Umrechnung in andere Zahlensystem sind eigentlich kein Problem aber hier häng ich jetzt wie ein Fisch am Wasser. Hier das Problem:per I2C steuere ich 2 PWM Ausgänge des MAX7313 (näheres folgt im Projekt Forum).in einem Byte werden 2 Ausgänge mit jeweils 4 Bit gesteuert, d.h. durch das auf oder abzählen der oberen 4 Bit kann ich den einen Ausgang steuern, durch das auf oder abzählen der unteren Bits kann ich den Anderen Ausgang steuern.Beispiel:writei2c $14,(%00000000) Beide Ausgänge auswritei2c $14,(%00001111) Erster Ausgang aus der andere Ausgang anwritei2c $14,(%11110000) Erster Ausgang an der andere Ausgang ausNatürlich sind auch Werte zwischen 0 und 15 möglich (da es sich um eine PWM Steuerung handelt)Wenn ich nun den 2. Ausgang mit einem loop dimmen will ist das einfach:for b1 = 0 to 15writei2c $14,(b1)next b1Wie kann ich aber mit einer solchen Schleife die oberen 4 Bits hochzählen ?Da komm ich momentan echt nicht drauf ..Ich dank euch schon mal im voraus.GrussHagie

kalledom(R)

07.06.2006, 17:39

@ Hagie
 

loop über ein halbes Byte / I2C

Wie wäre es mitfor b1 = 1 to 15writei2c $14,(b1*16)next b1sofern die Multiplikation erlaubt ist, sonst z.B.:for b1 = 16 to 240 step 16writei2c $14,(b1)next b1sofern \'step\' erlaubt ist. Vielleicht auch so:for b1 = 1 to 15writei2c $14,(b1<<4)next b1sofern \'<<\' oder \'<\' als shift left erlaubt ist ?

Hagie(R)

07.06.2006, 18:54

@ kalledom
 

loop über ein halbes Byte / I2C

» for b1 = 1 to 15» writei2c $14,(b1*16)» next b1Mein Gott kann ich sooo doof sein ... das ist mir ja jetzt fast ein bisschen peinlich ... DankeGrussStefan

kalledom(R)

07.06.2006, 22:39

@ Hagie
 

loop über ein halbes Byte / I2C

Hallo Stefan,es reicht vollkommen aus, wenn Du ein mal ganz kurz rot wirst :-)

el-haber

Catania,
08.06.2006, 14:56

@ kalledom
 

loop über ein halbes Byte / I2C

Hi,Pic habe ich zwar noch nicht gemacht, dafür aber alles andere, was Rng und Namen hat.Bei solchen Problemen verwende ich 2 Variablen. Die eine Variable(Speicherzelle oder Register) wird dem einen Gerät zugeordnet und repräsentiert die unteren Bits, die andere dem 2. Gerät und repräsentiert zwar auch die Werte zwischen 0 und 15, verschiebt diese aber vor der Ausgabe um 4 Stellen.Vor der Ausgabe eines Wertes an die beiden Geräte wird in einer Subroutine die eine Variable um 4 stellen mit Shift-left(4) verschoben und mit der anderen Variable OR-Verknüpft. Shift läuft wesentlich schneller ab als Multiply.CUStefan

zurück zur Übersicht
Thread-Ansicht  Board-Ansicht
5412 Postings in 703 Threads, 7 registrierte User, 71 User online (0 reg., 71 Gäste)
Forum Strippenstrolch | Kontakt
RSS Feed
powered by my little forum