Gast
#2417393
Einen wunderschönen guten Tag. habe da ein Problem und komme nicht weiter. Versucht habe ich mit einem ATmega32 auf dem STK500 zwei Led's per PWM zu dimmen (task2) und nebenher einen zweiten Task (task1) laufen zu lassen, der eine andere Led toggelt. Das Problem ist, das nur funktioniert, wenn ich den Ausgang OCR1AL benutze (PortD 5). Sobald ich aber das Vergleichsregister OCR1BL beschreibe (so wie unten im Quelltext angegeben) wird der LED-Toggle Task (task1 mit der niedrigeren Priorität) nicht mehr ausgeführt. Die Led's werden aber gedimmt. Wenn nur eine LED gedimmt werden soll, also OCR1AL gesetzt wird, funktioniert das ganze einwandfrei. Also geschrieben ist das mit AVR-Studio 5, der ATmega32 (16 MHz) sitzt auf einem STK500 und FreeRTOS ist Version 7.0.1. Hat jemand eine Idee woran das liegen könnte? Vielen Dank und viele Grüße maddde [c] //FreeRTOS include files #include "FreeRTOS.h" #include "FreeRTOSConfig.h" #include "task.h" void task1(){ const portTickType freq1 = 150; portTickType lastwake1 = xTaskGetTickCount(); for(;;){ vTaskDelayUntil(&lastwake1, freq1); PORTD |= (1<<PD7); vTaskDelay(50); PORTD &= ~(1<<PD7); } } void task2(){ int i = 0; TCCR1A = 0xB1; TCCR1B = 0x01; OCR1AL = 255; OCR1BL = 0; const portTickType freq2 = 10; portTickType lastwake2 = xTaskGetTickCount(); for(;;){ //LED blinken vTaskDelayUntil(&lastwake2, freq2); ++i; if(i > 150){ i = 0; } OCR1AL = 255-i; OCR1BL = i; } } void main(){ DDRD = 0B11110000; PORTD = 0B00001111; xTaskCreate(task1, (signed portCHAR *)"task1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY+1, NULL); xTaskCreate(task2, (signed portCHAR *)"task2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY+2, NULL); vTaskStartScheduler(); } [\c]