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.
Ich hoffe, dass der Code richtig dargestellt wird. Wie macht man das hier denn ?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; }
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....







Zitieren

Lesezeichen