Hallo Forum,

super Idee, eine "c"-Ecke einzurichten. Vor allem für Controller-Anfänger wie ich einer bin.

Ich habe einige kleine Schnipsel für die c-Programmierung des RN-Control-Boards fertig.

Das heir ist eine Funktion zur Tastenabfrage. Da das Board "nur" einen Eingang (PORT-A, PIN-7) verwendet, werden heir analoge Werte mit einem Spannungsteiler, der schon auf dem Board sitzt, ermittelt und ausgewertet.

Code:
// Tastenabfrage (eine Taste...)
uint8_t RN_Control_Board::Taste(void)
{	
	uint8_t 	Tastennummer= 0;
	uint16_t 	ad_wert		= 0;
	
	admux = 7;						// Input-Pin: Taste ist an PA7 angeschlossen
	cbi(ADCSRA, ADFR);				// single-Wandlung
	cbi(ADMUX, ADLAR);             	// left adjust ist nicht aktiv   
	sbi(ADCSRA, ADEN);				// ADC enable
	
	sbi(ADCSRA, ADSC);             	// A/D-Wanldung starten
	while (ADCSRA & 64);           // auf 0 warten, dann ist Wandlung beendet

	ad_wert = ADCW;					// Low- und High-Byte in einem Schritt kopieren.
									// In ad_wert steht jetzt der 10-Bit-A/D-Wert (0...1023)
	if (ad_wert < 1010)
	  {
		if((ad_wert >= 410) && (ad_wert <= 450) { Tastennummer = 1;}
		if((ad_wert >= 340) && (ad_wert <= 380) { Tastennummer = 2;}
		if((ad_wert >= 265) && (ad_wert <= 305) { Tastennummer = 3;}
		if((ad_wert >= 180) && (ad_wert <= 220) { Tastennummer = 4;}
		if((ad_wert >= 100) && (ad_wert <= 130) { Tastennummer = 5;}
	  }
	
	return Tastennummer;
}
Ich hoffe, dass der Code richtig dargestellt wird. Wie macht man das hier denn ?

Also... wenn eine Taste gedrückt wird (eine von 5), dann wird per A/D-Wandler ein Wert ermittelt, der bei jeder Taste ein anderer ist. Als Rückgabewert wird dann die Tastennummer 1 bis 5 ausgegeben. Ist keine Taste gedrückt, dann wird 0 zurückgegeben.

Eventuell ist ja eine schlauere Lösung im Umlauf.

Bis denn... Klaus

Naja.... Ich werde noch andere Listings posten....