Hallo an alle,
danke für eure prompten Antworten. Leider bin ich immer noch nicht weiter. Die If-Abfrage muss natürlich in die Endlosschleife. Ich hatte vorher da stehen Zeittick = 0 und in der if-Abfrage if Zeittick == 1
Habe die Abfrage jetzt wieder in die Endlosschleife genommen, aber ohen Erfolg. Auch die Verwendung einer unit8_t Variable brachte keinen Unterschied
Ich poste mal den gesamten Code, vielleicht hab ich ja doch anderer Stelle einen Denkfehler.....
Ich verstehs nicht. Wenn noch jemand eine Idee hat wäre das klasse. Nur noch als Info, mit diesem Code könnt ihr alle vier PWM Kanäle des Tiny25 nutzen, klappt prima. Nur eben bis auf die Geschichte mit der globalen Variable.Code:#include <../include/avr/io.h> #include <../include/avr/interrupt.h> #include <../include/stdlib.h> #include <../include/util/delay.h> #define UPPPER_BOUND 10 volatile uint8_t Zeittick ; int myRand( int UpperBound ) { int x; while( (x = rand()) >= RAND_MAX - (RAND_MAX % UPPPER_BOUND) ) ; return x % UPPPER_BOUND; } // Eine nichtunterbrechbare Interrupt-Service-Routine SIGNAL (TIM1_COMPA_vect) { // ISR-Code //PORTB ^= (1<<PB2); //PORTB |= (1 << PB2); // setzt Bit 3 an PortB auf 1 PORTB &= ~(1 << PB2); // loescht Bit 3 an PortB Zeittick = Zeittick + 1; } SIGNAL (TIM1_OVF_vect) { // ISR-Code //PORTB ^= (1<<PB2); PORTB |= (1 << PB2); /* setzt Bit 3 an PortB auf 1 */ //PORTB &= ~(1 << PB2); /* loescht Bit 3 an PortB */ Zeittick = Zeittick + 1; } void long_delay(uint16_t ms) { for(uint16_t temp=0; temp<=ms; temp++){ _delay_ms(1);} } int main (void) { //Zeittick = 0; // allgemein GTCCR = 0b11100001; // Timer anhalten SREG |= (1 << 7); GIMSK = 0b00100000; PCMSK = 0b00000100; // Timer 0 TCCR0A = 0b11100001; // Timer0 A und B auf Phasecorrect PWM-Mode // und löschen bei erreichen des Werte in OC0A bzw. // OC0B TCCR0B = 0b00000010; // WGM02-Bit löschen für PWM-POhase-Correct-Mode // OC0A-Ausgang wird beim hchzählen gesetzt und // beim runterzählen gelöscht // und Prescaler auf clk/1024 einstellen OCR0A = 0b01100011; // Output-Compare-Register einstellen OCR0B = 0b00101111; // Output-Compare-Register einstellen // Timer 1 TCCR1 = 0b01000101; OCR1A = 0b11000000; OCR1B = 0b00011111; OCR1C = 0b11111111; TIMSK = 0b01000100; // sei(); // OCR1A = 0b01111111; // OCR1B = 0b00111111; DDRB = 0b11111111; // PortB auf Ausgabe stellen GTCCR = GTCCR & 0b11111110 ;//0b00000000; // Timer starten uint8_t Dauer_LED1 = 2;//myRand(255); uint8_t Helligkeit_LED1 = 255;//myRand(255); uint8_t LED1; while(1) { if (Zeittick >= 3) { //PORTB ^= (1<<PB3); //Zeittick = 0; PORTB |= (1 << PB3); // setzt Bit 3 an PortB auf 1 } /* for (LED1 = 0; LED1<Helligkeit_LED1;LED1++) { OCR1B=LED1; _delay_ms(Dauer_LED1); } //PORTB |= (1 << PB2); // setzt Bit 3 an PortB auf 1 //long_delay(1000); for (LED1 = 0; (Helligkeit_LED1-LED1)>0;LED1++) { OCR1B=255-LED1; _delay_ms(Dauer_LED1); } */ //PORTB &= ~(1 << PB2); // loescht Bit 3 an PortB //long_delay(1000); /* OCR0A = 100; long_delay(1000); // Eine Sekunde warten... OCR0A = 1; long_delay(1000); // Eine Sekunde warten... */ //PORTB |= (1 << PB2); /* setzt Bit 3 an PortB auf 1 */ } return 0; }
Internette Grüße
Stefan







 
			
			
 
					
					
					
						 Zitieren
Zitieren

Lesezeichen