Skocz do zawartości

2 pytania początkującego.


Bieluus

Pomocna odpowiedź

Witam,

Zamówiłem ostatnio czujnik DHT11 (termometr na 1-wire) oraz czujniki odległości sharp 40 cm. Mam 2 pytania do was koledzy gdyż ja nie potrafię sobie z tym już poradzić.

1) Mam taką sytuację. Podłączam jeden sharp do mikrokontrolera, wszystko działa wspaniale. Lecz gdy podłączam trzy czujniki, niezależnie do których portów wpinam, pierwszy czujnik działa ok, drugi zawsze widzi przedmiot (wyjście ma na 0), a trzeci zawsze nie widzi (wyjście na 1). Jak przepinam czujniki, to wszystkie jak są "pierwsze" to działają poprawnie i reszta działa tak samo. Czy ktoś się z tym spotkał ? Mam je podpięte tak jak opisuje schemat na botland.com.pl - rezystor mam tylko 10 om bo nie mam pod ręką 1 om ale to chyba nie wiele zmienia. Teraz mi tak przyszło na myśl, nie stusuje bezpośrednio pomiędzy nimi filtracji zasilania, może to być powód tego zachowania?

2) Drugie pytanie mam odnośnie DHT11, przerobiłem kurs avr gcc, wszystko pięknie śmiga tylko... Temperatura jaką odczutuję to: 0.0 C bądz 80.1 C ( ?? 😃 ). Sprawdzałem podłączenie, kod pisałem na kilka sposobów i wydaje mi się być w porządku bardziej widzę tu błąd czujnika bądź konwersji double. Oto mój kod:


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

#include "HD44780.h"
#include "ds18b20.h"


char str[17]="Temp: ";

int main(void)
{
DDRB = 0x00;

 /* Zmienna przechowuje aktualną wartość temperatury */        
 double temp;
 /* W tablicy zapisywane będą dane odczytane z układu ds18b20 */
 unsigned char pomiar[9];

 /* Funkcja inicjalizuje wyświetlacz */
 lcd_init();
 /* Włącza wyświetlanie */
 LCD_DISPLAY(LCDDISPLAY);  
 /* Czyści  ekran */
 LCD_CLEAR;            

 /* Wyświetla tytuł */  
 LCD_LOCATE(0,0);
 lcd_puts(str);

 while(1)
 {
   /* Funkcja 'ds18b20_ConvertT' wysyła do układu ds18b20 
      polecenie pomiaru */      
    if(ds18b20_ConvertT())
   {

      /* 750ms - czas konwersji */
      _delay_ms(750);

     /* Odczyt z układu ds18b20, dane zapisywane są w tablicy ds18b20_pad. 
        Dwie pierwsze pozycje w tablicy to kolejno mniej znaczący bajt i bardziej 
    znaczący bajt wartość zmierzonej temperatury */            
      ds18b20_Read(pomiar);

     /* Składa dwa bajty wyniku pomiaru w całość. Cztery pierwsze bity mniej
        znaczącego bajtu to część ułamkowa wartości temperatury, więc całość
        dzielona jest przez 16 */       
      temp = ((pomiar[1] << 8) + pomiar[0])/16.0;

     /* Formułuje komunikat w tablicy 'str' */
     sprintf(str,"%4.1f\xdf""C", temp);


      LCD_LOCATE(5,1);
     /* Wysyła komunikat do wyświetlacza */
      lcd_puts(str);
   }
 }
}

Bardzo proszę o pomoc, jakąkolwiek. Mam już kilka projektów ukończonych no ale nie mogę rozgryźć co tu może być nie tak.

Pozdrawiam!

Link do komentarza
Share on other sites

ad 1. sprawdź miernikiem bezpośrednio na wyjściach z sharpów czy reagują prawidłowo (stan niski jak widzi obiekt, stan wysoki jak nie widzi), jeśli tak to masz problem w programie (albo na ścieżkach). Jeśli na wyjściach są błędne dane to dodaj po kondensatorze elektrolitycznym 47+uF pomiędzy zasilaniem, a masą przy każdym czujniku. Na schemacie tego nie ma ale w dokumentacji jest taka wzmianka, że aby czujnik prawidłowo działał to musi ten kondensator być.

Link do komentarza
Share on other sites

Sorry nie miałem dostępu do neta wcześniej. Dzięki za informacje o tym kondensatorze, jednak wydaje mi się że one poprawnie działają. Nie sprawdzałem ich miernikiem, ale coś mi się właśnie wydaje że to coś jakby jakieś zakłócenia.

Link do komentarza
Share on other sites

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.