- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 26 von 26

Thema: Headerdatei(en) für ATMega32

  1. #21
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.056
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Dann hätte wir das auch geklärt. Eine Frage wäre noch. Welche Funktionen würdet ihr noch einbauen, damit man sie als Programmieranfänger leicht verwenden kann? Ich habe mir gedacht dass man einfache Schreib/Lesebefehle wie z.B. setze_bit(PD3) schreibt und das entsprechende Bit gesetzt wird. Ich will das nicht nur für Bit, sondern auch für Nibble und Byte machen. Außerdem möchte ich noch einige Funktionen wie z.B. PWM initialisierung und Anwendung,.... einbauen.

    Was würdet ihr noch alles einbauen?

    MfG Hannes

  2. #22
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    Zitat Zitat von 021aet04
    ... einfache Schreib/Lesebefehle wie z.B. setze_bit(PD3) schreibt und das entsprechende Bit gesetzt wird ...
    Das ist in einem Thread von copius durch askazo schön erklärt worden :an dieser Stelle

    Daraus habe ich dann das hier gemacht:
    Code:
     #define SetBit(ADDR,BIT)       ((ADDR) |= (1<<(BIT)))          // Setzt Bit
     #define ClrBit(ADDR,BIT)       ((ADDR) &= ~(1<<(BIT)))         // Löscht Bit
     #define ToogleBit(ADDR,BIT)    ((ADDR) ^= (1<<(BIT)))          // Toogelt Bit
     #define IsBitSet(ADDR,BIT)     (((ADDR) & (1<<BIT))?1:0)       // Fragt Bit = 1?
     #define IsBitClr(ADDR,BIT)     (!(ADDR) & ~(1<<BIT))           // Fragt Bit = 0?
    und dann heissen Beispiele etwa so:
    Code:
        SetBit(PORTC, 5);   // LED auf PC5 schalten EIN, HELL
        ClrBit(PORTC, 5);   // LED auf PC5 schalten AUS, Dunkel
    Bei "IsBitSet/IsBitClr" muß bei "ADDR" statt PORTx natürlich PINx geschrieben werden. BIT läuft wie gewohnt von 0 bis 7.
    Ciao sagt der JoeamBerg

  3. #23
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von oberallgeier
    Daraus habe ich dann das hier gemacht:
    Code:
      #define IsBitClr(ADDR,BIT)     (!(ADDR) & ~(1<<BIT))           // Fragt Bit = 0?
    IsBitClr funktioniert so garantiert nicht. Mit "& ~" kannst du das fragliche Bit auf gar nichts testen, weil x&0 immer 0 ist, egal ob x nun 0 oder 1 ist.
    MfG
    Stefan

  4. #24
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.056
    Genau soetwas habe ich mir vorgestellt. Das hätte ich mir gemacht, ich hätte es zwar in eine Funktion geschrieben, aber mit #define ist es besser. Wäre ich nicht drauf gekommen.

    Habe eine Lib mit sehr vielen Funktionen gefunden

    http://www.mil.ufl.edu/~chrisarnold/...rd/AVR/avrlib/

  5. #25
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    Zitat Zitat von sternst
    ... IsBitClr funktioniert so garantiert nicht ...
    Klar - oder vielmehr - hätte ich wissen müssen. Weil ich es getestet hatte - und es hatte nicht funktioniert; das hatte ich auch in der folgenden Codezeile vermerkt. Diese Abfrage braucth man aber auch nicht, wenn IsBitSet nicht wahr ist, dann habe ich ja schon die Antwort. Aber, dumm genug von mir, die Zeile mit der Anmerkung hatte ich beim Zitieren (dafür gibts nun eigentlich keine Entschuldigung) nicht gelesen. Übrigens: in den späteren codes habe ich dieses Statement nicht mehr stehen. Mit zwei Wörtern: dumm gelaufen. Und wieder habe ich gezeigt, wie wenig ich kann bzw. wie viel - ähhh - Fehler ich mache.
    Ciao sagt der JoeamBerg

  6. #26
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.056
    Jeder macht mal Fehler

Seite 3 von 3 ErsteErste 123

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad