Skocz do zawartości

Czujnik odleglosci attiny13 - schemat i program


Pomocna odpowiedź

Witam

Pracując nad swoim robotem postanowiłem wyposażyć go w taki właśnie czujnik odbiciowy. Swoją wersję wykonałem na atmega16 + dwie diody IR + TSOP1736. Atmega generuje nośną za pomocą timera i dodatkowo ja moduluje. Czujnik wykrywa obiekty po lewej, prawej stronie i dodatkowo po środku.

Niedługo pewnie pokażę swojego robota.

Właśnie próbowałem uruchomić timer0 w ATtiny13 w tryb CTC (założyłem nawet temat z pytaniem) i udało mi się ;D Ze względu na małą ilość wyjść mikrokontrolera ATtiny13 udało mi się uruchomić jak na razie jedną diodę IR, w najbliższym czasie spróbuję również uruchomić drugą.

Dzięki za wskazówki i dalsze badania 🙂

W tym tygodniu zakupie NE555 i wszystko zobacze 😃 Bascom juz naprawiony.

Ale mam jeszcze jedno pytanko czy istnieje fukcja toggle LCD w BASCOMIE ???

Chodzi mi o to ze gdy S1 naciskam wysakuje na LCD ON a za nastepnym razem OFF itd...

fukcja toggle LCD w BASCOMIE

Pierwszy raz o czymś takim słyszę. Jest wogóle taka funkcja? Zawsze można ustawić zmienną typu bit, żeby było wiadomo który raz jest przycisk naciśnięty i dalej IFy a dalej to już wiadomo.

Znaczy ze chodzilo mi o to ze:

LCD wyswietla OFF

jesli s1 wcisniety to lcd wyswietla ON (zmienia z OFF na ON)

potem jesli na lcd ON i s1 wcisniety zmienia na OFF ( z ON na OFF )

..

..

..

i powrot do poczatku

Damn you, człowieku.

Togglujesz sobie bit, i w jednym ifelsie masz wszystko załatwione. Jak chcesz "togglować" wyświetlacz? 😃

Ja rozumiem biblioteki z funkcjami, ale bez jaj.

Spokojnie to bylo tylko w przenosni powinienem dac "toggle" 😃

[ Dodano: 30 Mar 10 08:10 ]

Zrobiłem tak jak rasta no i działa 😉

wklejam kod moze sie komus przyda 😃

$regfile = "m16def.DAT"                                     'deklaracja procesora, w tym wypadku Atmega16
$crystal = 8000000                                          'deklaracja cześtotlwiości pracy
'Deklaracja portów od wyświetlacza LCD
Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , Db7 = Porta.0 , E = Porta.4 , Rs = Porta.5

Config Lcd = 16 * 1a                                        'ustawiamy typ wyświetlacza

Config Rc5 = Pind.3

Config Portb.0 = Output

Enable Interrupts
Cursor Off


Dim Address As Byte
Dim Command As Byte
Dim Var As Byte

Cls

Do

Getrc5(address , Command )
Command = Command And &B01111111

If Address = 0 And Command = 1 Then
Toggle Portb.0
Waitms 800
End If

If Portb.0 = 0 Then
Cls
Locate 1 , 1
Lcd "---ON---"
Else
Cls
Locate 1 , 1
Lcd "--OFF--"
End If


Loop
End
  • 2 tygodnie później...
niewiem dlaczego wszyscy uparli się na czujniki odbicia oparte o IR nie prościej zrobić to na ultradzwiękach masz wtedy pewny pomiar odległości

No właśnie nie prościej, mało jest dobrze opisanych, działających poprawnie rozwiązań pomiaru odległości na ultradźwiękach.

Poza tym przy stopniu wejściowym z dużym wzmocnieniem sonar taki potrafi się wzbudzić jeżeli na biurko spadnie cokolwiek, akumulatorek albo coś. W robocie nie miałoby to racji bytu. Trzeba by stosować aktywne filtry, co znacznie komplikuje budowę, ale jest to dość ciekawy temat, warty testów, szczególnie że przetworniki mam.

  • 4 miesiące później...

Naskrobałem sobie taki o to program do Attiny13-20pu

$regfile = "ATtiny13.DAT"
$crystal = 1200000

Config Pinb.3 = Input 'fotodioda IR
Config Portb.1 = Output 'dioda informująca o przeszkodzie
Config Portb.2 = Output 'dioda nadawcza IR

Portb.1 = 0 'obie diody wyłączone
Portb.2 = 0

'Konfiguracja przetwornika analog-cyfra zaczerpnięta z jakiegoś tematu
Config Adc = Single , Prescaler = Auto , Reference = Avcc

'Deklaracje zmiennych
Dim Irka As Word 'napięcie przy wyłączonej diodzie nadawczej
Dim Irkanext As Word 'przy włączonej
Dim Wynik As Word 'różnica

Start Adc

Do

Irka = Getadc(3)

Set Portb.1
Waitms 1

Irkanext = Getadc(3)

Waitms 1
Reset Portb.1

Wynik = Irkanext - Irka

If Wynik > 0.03 Then Set Portb.2
If Wynik < 0.03 Then Reset Portb.2

Loop



End

To mój 3 program w życiu i pierwszy z ADC. Ma on w zamyśle sprawdzać napięcie na fotodiodzie, zapisywać, włączać diodę IR na te milisekundy i ponownie sprawdzać napięcie na fotodiodzie. Napięcia w zależności od przeszkód przed czujnikiem wahają się mniej więcej od 0.150V do 0.350V. Różnica napięć miałaby informować o odległości.

Pierwszy błąd to za mało pamięci SRAM w attiny jak sądzę...

Tak, też coś takiego miałem. W opcjach należy zmniejszyć rozmiar ramki (stosu?), zaraz ci znajde której i na co.

Kurczę, nie umiem znaleźć. Chyba chodziło o HW Stack - zmniejsz do 16. Jezeli nie pomoże, to pogogluj: wpisz tiny 13 i error jaki ci wywala, ja kiedyś tak szukałem i znalazłem, tyle że nie pamiętam jaki to był error.

PS. Sprawdziłem u mnie, zmniejszenie HW Stack pomaga, ale i tak masz oprócz tego 3 błedy. Zmienna wynik powinna byc zmienną Single a nie Word, jak to zmienisz to już nie wywala błedów.

  • Lubię! 1

Wielkie dzięki za porady. Program działa, ale muszę go skalibrować.

Co do czujników, to leniwie podłączyłem fotodiody IR anodą do masy, katodą wprost na pin procesora. Pracowała więc jak słabiutkie źródło napięciowe. To wielki błąd, prawda ?!

Jutro zrobię sprawdzoną konfigurację - fototranzystor szeregowo z rezystorem i to wpięte między VCC a GND.

  • 4 miesiące później...

KD93 A propo naszej wcześniejsze rozmowy w innym temacie.

Do generowania 36 kHz używam 555. do kalibracji użyłęm miernika my-68 nie wiem na ile jest to dokładne, ale przy testowaniu zasięgu najlepsze wyniki miałem około wskazań miernika w ganichach 37-38 kHz. Postaram sie to zweryfikować w najbliższym czasie za pomocą oscyloskopu cyfrowego.

Zastosuje się do twojej rady i postaram sie jeszcze zwiekszyć prąd na diodach.

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