Skocz do zawartości

[C] Podstawowe pytanie o program


matt90

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;
	}
}
}
Link do komentarza
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 😉

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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;
	}
}
}
Link do komentarza
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.

Link do komentarza
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

Link do komentarza
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)

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.