tabbi Napisano Grudzień 16, 2010 Udostępnij Napisano Grudzień 16, 2010 Witam, mam problem z sterowanie silników przez mostek H, w układzie mam użytą Atmege 8 układ mam podłączony jak z przykładu: https://www.forbot.pl/forum/topics20/przepis-na-robota-w-pelni-programowalny-line-follower-vt2356.htm Jednak gdy stosuje kod by zobaczyc czy sie kreca silniki i zatrzymuja: DDRD = 0xff; DDRB = 0xff; PORTB |= _BV(1); PORTB |= _BV(2); PORTD |= _BV(0); // lewy silnik w lewo ON _delay_ms(10000); PORTD &= ~_BV(0); // lewy silnik w lewo OFF PORTD |= _BV(1); // lewy silnik w prawo ON _delay_ms(10000); PORTD &= ~_BV(1); // lewy silnik w prawo OFF PORTD |= _BV(2); // prawy silnik w lewo ON _delay_ms(10000); PORTD &= ~_BV(2); // prawy silnik w lewo OFF PORTD |= _BV(3); // prawy silnik w prawo ON _delay_ms(10000); PORTD &= ~_BV(3); // prawy silnik w prawo OFF Tak sa podlaczone oba scalaki: L293DNE AtMega8 z 1-2EN do PB1 z 1A do PD0 z 2A do PD1 z 3-4EN do PB2 z 3A do PD2 z 4A do PD3 Jednak na wyjscie do silników żadne napiecie nie jest dostarczane. Co jest źle ?? Link do komentarza Share on other sites More sharing options...
RaV Grudzień 16, 2010 Udostępnij Grudzień 16, 2010 A czy na portach µkontrolera napięcie się zmienia? Czy masz ustawioną zmienną #define F_CPU 1000000L /* Częstotliwość kwarcu */ standardowo ATmega8 ma ustawioną częstotliwość 1000000MHz, jeśli nie zmieniałeś fuse bitów. I dla ułatwienia mierzenia blok zmieniający stany wyjść dałbym w nieskończoną pętle, bo tak przez 40 s masz różne stany, a potem już tylko 0 aż do resetu procka. DDRD = 0xff; DDRB = 0xff; PORTB |= _BV(1); PORTB |= _BV(2); while(1) { PORTD |= _BV(0); // lewy silnik w lewo ON _delay_ms(10000); PORTD &= ~_BV(0); // lewy silnik w lewo OFF PORTD |= _BV(1); // lewy silnik w prawo ON _delay_ms(10000); PORTD &= ~_BV(1); // lewy silnik w prawo OFF PORTD |= _BV(2); // prawy silnik w lewo ON _delay_ms(10000); PORTD &= ~_BV(2); // prawy silnik w lewo OFF PORTD |= _BV(3); // prawy silnik w prawo ON _delay_ms(10000); PORTD &= ~_BV(3); // prawy silnik w prawo OFF } Link do komentarza Share on other sites More sharing options...
tabbi Grudzień 16, 2010 Autor tematu Udostępnij Grudzień 16, 2010 Witam, tak mam to w petli i mam zdefiniowaną częstotliwość kwarcu. Co do mierzenia to teraz na obu pinach na wyjsciu do silniczków mam napiecie równe 0.1 ? co to oznacza powinno być okolo 6 V skoro mam 6 V zasilania Link do komentarza Share on other sites More sharing options...
RaV Grudzień 16, 2010 Udostępnij Grudzień 16, 2010 Maksymalne napięcie zasilania AVR to 5,5V Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
tabbi Grudzień 16, 2010 Autor tematu Udostępnij Grudzień 16, 2010 Mierzylem ten mostek i mam napiecie rowne 5.3 Volta na pinach które są połączone z Atmega czyli: PORTB |= _BV(1); PORTB |= _BV(2); i na pinie który łączy mostek z zasilaniem. reszta pinów jest bez napiecia również te trzy pozostałe które są podłączone do Atmegi i którymi mam sterować CZEMU ?? Link do komentarza Share on other sites More sharing options...
RaV Grudzień 16, 2010 Udostępnij Grudzień 16, 2010 Znalazłem coś takiego: Dokumentacja biblioteki avr-libc, opis funkcji _delay_ms: Cytat: The maximal possible delay is 262.14 ms / F_CPU in MHz. źródło: http://www.elektroda.pl/rtvforum/topic843037.html Znalazłem to w dokumentacji: Function Documentation void _delay_ms ( double __ms ) Perform a delay of __ms milliseconds, using _delay_loop_2(). The macro F_CPU is supposed to be defined to a constant defining the CPU clock frequency (in Hertz). The maximal possible delay is 262.14 ms / F_CPU in MHz. When the user request delay which exceed the maximum possible one, _delay_ms() provides a decreased resolution functionality. In this mode _delay_ms() will work with a resolution of 1/10 ms, providing delays up to 6.5535 seconds (independent from CPU frequency). The user will not be informed about decreased resolution. Czyli to opóźnienie może sprawiać problem, gdyż masz 10 sekund. Można spróbować w pętli, powiedzmy: for(char i = 0; i < 50; i++) _delay_ms(200); może zadziała Link do komentarza Share on other sites More sharing options...
tabbi Grudzień 16, 2010 Autor tematu Udostępnij Grudzień 16, 2010 NIestety dalej to samo zauwazylem ze te 0.1 Volta wyskakiwalo jak byl programator podlaczony gdy go odlaczylem to swieci niestety 0.0V Link do komentarza Share on other sites More sharing options...
RaV Grudzień 16, 2010 Udostępnij Grudzień 16, 2010 A jakbyś na chwile dla testów zamiast pętli wpisał PORTD = 0xff; i wtedy zmierzyć napięcie? Link do komentarza Share on other sites More sharing options...
tabbi Grudzień 16, 2010 Autor tematu Udostępnij Grudzień 16, 2010 Teraz mam zasilenie idpowiednio na kazdym Pinie w Atmedze z PortuD a na mostku H Pin 1,7,8,15,10 z czego 8 bezposrendio do zasilania 1 i 9 do PB1 i PB2 a 7 i 10, 15 PD2 i PD1 PD0 wiec sie zgadza ale niestety zasilania na wyjsciu do silników nie ma Link do komentarza Share on other sites More sharing options...
RaV Grudzień 16, 2010 Udostępnij Grudzień 16, 2010 Mierzysz silniki napięcie na wyjściu do silników względem masy, czy pomiędzy jednym a drugim? Bo jeśli hardware jest ok, to między nimi a masą (- zasilania) powinno być te 6V, natomiast między jednym a drugim powinno być zero: jeden ma 6V drugi ma 6V wiec różnica potencjałów 0V,ale jeśli względem masy jest 0, to coś nie tak z mostkiem chyba... Link do komentarza Share on other sites More sharing options...
tabbi Grudzień 16, 2010 Autor tematu Udostępnij Grudzień 16, 2010 wszystkie napiecia sa na mostku te co maja byc polaczeniem z atmegi ale przy wyjsciu mostka h do silniczkow juz tych napiec nie ma Link do komentarza Share on other sites More sharing options...
Armir Grudzień 17, 2010 Udostępnij Grudzień 17, 2010 Sprawdź czy dochodzi zasilanie mostka. Link do komentarza Share on other sites More sharing options...
tabbi Grudzień 17, 2010 Autor tematu Udostępnij Grudzień 17, 2010 Witam, zasilanie na mostku dochodzi wszystkie piny odpowiedzialne za polaczenie z Atmega maja takze napiecie. Tylko te piny ktore wychodza z mostka do zasilania silniczkami sa zerowe w Programie mam ustalony tylko DDRD = 0xff; DDRB = 0xff; while(1){ Portd=0xff PORTB |= _BV(1) PORTB |= _BV(2) } [ Dodano: 17-12-2010, 13:04 ] Teraz znalazłem może błąd się wkradł w schemat ideowy, z przepisu na robota. BO jak sprawdziłem mostek L293D http://www.datasheetcatalog.org/datasheet/texasinstruments/l293d.pdf To na 16 pinie jest zasilanie VCC2 i to nie jest podłączone (VCC1 jest podłączone do pinu 8)? może w tym błąd Bo w schemacie z artykułu przepis na robota 16 pin jest w ogole nie użyty. Link do komentarza Share on other sites More sharing options...
Armir Grudzień 17, 2010 Udostępnij Grudzień 17, 2010 Pin 16 to albo zasilanie logiki albo silników musi być podłączony. Link do komentarza Share on other sites More sharing options...
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ę »