Skocz do zawartości

Pierwszy LF problem z uruchomieniem


aixI

Pomocna odpowiedź

Czy to co napisałeś powyżej było zamierzonym efektem pracy Twojego układu?

Nie to miało na celu sprawdzenie uC.

Ale sprawdź czy działa led w robocie (nie na płytce stykowej), w ten sposób sprawdzisz czy ścieżki zasilania są dobrze poprowadzone.
Mógłbyś pokazać jak wygląda ta płytka od góry?

W którym miejscu sprawdzałeś? Podłącz multimetr bezpośrednio do procka (od góry) a z drugiej strony bezpośrednio do goldpina w którym powinien być sygnał z tej nóżki, rozumiesz co mam na myśli?

Tak, rozumiem i sprawdziłem tak, wszystko jest połączone.

Co w tym ryzykownego?

Mogą się urwać nóżki.

[ Dodano: 28-08-2012, 16:03 ]

Ok, naprawiłem problem z połączeniem się uC z bascomem. Teraz został problem z uruchomieniem robota. Czyli wracamy do początku.

[ Dodano: 28-08-2012, 16:08 ]

Jeszcze napiszę na temat płyty z czujnikami, mianowicie gdy po prostu dam napięcie 5V to diody ir w CNY70 świecą ale jak przejadę biała kartką z czarna taśma izolacyjną nic się nie dzieje, nawet jak pokręcę potencjometrem, nic.

Link do komentarza
Share on other sites

Więc po kolei:

1. Możesz zaprogramować uC gdy jest on wpięty w robota?

2. Jeżeli wgrasz program mrugający diodą, działa on bez zakłóceń (mam na myśli mruganie ze stałym natężeniem światła, i w równych odstępach)?

Co do czujników... Na schemacie masz dosyć sporo elementów, wystarczy że raz podłączyłeś coś nie tak, i już może nie działać; starannie posprawdzaj multimetrem połączenia na płytce z czujnikami

Jak wyjąć uC z podstawki? Ja to robię tak: wkładam nóż pomiędzy uC a podstawkę, i lekko przekręcam, procek lekko podnosi się, potem robię tak z drugiej strony, jeżeli jeszcze się trzyma, powtarzam czynność do skutku. Tylko powoli, żeby nie uszkodzić.

Link do komentarza
Share on other sites

1. Tak

2. Tak

Sprawdziłem płytkę z czujnikami i zauważyłem, że nie zlutowałem jednej ścieżki z drugą.

Więcej błędów nie widziałem. Jak zlutowałem ścieżki to chciałem sprawdzić płytkę, więc podłączyłem pod płytkę główną i nic, tak jak wcześniej, czyli diody ir świecą, ale na nic nie reagują, kręcenie potencjometrem też nic nie daje. (sprawdzałem multimetrem)

[ Dodano: 29-08-2012, 10:39 ]

Co do kodu sprawdzi pwm bo to ono morze być kłopotem. Pozdrawiam.

Zuba1 a co może być nie tak z pwm?

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

Możliwe, że naprawiłem płytkę z czujnikami, mianowicie wywaliłem kondensator elektrolityczny 1uF przy potencjometrze i działa. Czujniki reagują na białe i czarne tło (na białym tle ledy świecą, a na czarnym nie) czyli wszystko ok.

[ Dodano: 31-08-2012, 11:00 ]

Sprawdziłem, czy będzie działało i nie działa. Ogólnie czujniki reagują na czarne/białe tło tylko nie ma reakcji silników. Żaden się nie kręci.

Wgrałem taki kod:

$regfile = "2313def.dat"
$crystal = 1000000

'Konfiguracja sterowania PWM
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down

'Konfiguracja portów
##wyjscia##
Config Pinb.5 = Input
Config Pinb.6 = Input
Config Pinb.7 = Input

##wejscia##
Config Pinb.4 = Output
Reset Portb.4
Config Pinb.3 = Output
Reset Portb.3
Config Pind.2 = Output
Reset Portd.2
Config Pind.5 = Output
Reset Portd.5
Config Pind.4 = Output
Reset Portd.4
Config Pind.3 = Output
Reset Portd.3
Config Pind.0 = Output
Reset Portd.0

PORTB.5 = 1 
PORTB.6 = 1 
PORTB.7 = 1

'Opis prtów
'Enable1 - silnik lewy - PortB.4                      (PWM1A)
'Enable2 - silnik prawy - PortB.3                     (PWM1B)
'Input1 - Silnik lewy A - PortD.2
'Input2 - Silnik lewy B - PortD.5
'Input3 - Silnik prawy A - PortD.3
'Input4 - Silnik prawy B - PortD.4
'Dioda - PortD.0

Sensor_1 Alias Portb.5
Sensor_2 Alias Portb.6
Sensor_3 Alias Portb.7
Silnik_lewy_a Alias Portd.2
Silnik_lewy_b Alias Portd.5
Silnik_prawy_a Alias Portd.4
Silnik_prawy_b Alias Portd.3
Dioda Alias Portd.0


'Deklaracje zmiennych
Dim Czujnik_lewy As Single
Dim Czujnik_srodkowy As Single
Dim Czujnik_prawy As Single
Dim W As Word

'Blok instrukcji
Set Dioda
Set Silnik_lewy_a
Reset Silnik_lewy_b
Set Silnik_prawy_a
Reset Silnik_prawy_b

Do
Set Dioda
 If Sensor_1 = 0 Then
   If Sensor_3 = 1 Then
     Gosub Skrecaj_w_lewo
   Else
     Gosub Jedz_prosto
   End If
 Elseif Sensor_3 = 0 Then
   If Sensor_1 = 1 Then
     Gosub Skrecaj_w_prawo
   Else
     Gosub Jedz_prosto
   End If
 Else
   Gosub Jedz_prosto
 End If


Loop
End		'end program

Jedz_prosto:
 Set Silnik_lewy_a
 Set Silnik_lewy_b
 Reset Silnik_prawy_a
 Reset Silnik_prawy_b
Return

Skrecaj_w_prawo:
 Set Silnik_lewy_a
 Reset Silnik_lewy_b
 Reset Silnik_prawy_a
 Reset Silnik_prawy_b
 Waitms 10
Return

Skrecaj_w_lewo:
 Set Silnik_prawy_a
 Reset Silnik_prawy_b
 Reset Silnik_lewy_a
 Reset Silnik_lewy_b
 Waitms 10
Return
Link do komentarza
Share on other sites

Szczerze mówiąc, nie zagłębiałem się w kod, ale pullupy, które masz na wyjściu WO są dość małe. Jako test, czy uC dobrze interpretuje 1/0 możesz w zależności od tego, czy czujnik widzi linię zapalać lub gasić diodę - wystarczy bezpośrednie przypisanie wartości pinu czujnika do pinu na którym wisi dioda:

portd.0=portb.7
Link do komentarza
Share on other sites

Spróbuj napisać program, aby robot przez 1 sekundę jechał prosto, nie uwzględniając odczytów z czujników. Jeżeli nie pojedzie, znaczy że problem leży w złym podłączeniu mostka.

Link do komentarza
Share on other sites

Bobby Te diody led, które świecą jak przesuwam kartkę z czarną taśma izolacyjną to w zależności jaki czujnik widzi zapala diodę. A te diody led (białe, przy czujnikach wychodzą z wyjścia komparatora) No chyba, że chodziło Ci tylko o diode, która jest podłączona pod portd.0.

To musiałbym napisać tak?

portd.0=portb.5
portd.0=portb.6
portd.0=portb.7

Sosnus Spróbuję coś napisać.

Spróbowałem napisać taki kod do testu silników:

$regfile = "2313def.dat"
  $crystal = 1000000                                       'procesor to Atmega48, dla atmega8 nalezy
                                                            'wpisac "m8def.dat", dla atmega88/168 analogicznie
                                                            '"m88def.dat" i "m168def.dat"
  'Ustawienie Aliasow
  Led Alias Portd.0                                        'Do tego pinu podlaczona jest dioda LED2
  A1 Alias Portd.2                                         'Linie sterujace silnikiem A
  A2 Alias Portd.5
  B1 Alias Portd.3                                         'Linie sterujace silnikiem B
  B2 Alias Portd.4
  Ena Alias Portb.4                                        'Linia do wlaczania silnika A
  Enb Alias Portb.3                                        '... i silnika B

  'Konfiguracja kierunku pracy portow
  Ddrb = &B00111111
  Ddrd = &B11100001

  'Konfiguracja stanow portow
  Portb.5 = 0
  Portb.6 = 0
  Portb.7 = 0


  'Dekleracja funkcji i procedur
  Declare Sub L_do_przodu(byval Szybkosc As Byte)
  Declare Sub L_do_tylu(byval Szybkosc As Byte)
  Declare Sub P_do_przodu(byval Szybkosc As Byte)
  Declare Sub P_do_tylu(byval Szybkosc As Byte)
  Declare Sub L_stop
  Declare Sub P_stop

  'Konfiguracja PWM dla silnikow
  Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 64


  'Program glowny

  Led = 0                                                  'zapal diode na 1 sekunde i zgas
  Wait 1
  Led = 1

  'Petla glowna

  Do
  Call L_do_przodu(255)                                    'oba kola z pelna predkoscia do przodu
  Call P_do_przodu(255)
  Wait 1                                                   'i tak przez sekunde
  Led = 0                                                  'dodatkowo zapal diode
  Call L_stop                                              'oba silniki stop
  Call P_stop
  Wait 1
  Led = 1                                                  'zgas diode
  Call L_do_tylu(255)                                      'oba kola z pelna predkoscia do tylu
  Call P_do_tylu(255)
  Wait 1
  Led = 0
  Call L_stop
  Call P_stop
  Wait 1
  Led = 1
  Call L_do_przodu(255)                                    'skret w lewo
  Call P_do_tylu(255)
  Wait 1
  Led = 0
  Call L_stop
  Call P_stop
  Wait 1
  Led = 1
  Call L_do_tylu(255)                                      'skret w prawo
  Call P_do_przodu(255)
  Wait 1
  Led = 0
  Call L_stop
  Call P_stop
  Wait 1
  Led = 1
  Call L_do_przodu(100)                                    'i jeszcze raz to samo tylko wolniej
  Call P_do_przodu(100)                                    'liczba w nawiasie odpowiada szybkosci - stopniowi
  Wait 1                                                   'wypelnienia sygnalu PWM podawanego na wejscie
  Led = 0                                                  'wyzwalajace sterownika silnikow. 0-wypelnienie 0%
  Call L_stop                                              '255-wypelnienie 100%, kazdy silnik ma inny
  Call P_stop                                              'prog wypenienia, przy ktorym zacznie sie krecic
  Wait 1                                                   'nalezy go dobrac doswiadczalnie
  Led = 1
  Call L_do_tylu(100)
  Call P_do_tylu(100)
  Wait 1
  Led = 0
  Call L_stop
  Call P_stop
  Wait 1
  Led = 1
  Call L_do_przodu(100)
  Call P_do_tylu(100)
  Wait 1
  Led = 0
  Call L_stop
  Call P_stop
  Wait 1
  Led = 1
  Call L_do_tylu(100)
  Call P_do_przodu(100)
  Wait 1
  Led = 0
  Call L_stop
  Call P_stop
  Wait 1
  Led = 1


  Loop                                                     'koniec petli glownej


  Sub P_do_przodu(byval Szybkosc As Byte)                  'podprogramy ustawiajace predkosc i kierunek pracy silnikow
  A1 = 1
  A2 = 0
  Pwm1a = Szybkosc
  End Sub

  Sub P_do_tylu(byval Szybkosc As Byte)
  A1 = 0
  A2 = 1
  Pwm1a = Szybkosc
  End Sub

  Sub L_do_przodu(byval Szybkosc As Byte)
  B1 = 1
  B2 = 0
  Pwm1b = Szybkosc
  End Sub

  Sub L_do_tylu(byval Szybkosc As Byte)
  B1 = 0
  B2 = 1
  Pwm1b = Szybkosc
  End Sub

  Sub P_stop                                               'podprogramy zatrzymujace silniki
  A1 = 0
  A2 = 0
  End Sub

  Sub L_stop
  B1 = 0
  B2 = 0
  End Sub

Tylko kompilator pokazuje 3 błędy:

Nie wiem czemu to nie chce działać ;/ Bobby mógłbyś przeanalizować mój kod do lf'a ? nie wiem, czy jest dobry (kompilator nie pokazuje błędów) Połączenia na płycie głównej na 100% sa ok. tak samo jak płyta z czujnikami.

EDIT: Wczoraj zmieniłem diode led (LED4) na płycie głównej.

Wcześniej jak wgrywałem program co uC to Led4 w ogóle nie świeciła, teraz jak wgrałem zaświeciła (bo w kodzie jest "Set Dioda") ale i tak robot nie ruszył ;[ Sprawdzałem połączenia mostka a uC i wszystko jest połączone dobrze. Robota zasilam z zasilacza 16V, dla logiki uC itp. jest 5V ale na sterowanie silników idzie 16V (czy to nie za dużo?) Sprawdzałem miernikiem piny do których podłączam silniki na obu "nóżkach" było ok. +16V.

Dodam jeszcze, że pwm jakim się kierowałem znalazłem na tej stronce: http://www.elektroda.pl/rtvforum/topic1162596.html

Tam jest cały portb na wyjście i cały portd na wejscie, a u mnie jest tak:

'Konfiguracja portów 
##wyjscia## 
Config Pinb.5 = Input 
Config Pinb.6 = Input 
Config Pinb.7 = Input 

##wejscia## 
Config Pinb.4 = Output 
Reset Portb.4 
Config Pinb.3 = Output 
Reset Portb.3 
Config Pind.2 = Output 
Reset Portd.2 
Config Pind.5 = Output 
Reset Portd.5 
Config Pind.4 = Output 
Reset Portd.4 
Config Pind.3 = Output 
Reset Portd.3 
Config Pind.0 = Output 
Reset Portd.0
Link do komentarza
Share on other sites

Pisałem, żebyś olał na razie całkowicie sterowanie silnikami - zajmijmy się czujnikami. To:

portd.0=portb.5 
portd.0=portb.6 
portd.0=portb.7

będzie miało taki sam skutek jak to:

portd.0=portb.7

Poza tym, pomyliłem się w poprzednim poście, powinno odczytywać się stan portu z rejestru PINx, czyli powinno to wygladać tak:

portd.0=pinb.7

Jak wrzucisz taki kod do pętli do...loop, i wcześniej tylko odpowiednio poustawiasz wejścia/wyjścia (wystarczy tylko pd0 i pb7) będzie zapalał lub gasił diodę za pomocą uC (zobaczymy, czy uC dobrze rozpoznaje 1 i 0), jeśli jednym z czujników zobaczy linię. Potem wgraj analogiczny kod, tylko zmień pinb.7 na 6, a potem na 5.

Link do komentarza
Share on other sites

Teraz mam mały problem. W poprzednim poście napisałem, że zmieniłem podłączenie diody led (Led4) przy uC. Teraz od pinu uC idzie rezystor i dioda, która jest podłączona do GND. (wygląda to jak z kursu bascoma cz.3) Wgrałem kod, żeby dioda mrugała i ona mruga ale raz normalnie potem zaczyna mrugać przy mruganiu : D i jeszcze się wyłącza na jakiś czas, później znowu się włącza, mruga i wyłącza ;/

Ok. to na razie olewam sterowanie silnikami i zajmuje sprawdzaniem, czy uC rozpoznaje 1 lub 0.

Czyli muszę wrzucić to

portd.0=pinb.7

do pętli do...loop. I moje głupie pytanie, czy musze z pętli do...loop wyrzucić to co teraz aktualnie mam i zmienić na to co napisałeś?

Zamienić to:

Do 
Set Dioda 
If Sensor_1 = 0 Then 
If Sensor_3 = 1 Then 
Gosub Skrecaj_w_lewo 
Else 
Gosub Jedz_prosto 
End If 
Elseif Sensor_3 = 0 Then 
If Sensor_1 = 1 Then 
Gosub Skrecaj_w_prawo 
Else 
Gosub Jedz_prosto 
End If 
Else 
Gosub Jedz_prosto 
End If 
Loop 

Na to:

Do
portd.0=pinb.7
Loop

Nie wiem czy dobrze to rozumuję, bo to:

wcześniej tylko odpowiednio poustawiasz wejścia/wyjścia (wystarczy tylko pd0 i pb7) będzie zapalał lub gasił diodę za pomocą uC (zobaczymy, czy uC dobrze rozpoznaje 1 i 0), jeśli jednym z czujników zobaczy linię. Potem wgraj analogiczny kod, tylko zmień pinb.7 na 6, a potem na 5.
rozumiem, ale tego:
Jak wrzucisz taki kod do pętli do...loop
niezbyt.
Link do komentarza
Share on other sites

W loopie tylko to:

Do 
portd.0=pinb.7 
Loop

Co do mrugania - jesteś pewny, że 7805 jest sprawny? Z czego zasilasz całego robota? W jakiej on jest obudowie? TO220 czy TO92?

Link do komentarza
Share on other sites

Uoo, no to dajmy na to, że pobierasz ze stabilizatora 100mA (a pewnie i więcej), 11V spadku napięcia na nim jest (16-5) i to musi wytraci w formie ciepła - 0,1[A]*11[V]=1,1W. Miga, bo stabilizator po pewnym czasie przegrzewa się, wyłącza się bo działa zabezpieczenie termiczne i jak jego temperatura spadnie to znowu się włącza - dlatego działa to jak chce. Zastosuj jakiś inny zasilacz, o niższym napięciu i zobaczymy, czy dalej będą takie cyrki 🙂

Link do komentarza
Share on other sites

No fajne cuda 😃 a co do ciepła to tak wydziela ciepełko aż kondensator się zrobił ciepły (ten za stabilizatorem).

A mogę zamienić na zasilacz 12V 100mA? Będzie dobrze?

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.