Skocz do zawartości

Pomocna odpowiedź

$regfile = "m16def.dat"
$crystal = 16000000

Config Portb = Output
Config Porta = Input
Config Portd.5 = Output
Config Portd.7 = Output
Config Portd.4 = Output
Config Portd.6 = Output
Pina.1 = 1
Portd.4 = 0

Ocr1a = 22   'wartość maxymalna

Tccr1a = &B01000000

Tccr1b = &B00011001


Do
Portd.4 = 1
Waitus 600

If Pina.1 = 0 Then
Portb = &B00000

Elseif Pina.1 = 1 Then
Portb = &B1111111

Portd.4 = 0
Waitus 600


End If

Loop

Tak wygląda mój kod.

$regfile = "m16def.dat"
$crystal = 16000000

Config Portb = Output
Config Porta = Input
Config Portd.5 = Output
Config Portd.7 = Output
Config Portd.4 = Output
Config Portd.6 = Output
Pina.1 = 1
Portd.4 = 0

Ocr1b = 22                                                  'WARTOŚĆ maxsymalna

Tccr1a = &B01000000

Tccr1b = &B00011001


Do
Portd.4 = 1
Waitus 600

If Pina.1 = 0 Then
Portb = &B00000

Elseif Pina.1 = 1 Then
Portb = &B1111111

Portd.4 = 0
Waitus 600


End If

Loop

I dalej coś jest źle bo program nie działa.

PS. sorry za te tcr1b - moje czytanie ze zrozumieniem...

Albo ustawisz w rejestrach tryb zliczania do OCR1A, i wtedy wpisujesz wartość do OCR1A, albo zostawiasz swoje zliczanie do ICR1 i wpisujesz wartość do ICR1. Ustawiłeś zliczanie do ICR a wpisujesz do OCR.

  • Pomogłeś! 1

Działa !!! W końcu stawiam Ci twoje zasłużone pomógł i wielkie dzięki - wiedza którą mi przekazałeś na pewno nie raz mi się przyda, ponieważ póki co mam za mało kasy na szarpy więc samoróbki wygrywają. A gdybym chciał by czujnik zapalał diodę i trzymał ją zapaloną dopóki doputy czujnik nie będzie widział przedmiotu? Bo narazie czujnik widzi przedmiot przez chwilę a potem dioda gaśnie mimo przedmiotu przed czujnikiem. Jeszce raz dzięki bardzo mi pomogłeś.

Bo narazie czujnik widzi przedmiot przez chwilę a potem dioda gaśnie mimo przedmiotu przed czujnikiem. Jeszce raz dzięki bardzo mi pomogłeś.

Tu właśnie wkraczają magiczne długości impulsów, masz pole do popisu 😉 Zmieniaj sobie długości paczek i obserwuj reakcję, ja wtedy dopiero znalazłem odpowiednią długość.

Ok, dzięki popróbuję i napiszę czy się udało. Jeszcze myślałem o czymś takim że gdzy tsop widzi tą paczkę dioda uruchamia się na te 600 us, aż do kolejnej paczki ale to by chyba nie działało.

EDIT: dobra znalazłem jest to ok 120 us. Ale pojawił się kolejny problem - gdy przedmiot zbliża się z daleka czujnik nie reaguje tak jakby go nie było .

[ Dodano: 18-04-2012, 18:07 ]

Teraz sobie uświadomiłem że chyba mam źle podłączony mostek - wejścia enable nie są podpięte pod timer i nie mam jak ustawić pwm. Macie może jakieś pomysły co mógłbym z tym zrobić ?

klonyyy, spróbuj z wyższymi wartościami, kilka ms. Powiem tyle, że ~300us powyżej i poniżej wartości którą znalazłem już nie działało tak jak powinno, więc ta granica może być bardzo wąska.

przeciąć ścieżki i zrobić zworki ?

No raczej nie mogę bo mam zajęte te porty.

KD93 dzięki- na pewno popróbuję.

[ Dodano: 18-04-2012, 19:56 ]

Z tym mostkiem to nawet jakoś bardzo tego pwm jeszcze w tym robocie nie potrzebuję - chcę tylko mieć pełną moc silników i tu mam pytanie czy wystarczy zewrzeć enable a i b do gnd czy można to rozwiązać programowo ( stan niski ) ?

PWM to dobra rzecz. Do czasu, aż zaczniesz kombinować z mostkiem-samoróbką na MOS'ach. Do ich przełączania potrzeba już jakiegoś drivera i najlepiej żeby nie był byle jaki.

Ale wracając do tematu - może warto dodać w programie wysyłanie impulsów? Sam tego nigdy nie stosowałem, ale z tego co widziałem u Destroyer'a to na prawdę fajnie to działało 😉 Masz nieciekawą sytuację teraz. Może jednak pokusić się o rozcięcie ścieżek i podłączenie bazy tranzystora sterującego całym segmentem diodek IR wyjście OC2?

Muszę przyznać, że fajny temat się zrobił. Czytam z zachwytem zmagania z czujnikami, ponieważ na dniach sam będę się z tym borykał.

EDIT:

Owszem, to powinno wystarczyć.

Mam do Was prośbę o zerknięcie na program - jestem prawie pewien że jest dobry, ale chcę mieć całkowitą pewność czy nie trzeba nic dodać, zanim zacznę wnikliwie badać ścieżki :

$regfile = "m16def.dat"
$crystal = 16000000
Config Portc = Output
Portc.2 = 0
Portc.3 = 0
Portc.5 = 0
Portc.7 = 0
Portc.4 = 0
Portc.6 = 0


Do
Portc.2 = 0                                                 'silnik1
Portc.3 = 1                                                 'silnik1
Portc.5 = 0                                                 'silnik2
Portc.7 = 1                                                 'silnik2
Portc.4 = 1                                                 'enable
Portc.6 = 1                                                 'enable
Loop



Dodawanie zmian kierunków obrotów silników tego w pętli głównej, bez żadnych opóźnień nie da żądanego efektu. Musisz dodać co najmniej prościutkie opóźnienia. Najlepiej takie, żebyś widział je gołym okiem - np. 2s i zmiana kierunku obrotu silnika.

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