www.mikrocontroller.net

Forum: Compiler & IDEs Register erstellen mit vorhandenen Pins


Autor: Patrick B. (p51d)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo miteinander

Ich habe mitlerweile schon mehrmals das Problem gehabt, dass ich an 
einem "zusammengesetzten" Ausgang gerne normal einen Wert übergeben 
wollte.
Zum Beispiel PORTXYY=0x441 bei einem 12 Bit Port.
Kennt ihr eine möglichkeit so etwas über Defines zu lösen??
Bei einem ATMega644P habe ich zum Beispiel so etwas versucht:
#define PORTXYY ((PC0<<11)|(PC1<<9)|(PC2<<7)|(PC3<<5)|PORTA)
PORTCC0 ist hier MSB und PORTA0 LSB

Leider Funktioniert das nicht, denn wenn ich einen 12Bit Wert an PORTXYY 
anlege, kommt beim kompilieren immer Fehler: Wert ist zu gross...

Ich hoffe, ihr könnt da mir ein wenig auf die Sprünge helfen.

MFG
Berger

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
> Zum Beispiel PORTXYY=0x441 bei einem 12 Bit Port.
woher die Annahme das ein 664 digitale 12 Bit Ports hat?

MfG

Autor: Patrick B. (p51d)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Annahme? Das habe ich nie gesagt.
Vielleicht habe ich mich nicht klar genug ausgedrückt:
Ich möchte einem Define einen Wert (0...32Bit) übergeben, der dan die 
Ausgänge schaltet.

Wenn man zum Beispiel 8 Leds hat, die aber nicht an einem komplettem 
Port angeschlossen sind, sondern aus PORTA0, PORTA3, PORTB4-PORTB7, 
PORTC0 undPORTC6 bestehen, und man ein Define LEDs hat, wäre es doch 
edel, dass man dem "LEDs" einfach einen 8Bit Wert zuweisen könnte.

In meinem Momentanen Problem müsste ich ein Define haben, dass ein 
Dummi-Port generiert, welches so aussieht:

(MSB)PORTC0,PORTC1,PORTC2,PORTC3,PORTA7,PORTA6,PORTA5,PORTA4,PORTA3,PORT 
A2,PORTA1,PORTA0(LSB)

Ich hoffe, dass jetzt mein Problem etwas klahrer ist, ansonsten einfach 
fragen.

Besten Dank für  die Hilfe
Berger

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick B. schrieb:
> Annahme? Das habe ich nie gesagt.
> Vielleicht habe ich mich nicht klar genug ausgedrückt:
> Ich möchte einem Define einen Wert (0...32Bit) übergeben, der dan die
> Ausgänge schaltet.

Ich möchte auch viel.
So wie du dir das vorstellst geht das nicht

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst dir ne Support-Funktion in einen Header pflanzen:
#include <avr/io.h>
#include <avr/interrupt.h>

static inline void set_xport (uint16_t val)
{
    // avoid race condition
    // ...oder über die atomic-Makros, deren Syntax man immer vergisst...
    uint8_t sreg = SREG;
    cli(); 
    PORTA = (uint8_t) val;
    if (val & (1 << 8))   PORTC |= (1 << 1)  else PORTC &= ~(1 << 1);
    if (val & (1 << 9))   PORTC |= (1 << 6)  else PORTC &= ~(1 << 6);
    if (val & (1 << 10))  PORTC |= (1 << 3)  else PORTC &= ~(1 << 3);
    if (val & (1 << 11))  PORTC |= (1 << 5)  else PORTC &= ~(1 << 5);
    SREG = sreg;
}

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
{
...
}

:-)

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.