-         

Ergebnis 1 bis 7 von 7

Thema: Habe Probleme, die ISR zu meinem Timer zum laufen zu bringen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    15.03.2004
    Beiträge
    94

    Habe Probleme, die ISR zu meinem Timer zum laufen zu bringen

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    HI, ich hab gerad begonnen interrupts mit dem timer auszuprobieren udn den code mal nach AVR Tutorial und Datenblatt gestrickt. Sowohl für 8-, als auch 16 Bit Timer. Problem, es passiert garnichts. Der Port ist richtig, die LED kann ich zum Debuggen auch in led_init() an- und ausschalten, jedoch die ISR des Timers läuft nicht. wahrscheinlich überseh ich nur was, oder ??

    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    // edfinition of Timer 0 Interrupt number
    #define TIMER0_vect    _VECTOR(10)
    #define TIMER1_vect    _VECTOR(9)
    
    //definitions for Timer register
    #define CS00 0
    #define CS01 1
    #define CS02 2
    #define CS12 2
    
    //definitions for LED
    #define LEDPORT DDRB
    #define LED     0
    
    
    void timer0_init(void);	//  8 Bit Timer
    void timer1_init(void);	// 16 Bit Timer
    void led_init(void);
    
    
    void main(void)
    {
    	led_init();
    	timer1_init();
    	
    	for(;;)
    	{}
    	
    }
    
    
    void timer0_init(void)
    {
    	cli();
    	// Set Timer Config:
    	TCCR0 |= (1<<CS00) | (1<<CS02);
    	
    	//enable Timer0 Interrupt
    	TIMSK |= (1<<0);
    	sei();
    }
    
    void timer1_init(void)
    {
    	cli();
    	// set Timer1 Conifg
    	TCCR1A =  0x00; 			// kein CLK_out, kein PWM
    	TCCR1B |= (1<<CS12); 	// Prescvaler f_osc/256
    	
    	//enable Timer1 Interrupt
    	TIMSK |= (1<<7); 
    	sei();
    }
    
    
    void led_init(void)
    {
    	LEDPORT = 0x01;
    	PORTB  |= (1<<LED);
    }
    
    
    // TIMER 0 ISR
    ISR (TIMER0_vect)
    {	
    	if( PORTB |= (1<<LED) )
    		PORTB &= ~(1<<LED);
    	else
    		PORTB |= (1<<LED);
    }
    
    
    //TIMER 1 ISR
    ISR (TIMER1_vect)
    {	
    	if( PORTB |= (1<<LED) )
    		PORTB &= ~(1<<LED);
    	else
    		PORTB |= (1<<LED);
    }
    mfg

    LC

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,

    ich glaub das mit der IF-Abfrage ist noch nicht ganz ausgereift,
    was willst Du damit genau machen:
    Code:
    if( PORTB |= (1<<LED) )
    ...
    das ist zumindest immer wahr, denn die Zuweisung an sich wird kein false zurück liefern.

    Was verwendest Du für einen C-Compiler, denn das mit der ISR einstellen ist mir jetzt nicht so geläufig ?

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    06.03.2006
    Beiträge
    56
    Muss das nicht
    Code:
    ISR(TIMER1_OVF_vect){...}
    heissen?
    Und die Ports musst du mit PIN abfragen, weil sonst die Pullup Widerstände nur aktiviert werden (glaub ich zumindest)

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    15.03.2004
    Beiträge
    94
    Erstmal danke. In der IF - Anweisung frage ich den LED Status ab, ( wenn beim letzten mal die LED angeschalten wurde, ist der Pin jetzt high und ich muss ihn low setzen. Ich mach das öfters so bei ähnlichen Gegebenheiten, von daher sollte es auch hier laufen). Als Compiler verwende ich den GCC mit der AVR lib.

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    50
    Beiträge
    1.195
    Also, die IF-Abfrage liefert immer true. Du Schaltest die LED an und sofort wieder ab. Was Du - wenn ich den Code richtig verstanden habe - machen willst ist, wenn die LED an war soll sie ausgeschaltet werden, wenn sie ausgeschaltet war, soll sie angeschaltet werden. Im Elektronik-Volksmund heisst das togglen und geht am einfachsten so:

    Code:
    PORT ^= (1<<LED);
    Das ist eine XODER-Verknüpfung.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    15.03.2004
    Beiträge
    94
    Alles kalr, danke. Nur der Timer läuft immer noch nicht

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    15.03.2004
    Beiträge
    94
    bevor noch jemand antwortet: alles läuft , danke.

Berechtigungen

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