Forum: Mikrocontroller und Digitale Elektronik Bits umtauschen (spiegeln)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Axel R. (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert

von Axel R. (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.