www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Falsch verdrahtet...trotzdem was zu machen?? HILFE!


Autor: Steffen81 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich lese 16 Bit über die Ports C und F ein. Nur leider ist das
MSB an der Stelle PC0 und das LSB an der Stelle PF7. Was nun...??
(Platine ist schon fertig)
PC0 (MSB)
PC1 (MSB-1)
...
PC7 (MSB-7)
PF0 (MSB-8)
...
PF7 (LSB)
Wie kann ich die 16Bit trotzdem richtig einlesen?? Danke für HILFE!!!

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

einfach einlesen und in Software dann die Bits entsprechend drehen? Das
Drehen geht dann alternativ über eine große Look-Up Tabelle, zwei kleine
und ein swap oder über eine Menge Schieboperationen.

Matthias

Autor: Ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bsp. (als Ergänzung zu dem was Mathias gesagt hat):

1 PORTC und PORTF in Software tauschen.
2 Dann für beide Bytes (C und F)
  21 CALL GetNibble
  22 Ergebnis zwischenspeichern
  23 Obere 4 Bit nach unten schieben
  24 CALL GetNibble
  25 Ergebnis 4 Bit nach oben schieben
  26 Zwischenergebnis einmaskieren (ODER mit zwischenErgebnis)

SUB GetNibble
  G1 Untere 4 Bit ausmaskieren (UND mit 0x0F)
  G2 Aus Look Up Tabelle mit 16 Einträgen das geswapte Nibble auslesen

Die Tabelle sieht dann so aus
uint8_t nibbleTab[] =
{
 0b00001111,
 0b00001110,
 ...
 0b00000001,
 0b00000000
};

Autor: Steffen81 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke...hat vielleicht einer nen Tipp, wie das schnell und schmerzlos in
C geht?

Autor: Steffen82 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man, die angebotenen Ideen in C zu übersetzen sollte dir doch wirklich
möglich sein...

Autor: Steffen81 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry...wenn ich es geschafft hätte, hätte ich nicht nochmal gepostet!

Autor: tsalzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
bei einem verdrehten Port kann man doch so  einlesen..
 wert = 256 - PORT, oder geht das jetzt nicht?

ts

Autor: Die Waldfee (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, sorry, aber wenn Du den ausführlichen Vorschlag von Ingo nicht
umsetzen kannst, dann kann Dir echt keiner weiterhelfen.

Autor: Kurt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sehr primitiv - aber es geht (in Codevision):

if (PINC.0 == 0) ..... = 1 ; else.... = 0;
.
.
.
.
.

SG Kurt

Autor: Potzenplotz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias und Ingo..... viel geschrieben und wieder einmal nichts
gesagt.
Kuschelt ihr miteinnander ?

SG Potzenplotz

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
x = PINF;
y = 0xFF;
for(i=0;i<8;i++)
{
 if (x & (1<<i))) y &= ~(1<<(7-i));
}

nicht schön, könnte aber gehen, wobei in y gedrehte Varinte des PINF
steht... (stehen müsste)
Die Methode ist relativ langsam. Wenn man 8 Vergleiche hintereinander
schreibt, müsste schneller gehen...
Etwa so:
if (x & (1<<0)) y &= (1<<7);
if (x & (1<<1)) y &= (1<<6);
if (x & (1<<2)) y &= (1<<5);
if (x & (1<<3)) y &= (1<<4);
if (x & (1<<4)) y &= (1<<3);
if (x & (1<<5)) y &= (1<<2);
if (x & (1<<6)) y &= (1<<1);
if (x & (1<<7)) y &= (1<<0);

Dabei ersetzt der Compiler die (1<<n) durch Konstanten...

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.