Forum: Mikrocontroller und Digitale Elektronik Bits umtauschen (spiegeln)


von Axel R. (Gast)


Angehängte Dateien:

Lesenswert?

Es weihnachtet wieder einmal und ich habe mein 16x10 LED Display 
vorgekramt.
ATmega128
es werden 2x8Bit (PortA linke hälfte, PORTC rechte hälfte)) breit pro 
Zeile dargestellt und das alles 10x (PORTD mit 74HCT42 0-9 
decodiert)nach unten widerholt.(PORTD=10->alles aus)
Seinerzeit(tm) hatte ich das mit den Fastavr-"Compiler" (ähnlich BASCOM) 
zusammengebastelt und ging eigentlich auch ganz gut.
Durch eine damalige Unachtsamkeit beim Routing sind jedoch alle Portbits 
vom PORTA und PORTC vertauscht.
aus PA.0->PA.7 wurde PA.7->PA.0 usw. schnief

Ich habe das damals softwaremäßig so gelöst:
1
Function umkehr(n As Byte) As Byte
2
Local m As Byte
3
m = 0
4
If n.0 Then : Set m.7 : End If
5
If n.1 Then : Set m.6 : End If
6
If n.2 Then : Set m.5 : End If
7
If n.3 Then : Set m.4 : End If
8
If n.4 Then : Set m.3 : End If
9
If n.5 Then : Set m.2 : End If
10
If n.6 Then : Set m.1 : End If
11
If n.7 Then : Set m.0 : End If
12
Return m
13
End Function

Ich bin nun dabei ,das ganze nach C zu portieren, weil ich dieses 
FASTAVR nicht mehr finde hust, stehe aber vor dem gleichen 
Hardwareproblem, denn hier hat sich ja nichts geändert.

Geht das in C etwas eleganter zu lösen?

Danke
Axelr.

von Falk B. (falk)


Lesenswert?


von Axel R. (Gast)


Lesenswert?

Beitrag "Re: Bitreihenfolge ändern"

HAHA, kann mal sehn, wie lange ich hier schon dabei bin ;)

Danke Falk bis hierher :)

Gruß
Axelr.

von Axel R. (Gast)


Lesenswert?

Danke soweit, kann jetzt weiter testen!
(ich hatte die Sufu verwendet, dachte ich - hmmm)

Aber: das die "__builtin_avr_insert_bits" die Reihenfolge tauscht: 
da´rauf muss man erstmal kommen...

um nur einige Möglichkeiten für alle aufzuzeigen
http://www.avrfreaks.net/forum/nibble-rotate-how
Gruß
Axel und vielen Dank
1
    result <<= 1;
2
    if (n & 1)
3
    result |= 1;
1
    result <<= 1;
2
    result |= n & 1;
1
b = __builtin_avr_insert_bits(0x01234567,a,0);
1
Dim Inbyte As Byte
2
Dim Outbyte As Byte
3
4
Dim I As Byte
5
Dim J As Byte
6
7
I = 0
8
J = 7
9
10
Do
11
   Outbyte.i = Inbyte.j
12
   Decr J
13
   Incr I
14
Loop Until J < 0

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.