Arduino Polska Forum

Pełna wersja: Wyswietlacz 7 segmentowy + db18b20
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2 3 4 5
(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?
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
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.
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
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
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ń.
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ć.
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
Można polecić jakiś program do rysowania schematów? nie chciałbym tego robić w Paince Smile
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
Stron: 1 2 3 4 5