Skocz do zawartości

Co jest źle w tym programie do silników?


polopoiu

Pomocna odpowiedź

Napisałem program do obsługi silników.

Program się kompiluje bez problemów, ale silniki nie reagują.Podaje kod:

main.c

#include <avr/io.h>
#include <avr/interrupt.h>

#include "silniki.h"

int main(void){

void silniki_init(void);

   DDRB &=~(1<<PB6);
   PORTB |=(1<<PB6);

   while(1){
   jazda_przod(50, 50, 1000);
  	jazda_tyl(50, 50, 1000);
   }
}

silniki.c

#include <avr/io.h>
#include <avr/interrupt.h>

#include "silniki.h"

volatile uint8_t silnik_L, silnik_P;
volatile uint16_t Timer1;



void silniki_init(void){
TCCR2 |= (1<<WGM21); //tryb CTC
TCCR2 |= (1<<CS20); //preskaler 1
OCR2=200;
TIMSK |= (1<<OCIE2);

sei();

DDRB|=S1_L|S2_L|S1_P|S2_P;
}


ISR(TIMER2_COMP_vect)
{
   DDRB |=(1<<PB0)|(1<<PB1);
   PORTB|=(1<<PB0)|(1<<PB1);

   static uint8_t czas_silnik=0;

  static uint8_t cnt=1;
  if(cnt<=silnik_L)PORTB|=(1<<PB0);else PORTB &= ~(1<<PB0);
  if(cnt<=silnik_P)PORTB|=(1<<PB1);else PORTB &= ~(1<<PB1);

  cnt++;
  if(cnt>100)cnt=1;

  ++czas_silnik;
  if(czas_silnik>40) czas_silnik=0;

  uint16_t x;
  x=Timer1;
  if(x && (czas_silnik==40)) Timer1= --x;

}

void jazda_przod(uint8_t L_silnik, uint8_t P_silnik, uint16_t czas){
Timer1=czas;
   while(Timer1){
   silnik_L=L_silnik;
   PORTB &= ~S1_L;
   PORTB |= S2_L;

   silnik_P=P_silnik;
   PORTB &= ~S1_P;
   PORTB |= S2_P;
   }
}
void jazda_tyl(uint8_t L_silnik, uint8_t P_silnik, uint16_t czas){
Timer1=czas;
while(Timer1){
   silnik_L=L_silnik;
   PORTB |= S1_L;
   PORTB &= ~S2_L;

   silnik_P=P_silnik;
   PORTB |= S1_P;
   PORTB &= ~S2_P;
   }
}
void obrot_lewo(uint8_t L_silnik, uint8_t P_silnik, uint16_t czas){
Timer1=czas;
while(Timer1){
   silnik_L=L_silnik;
   PORTB |= S1_L;
   PORTB &= ~S2_L;

   silnik_P=P_silnik;
   PORTB &= ~S1_P;
   PORTB |= S2_P;
   }
}
void obrot_prawo(uint8_t L_silnik, uint8_t P_silnik, uint16_t czas){
Timer1=czas;
while(Timer1){
   silnik_L=L_silnik;
   PORTB &= ~S1_L;
   PORTB |= S2_L;

   silnik_P=P_silnik;
   PORTB |= S1_P;
   PORTB &= ~S2_P;
   }
}


silniki.h

#ifndef SILNIKI_H_
#define SILNIKI_H_

#define S1_L (1<<PB2)
#define S2_L (1<<PB3)
#define S1_P (1<<PB4)
#define S2_P (1<<PB5)

void silniki_init(void);

void jazda_przod(uint8_t L_silnik, uint8_t P_silnik, uint16_t czas);
void jazda_tyl(uint8_t L_silnik, uint8_t P_silnik, uint16_t czas);
void obrot_lewo(uint8_t L_silnik, uint8_t P_silnik, uint16_t czas);
void obrot_prawo(uint8_t L_silnik, uint8_t P_silnik, uint16_t czas);

#endif /* SILNIKI_H_ */

Prosze o szybką odpowiedź.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.