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

Jak sprawdzić stan czujników ?

Można multimetrem sprawdzić czy czujniki reagują.

Czy mógłbyś podać link do schematu bo nie mogę znaleść...

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

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.