Skocz do zawartości

tabbi

Users
  • Zawartość

    13
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    1

tabbi zajął 1. miejsce w rankingu.
Data osiągnięcia: 20 stycznia 2011.

Treści użytkownika tabbi zdobyły tego dnia najwięcej polubień!

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Kraków

Osiągnięcia użytkownika tabbi

Starszy odkrywca

Starszy odkrywca (5/19)

  • Za 5 postów
  • Młodszy Juror
  • To już rok!
  • To już 5 lat!
  • To już 10 lat!

Odznaki

1

Reputacja

  1. Witam, chciałbym zaprezentować robota line followera, którego stworzyliśmy razem z kolegą. Nie jest może to "najlepszy robot na świecie" ale chodziło o przyjemne zapoznanie się ze światem mikrokontrolerów, a także w dużej mierze Elektroniki w praktyce. Przedstawiam Raport, który zawiera zdjecia, opis tworzenia,problemy podczas projektu, kod programu. Dla tych co chcą zrobić swojego pierwszego robota, myśle że raport troche wyjaśnia z czym trzeba się zmierzyć - bardziej chodziło nam żeby to działało 😋 a nie zwyciężało Turnieje. Całkowicie open source do dowolnego użytku 😋 Tylko proszę o wyrozumiałość 😋. Gdy lutuje się ponad 4 godziny i okazuje się że trzeba na nowo płytkę robić to już samo za siebie jest karą za grzechy 😋 __________ Komentarz dodany przez: Nawyk Następnym razem dodawaj przynajmniej jedno zdjęcie jako osobny załącznik, a typ robota wybieraj z listy rozwijanej przy nazwie tematu. SM_Raport.doc
  2. Napisałem program wykorzystujący adc w ATMEGA8, pytanie czy dobry jakieś wskazówki ? Jak dotej pory posługiwałem się na ifach i problem był taki że jeden czujnik lepiej wykrywał linie a drugi gorzej i dlatego postawiony na białej kartce krecil sie w kołko jeden czujnik CNY70 odbijal a drugi juz nie. Czy mniej wiecej na tym ma polegac i wyrównać wykrywanie linii przez 3 czujniki ? /* ATmega 8MHz */ #define F_CPU 1000000L #include <avr/io.h> #include <util/delay.h> int main(void) { //wyjscia także do Mostka DDRD=0xff; //wyjscia Mostka H DDRB=0xff; //wejscia czujnikow DDRC=0x00; PORTB |= _BV(1); PORTB |= _BV(2); //ustawienia ADC //ADMUX = 0; //MUX = 0 ADCSRA |= (1<<ADEN); //Enable ADC //ADCSRA |= (1<<ADSC); //start conversion //if(bit_is_set(ADCSRA,ADIF)); //set gdy koniec konwersji ADCSRA |= (1<<ADPS1)|(1<<ADPS0); //125kHz dla [b]1MHz[/b] ADMUX |= (1<<ADLAR)|(1<<REFS0);//left adjusted/ read onlu ADCH, AVcc jako napięcie odniesienia while(1){ //2 lewy czujnik //4 srodkowy czujnik //5 prawy czujnik uint8_t p5, p4,,p2 czulosc; czulosc = 128; //POCZĄTEK SPRAWDZANIA CZUJNIKA PODŁĄCZONEGO DO PORTU C5 ADMUX = (PC5 + 96); //+96 aby ustawić ADLAR i REFS !!!!!WYBÓR CZUJNIKA ADCSRA |= (1<<ADSC); //start conversion while(bit_is_clear(ADCSRA,ADIF)); //czekaj na koniec pomiaru p5 = ADCH; if(ADCH > czulosc){ //jeśli zmierzone napięcie jest większe niż ustawiona czułość //to znaczy że pod czujnikiem jest czarna linia //czujnik wyrył czarną linię //skrecamy w prawo PORTD |= _BV(2); // LEWY silnik w przod ON PORTD &= ~_BV(0); // PRAWY SILNIK W przod OFF } else{ //czujnik nie wykrył czarnej linii //wylaczamy silniki PORTD &= ~_BV(2); // LEWY silnik w przod OFF PORTD &= ~_BV(0); // PRAWY SILNIK W przod ON } //POCZĄTEK SPRAWDZANIA CZUJNIKA PODŁĄCZONEGO DO PORTU C2 ADMUX = (PC2 + 96); //+96 aby ustawić ADLAR i REFS !!!!!WYBÓR CZUJNIKA ADCSRA |= (1<<ADSC); //start conversion while(bit_is_clear(ADCSRA,ADIF)); //czekaj na koniec pomiaru p2 = ADCH; if(ADCH > czulosc){ //skrecamy w lewo PORTD &= ~_BV(2); // LEWY silnik w przod OFF PORTD |= _BV(0); // PRAWY SILNIK W przod ON } else{ //czujnik nie wykrył czarnej linii //wylaczamy silniki PORTD &= ~_BV(2); // LEWY silnik w przod OFF PORTD &= ~_BV(0); // PRAWY SILNIK W przod ON } //POCZĄTEK SPRAWDZANIA CZUJNIKA PODŁĄCZONEGO DO PORTU C4 ADMUX = (PC4 + 96); //+96 aby ustawić ADLAR i REFS !!!!!WYBÓR CZUJNIKA ADCSRA |= (1<<ADSC); //start conversion while(bit_is_clear(ADCSRA,ADIF)); //czekaj na koniec pomiaru p2 = ADCH; if(ADCH > czulosc){ //jedziemy prosto PORTD |= _BV(2); // LEWY silnik w przod ON PORTD |= _BV(0); // PRAWY SILNIK W przod ON } else{ //czujnik nie wykrył czarnej linii //wylaczamy silniki PORTD &= ~_BV(2); // LEWY silnik w przod OFF PORTD &= ~_BV(0); // PRAWY SILNIK W przod ON } czulosc = (p5/2)+(p4/2)+(p2/2); /* // STEROWANIE CZUJNIKAMI if((PINC & 1 << 5) && (PINC & 1 << 4) && (PINC & 1 << 2)) { PORTD &= ~_BV(2); // LEWY silnik w przod OFF PORTD &= ~_BV(0); // PRAWY SILNIK W przod ON } if(!(PINC & 1 << 5) && !(PINC & 1 << 4) && !(PINC & 1 << 2)) { PORTD &= ~_BV(2); // LEWY silnik w przod OFF PORTD &= ~_BV(0); // PRAWY SILNIK W przod ON } //skrecanie w lewo if(!(PINC & 1 << 5) && !(PINC & 1 << 4) && (PINC & 1 << 2)) { PORTD &= ~_BV(2); // LEWY silnik w przod OFF PORTD |= _BV(0); // PRAWY SILNIK W przod ON } //gdy tylko z lewej wykrywa czujnik if(!(PINC & 1 << 5) && (PINC & 1 << 4) && (PINC & 1 << 2)) { PORTD &= ~_BV(2); // LEWY silnik w przod OFF PORTD |= _BV(0); // PRAWY SILNIK W przod ON } //skrecanie w prawo if((PINC & 1 << 5) && !(PINC & 1 << 4) && !(PINC & 1 << 2)) { PORTD |= _BV(2); // LEWY silnik w przod ON PORTD &= ~_BV(0); // PRAWY SILNIK W przod OFF } // gdy tylko z prawej wykrywa czujnik if((PINC & 1 << 5) && (PINC & 1 << 4) && !(PINC & 1 << 2)) { PORTD |= _BV(2); // LEWY silnik w przod ON PORTD &= ~_BV(0); // PRAWY SILNIK W przod OFF } */ } } Program działa wszystko okej. ADC pomogło w kalibracji czujników
  3. Witam, po wielu trudach udało się wreszcie odpalić pierwszego robota cały działa jednak jest problem z kodem otóż nie działa jak na leży, gdyby były możliwe jakieś wskazówki co do kodu - zamieszczam kod który teraz obsługuje robota. /* przykład 2.1 "leds.c" */ /* 8 diod LED przłączonych do portu D */ /* ATmega 1MHz */ #define F_CPU 1000000L #include <avr/io.h> #include <util/delay.h> int opoznienie(){ for(char i = 0; i < 50; i++) _delay_ms(10); return 0; } int main(void) { //wyjscia także do Mostka DDRD=0xff; //wyjscia Mostka H DDRB=0xff; DDRC=0x00; //wejscia CZUJNIKÓW // DDRC = 0x00; PORTB |= _BV(1); PORTB |= _BV(2); while(1){ //2 lewy czujnik //4 srodkowy czujnik //5 prawy czujnik // STEROWANIE CZUJNIKAMI //skrecanie w lewo if(!(PINC & 1 << 5) && !(PINC & 1 << 4) && (PINC & 1 << 2)) { PORTD &= ~_BV(2); // LEWY silnik w przod OFF _delay_ms(40); PORTD |= _BV(0); // PRAWY SILNIK W przod ON } //gdy tylko z lewej wykrywa czujnik if(!(PINC & 1 << 5) && (PINC & 1 << 4) && (PINC & 1 << 2)) { PORTD &= ~_BV(2); // LEWY silnik w przod OFF _delay_ms(40); PORTD |= _BV(0); // PRAWY SILNIK W przod ON } //skrecanie w prawo if((PINC & 1 << 5) && !(PINC & 1 << 4) && !(PINC & 1 << 2)) { PORTD |= _BV(2); // LEWY silnik w przod ON _delay_ms(40); PORTD &= ~_BV(0); // PRAWY SILNIK W przod OFF } // gdy tylko z prawej wykrywa czujnik if((PINC & 1 << 5) && (PINC & 1 << 4) && !(PINC & 1 << 2)) { PORTD |= _BV(2); // LEWY silnik w przod ON _delay_ms(40); PORTD &= ~_BV(0); // PRAWY SILNIK W przod OFF } /* //jesli nie wykrywa linii krecimy sie w kolko do tylu if(!(PINC & 1 << 5) && !(PINC & 1 << 3) && !(PINC & 1 << 4)) { PORTD |= _BV(3); // LEWY silnik w tyl ON _delay_ms(40); PORTD &= ~_BV(0); // PRAWY SILNIK W przod OFF } */ // PRAWY SILNIK // PORTD |= _BV(0); // przod // _delay_ms(10000); // PORTD &= ~_BV(0); // prawy silnik w przod off // PORTD |= _BV(1); // tyl //_delay_ms(1000); //PORTD &= ~_BV(1); // lewy silnik w tyl OFF /* //LEWY SILNIK PORTD |= _BV(2); // przod _delay_ms(10000); PORTD &= ~_BV(2); // prawy silnik w przod OFF PORTD |= _BV(3); // tyl _delay_ms(10000); PORTD &= ~_BV(3); // prawy silnik w tyl OFF */ } } Sterownie PWM na dole, jednak problem jest w tym że na sucho robot wykrywa czarna linie na białej kartce czy to czujniki lewe czy to czujniki prawe jednak przy puszczeniu go praktycznie nie skreca w prawo i lewe w poszukiwaniu linii a raczej kreci sie ciagle w kolko. Jakby ktoś pomógł w kodzie czy to wskazówkach dotyczących kodu
  4. tabbi

    [C] Sterowanie PWM silnikami

    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.
  5. tabbi

    [C] Sterowanie PWM silnikami

    wszystkie napiecia sa na mostku te co maja byc polaczeniem z atmegi ale przy wyjsciu mostka h do silniczkow juz tych napiec nie ma
  6. tabbi

    [C] Sterowanie PWM silnikami

    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
  7. tabbi

    [C] Sterowanie PWM silnikami

    NIestety dalej to samo zauwazylem ze te 0.1 Volta wyskakiwalo jak byl programator podlaczony gdy go odlaczylem to swieci niestety 0.0V
  8. tabbi

    [C] Sterowanie PWM silnikami

    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 ??
  9. tabbi

    [C] Sterowanie PWM silnikami

    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
  10. 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 ??
  11. tabbi

    [C] Czujniki CNY70

    DZIEKI UDALO SIE __________ Komentarz dodany przez: Sabre Twój post łamie regulamin forum, punkt 3j, proszę o poprawienie treści.
  12. tabbi

    [C] Czujniki CNY70

    Multimetrem sprawdzałem wszystko oki, link do schematu: https://www.forbot.pl/forum/topics20/przepis-na-robota-w-pelni-programowalny-line-follower-vt2356.htm a jak sprawdzić kiedy ma być 0 V (nad biała kartką) z czujników mam 4 odnóżki i wokół zwarcia ?
  13. Witam, posiadam już gotową płytke z atmega 8 gdzie są zainstalowane czujniki CNY70 - zgodnie z schematem "Przepis na robota" Mam jednak problem z sprawdzeniem działania czujników. Pisze taki program w C: /* ATmega 1MHz */ #define F_CPU 1000000L #include <avr/io.h> #include <util/delay.h> int main(void) { //wyjscia DDRD=0xff; //wejscia z podłaczeniem do VCC DDRC = 0x00; PORTC = 0xff; while(1){ //wykrywanie w czujniku - dioda ze swieci / czujnik podpiety do PORTC=3 if(!(PINC & 0x04)){ PORTD = 0x40; _delay_ms(800); } else PORTD = 0x00; //wykrywanie w czujniku - dioda ze swieci / czujnik podpiety do PORTC=4 if(!(PINC & 0x40)) { PORTD = 0x40; _delay_ms(800); } else {PORTD = 0x00;} //wykrywanie w czujniku - dioda ze swieci / czujnik podpiety do PORTC=5 if(!(PINC & 0x10)) { PORTD = 0x40; _delay_ms(800); } else {PORTD = 0x00;} } } Dioda jest podpieta do Portu D =6; Wynik działania programu to taki że cały czas świeci dioda niezaleźnie czy przyłoże czarna kartke do czujników czy nie ? Jak sprawdzić stan czujników ?
×
×
  • 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.