• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Wyswietlacz 7 segmentowy + db18b20
#11
(19-12-2017, 19:30)hazi18 napisał(a): Hej, zakupiłem rejestrator 74HC595, użyłem LM35 i zrobiłem jak na podanym przykładzie kolegi krn78. Efekt w załączniku, co mogło pójść nie tak?
74HC595 nie jest rejestratorem, ale rejestrem przesuwnym.
Co mogło pójść nie tak... jesteś pewien, że dobrze połączyłeś układ? 
Próbowałeś wyświetlać inne rzeczy na tym wyświetlaczu? Czy na monitorze szeregowym możesz wyświetlić wyniki z czujnika temperatury?
 
Odpowiedź
#12
Jako, że idą święta to podam gotowe rozwiązanie ale...
aby nie było łatwo to dla takiego shieldu jak poniżej  Smile

[Obrazek: termometr.jpg]

Pod shieldem jest zwykły klon Arduino UNO.
Czujnik temperatury to: DS 18B20 Dallasa (program sam odczytuje adres czujnika).

Myślę, że z adaptacją do innych projektów nie będzie problemu.
Poniżej kod:

Kod:
// Temperatura na wyświetlaczu LED.

#include <OneWire.h>
#include <DS18B20.h>
#include <TimerOne.h>

const byte ONEWIRE_PIN = A4;

int latchPin = 4;
int clockPin = 7;
int dataPin = 8;
char pos;

unsigned char Dis_table[] = {
 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};

unsigned char Dis_table1[] = {
 0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10};

unsigned char Dis_buf[]   = {
 0xF1, 0xF2, 0xF4, 0xF8};

unsigned char disbuff[]  =  {
 0, 0, 0, 0};

int SUM = 0;

float temperature;
byte address[8];

OneWire onewire (ONEWIRE_PIN);
DS18B20 sensors(&onewire);

void Przerwanie(void);

// ---------------------------- Ustawienia programu --------------------------------
void setup ()
{
 Serial.begin (9600);

 Timer1.initialize(5000);             //Ustawienie przerwania co 0.005s
 Timer1.attachInterrupt(Przerwanie);   //Przyczepienie funkcji Przerwanie do timera1

 pinMode (latchPin, OUTPUT);
 pinMode (clockPin, OUTPUT);
 pinMode (dataPin, OUTPUT);

 digitalWrite (latchPin, LOW);
 shiftOut (dataPin, clockPin, MSBFIRST, 0x00);  // Znaki:   0x00 - 0xFF
 shiftOut (dataPin, clockPin, MSBFIRST, 0x00);  // Pozycje: 0xF1, 0xF2, 0xF4, 0xF8
 digitalWrite (latchPin, HIGH);

 sensors.begin();
 sensors.request(address);
}

// ---------------------------- Pętla główna programu ------------------------------
void loop ()
{
 // Odczyt numeru czujnika.
 onewire.reset_search ();
 onewire.search (address);

 // Odczyt temperatury.
 if (sensors.available())
 {
   temperature = (sensors.readTemperature(address) - 1);

   Serial.print(temperature);
   Serial.println("'C");

   sensors.request(address);

   temperature = temperature * 100;
   SUM = int (temperature);

   disbuff[0] = SUM / 1000;
   disbuff[1] = SUM % 1000 / 100;
   disbuff[2] = SUM % 100 / 10;
   disbuff[3] = SUM % 10;
 }
}

// -------------------------- Funkcja przerwań ----------------------------
void Przerwanie()
{
 // Wyświetlenie temperatury na WYSW LED.

 digitalWrite (latchPin, LOW);
 if (pos == 1) shiftOut (dataPin, clockPin, MSBFIRST, Dis_table1[disbuff[pos]]);
 else shiftOut (dataPin, clockPin, MSBFIRST, Dis_table[disbuff[pos]]);
 shiftOut (dataPin, clockPin, MSBFIRST, Dis_buf[pos] );
 digitalWrite (latchPin, HIGH);

 pos ++;
 if (pos > 3) pos = 0;
}

Powodzenia.

Zdrowych i Wesołych Świąt.
ANT
Jeżeli pomogłem, to poproszę o punkt reputacji Big Grin
 
Odpowiedź
#13
Witam, zrobiłem jak kolega KRN78 pisał, czujnik działa i pokazuje prawidłową temperaturę ale tylko na monitorze szeregowym, poniżej zdjęcia jak się zachowuje wyświetlacz.


Załączone pliki Miniatury
                   
 
Odpowiedź
#14
Niech kolega spojrzy na kod który podałem we wcześniejszym poście.
Shield o którym pisałem posiada te same rejestry, więc zerknij sobie na niego i porównaj połączenia ze swoimi.

Link do schematu:
http://as1200.xaa.pl/arduino/shield_multi.pdf

Pozdr.
ANT
Jeżeli pomogłem, to poproszę o punkt reputacji Big Grin
 
Odpowiedź
#15
Skopiowałem kod, temperaturę czyta prawidłowo jednak na wyświetlaczu nic się nie pojawia. Jeśli jest te sam rejestr to powinno cokolwiek wyświetlić a tutaj jakby w ogóle nie był podłączony
 
Odpowiedź
#16
Sprawdź czy masz rejestr podłączony zgodnie z kodem:

Kod:
int latchPin = 4;
int clockPin = 7;
int dataPin = 8;

No i nie wiem czy zauważyłeś na schemacie, że w shieldzie są zastosowane 2 rejestry.

Nie wiem również jak jest to obecnie podłączone u Ciebie.
Dobrze byłoby gdybyś umieścił schemat swoich połączeń.
Jeżeli pomogłem, to poproszę o punkt reputacji Big Grin
 
Odpowiedź
#17
Faktycznie widziałem je, ale zapomniałem napisać jak ma to podłączyć aby działało na 1 rejestrze? bo mam jeszcze 2 w zapasie no ale nie chce niepotrzebnie tyle miejsca zajmować.
 
Odpowiedź
#18
Narysuj schemat i pokaż jak chcesz mieć to wszytsko podłączone do tego jednego rejestru.
Pomogę Ci w kodzie ale żeby go napisać to muszę wiedzieć jak wygląda hardware urządzenia Smile

Pozdr.
ANT
Jeżeli pomogłem, to poproszę o punkt reputacji Big Grin
 
Odpowiedź
#19
Można polecić jakiś program do rysowania schematów? nie chciałbym tego robić w Paince Smile
 
Odpowiedź
#20
Dla początkujących i nie tylko polecam program: Fritzing

Można w nim rysować schematy, projektować płytki PCB oraz jak na screenie poniżej
przedstawiać w formie rysunkowej budowane układy na Adruino.

[Obrazek: fritzing.jpg]


Dla zaawansowanych polecam program: Eagle

[Obrazek: eagle.jpg]

Pozdr.
ANT
Jeżeli pomogłem, to poproszę o punkt reputacji Big Grin
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości