Witam.
Od 3 dni siedzę już nad programowym PWM. Wykorzystuję do tego przerwanie na timerze, ale coś nie działa tak jak powinno otóż jak nie mam ustawionego stanu 1 na ostatnim bicie portu to PWM dziwnie się zachowuje.
Odczyt wartości val następuje w przerwaniu USARTa. Co mogę robić nie tak? dlaczego tak się dzieje?
Proszę o pomoc.
Pozdrawiam,
Vampir8
Od 3 dni siedzę już nad programowym PWM. Wykorzystuję do tego przerwanie na timerze, ale coś nie działa tak jak powinno otóż jak nie mam ustawionego stanu 1 na ostatnim bicie portu to PWM dziwnie się zachowuje.
//Includes
#include "avr/io.h"
#include "inttypes.h"
#include "stdio.h"
#include "util/delay.h"
#include "avr/interrupt.h"
#include "usart.h"
#include "avr/wdt.h"
//Defines
#define F_CPU 8000000
#define LED_PORT PORTA
#define LED_DDR DDRA
//Functions
void Init_Ports(); //Initialize IO Pins
void Init_Timer2(); //Initialize Timer
//Variables
volatile unsigned char val[8];
int volatile count=1;
int main(){
Init_Ports();
USART_Init(1);
Init_Timer2();
wdt_disable();
sei();
for(;;){
//loop
}
return 0;
}
void Init_Ports(){
LED_DDR = 255; //Output
}
void Init_Timer2(){
count=1;
// Reset timer
//ASSR |= _BV(AS2);
TCNT2 = 0;
// Prescaler 1
TCCR2 |= 0x01;
// Overflow interrupt
TIMSK |= (1<<TOIE2);
}
ISR(TIMER2_OVF_vect){
if (count > val[0]) {LED_PORT &=~(1<<0);} else {LED_PORT |= (1<<0);}
if (count > val[1]) {LED_PORT &=~(1<<1);} else {LED_PORT |= (1<<1);}
if (count > val[2]) {LED_PORT &=~(1<<2);} else {LED_PORT |= (1<<2);}
if (count > val[3]) {LED_PORT &=~(1<<3);} else {LED_PORT |= (1<<3);}
if (count > val[4]) {LED_PORT &=~(1<<4);} else {LED_PORT |= (1<<4);}
if (count > val[5]) {LED_PORT &=~(1<<5);} else {LED_PORT |= (1<<5);}
if (count > val[6]) {LED_PORT &=~(1<<6);} else {LED_PORT |= (1<<6);}
// if (count > val[7]) {LED_PORT &=~(1<<7);} else {LED_PORT |= (1<<7);}// z tym tez dziwnie sie zachowuje
LED_PORT |=(1<<7); //jeżeli to skasuje to PWM dziwnie się zachowuje
if (count==64) {count = 1;} else {count++;}
}Odczyt wartości val następuje w przerwaniu USARTa. Co mogę robić nie tak? dlaczego tak się dzieje?
Proszę o pomoc.
Pozdrawiam,
Vampir8