- LiFePO4 Speicher Test         
Ergebnis 1 bis 6 von 6

Thema: INT Variable einem Port (Ausgang) zuweisen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    21.02.2015
    Beiträge
    65

    INT Variable einem Port (Ausgang) zuweisen

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich würde gerne eine int16_t Variable einem Port zuweisen (in C).
    Einen gesamten Port setzten kann ich ja z.B. nur mit Hex oder Binär --> PORTA = 0xAA; oder PORTA = 0b10101010;

    Wie kann ich jetzt z.B: int a = 150; einem Ausgang zuweisen?


    Danke.

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    19.05.2015
    Beiträge
    69
    Hallo,

    grundsätzlich läßt sich ein 16bit Wert nicht an ein 8bit Register zuweisen.

    Wenn Du aber den 16bit Wert nur für eine Berechnung gebraucht hast, wo 8bit hätten überlaufen könnten und das Ergebnis wieder zwischen 0 und 255 liegt, läßt sich die Zuweisung nach einer Bereichsüberprüfung mit einem Downcast erreichen:

    Code:
    int var = /* Berrechnung */
    
    if(var >= 0 && var <= 255) {
      PORTA = (uint8_t)var; // Downcast
    } else {
      /* Fehler der behandelt werden sollte */
    }
    Gruß

    Chris

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    21.02.2015
    Beiträge
    65
    Ok danke, ja hatte vergessen zu erwähnen das ich nur Werte bis 255 erwarte in der Variable.
    Werde in einem auch den Datentyp bei der initalisierung auf uint8_t ändern.
    Also kurz gefasst:
    PORTA = var; // var vom typ uint8_t

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.687
    .. Werde .. den Datentyp bei der initalisierung auf uint8_t ändern .. PORTA = var; // var vom typ uint8_t
    .. z.B: int a = 150; einem Ausgang zuweisen ..
    Was bezweckst Du damit? WENN Dir so ohne weiteres klar ist, dass 150dez gleich 0b10010110 ist, dann macht das meiner Meinung nach einen (Teil-) Sinn. Teil deshalb weil es wohl nur sinnig ist, wenn der Port mit diesen Daten auch was anfangen kann. Wenn der Port komplett als Ausgang konfiguriert ist - DDRA = 0b11111111 - dann gehen bei "150" die Bits 7, 4, 2 und 1 an (auf high).

    Das Vorgehen dürfte also wohl nur dann sinnvoll sein, in denen der Port komplett als Ausgang konfiguriert ist, siehe oben. Denn der Sinn die Pullups wahlweise komplex zu setzten oder zu löschen ist für mich nicht wirklich einsichtig. Ich selbst operiere mit kompletten Ports nur in der binären Form - weil ich zu dämlich bin das Bitmuster von Dezimalzahlen mir ohne Hilfe vorstellen zu können. Einzelne Bits schalte ich in der üblichen Weise.

    Ausnahme: Bei meiner PingPongPlatine, 120 LEDs auf einer Karte, schalte ich mitunter auch schon mal "im Prinzip" mit ner 38015 einige >bestimmte< LEDs ein. (Im Prinzip, weil das über ein Schieberegister geschieht).
    Ciao sagt der JoeamBerg

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    21.02.2015
    Beiträge
    65
    Ja, der Port ist komplett als Ausgang konfiguriert.
    Ich erhalte per UART bestimtme Werte von 0-255, die ich nicht als Zahl sondern als Bit-muster für die Ausgänge deute.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    16.04.2011
    Beiträge
    78
    Der Post hier ist schon alt, ich antworte jedoch trotzdem, falls jemand es doch brauchen sollte.

    Dann nimm doch einen cast-Operator, sowie botty es sagte. Stichwort "implizite Datentypkonvertierung". Heißt also eine "gewaltsame" Konvertierung von einem größeren Datentyp (uint16_t) zu einem kleineren (uint8_t).
    Dann werden nur die niedrigsten 8 Bits der uint16_t - Variable in das Portregister eingetragen.

    Code:
    uint8_t LowByte;
    uint16_t DualByte;
    
    // hier folgt die Zuweisung der 16-Bit-Variable
    
    // Bei einer impliziten Datentypkonvertierung findet kein Runden etc. statt,
    // lediglich ein "Abschneiden" der höheren 8 Bits. Die niedrigen 8 Bits werden
    // der 8-bit-Variable zugewiesen
    LowByte = (uint8_t) DualByte;

Ähnliche Themen

  1. Einem Atmega8 drei I²C-Slave Adressen zuweisen?
    Von Bammel im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 14
    Letzter Beitrag: 19.06.2010, 23:35
  2. Pins einer Variable zuweisen
    Von Thomas8443 im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 30.07.2009, 21:37
  3. Antworten: 8
    Letzter Beitrag: 22.07.2008, 19:05
  4. Cstring einem char array zuweisen
    Von ceekay im Forum Software, Algorithmen und KI
    Antworten: 8
    Letzter Beitrag: 17.04.2006, 11:20
  5. variable lässt sich nicht zuweisen...
    Von Toxic im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 4
    Letzter Beitrag: 26.03.2004, 12:00

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests