matt90 Napisano Grudzień 26, 2012 Udostępnij Napisano Grudzień 26, 2012 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; } } }
simoon87 Grudzień 26, 2012 Udostępnij Grudzień 26, 2012 if (PINC && 0x01) w tego typu miejscach powinno być if (PINC & 0x01)
matt90 Grudzień 26, 2012 Autor tematu Udostępnij Grudzień 26, 2012 a reszta jest dobrze? Bo nadal nie działa..
piotreks-89 Grudzień 26, 2012 Udostępnij Grudzień 26, 2012 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
matt90 Grudzień 26, 2012 Autor tematu Udostępnij Grudzień 26, 2012 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; } } }
Hudyvolt Grudzień 26, 2012 Udostępnij Grudzień 26, 2012 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.
matt90 Grudzień 26, 2012 Autor tematu Udostępnij Grudzień 26, 2012 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
Nawyk Grudzień 26, 2012 Udostępnij Grudzień 26, 2012 Do L298 powinieneś zastosować diody zabezpieczające - zapoznaj się z dokumentacją układu
matt90 Grudzień 26, 2012 Autor tematu Udostępnij Grudzień 26, 2012 Do L298 powinieneś zastosować diody zabezpieczające - zapoznaj się z dokumentacją układu Mam diody scottyego na wyjściach OUT
Hudyvolt Grudzień 27, 2012 Udostępnij Grudzień 27, 2012 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)
Pomocna odpowiedź
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ę »