• 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
Nie działający wyświetlacz po uruchomieniu SD
#11
średnik to widocznie pozostałość. Jednak jest bez znaczenia. Ale dzięki za uwagę, przegapiłem bo działało wszystko to tez nie zwracałem na to uwagi.

Pisałem o podłączeniu już wcześniej:
Pod I2C mam:
Zegar RTC -HW 111
OLED -0,91 cala
Czujnik wilgotności/temperatury -BME280

Na ISP:
Czytnik Kart mikro SD HW 125
 
Odpowiedź
#12
Tak się teraz jeszcze raz przyjrzałem temu kodowi i wyświetlacz mam na pinie 4 i CS też na 4? A4 to pin 4 a D4 to pin 14? I czy ma znaczenie dla CS jaki pin się ustawi?
 
Odpowiedź
#13
Ma znaczenie..
Pinem cs wlaczasz transmisje..
Jak masz na oddzielnych portach, mozesz zrobic pull-up do zasilania na stale.
Gorzej jak sterowanie masz na tych samych i2c i spi..wtedy wlaczasz cs dla spi, jak gadzasz do spi, i wlaczasz cs dla i2c jak gadasz z i2c.

Wysłane z mojego SM-G950F przy użyciu Tapatalka
 
Odpowiedź
#14
(19-01-2020, 13:22)damilog napisał(a): A4 to pin 4 a D4 to pin 14?

Odwrotnie. A4 to pin 14, a D4 to pin 4.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#15
Czyli niby wszystko ok podłączone.Skorzystałem teraz z przykładu takiego (znaleziony w necie):
Kod:
//Biblioteki
#include <SD.h>
#include <SPI.h>

const int CSPin = 10;
int czas=0;

void setup(){
  Serial.begin(9600);
  //Ustawienie CS jako wyjście
  pinMode(CSPin, OUTPUT);

  if (!SD.begin(CSPin))
  {
    Serial.println("Blad inicjalizacji karty");
    return;
  }
    Serial.println("Karta zostala poprawnie zainicjalizowana");
}

void loop(){
  File myFile = SD.open("test.txt", FILE_WRITE);

  if (myFile){
  myFile.print("Dziala ");
  myFile.println(czas);
  myFile.close();

  Serial.print("Dane zapisane");
  }
  else{
  Serial.println("Blad otwarcia pliku");
  }
delay(3000);
}
wywaliłem z niego pętle a miejsce loop dałem taki kod:
Kod:
if(now.hour() == 174){
myFile = SD.open("test.txt", FILE_WRITE);
myFile.println("data: ");                                         //zapisz wartość
myFile.print(now.year());                                         //zapisz wartość roku
myFile.print("-");                                         //zapisz wartość
myFile.print(now.month());                                         //zapisz wartość miesiąca 
myFile.print("-");                                         //zapisz wartość   
myFile.print(now.day());                                         //zapisz wartość dnia
myFile.print(" godzina: ");                                         //zapisz wartość   
myFile.print(now.hour());                                         //zapisz wartość godziny   
myFile.print(":");                                         //zapisz wartość 
myFile.print(now.minute());                                         //zapisz wartość minuty 
myFile.print(":");                                         //zapisz wartość   
myFile.print(now.second());                                         //zapisz wartość sekundy
myFile.print("temperatura: ");                                         //zapisz wartość     
myFile.print(bme.readTemperature());                                         //zapisz wartość temperatury   
myFile.print("wilgotnosc: ");                                         //zapisz wartość 
myFile.print(bme.readHumidity());                                         //zapisz wartość wilgotności   
       
myFile.close();                                            //zamknij/zapisz plik
delay(300);                                              //oczekaj 0,3s
Serial.println("Zapisano !");                            //poinformuj o zapisaniu pliku
/*koniec SD */
teraz wyswietlacz działa. Inicjalizacja też pokazuje na serialu że wszystko niby ok. Gdy natomiast wywale warunek lub dam mu wartość np 14 to już wyświetlacz nie reaguje.Jednak zapis w tej postaci sugeruje że nigdy nic na karcie SD się nie zapisze. Jakieś pomysły? 
pełen kod wygląda tak :
Kod:
#include <Wire.h>
#include <SPI.h>
#include <SD.h>


// wyświetlacz
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Adafruit_SSD1306 display(4);
//wyświetlacz koniec
//sensor ciśnienia i temperatury
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Adafruit_BME280 bme; // I2C
//unsigned long delayTime;
//sensor ciśnienia i temperatury koniec

//zegar rtc
#include <RTClib.h>
#define DS1307_ADDRESS 0x68 //adres zegara
RTC_Millis RTC;
//zegar rtc koniec
#include <OneWire.h>
int year;
int ogien = A3; //ustawienie zmiennej do czujnika ognia
int BUZZER = A1; // SYGNAŁ DLA BUZER
int wilgotnosc;
byte pozar;
char dt[8];  //ustawić zmienne dla zegarka dt
File myFile;
const int CSPin = 4;
void setup()
{
Wire.begin();
display.begin(SSD1306_SWITCHCAPVCC,0x3C);
display.clearDisplay();
//ustawienie adresu I2C dla sensora temp i ciśnienia
unsigned status;
status = bme.begin(0x76);
//sensor ciśnienia i temperatury koniec
//zegar
RTC.begin(DateTime(__DATE__, __TIME__));
//RTC.begin();
//koniec zegar

pinMode(ogien, INPUT);  //usawienie portu czujnika ognia
pinMode(A1, OUTPUT);
//SD
Serial.begin(9600);
  //Ustawienie CS jako wyjście
  pinMode(CSPin, OUTPUT);

  if (!SD.begin(CSPin))
  {
    Serial.println("Blad inicjalizacji karty");
    return;
  }
    Serial.println("Karta zostala poprawnie zainicjalizowana");
//SD koniec

}

void loop()
{
 
  DateTime now =  RTC.now();
//czujnik ognia
  pozar = digitalRead(ogien);
if (pozar == LOW){
tone(A1, 1000, 100);
} //koniec instrukcji czujnika ognia

if(now.hour() == 174){
myFile = SD.open("test.txt", FILE_WRITE);
myFile.println("data: ");                                         //zapisz wartość
myFile.print(now.year());                                         //zapisz wartość roku
myFile.print("-");                                         //zapisz wartość
myFile.print(now.month());                                         //zapisz wartość miesiąca 
myFile.print("-");                                         //zapisz wartość   
myFile.print(now.day());                                         //zapisz wartość dnia
myFile.print(" godzina: ");                                         //zapisz wartość   
myFile.print(now.hour());                                         //zapisz wartość godziny   
myFile.print(":");                                         //zapisz wartość 
myFile.print(now.minute());                                         //zapisz wartość minuty 
myFile.print(":");                                         //zapisz wartość   
myFile.print(now.second());                                         //zapisz wartość sekundy
myFile.print("temperatura: ");                                         //zapisz wartość     
myFile.print(bme.readTemperature());                                         //zapisz wartość temperatury   
myFile.print("wilgotnosc: ");                                         //zapisz wartość 
myFile.print(bme.readHumidity());                                         //zapisz wartość wilgotności   
       
myFile.close();                                            //zamknij/zapisz plik
delay(300);                                              //oczekaj 0,3s
Serial.println("Zapisano !");                            //poinformuj o zapisaniu pliku
/*koniec SD */
}
//wyswietlacz
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(4,3);
display.println(now.year());
display.setCursor(29,3);
display.println("-");
display.setCursor(35,3);
display.println(now.month());
display.setCursor(49,3);
display.println("-");
display.setCursor(54,3);
display.println(now.day(), DEC);
display.setCursor(72,3);
display.println(now.hour(), DEC);
display.setCursor(82,3);
display.println(":");
display.setCursor(88,3);
display.println(now.minute(), DEC);
display.setCursor(99,3);
display.println(":");
display.setCursor(104,3);
display.println(now.second(), DEC);
display.setCursor(4,12);
display.println("TEMP");
display.setCursor(50,12);
display.println(bme.readTemperature());
display.setCursor(85,12);
display.println("C");
display.setCursor(4,21);
display.println("WILGOTNOSC");
display.setCursor(70,21);
display.println(bme.readHumidity());
display.setCursor(105,21);
display.println("%");
display.drawRect(1, 1, 126, 30, WHITE);
display.display();
delay(1000);
display.clearDisplay();
//koniec wyswietlacza

}
               
Nie rozumiem tylko czemu autor tego przykładu ze strony https://elektronika327.blogspot.com/2015...te-sd.html  daje pin CS jako 10 a w opisie jako 4? No i nie rozumiem czemu ten chole... straszny wyświetlacz u mnie nie chce działać
A może kwestia siorbania energii tylko z arduino i powinienem podłączyć pod SD dodatkowe zasilanie?
 
Odpowiedź
#16
A jestes pewien ze ssd1306 masz ustawiony na i2c??
Na plytce wyswietlacza ustawia sie interface...sprawdz jak masz ustawiony

Wysłane z mojego SM-G950F przy użyciu Tapatalka
 
Odpowiedź
#17
(19-01-2020, 15:17)wchpikus napisał(a): A jestes pewien ze ssd1306 masz ustawiony na i2c??
Na plytce wyswietlacza ustawia sie interface...sprawdz jak masz ustawiony

Wysłane z mojego SM-G950F przy użyciu Tapatalka

Jest taka linijka w moim kodzie:
Kod:
display.begin(SSD1306_SWITCHCAPVCC,0x3C);

Myślę że to powinno sprawę załatwiać.Tym bardziej że czujnik temeratury jak podłączyłem to miałem z tym problem i mu musiałem ustawić też adres bo się gryzły. Może podaj przykład jak to powinienem inaczej zrobić to spróbuje i się dowiemy :-)
 
Odpowiedź
#18
Może zeskanuj jakie masz adresy na magistrali I2C. Możesz po kolei włączać i wyłączać urządzenia. Zobaczysz czy adresy urządzeń się czasem nie pokrywają.
 
Odpowiedź
#19
Nie w kodzie...ma plytce wyswietlacza..
Zrob zdjecie wyswietlacza..z obu stron

Wysłane z mojego SM-G950F przy użyciu Tapatalka
 
Odpowiedź
#20
(19-01-2020, 19:33)Agregacik napisał(a): Może zeskanuj jakie masz adresy na magistrali I2C. Możesz po kolei włączać i wyłączać urządzenia. Zobaczysz czy adresy urządzeń się czasem nie pokrywają.
Kod:
19:12:29.170 ->
19:12:29.170 -> I2C scanner. Scanning ...
19:12:29.170 -> Found address: 60 (0x3C)
19:12:29.206 -> Found address: 118 (0x76)
19:12:29.206 -> Done.
19:12:29.206 -> Found 2 device(s).

Co ciekawe zapisuje dane na karcie SD ale wyłącza wyświetlacz. Być może wina wyświetlacza.

https://zapodaj.net/963519b9953e7.jpg.html
https://zapodaj.net/3b5cbe07c0e00.jpg.html
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości