Skocz do zawartości
Zaloguj się, aby obserwować  
matt90

[C] Podstawowe pytanie o program

Pomocna odpowiedź

witam, dopiero uczę się języka C i mam problem z programem, ponieważ nie działa 🙂 Zerknijcie czy to co napisalem jest dobrze, chciałem żeby po złapaniu przeszkody przez czujnik sharp-a wlaczyl się silnik

#define F_CPU 16000000L
#include <avr/io.h>
#include <util/delay.h>


int main(void)
{
// wejscia
DDRC= 0x00; //wejscia
PORTC= 0x3C; // wejscia cny, sharpy
DDRD= 0x00; // wejscie przycisk
PORTD= 0x01; // wejscie przycisk na 2 nozce, podciagniety do vcc
//wyjscia
DDRD= 0xf0; //mostek
/* 
PD4- prawy przod
PD5- lewy tyl
PD6- prawy tyl
PD7- lewy przod
PC4- sharp prawy
PC5- sharp lewy
*/

if (PINC && 0x01)
{
	    while(1) // program
	{
		if (PINC && 0x20)
		PORTD |= 0x10;
	}
}
}

Udostępnij ten post


Link to post
Share on other sites
if (PINC && 0x01)

w tego typu miejscach powinno być

if (PINC & 0x01)

Udostępnij ten post


Link to post
Share on other sites

Dawno w C nie pisałem i muszę sobie przypomnieć, ale wydaje mi się, że kierunek na wejściowy ustawia się w taki sposób: DDRx &= ~

Poza tym mógłby kolega wartości wpisywane do zmiennych/rejestrów itd. pisać binarnie? Wstyd się przyznać, ale do dziś nie opanowałem techniki zapisu liczb w systemie szesnastkowym. Wydaje mi się również, że większości forumowiczów lepiej się czyta i pisze liczby zapisane w systemie binarnym 😉

Udostępnij ten post


Link to post
Share on other sites

A ta komenda &= przypadkiem nie wyłącza? 🙂

0x01 włącza PC0 gdzie jest przycisk

0x20 wlacza PC5

0x10 wlacza PD4 🙂

[ Dodano: 26-12-2012, 23:03 ]

Rejestry w postaci binarnej 🙂

/*
#define F_CPU 1000000L
#include <avr/io.h>
#include <util/delay.h>


int main(void)
{
// wejscia
DDRC= 00000000; //wejscia
PORTC= 00111100; // wejscia cny, sharpy
DDRD= 00000000; // wejscie przycisk
PORTD= 00000001; // wejscie przycisk na 2 nozce, podciagniety do vcc
//wyjscia
DDRD= 11110000; //mostek
/* 
PD4- prawy przod
PD5- lewy tyl
PD6- prawy tyl
PD7- lewy przod
PC2- cny lewy
PC3- cny prawy
PC4- sharp prawy
PC5- sharp lewy
*/
{
	    while(1) // program
	{
		if (PINC & 00100000)
		PORTD |= 00010000;
	}
}
}

Udostępnij ten post


Link to post
Share on other sites

jeśli chcesz stosować notację binarną to musisz dopisywać 0b.... np.

DDRC = 0b00000000;

do sprawdzania wartości na pinie polecam te funkcje i przypominam, że to czy na pinie jest 1 czy 0 zależy nie od napięcia przyłożonego do nóżki tylko od tego czy płynie przez nią prąd (1 płynie, 0 - nie płynie)

bit_is_set(PINC, 4); //zwraca prawdę gdy na pinie PC4 jest stan wysoki
bit_is_clear(PINC, 4); //zwraca prawdę gdy na pinie PC4 jest stan niski

co do przejrzystości kodu to polecam również

PORTD |= (1<<PD4) //ustawia stan wysoki na pinie PD4
PORTD &= ~(1<<PD4) //ustawia stan niski na pinie PD4

nie wiemy jak masz podłączony mostek, ale oprócz podawania sygnałów kierunkowych musisz dać stan wysoki na enable mostka.

Udostępnij ten post


Link to post
Share on other sites

Mój mostek

Wiem, że może trochę o dużo proszę, ale czy mógłby mi ktoś napisać kod żeby po wykryciu przeszkody włączył się silnik. Chciałbym to dla przykładu jak ma to wyglądać,a ja na tej podstawie napiszę resztę. Nigdy nie pisałem w C i jest to trochę trudne dla mnie

Udostępnij ten post


Link to post
Share on other sites

Do L298 powinieneś zastosować diody zabezpieczające - zapoznaj się z dokumentacją układu

Udostępnij ten post


Link to post
Share on other sites
Do L298 powinieneś zastosować diody zabezpieczające - zapoznaj się z dokumentacją układu

Mam diody scottyego na wyjściach OUT

Udostępnij ten post


Link to post
Share on other sites
PORTD |= (1<<PD4);
PORTD &= ~(1<<PD5);         //ustawianie kierunku obrotów
while(1)
{
   if ( bit_is_set(PINC, 4) )     //sprawdzanie stany sharpa
      PORTB |= (1<<PB2);     //włączenie silnika sygnałem enable
   else 
      PORTB &= ~(1<<PB2); //wyłączenie silnika
}

oczywiście do tego musisz dopisać konfigurację portów, ale to już masz ogarnięte (musisz dodać PORTB na którym masz sygnały enable)

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

Zaloguj się, aby obserwować  

×
×
  • Utwórz nowe...