Skocz do zawartości

Pomoc przy pisaniu pierwszych programów


Tolo

Pomocna odpowiedź

Witam znów wszystkich skończyłem już line followera i w zasadzie wszystko działa poprawnie ale wczoraj pomyślałem że dorobię do niego czujnik odbiciowy , i tak się stało .Czujnik składa się z diody IR nadawczej oraz nieznanego mi fototranzystora Sygnał z fototranzystora jest wzmacniany na tranzystorze BC546 i wędruje do Portu c .0 zresztą przedstawia to schemat:

Pomyślałem ,że może to działać tak samo jak czujnik lini tzn jeśli chodzi o program więc stworzyłem coś takiego :

$regfile = "m8def.dat"
$crystal = 1000000

Config Adc = Single , Prescaler = Auto

Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down

Config Portd = Output
Config Portb = Output



'Opis portów
'Enable1 - Silnik lewy - Portb.1 (PWM1A)
'Enable2 - Silnik prawy - portb.2 (PWM1B)
'Input1 - Silnik lewy A - Portd.3
'Input2 - Silnik lewy B - Portd.2
'Input4 - Silnik prawy A - Portd.0
'Input3 - Silnik prawy B - Portd.1
'Dioda - Portd.6
'Czujnik lewy - ADC5
'Czujnik środkowy - ADC4
'Czujnik prawy - ADC3

Dioda1 Alias Portd.5
Dioda2 Alias Portb.7
Dioda3 Alias Portb.6
Silnik_lewy_a Alias Portd.3
Silnik_lewy_b Alias Portd.2
Silnik_prawy_b Alias Portd.0
Silnik_prawy_a Alias Portd.1
Dioda Alias Portd.6

Const Granica = 300
'Deklaracje zmiennych

Dim Sensor As Single

Dim Czujnik_lewy As Single
Dim Czujnik_srodkowy As Single
Dim Czujnik_prawy As Single
Dim W As Word
'Blok instrukcj

Reset Dioda1
Reset Dioda2
Reset Dioda3
Reset Dioda
Set Silnik_lewy_a
Reset Silnik_lewy_b
Set Silnik_prawy_a
Reset Silnik_prawy_b


Do


  Gosub Wczytaj_stany_przetwornikow
If Sensor > Granica Then
      Pwm1a = 0
    Pwm1b = 0
Elseif Czujnik_srodkowy > Granica Then
     Pwm1a = 0
     Pwm1b = 255
     Set Dioda1
Elseif Czujnik_lewy > Granica Then
     Pwm1a = 100
     Pwm1b = 100
     Set Dioda2
Elseif Czujnik_prawy > Granica Then
     Pwm1a = 255
     Pwm1b = 0
     Set Dioda3
Elseif Sensor > Granica Then
Set Dioda3
   Pwm1a = 255
   Pwm1b = 0
   Set Dioda
Else
   Pwm1a = 100
   Pwm1b = 100
   Reset Dioda1
   Reset Dioda2
   Reset Dioda3
   Reset Dioda


End If


Loop
End
Wczytaj_stany_przetwornikow:
Czujnik_prawy = W
Start Adc
W = Getadc(5)
W = Getadc(5)
Stop Adc

Czujnik_lewy = W
Start Adc
W = Getadc(4)
W = Getadc(4)
Stop Adc

Czujnik_srodkowy = W
Start Adc
W = Getadc(3)
W = Getadc(3)
Stop Adc

Sensor = W
Start Adc
W = Getadc(0)
W = Getadc(0)
Stop Adc



Return

I tu jest problem ponieważ robotowi niejako pieprzy się ten czujnik z Czujnikiem_Prawym tzn kiedy zasłaniam prawy czujnik lini to zapala się "Dioda" a kiedy stawiam przeszkodę przed czujnikiem odbiciowym zapala się "Dioda3" i kręci się jeden silnik 🤣

Ta sytuacja jest trochę dziwna chciałbym abyście sprawdzili ten kod czy to w nim leży wina czy mam szukać w połączeniach na płytce...

PS

Na zakończenie dodam ,że sam czujnik odbiciowy jest całkiem fajny wykrywa przeszkodę od około 10cm jak uda się rozwiązać ten problem to pomyśle nad podłączeniem diody nadawczej do uC i generowaniu impulsów bo ponoć te diody w impulsie wytrzymują nawet 1A !! więc zasięg będzie musiał być ogromny

Link do komentarza
Share on other sites

Nie rozumiem, czemu coraz więcej osób pisze mi na PW i (jak widać) tutaj też o testowaniu transoptora palcem... Przecież fotodetektor mierzy niejako natężenie światła z fotoemitera odbitego od przeszkody, fotodetektor i fotoemiter nie są umieszczone współosiowo, a więc jeśli zbliżymy palec/obiekt zbyt blisko, to sytuacja będzie taka sama, jak byśmy w ogóle transoptora nie zasłaniali (światło nie dotrze do fotodetektora, albo będzie go niewiele). Najlepiej testować takie rzeczy na białej kartce z czarną linią, trzymając transoptor w odpowiedniej odległości, zgodnej z danymi w jego dokumentacji.

Link do komentarza
Share on other sites

Witam !

Mam problem otóż zbudowałem nową płytę główną na podstawie artykułu a Elbocie i zaczoełem bawić się wyświetlaczem i wszytko fajnie działa ale ostatnio postanowiłem wykorzystać przycisk na płycie w ten sposób aby włączać i wyłączać wyświetlacz i tu jest problem napisałem taki kod

$regfile = "M8def.DAT"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5
Config Portd.0 = Input

Przycisk Alias Portd.0

Display On

Do
If Przycisk = 1 Then
Waitus 50
Cls
Display Off
Else
Cls
Lcd "Witaj! " ;
End If

Loop
End

I efekt jest co najmniej dziwny a więc napis wyświetla się do połowy całkiem wyraźnie a potem tak jakby traci ostrość i robi się rozmyty , a po wciśnięciu przycisku trochę się ostrzy ale i tak dwie ostatnie litery są rozmyte i tak jakby jaśniej się podświetla... 😥

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

Znalazłem takie coś...

$regfile = "M8def.DAT"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5
Config Pind.2 = Input

Pind.2 = 0
Cls                                                         'czyścisz ekran

Do
Debounce Pind.2 , 0 , Ok , Sub                              'odkłócanie styków
Loop

Ok:
Cls
Lcd "OK"
Waitms 250                                                  'odczekaj 250ms i wyczyść ekran ponownie
Cls

End

Ale efekt jest ten sam po wciśnięciu ekran trochę przygasa i tyle....

Włącznik mam podciągniety do Vcc...

Trochę zmieniłem kod...

$regfile = "M8def.DAT"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5
Config Pind.2 = Input

Pind.2 = 1
Cls                                                         'czyścisz ekran

Do
Debounce Pind.2 , 1, Ok , Sub                              'odkłócanie styków
Loop

Ok:
Cls
Lcd "OK"
Waitms 250
Cls

End

teraz napis wyświetla się po 250ms i znika klawisz nic nie zmienia...

Link do komentarza
Share on other sites

Tak na marginesie - polecam podłączanie przełączników w taki sposób:

O ile nie przygotowujesz seryjnej konstrukcji (cięcie kosztów elementów), to moim zdaniem lepiej jest takim filtrem wyeliminować automatycznie drgania zestyków niż później marnować uC na niepotrzebne pętle i opóźnienia (debounce).

Link do komentarza
Share on other sites

Witam !

Skończyłem robić czujnik odbiciowy i przyszła pora na pisanie softu a więc założenia były proste :

➡️ Generować 38Khz

➡️ Sprawdzić czy doleciało

➡️ Modulować co by się TOSP nie wieszał

A więc zaczełem od punktu 1 i zaczeły się schody napisałem coś takiego:


$regfile = "attiny13.dat"
$crystal = 4000000
Config Portb = Output

Config Timer1 = Pwm , Pwm = 8 , Compare B Pwm = Clear Down , Prescale = 64

Pwm0b = 200

Jak widać próbowałem skonfigurować PWM jednak zawsze wywala mi błąd

(202) Nie odnaleziono pseudoinstrukcji .EQU, prawdopodobnie ta funkcja nie jest obsługiwana przez wybrany procesor

Próbowałem wszystkich możliwych kombinacji

Dobra problem rozwiązany trzeba było zmienić Timer1 na Timer0 😅

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.