Drucken

Inhalt

 

Hier sammle ich interessante Codeschnippsel für meine Projekte.

Piezo-Piepser ansteuern

/*********************************************************************************
 * Generates a sound with the Piezo Buzzer connected to Port B.5 (Mega 128) or Port D.5 (Mega 32)
 * The parameter "pitch" sets the frequency and "time" the
 * duration of the sound
 * "pause" can be used to add a small delay before the next command is executed.
 * This is useful for playing melodies.
 *  * This function blocks the program flow for time+pause Milliseconds.  *********************************************************************************/ void beep(byte pitch, byte time, byte pause     Timer_T1FRQ(pitch, PS_64);     AbsDelay(time);     Timer_T1Stop();     AbsDelay(pause);
/*********************************************************************************
 * This function does the same as "beep", but it does NOT block further
 * program flow and does not add a delay. It only sets the sound frequency and
 * exits. This is useful for continous operation or .
 ********************************************************************************/
void sound(byte pitch)
    Timer_T1FRQ(pitch, PS_64);
}

void sound_off(void)
{
    Timer_T1Stop();
}

Float-Variable in einzelne Bytes konvertieren

Für das Speichern von Floats in RAM oder EEPROM, müssen die Werte als Bytefolgen vorliegen.

void float2byte(byte in[])
{
    Msg_WriteHex(in[3]); Msg_WriteChar('\r');   // 0x43
    Msg_WriteHex(in[2]); Msg_WriteChar('\r');   // 0x6A
    Msg_WriteHex(in[1]); Msg_WriteChar('\r');   // 0x1F
    Msg_WriteHex(in[0]); Msg_WriteChar('\r');   // 0xD6
}


void main(void)
{
    float val[1];
    val[0]= 234.1243555;
    float2byte(val);
}

Durchschnittsbildung bei Integer

Aus mehreren Integer-Zahlen soll ein Durchschnittswert gebildet werden, der als Ergebnis wieder einer Integer-Variablen zugwiesen werden soll. Die Summierung muss über Float erfolgen (Zahlenbereich).

void main(void)
{
    float fval;
    int iarray[10];
    int ierg


    iarray[0]=27000;
    iarray[1]=27012;
    iarray[2]=26488;
    iarray[3]=27071;
    iarray[4]=27000;
    iarray[5]=22994
    iarray[6]=27030;
    iarray[7]=26002;
    iarray[8]=27780;
    iarray[9]=27000;


    fval=0;
    for(i=0;i<10;i++)
    {
      fval = fval + iarray[i];
    }
    ierg=fval/10;
    Msg_WriteInt(ierg); Msg_WriteChar('\r');   // Ergibt: 26537
}