- Labornetzteil AliExpress         
Ergebnis 1 bis 2 von 2

Thema: Frage zur TasterAbfrage aus RN-Wissenbereich

  1. #1
    Neuer Benutzer
    Registriert seit
    24.04.2008
    Ort
    Hamburg
    Beiträge
    1

    Frage zur TasterAbfrage aus RN-Wissenbereich

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    ich habe kürzlich angefangen zu programmieren, derzeit auf dem Pollinboard mit einem ATMEGA16, WINAVR und PonyProg.

    Einige kleine Sachen habe ich schon zum laufen bekommen, andere leider noch nicht. Ich habe mir aus dem RN_Wissenbereich die Codes für die Tasterabfrage geladen um damit 3 Taster abzufragen, die an 5 LEDs die Zustände ausgeben. Dazu habe ich folgenden Code geschrieben, bei dem ich beim *.hex-file generieren immer Probleme habe, dass die Funktion get_taster und tasten keine Referenzen hat. Könnte sich vielleciht mal jemand mit dem Code auseinandersetzten und mir Nachhilfe geben?

    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <inttypes.h>
    #ifndef F_CPU
    #define F_CPU 16000000								/*Quarz 16 Mhz*/
    #endif		
    
    
    #include "taster.h"					/*Routine zum Taster entprellen*/
    /*Taster #0--> PortA.0
     *		 #1--> PortA.1
     *       #2--> Porta.2
     */
     
    //void get_taster (const unsigned char num, unsigned char tast)
    			
    		
    
     SIGNAL (SIG_OVERFLOW0)
    	{
    		static unsigned char count_ov10;
    		unsigned char ov10 = count_ov10+1;
    		
    		if (ov10 >= 39)
    		{
    			get_taster (0, PINA & (1<<PA0));
    			get_taster (1, PINA & (1<<PA1));
    			get_taster (2, PINA & (1<<PA2));
    			
    			ov10 = 0;
    		}
    		
    		count_ov10 = ov10;
    	}
    
    
     void ioinit(void)
    	{
    		PORTA |=(1 << PA0);		/*PUllUp Taster0*/
    		PORTA |=(1 << PA1);		/*PullUp Taster1*/
    		PORTA |=(1 << PA2);		/*PullUp Taster2*/	
    		
    		 
    		TCCR0 = 1 << CS00;			/*Timer ohne Prescaler starten*/
    		TIMSK |= (1 << TOIE0);		/*Timer=-Overflow-Interrupt aktivieren*/
    	}
     
     
     
     
     
     int main(void)
     {
    	DDRA &= ~(1 << PA0);
    	DDRA &= ~(1 << PA1);
    	DDRA &= ~(1 << PA2);
    	DDRB |=  (1 << PB0);
    	DDRB |=  (1 << PB1);
    	DDRB |=  (1 << PB2);
    	DDRB |=  (1 << PB3);
    	DDRB |=  (1 << PB4);
    	
    	
    	
    	
    	ioinit();
    	
    	tasten[0].mode = TM_SHORT;		/*Tastenmodus konfigurieren*/
    	tasten[1].mode = TM_LONG;		/*TM_SHORT=kurz; TM_LONG=kurz+lang*/
    	tasten[2].mode = TM_LONG;
    	
    	sei();							/*Interrupts global aktivieren*/
    	
    
    	while(1)						/*Hauptschleife*/
    		{
    		
    			signed char tast = taster;
    			
    			switch (tast)
    				{
    					default:
    					case NO_TASTER:		/*kein Taster*/
    						break;
    					
    					case 0:				/*Taster 0*/
    						PORTB |= (1 << PB0);
    					
    					case 1:				/*Taster 1 kurz*/
    						PORTB |= (1 << PB1);
    						
    					case 1+TASTER_LONG:	/*Taster 1 lang*/
    						PORTB |= (1 << PB2);
    					
    					case 2:				/*Taster 2 kurz*/
    						PORTB |= (1 << PB3);
    						
    					case 2+TASTER_LONG:	/*Taster 2 lang*/
    						PORTB |= (1 << PB4);
    				}
    				if (tast != NO_TASTER)
    					taster = NO_TASTER;
    		
    		
    		
    		
    		}
     return(0);
     }
    Vielen Dank im Vorraus.

    Gruß Lars

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Alles auch im makefile eingetragen, ansonsten einmal alle Files und die Fehlermeldung hereinstellen.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

Berechtigungen

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

Labornetzteil AliExpress