- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 13 von 13

Thema: Tastenabfrage (Kur/Lang gedrückt)

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    24.08.2009
    Beiträge
    30
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hi,
    nun so ganz unwissend bin ich ja nun auch nicht.
    Hab schon einiges mit C herumexperimentiert.
    Ich lerne eben am besten wenn ich mir anhand von Beispielen die Funktion klar mache.

    Du hast ja dein Codebeispiel gut dokumentiert und da hast du auch vermerkt das dein Beispiel für den Tiny angepasst ist.

    Aber das ist ja für AVR Studio beim compilieren nicht ausschlaggebend denke ich.

    Ich verwende für meinen Aufbau einen ATMEGA 8 mit internen Takt. Für dein beispiel dann 8MHz.

  2. #12
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.653
    Zitat Zitat von DerSchatten
    ... dein Beispiel für den Tiny angepasst ist... das ist ja für AVR Studio beim compilieren nicht ausschlaggebend denke ich ...
    Hmmm, das denkst Du - daher auch Deine Verzweiflung. Denn der Compiler denkt vermutlich etwas anders.

    Viel Erfolg, trotz allem.
    Ciao sagt der JoeamBerg

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    24.08.2009
    Beiträge
    30
    Hab das ganze jetzt nochmal umgestrickt und denke das ich am richtigen Weg bin:

    Code:
    //----------------------------------------
    // Titel	: Arcade Tastenprogrammierung
    //----------------------------------------
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <stdint.h>
    #include <avr/eeprom.h>
    #include <avr/pgmspace.h>
    
    typedef unsigned char BYTE;
    typedef unsigned int WORD;
    
    BYTE bPortB;
    BYTE nKeyPress;
    
    const unsigned char Tabelle[] PROGMEM = {249, 164, 176, 153, 146, 130, 248, 128, 144};
    
    #define CNTDEBOUNCE 10
    #define CNTREPEAT 200
    
    #define KEY_PIN  PINB
    #define KEY_PINNO PB6
    
    uint8_t eeFooByte;
    volatile uint8_t gKeyCounter;
    
    
    ISR(TIMER1_COMPA_vect)
    {
       uint8_t tmp_kc;
     
       tmp_kc = gKeyCounter;
     
       if (!(KEY_PIN & (1<<KEY_PINNO)))
       {
          if (tmp_kc < CNTREPEAT)
    	  {
             tmp_kc++;
          }
       }
       else
       {
          tmp_kc = 0;
       }
       gKeyCounter = tmp_kc;
    }
    
    void init(void)
    {
    	PORTB |= _BV(6);	// Pull-Up Port B6 aktivieren
        DDRB = 0xFF;		// Port B als Eingang
    	DDRD = 0xFF;		// Port D als Ausgang
    	TIMSK |= (1<<TOIE1); //Timer1 Interrupt aktiviert
    	TCCR1B = 1; 		//Prescaler 1
    	TCNT1 = 65535-3600; //Preloader 3600
    }
    
    int main (void)
    {
    	init();
    	sei();
    
        bPortB = 1;
    	nKeyPress = eeprom_read_byte(&eeFooByte);
    
        while(1)
    	{
    
    
    				if ( gKeyCounter > CNTDEBOUNCE )
    				{
    					if (gKeyCounter == CNTREPEAT)	// Code fuer "Taste lange gedrueckt"
    					{
    						eeprom_write_byte(&eeFooByte, nKeyPress);
    					}
           				else 							// Code fuer "Taste kurz gedrueckt"
    					{
    						PORTD = pgm_read_byte(&Tabelle[nKeyPress]);
    						if (nKeyPress < 8)
    						{
    							nKeyPress++;
    
    						}
    						else
    						{
    							nKeyPress = 0;
    
    						}
    					}
    				}
    
    	}
    	return 0;
    }
    Mit den initialisieren der Interrupts bin ich nur etwas überfragt. Wie macht man das richtig?
    Wie gesagt ich verwende einen ATMEGA8 mit 8MHz Takt.

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

Labornetzteil AliExpress