denna delen som inte funkar: har alltså koppas in den på pin 0 och 1 på PORTD
Kod: Markera allt
if(PIND & 0x01){ //kollar om pin 1 är 1 isåfall
while(temp == 0 || PIND & 0x02){ // vänta här medans temp == 0 eller pin 2 är 1
if(PIND & 0x02){ // kolalr om pin 2 är 1 i så fall sätt temp till 1
temp =1;
}
}
temp=0; //sätter temp till 0 då den har kommit ut loopen och
spwm++; // ökar spwm med 1
test++; //ökar test med 1
}
if(PIND & 0x02){
while(temp==0 || PIND & 0x01){
if(PIND & 0x01){
temp =1;
}
}
temp=0;
spwm--;
test--;
}
hela koden om det nu hjälpter
Kod: Markera allt
#define F_CPU 8000000
#include <util/delay.h>
#include <avr/interrupt.h>
#define bit_on(BYTE, BIT) BYTE |= 1 << BIT;
#define bit_off(BYTE, BIT) BYTE &= ~(1 << BIT);
volatile int rpwm, gpwm, bpwm,spwm, antal,test=100;
volatile int time=0;
volatile char led_out=0;
int temp =0;
int main (void)
{
sei();
rpwm=5;
gpwm=5;
bpwm=255;
spwm=170;
antal=255;
DDRC=0xFF;
PORTC=0x00;
DDRB=0xFF;
PORTB=0x00;
DDRD = 0x00;
PORTD = 0x00;
//Timer0 8Bit setup, ansvarig för PWM
bit_on(TCCR0, CS00);
bit_off(TCCR0, CS01);
bit_off(TCCR0, CS02);
TCNT0 = 0x00;
bit_on(TIMSK, TOIE0);
while(1)
{
if(PIND & 0x01){
while(temp == 0 || PIND & 0x02){
if(PIND & 0x02){
temp =1;
}
}
temp=0;
spwm++;
test++;
}
if(PIND & 0x02){
while(temp==0 || PIND & 0x01){
if(PIND & 0x01){
temp =1;
}
}
temp=0;
spwm--;
test--;
}
PORTB=test;
_delay_ms(20);
while(rpwm<250){
rpwm++;
bpwm--;
_delay_ms(5);
}
while(gpwm<250){
gpwm++;
rpwm--;
_delay_ms(5);
}
while(bpwm<250){
bpwm++;
gpwm--;
_delay_ms(5);
}
}
}
SIGNAL(TIMER0_OVF_vect)
{
TCNT0=256;
time++;
if(time>=antal) time=0;
if(time>=rpwm)
{
bit_off(led_out,0);
}
else
{
bit_on(led_out,0);
}
if(time>=gpwm)
{
bit_off(led_out,2);
}
else
{
bit_on(led_out,2);
}
if(time>=bpwm)
{
bit_off(led_out,1);
}
else
{
bit_on(led_out,1);
}
if(time>=spwm)
{
bit_off(led_out,3);
}
else
{
bit_on(led_out,3);
}
PORTC = led_out;
}
EDIT: Kommentera nu koden som jag tror är fel