-
        

Ergebnis 1 bis 6 von 6

Thema: RP6 M32 C Problem: Timer 1

  1. #1

    RP6 M32 C Problem: Timer 1

    Anzeige

    Hallo an alle,
    ich weiß nicht warum, aber ich kriege es nicht hin, den freien Timer 1 der M32 Erweiterungsplatine zu konfigurieren. Das Interrupt wird anscheinend nicht ausgelöst! Ich habe schon alles mögliche ausprobiert. Hier das Initialisierungsvoid, die Initialisierung vom Timer 1 fett geschrieben:

    Code:
    void initRP6Control(void)
    {
    	portInit();		// Setup port directions and initial values.
    					// This is the most important step!
    
    	cli();			// Disable global interrupts.
    
    	// UART:
    	UBRRH = UBRR_BAUD_LOW >> 8;	// Setup UART: Baud is Low Speed
    	UBRRL = (uint8_t) UBRR_BAUD_LOW;
    	UCSRA = 0x00;
            UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
            UCSRB = (1 << TXEN) | (1 << RXEN) | (1 << RXCIE);
    	
    	// Initialize ADC:
    	ADMUX = 0; //external reference 
    	ADCSRA = (0<<ADIE) | (0<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADIF);
    	SFIOR = 0;
    
    	// Initialize External interrupts - all disabled:
    	MCUCR = (1 << ISC11) | (1 << ISC10) | (1 << ISC01) | (1 << ISC00);
    	GICR = (0 << INT2) | (0 << INT1) | (0 << INT0);
    	MCUCSR = (0 << ISC2);
    	
    	
    	// 10kHz Timer 0:
    	TCCR0 =   (0 << WGM00) 
    			| (1 << WGM01) 
    			| (0 << COM00) 
    			| (0 << COM01) 
    			| (0 << CS02)  
    			| (1 << CS01) 
    			| (0 << CS00);
    	OCR0  = 199;
    	
    /*
    	Timer 1 is free for your applications!
    */
        TCCR1A = (1 << WGM12);
            TCCR1B =   (1 << CS12);
            TIMSK = (1<< OCIE1A); 
    
    	// SPI Master (SPI Mode 0, SCK Frequency is F_CPU/2, which means it is 8MHz 
    	// on the RP6 CONTROL M32...):
    	SPCR =    (0<<SPIE) 
    			| (1<<SPE) 
    			| (1<<MSTR) 
    			| (0<<SPR0) 
    			| (0<<SPR1) 
    			| (0<<CPOL) 
    			| (0<<CPHA);  
    	SPSR = (1<<SPI2X);
    	
    	sei(); // Enable Global Interrupts
    }
    Und hier die Interruptroutine:

    Code:
    ISR (TIMER1_OVF_vect)
    {
      [...]
    }
    Da das ja normales AVR C ist, kann das Problem bestimmt jeder, der sich mit AVRs befasst und diese in C programmiert, lösen.
    Vielen Dank schon mal im Voraus und
    Viele Grüße
    teamohnename

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    TIMSK = (1<< TOIE1); setzt das Flag für den Overflow-Interrupt. Das steht wohl für TimerOverflowInterruptEnable.

    Edit: War ja klar, dass diese Antwort zu einfach ist. WGM12 gesetzt bedeutet CTC-Mode, dann ist "TIMER1_OVF_vect" natürlich die falsche ISR. Allerdings ist WGM12 ein Flag in TCCR1B, richtig wäre deshalb:

    Code:
    TCCR1A = 0;
    TCCR1B =   (1 << WGM12) | (1 << CS12);
    OCR1A=65535;
    TIMSK = (1<< OCIE1A);
    
    
    ISR (TIMER1_COMPA_vect)
    {
      [...]
    }
    (ungetestet)
    Geändert von radbruch (03.01.2012 um 21:36 Uhr)

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Hi radbruch,
    danke für Deine Antwort. Leider löst das Interrupt immer noch nicht aus. Ein CTC Timer muss das auch nicht unbedingt sein, ich habe das nur gewählt, weil mich das ,,PWM" im Datenblatt verwirrt hat. Ich möchte einfach nur alle paar Millisekunden (z.B. alle 30ms) ein Interrupt auslösen, damit mir im Prinzip ,,Multitasking" ermöglicht wird. Wie muss man dazu die Register konfigurieren?
    Vielen Dank und
    Viele Grüße
    teamohnename

  4. #4
    *push*

    Leute, bitte, wir brauchen einfach nur die Daten für Timer 1... Wir habe zwar schon alle möglichen und nicht möglichen Kombinationen ausprobiert, es aber trotzdem nicht hingekriegt! Wir sind fast schon am Verzweifeln... Wie gesagt, wir möchten einfach nur alle paar ms ein Interrupt aufgerufen bekommen...

    Vielen Dank und
    Viele Grüße
    teamohnename

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    32
    Beiträge
    1.514
    Wo ich den Thread hier gerade sehe:
    http://arexx.com/forum/viewtopic.php?f=19&t=1727

    wurde gelöst.

  6. #6
    Ja, danke, sorry, hab ich total vergessen.

Ähnliche Themen

  1. Problem mit Timer
    Von Skynet im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 08.09.2011, 08:30
  2. Problem mit Timer
    Von MechMac im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 29.08.2010, 13:48
  3. Timer Problem
    Von Mr-400-Volt im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 07.10.2008, 10:35
  4. Problem mit timer
    Von RedEagle im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 06.01.2007, 14:52
  5. Timer Problem
    Von PiCus im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 23.03.2006, 20:15

Berechtigungen

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