Forum: Mikrocontroller und Digitale Elektronik Bascom binär hochzählen


von Controllus Interruptus (Gast)


Lesenswert?

Kann man unter Bascom eine Portanweisung wie &B00000000 binär hochzählen 
lassen, also immer das nächst höherwertige Bit aktivieren ohne 
Lookuptables zusammenzuschustern?
Danke

von Peter II (Gast)


Lesenswert?

Controllus Interruptus schrieb:
> Kann man unter Bascom eine Portanweisung wie &B00000000 binär hochzählen
> lassen, also immer das nächst höherwertige Bit aktivieren ohne
> Lookuptables zusammenzuschustern?
> Danke

0xB00000000 ist nur eine andere Darstellung für 0

als verwende einfach eine 0 und rechte + 1.

von npn (Gast)


Lesenswert?

Controllus Interruptus schrieb:
> Kann man unter Bascom eine Portanweisung wie &B00000000 binär
> hochzählen
> lassen, also immer das nächst höherwertige Bit aktivieren ohne
> Lookuptables zusammenzuschustern?
> Danke

0000 0001 (1)
x2
0000 0010 (2)
x2
0000 0100 (4)
x2
0000 1000 (8)

und so weiter...

von Spezi (Gast)


Lesenswert?

Controllus Interruptus schrieb:
> Kann man unter Bascom eine Portanweisung wie &B00000000 binär hochzählen

&B00000000 ist keine Portanweisung sondern in Bascom einfach nur eine 
Zahl in binärer Schreibweise.

Hochzählen dann einfach mit fortlaufendem Addieren von eins :)

von Controllus Interruptus (Gast)


Lesenswert?

Peter II schrieb:
> 0xB00000000 ist nur eine andere Darstellung für 0
>
> als verwende einfach eine 0 und rechte + 1.

dann ist die anweisung auch als absolute Zahl machbar? etwa portd = 200?

von Peter II (Gast)


Lesenswert?

Controllus Interruptus schrieb:
> dann ist die anweisung auch als absolute Zahl machbar? etwa portd = 200?

ja, es ist genau das gleiche.

von npn (Gast)


Lesenswert?

Controllus Interruptus schrieb:
> immer das nächst höherwertige Bit aktivieren

und

Spezi schrieb:
> Hochzählen dann einfach mit fortlaufendem Addieren von eins :)

sind zwei verschiedene Sachen ;-)

von Controllus Interruptus (Gast)


Lesenswert?

Ok, ist für ne r2r ladder. ich will halt die Voltzahl schrittweise 
erhöhen.

von Spezi (Gast)


Lesenswert?

npn schrieb:
> Controllus Interruptus schrieb:
>> immer das nächst höherwertige Bit aktivieren
>
> und
>
> Spezi schrieb:
>> Hochzählen dann einfach mit fortlaufendem Addieren von eins :)
>
> sind zwei verschiedene Sachen ;-)

Ehrlich gesagt, weis ich nicht, was Controllus Interruptus genau meint.

@Controllus Interruptus: Schreib mal eine Reihe von hochzählenden 
binären Zahlen auf, wie du sie gerne hättest - in der Art wie npn es 
gemacht hat. Vielleicht geht auch was mit shift.

von Controllus Interruptus (Gast)


Lesenswert?

R2R netzwerk ist klar, oder? Nun will ich auf knopfdruck den µC dazu 
bringen, die Ausgänge so zu schalten, dass die Voltzahl immer in 
gleichen Schritten erhöht wird. Was ja durch einfaches binäres 
hochzählen erreicht werden müßte.

von Spezi (Gast)


Lesenswert?

Controllus Interruptus schrieb:
> R2R netzwerk ist klar, oder? Nun will ich auf knopfdruck den µC dazu
> bringen, die Ausgänge so zu schalten, dass die Voltzahl immer in
> gleichen Schritten erhöht wird. Was ja durch einfaches binäres
> hochzählen erreicht werden müßte.

Mir ist noch nicht klar, was du mit "binärem hochzählen" meinst. Es 
reicht aus, wenn du hochzählst, also immer nur eins addierst.
https://www.youtube.com/watch?v=AulX1OM7RwE&list=UUiqd3GLTluk2s_IBt7p_LjA

Zwar Englisch aber gut erklärt.

von Controllus Interruptus (Gast)


Lesenswert?

Ist wahrscheinlich unglücklich ausgedrückt. Wir meinen wohl das gleiche.
Guck ich mir an. Danke.

von Peter D. (peda)


Lesenswert?

Controllus Interruptus schrieb:
> binär hochzählen
> lassen

Eine CPU zählt immer binär, daran kannst Du nichts ändern.
Der Bequemlichkeit halber kann man aber einen Wert in verschiedenen 
Formaten dem Compiler übergeben, der macht dann sofort binär daraus:

'a' == 97 == 0x61 == 0b1100001 == 0141
ASCII, dezimal, hex, binär, oktal, alles der gleiche Wert.

von npn (Gast)


Lesenswert?

Controllus Interruptus schrieb:
> die Ausgänge so zu schalten, dass die Voltzahl immer in
> gleichen Schritten erhöht wird.

Die "Voltzahl" (auch "Spannung" genannt) wird durch einfaches 
Incrementieren (+1 addieren) in gleicen Schritten erhöht, wie es auch 
"Spezi" schreibt.

Spezi schrieb:
> Es reicht aus, wenn du hochzählst, also immer nur eins addierst.

Aber am Anfang hast du geschrieben, daß du

Controllus Interruptus schrieb:
> immer das nächst höherwertige Bit aktivieren

willst. Das geht durch eine Muliplikation mit 2, wie ich es geschrieben 
hatte, bzw. durch einmal schieben nach links (ist das gleiche).

Das sind aber zwei verschiedene Sachen. (x=x*2  oder  x=x+1)

Ich vermute mal, wenn du schon das R2R angesprochen hast, daß du einfach 
nur hochzählen willst. Also dann mußt du einfach nur immer 1 addieren.

von Mike A. (Gast)


Lesenswert?

npn schrieb:
> Ich vermute mal, wenn du schon das R2R angesprochen hast, daß du einfach
> nur hochzählen willst. Also dann mußt du einfach nur immer 1 addieren.

Das kommt drauf an, ob damit z.B. ein Dimmer gesteuert werden soll, der 
für gleichmäßige Helligkeitsstufen geometrisch hochzählen müßte, also 
mit konstanter relativer Stufenhöhe, i.e. eine Multiplikation des Wertes 
mit einem konstanten Faktor.

von Spezi (Gast)


Lesenswert?

@Mike A.: man beachte "Voltzahl immer ..."

Controllus Interruptus schrieb:
> R2R netzwerk ist klar, oder? Nun will ich auf knopfdruck den µC dazu
> bringen, die Ausgänge so zu schalten, dass die Voltzahl immer in
> gleichen Schritten erhöht wird. Was ja durch einfaches binäres
> hochzählen erreicht werden müßte.

von Controllus Interruptus (Gast)


Lesenswert?

npn schrieb:
> Das geht durch eine Muliplikation mit 2, wie ich es geschrieben
> hatte, bzw. durch einmal schieben nach links (ist das gleiche).
>
> Das sind aber zwei verschiedene Sachen. (x=x*2  oder  x=x+1)
>
> Ich vermute mal, wenn du schon das R2R angesprochen hast, daß du einfach
> nur hochzählen willst. Also dann mußt du einfach nur immer 1 addieren.

Jo, hast recht. Durch einfaches aktivieren, wird nix deaktiviert.

von npn (Gast)


Lesenswert?

Controllus Interruptus schrieb:

> Jo, hast recht. Durch einfaches aktivieren, wird nix deaktiviert.

Ich hab' doch gar nicht von Aktivieren oder Deaktivieren 
gesprochen...(?)

von Stefan F. (Gast)


Lesenswert?

Du willst also mit einem R2R Netz eine treppenförmig ansteigende 
Spannung erzeugen. Dafür brauhs du einen Zähler, der ganz normal 
hochzählt:

0 = &B00000000
1 = &B00000001
2 = &B00000010
3 = &B00000011
4 = &B00000100
...
255 = &B11111111

Falls das ein A/D Wandler werden soll, braucht der dann allerdings bis 
zu 256 Schritte zur Messung einer Spannung. Das kannst du auf 8 
reduzieren:

Zuerst setzt du das höchste Bit.
Dann nutze den Komparator, um festzustellen, ob das zu viel war.
Wenn ja, setze es zurück auf 0. Wenn nein, lass es an.

Im nächsten Schritt setzt du das zweithöchste Bit.
Dann nutze den Komparator, um festzustellen, ob das zu viel war.
Wenn ja, setze es zurück auf 0. Wenn nein, lass es an.

Im nächsten Schritt setzt du das dritthöchste Bit.
... usw.

Bis du beim niedrigsten Bit angekommen bist.

Das höchste Bit (von 8) hat den Wert 128. Das darunter hat den halben 
Wert (also 128/2). Das darunter hat wieder den halben Wert (also 
128/2/2). Das niedrigste Bit hat den Wert 1.

von Spezi (Gast)


Lesenswert?

Stefan us schrieb:
> 128/2/2). Das niedrigste Bit hat den Wert 1.

und als einziges eine ungerade Wertigkeit. Das kann auch in einem 
Fluxkompensator (falls ein solcher in Planung sein sollte) bei der 
Kompensation von ungeraden Stömungen aushelfen.

von wrdlbrmft (Gast)


Lesenswert?

Spezi schrieb:
> Stefan us schrieb:
>> 128/2/2). Das niedrigste Bit hat den Wert 1.
>
> und als einziges eine ungerade Wertigkeit. Das kann auch in einem
> Fluxkompensator (falls ein solcher in Planung sein sollte) bei der
> Kompensation von ungeraden Stömungen aushelfen.

Das ist nicht Marty und du bist nicht Doc Brown. Das Auto fährt auch 
gerade, wenn man das Lenkrad festhält. Dafür ist nicht der 
Fluxkompensator zuständig. Demzufolge braucht man auch eine ungerade 
Strömung nicht kompensieren und das niedrigste Bit ist immer noch 1...

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
Noch kein Account? Hier anmelden.