@KrzaQ2: w sumie tak. Atmega 644PA. 3 ostatnie piny, PD6, PD5, PD4. PD6 to bd prędkość obrotowa początkowo, bo potem do PWMa podłączę. Ale skupmy się na PD5 i PD4. Daję tam synał z mostka, sygnał wyboru kierunku kręcenia się silnika. I teraz pytanie. Jak to opisać, aby po 500ms zmieniał kierunek?
@Thexil: Jakkolwiek zmieniasz ten kierunek możesz na przykład wykorzystać tę konstrukcję
int kierunek = 1; //1 prawo 0 lewo na przykład while(1){ if(kierunek){ kod odpowiadający za obrót w prawo; } else { kod odpowiadający za obrót w lewo; } kierunek = !kierunek; delayms(500); }
//lub zamiast while(1) i zmiennej przed pętlą to for(int kierunek = 1;;kierunek = !kierunek)
@Thexil: Z logicznego punktu widzenia to kod powinien działać jeżeli na przykład PORTD = 1<<PD5; oznacza puszczenie sygnału na dany pin ale to pewnie jakoś inaczej działa w mikrokontrolerach.
# define F_CPU 8000000UL
#include
#include
int main(void)
{
DDRD = 1<
int kierunek = 1; //1 prawo 0 lewo na przykład
while(1){
if(kierunek){
kod odpowiadający za obrót w prawo;
} else {
kod odpowiadający za obrót w lewo;
}
kierunek = !kierunek;
delayms(500);
}
//lub zamiast while(1) i zmiennej przed pętlą to for(int kierunek = 1;;kierunek = !kierunek)
# define FCPU 10000000UL //FCPU=10MHz
#include
#include
int main(void)
{
PORTD ^= 1<
Ciekawe dlaczego poprzedni nie działał. ( ͡° ʖ̯ ͡°)
Dlaczego pomijasz ustawianie wartości początkowych na pinach PD5 i PD4?
# define FCPU 10000000UL //FCPU=10MHz
#include
#include
int main(void)
{
PORTD = 1<
A taka funkcja main? Czy działa?
PORTD = 1<<PD6;
PORTD = 1<<PD5;
PORTD = 0<<PD4;
//delayms(500); lub z tym
while (1)
{
//PORTD = 1<<PD6; //Może to w łajlu sprawia, że jest ciągłe 5v na tym pinie?
PORTD &= 0<<PD5;
PORTD &= 0<<PD4;
delayms(500);
}
@Wina_Segmentacji: przy tym wgl nie mam sygnału na PD6 ani PD5
# define FCPU 10000000UL //FCPU=10MHz
#include
#include
int main(void)
{
PORTD = 1<