Skocz do zawartości

[C] Czujniki CNY70


tabbi

Pomocna odpowiedź

Witam,

posiadam już gotową płytke z atmega 8 gdzie są zainstalowane czujniki CNY70 - zgodnie z schematem "Przepis na robota"

Mam jednak problem z sprawdzeniem działania czujników. Pisze taki program w C:

/* ATmega 1MHz */

#define F_CPU 1000000L
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{   

//wyjscia

 DDRD=0xff;

//wejscia z podłaczeniem do VCC
 DDRC  = 0x00;
 PORTC = 0xff; 

 while(1){

//wykrywanie w czujniku - dioda ze swieci  / czujnik podpiety do PORTC=3
if(!(PINC & 0x04)){
 PORTD = 0x40; 
 _delay_ms(800);
 }
   else PORTD = 0x00; 

//wykrywanie w czujniku - dioda ze swieci  / czujnik podpiety do PORTC=4
   if(!(PINC & 0x40)) {
 PORTD = 0x40; 
 _delay_ms(800);
 } 
   else {PORTD = 0x00;} 

//wykrywanie w czujniku - dioda ze swieci  / czujnik podpiety do PORTC=5
   if(!(PINC & 0x10)) {
 PORTD = 0x40; 
 _delay_ms(800);
 }
 else {PORTD = 0x00;}



 }



}

Dioda jest podpieta do Portu D =6;

Wynik działania programu to taki że cały czas świeci dioda niezaleźnie czy przyłoże czarna kartke do czujników czy nie ? Jak sprawdzić stan czujników ?

Link do komentarza
Share on other sites

Linijke

PORTC = 0xff;

można usunąć, masz rezystory podciągające do + na schemacie

Jeśli chodzi o pomiar napięcia to najprościej między końcówką portu µkontrolera, a masą, czyli - zasilania.

----

Wydaje mi się, że fototranzystor zmniejsza oporność pod wpływem światła, czyli nad czarną linią dotrze do niego mniej światła. Będzie miał większy opór, więc napięcie na nóżce będzie wyższe, czyli linie oznacza raczej logiczna "1".

---

I moim zdaniem czytelniej jest

stosować zapis:

PORTD |= 1 << 6;

niż

PORTD = 0x40; 

operator << oznacza przesunięcie bitów w lewo, czyli 1 zostanie przesunięta z 0 na 6 bit. Dzięki takiemu zapisowi od razu widać jaki pin zmieniamy. Taki zapis przy okazji ma jeszcz dwie inne zalety:

-nie zmienia innych bitów

-wiele bitów (popatrz w dokumentacji) ma swoje nazwy, te nazwy ma zapisane kompilator i w kodzie zamiast numeru bitu można wpisać jego nazwę.

----

//wykrywanie w czujniku - dioda ze swieci  / czujnik podpiety do PORTC=3 
if(!(PINC & 0x04)) 

0x04=

00000100

76543210 numery bitów

sprawdzasz pin 2 a nie 3

podobne błędy masz w innych

  • Lubię! 1
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

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.