Skocz do zawartości

Minisumo Haker2- worklog


Pomocna odpowiedź

No robocik prezentuje się dość interesująco. Ciekawe jak będzie się prezentował na zawodach i czy te silniczki dadzą radę. + dla Ciebie za ciekawą inną konstrukcję. Nie rozumiem zbytnio czym się różni nowa płytka od tej starszej ale to twój projekt i twoje decyzje. Jak znajdziesz więcej funduszy to radzę Ci dopracować troszkę tą płytkę o TB6612 i silniczki Pololu a tak wielki + i czekam na efekt końcowy. Pozdrawiam

Link do komentarza
Share on other sites

Dzięki Sen, płytka poprzednia była okropna kilka złych połączeń i juz zrobił się pająk, i możliwe zwarcia które mogły ukatrupić li pola o którego przy każdej próbie cholernie się boję 😕 ten robot może doczekać się co najwyżej nowych silników, ponieważ został zaprojektowany do pracy z ta przekładnią.

A z tym programem to coś dziwnego się dzieje- np w AVR studio nie mogę napisać DDRA ani PORTA, bo się nie chce skompilować. Próbowałem również z tsopem podpiętym do pb4 i dalej to samo - zero reakcji, za to w bascomie wyszystko działa śpiewjąco. Czy miał ktoś podobny problem ?

[ Dodano: 26-08-2012, 18:25 ]

#include <avr/io.h>
#include <util/delay.h>

#define czujnik (1<<PA1)


int main (void){


   DDRD=0xff;

   DDRB=0xff;
   PORTB = 0xff;

   DDRA&=~0xff;
   PORTA&=~czujnik;

   TCCR1A|=(1<<COM1A0);
   TCCR1B|=(1<<WGM13)|(1<<WGM12)|(1<<CS10);

   ICR1=13;

while(1){

       PORTD|=(1<<PD4);
           _delay_ms(1);

           if( !(PINA & czujnik) ) PORTB = 0xff;
            if( PINA & czujnik ) PORTB = 0x00;

        PORTD&=~(1<<PD4);
        _delay_ms(1);

   }

}

Działajacy program gdyby ktoś potrzebował. Muszę podziękować Mirkowi36 za wytłumaczenie mojego błędu polegającego na zczytywaniu stanu TSOP'a. Taktowanie również było złe 😉

Link do komentarza
Share on other sites

Jakiego masz TSOP'a? Bo widzę, że ustawiasz pin PA1 jako wejście, a potem ustawiasz je w stan niski. Twój odbiornik jak wykryje dane to ustawia wyjście w stan wysoki?

Przydałyby się komentarze. Oczywiście sam mogłem walnąć byka w tym co powyżej napisałem (również stawiam pierwsze kroki w C dla AVR 😉 ).

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

Mam pytanie co do mojego kodu w C, który właśnie piszę - czy muszę pisać kod z takich warunków :

if(PINA & CZUJNIK1 && !(PINA & CZUJNIK2) && !(PINA & CZUJNIK3) && !(PINA & CZUJNIK4) && !(PINA & CZUJNIK5) && !(PINA & CZUJNIK6) && !(PINA & CZUJNIK_LINII1) && !(PINA & CZUJNIK_LINII2)){     	SKRETP;
   	_delay_ms(100);
   	ATAK;
   	PORTB = 0xff;
   	_delay_ms(2000);

czy mogę dać po prostu coś takiego :

if(PINA & CZUJNIK1 ){    	
                SKRETP;
   	_delay_ms(100);
   	ATAK;
   	PORTB = 0xff;
   	_delay_ms(2000);

Są to fragmenty kodu odpowiedzialne za zczytywanie stanów z czujników. Jest ich sześć + 2 czujniki linii (nie korzystam z adc by ułatwić kod (na razie)) I chodzi mi o to czy mogę zczytywać tylko stan wysoki czy muszę także zczytywać stany niskie z pozostałych czujników ?

[ Dodano: 02-09-2012, 18:12 ]

Ma ktoś może pomysł czemu przy takim kodzie silniki w ogóle mi nie działają, a diody (portb) działają znakomicie (gdy czujniki widzi/ nie widzi)?

PORTD|=(1<<PD7) ; 
   _delay_ms (1); 

     if(!(PINA & CZUJNIK3)){
         ATAK;
         PORTB=0x00;


           }

    if(PINA & CZUJNIK3){
       TYL;
       PORTB=0xff;


           }

        PORTD&=~(1<<PD7);
        _delay_ms(1);

Silniki działają normalnie w innych programach- a w tym nawet gdy włączam program drgną przez chwilę a potem stają do ponownego włączenia robota. Próbowałem z delay'ami - nic, a diody działają prawidłowo.

Przykladowy program w którym dzialają silniki:

/*
* PRZOD.c
*
*  Created on: 2012-08-23
*      Author: Piotr Wasilewski
*      TEST KIERUNKU OBROTU KÓŁ W HAKERZE 2
*/

#include <avr/io.h>
#include <util/delay.h>

//DEFINICJE STAŁYCH
#define ENABE2 PORTC|=(1<<PC6) //ENABLE2 MOSTKA
#define ENABLE1 PORTC|=(1<<PC4) //ENABLE1 MOSTKA
#define ATAK PORTC|=(1<<PC6)|(1<<PC4)|(1<<PC2)|(1<<PC7) //SILNIKI PEŁNA MOC DO PRZODU
#define TYL PORTC|= (1<<PC6)|(1<<PC4)| (1<<PC5)|(1<<PC3) //JAZDA DO TYŁU
#define SKRETP PORTC|=(1<<PC6)|(1<<PC4)|(1<<PC3)|(1<<PC2) //SKRĘT W PRAWO SZYBKI
#define SKRETL PORTC|=(1<<PC6)|(1<<PC4)|(1<<PC7)|(1<<PC5) //SKRĘT W LEWO SZYBKI
#define OBROT PORTC|=(1<<PC6)|(1<<PC4)|(1<<PC3)|(1<<PC2) //SZYBKI OBRÓT W POSZUKIWANIU PRZECIWNIKA
#define DIODY PORTB //DIODY LED

int main (void) {
DDRC=0xff;
PORTC=0x00;

while(1){
   ATAK;
_delay_ms(1000);
 }
}

Wiecie co ja juz z tymi jtagami nie dam rady - chyba znowu robię nnowa płytkę - jeszcze żaden robot nie sprawiał mi tylu problemów 🙁 Te silniki nie działają, nawet przy kodzie w którym to ktir nimi steruje. To znaczy że winny jest procek, który nie zmnienia stanów na pinach portu C. Najgorzej że akurat się zepsuło żelazko a rodzice wyjeżdżają na tydzień do krakowa i żelazka pewnie nie będzie przez najbliższy miesiąć 😕

Zastanawiam się nad zmienieniem procka na atmege 32 - ma ona domyslnie wyłączony jtag ? Proszę o jakieś komentarze bo juz kompletnie nie wiem co robić - to będzie moja chyba 4 plytka, niechciałbym jej zepsuć z powodu złej decyzji co do procka..

Z góry dzięki

Link do komentarza
Share on other sites

Ale chyba jeśli piszę PORTB=0xff to nie muszę dawać kreski,(zobacz w kursie abxz) nawet okazało się że to on była problemem tutaj:

#define ATAK PORTC|=(1<<PC6)|(1<<PC4)|(1<<PC7)|(1<<PC2)

Tutaj po "PORTC" w ogóle nie powinnno jej być !!!

PS:Naprawiłem żelazko i zarobilem 2dyszki, dzisiaj jest chyba mój szczęsliwy dzień 😃

Link do komentarza
Share on other sites

Otwórz wszystkie porty po kolej tak jak ci napisałem i wtedy zobacz. Takie drobiazgi potrafią doprowadzić do szału.

Jeżeli działa pod innym programem to atmega uszkodzona nie jest.

EDIT: Prawie podłączyłem atmegę pod 48V 😅

Link do komentarza
Share on other sites

Już wszystko działa, tak jak pisałem wyżej, problemem byla kreska 😉

Teraz mam kolejny mały problemik - napisałem program do Hakera v2 na dwa czujniki odległości, działa wyśmienicie, jedynym problemem jest to że działa tylko na dohyo zrobionym z dwóch kartek a4, a czarny brystol, bierze za białą linię i cały czas się cofa. I chcę się zapytać czy można jakoś rezystorami wyregulować czułość czujnika ? Ja próbowałem dając 1 k zamiast 220r przy diodzie ir ktira. Dalej to samo, bez żadnej poprawy, mimo że dioda ledwo się świeci. Problem na pewno stanowi dohyo, bo ten sam problem występował w Hakerze. A jeśli łatwiej jest wyregulować czujnik programowo to poproszę o fajną czytelną funkcję do obsługi adc w mikrokontrolerze. I byłbym naprawdę bardzooo wdzięczny gdyby ktoś kto ma dostęp do dohyo z prawdziwych zawodów sprawdził czy ktir0711s z rezystorem na diodę 220r i 20k pullup do fototranzystora dobrze reaguje na białą linię Przy warunku np .

If ( pina & czujnik ) {
diody_on;
}
if (!( pina & czujnik )){
diody_off;
}

Chodzi mi o to by nie używać adc w kontrolerze - chcę mieć pewność że na zawodach robot nie zacznie mi uciekać do tyłu bo weźmie czarne dohyo za białą linię.

Link do komentarza
Share on other sites

klonyyy, u mnie w nuggecie przy R diody 270ohm i pullupie 100k w domu działał dobrze, a we Wrocławiu już nie, pomogła zmiana na 10k. Ogólnie jak masz je podpięte pod ADC, to z niego skorzystaj, możesz nawet zaimplementować autokalibrację.

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

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

×
×
  • 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.