Forum: Compiler & IDEs Geziehlt 0 oder 1 in Pin schreiben


von Steffen Brüssel (Gast)


Lesenswert?

Hallo,

ich möchte eine Zahl parallel an Ports ausgeben. Da aber lediglich 12
bit benötigt werden und die anderen Pins schon belegt sind muss ich
einen kompletten Port und 4 Pins eines anderen Ports beschreiben.
Ich stelle mit das so vor, dass ich einer Methode den Zahlenwert
vorgebe und diese dann entsprechend die Pins aktiviert bzw deaktiviert,
je nachdem ob in der binären Schreibweise der Zahl grad ne 0 oder 1 ist.
An einen ganzen Port kann ich ja die erten 8 Bit direkt übergeben. Mein
Problem sind die 4 Einzelpins. Ich kenne zwar Befehle zum Setzen und
Rücksetzten, bin aber der Meinung, dass es einfacher gehen müsste. Kann
ich Pins evtl zu einer Gruppe zusammenfassen ähnlich wie bei Ports und
dann einfach die fehlenden 4 Bit einfach reinschreiben?

Danke für eure Hilfe.

Gruß

Steffen

von chrissy (Gast)


Lesenswert?

Vielleicht ist mir die Frage nicht klar.
Du möchtest an einem Port ein Nibble ausgeben. Dann löscht du doch
eigentlich dieses Nibble und veroderst mit dem Nibble aus der 12bit
Zahl. Dann schreibst du in den 8bit Port. Das ändert doch die anderen
bits nicht.

Oder verstehe ich das Problem nicht richtig?

von Michael (ein anderer) (Gast)


Lesenswert?

@Steffen Brüssel:

In 'C':

PORTx = PORTx & 0xf0 | daten & 0x0f;

von Steffen Brüssel (Gast)


Lesenswert?

Wenn ich noch wüsste wasn nibble ist ;)
Richtig ich könnte vor dem Schreiben den Pin löschen...und dann den
Wert in der zahl mit dem pin 'verodern' <-- schönes wort :)

Portb&=~(1<<PB4);
portb|=(1<<PB4);

statt der 1 könnte ich dann das bit aus der zahl nehmen?

Ich werd das mal probieren. aber zunächst muss ich dann noch die zahl
in ihre bits trennen oder geht das auch wenn ich einfach die zahl
durchschiebe. also fürs erste bit zahl>>0 fürs zweite zahl>>1 und so
weiter?

von chrissy (Gast)


Lesenswert?

Jau und wenn du das nicht bitweise machst, sondern direkt z.B die
unteren 4bits, das untere Nibble ;-), benutzt hast du das Beispiel von
Michael.
Müsste klappen und keinen Ärger machen

von OldBug (Gast)


Lesenswert?

void
wr12bit(unsigned int val)
{
    /* write bits 0..7 to PORTB: */
    PORTB = (val & 0xFF);

    /* write bits 8..11 to PC0..PC3 */
    PORTC = (PORTC & 0xF0) | ((val & 0x0F00) >> 8);
}

ungetestet weil wenig Zeit, aber sollte so stimmen...
Falls nicht, wird wenigstens das Prinzip sichtbar! :-)

von Jürgen Schuhmacher (Gast)


Lesenswert?

Jo, die Funktion tut, was sie soll, nur bin ich nicht so sicher, ob es
das ist, was der Frager will.(?)

Er sagt ja "und 4 Pins eines anderen Ports beschreiben"

Meines Erachtens will er einen 8Bit-Wert teilen (2 Nibble) und diese
getrennt auf 2 Ports geben. Im Prinizp sthet alles oben, man muss nur
die Vorhandenen BIts eines Ports retten, die neu zu Setzenden zu Null
maskieren und mit dem zu schreibenden Bits (nach  Positionskorrektur)
verordern. Ganz esay.

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.