Witam. oto mój programik który miał służyć do płynnej regulacji obrotów silnika DC.Literka "a" miała zwiększać obroty a literka "z" zmiejszać. Ogólnie przerwanie od RS-a jest bo zapala się dioda na porcie B0 ale tak jakby program sie potem wieszał bo dioda powinna się wygasić w petli głównej a tego nie robi.
oto jedyne ostrzeżenie jakie daje mi avr-studio
Procek attiny 2313 prędkość transmisji 2400b/s
Prosiłbym o jakąś wskazówkę co robię źle??
Pozdrawiam
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#define fcpu 4000000 //czestotl oscylatora
#define baud 9600
#define ubbr fcpu/((16*baud)-1)
#include <avr\io.h>
#include <stdio.h>
#include <inttypes.h>
#include <avr\pgmspace.h>
#include<avr\interrupt.h>
char volatile komenda;
char volatile fodbznak=0;
volatile char dana;
SIGNAL(SIG_UART_RECV)
{
sbi(PORTB,0);
komenda=UDR;
fodbznak=1;
}
void czekaj (unsigned long zt)
{
#define tau 10.38
//int zt1;
for(;zt>0;zt--)
{
//for(zt1=0; zt1<255; zt1++);
//{
asm("nop");
// }
}
}
int main(void)
{
//int odniesienie=5;
union
{
unsigned int pwm;
unsigned char pwmc[2];
}volatile upwm;
DDRB=0xff;
PORTB=0b00000001;
DDRD=0x02;
PORTD=0x02;
TCCR1A=1<<COM1A1|1<<1<<WGM10;
TCCR1B=1<<CS11|1<<CS10;//
TCNT1L=0x00;//wstepne ustawienie wartosci
TCNT1H=0x00;
UBRRH=0;
UBRRL=103;
UCSRB=1<<RXCIE|1<<TXCIE|1<<RXEN;
// UCSRC=1<<USBS|3<<UCSZ0;
sei();
upwm.pwm=50;
while(1)
{
//if(bit_is_set(UCSRA,RXC))
// {
// odbior(dana);
// }
if(fodbznak)
{
fodbznak=0;
switch (komenda)
{
case 'a':
upwm.pwm++;
if(upwm.pwm>255)
{
upwm.pwm=255;
}
czekaj(100*tau);
break;
case'z':
upwm.pwm--;
if(upwm.pwm>255)
{
upwm.pwm=0;
}
czekaj(100*tau);
break;
}
}
OCR1A=upwm.pwm;
}
}
oto jedyne ostrzeżenie jakie daje mi avr-studio
../pwm-rs232.c:25: warning: 'SIG_UART_RECV' appears to be a misspelled signal handler
Procek attiny 2313 prędkość transmisji 2400b/s
Prosiłbym o jakąś wskazówkę co robię źle??
Pozdrawiam