Skocz do zawartości

Błąd kompilacji programu Arduino z DHT11 i LCD po I2C


pafff82

Pomocna odpowiedź

28 minut temu, Elvis napisał:

skupić się na tym co tutaj jest istotne - czyli pomaganiu innym.

Więc pomagam. Podróż z Warszawy do Szczecina przez Kraków to nie najszybszą czy najkrótszą drogą.

Pomysł z PCF8574 i LCD 40X2 należy porzucić. Dlaczego napisałem wcześniej. Czy można podważyć obliczenia, które zrobiłem? Jeśli sie pomyliłem proszę wskazać gdzie. Teraz pogram niewiele ma robić, jak będzie miał robić więcej, to 120ms okazuje się długim czasem a przy złym podejściu do tematu nawet najszybszy uC nie pomoże.

Krok nr 1 to LCD w trybie równoległym, najlepiej w zewnętrznej przestrzeni XRAM (npArduinoMega2560) albo LCD ze sterownikiem I2C a w przypadku AVR mega SPI. Dlaczego SPI? Bo aby użyć do wysyłki danych przerwań trzeba w RAM umieścić bufor. AVR nie grzeszą w ilość RAM. SPI na AVRmega zadziała 8 a nawet 10MHz. To zdecydowanie więcej niż 400kHz bo z taką prędkością działają najczęściej LCD z I2C. W  SPI dla alfanumerycznych jakie znak trzeba wysyłać naprzemiennie CMD DANA, więc przepustowość spada dwukrotnie, w I2C wysyła się ADRES, CMD, DANE więc praktycznie dwa razy mniej. Tak więc przesłanie 160znaków przy 8MHz zajmie  ok 320us (1/8e6*8*2*160), po I2C będzie to trwało ponad 10 razy dłużej, przez PCF8754 "tylko" 400 razy dłużej.

Edytowano przez es2
Link do komentarza
Share on other sites

Lepiej nie robić wszystkiego na raz. Jak Ci nie zadziałał (a powiedzmy że kurs z Forbota już przeszedłeś i podany kod był ciągiem literówek) to uruchom sobie LCD wypisując jakieś teksty przypisane do zmiennych. Działa LCD to osobno przetestuj czujnik czy jest sprawny wysyłając wartości z pomiarów na serial. Potem wróć do tego kodu.

Link do komentarza
Share on other sites

42 minuty temu, kaczakat napisał:

uruchom sobie LCD wypisując jakieś teksty przypisane do zmiennych

Może najpierw sprawdzić funkcjonowanie I2C? Na schemacie nie widzę rezystorów podciągających. Jeśli są na Arduino, to pewnie 10k czyli złe dla 100kHz. Może zacząć choćby od przeskanowania I2C? Ciekawe dlaczego "ekspert" od teorii  "ilość przechodzi w jakość" na to nie wpadł?

 

 

Edytowano przez es2
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

(edytowany)

Witam, przysiadłem dzisiaj jeszcze raz do mojego projektu i podłączyłem DHT z LCD bez konwertera I2c i poszło, więc najprawdopodobniej jest on uszkodzony.

Sprawdziłem go w projekcie Hello World i też nie działał.

Dziękuję za pomoc i pozdrawiam 🙂

 

Edytowano przez pafff82
Link do komentarza
Share on other sites

Może jest uszkodzony, może nie. Po tym co opisałeś żadnych takich wniosków wyciągnąć się nie da. No chyba że ktoś bawi się w rosyjskiego naukowca: "po wyrwaniu wszystkich nóżek mucha ogłuchła.

Po pierwsze wgraj ten szkic i wrzuć tu wynik z terminala, czy wykrywa jakikolwiek adres na I2C?

/**
 * I2CScanner.ino -- I2C bus scanner for Arduino
 *
 * 2009,2014, Tod E. Kurt, http://todbot.com/blog/
 *
 */

#include "Wire.h"
extern "C" { 
#include "utility/twi.h"  // from Wire library, so we can do bus scanning
}

// Scan the I2C bus between addresses from_addr and to_addr.
// On each address, call the callback function with the address and result.
// If result==0, address was found, otherwise, address wasn't found
// (can use result to potentially get other status on the I2C bus, see twi.c)
// Assumes Wire.begin() has already been called
void scanI2CBus(byte from_addr, byte to_addr, 
                void(*callback)(byte address, byte result) ) 
{
  byte rc;
  byte data = 0; // not used, just an address to feed to twi_writeTo()
  for( byte addr = from_addr; addr <= to_addr; addr++ ) {
    rc = twi_writeTo(addr, &data, 0, 1, 0);
    callback( addr, rc );
  }
}

// Called when address is found in scanI2CBus()
// Feel free to change this as needed
// (like adding I2C comm code to figure out what kind of I2C device is there)
void scanFunc( byte addr, byte result ) {
  Serial.print("addr: ");
  
  Serial.print(addr,DEC);
  Serial.print(", hex: ");
  Serial.print(addr,HEX);
  Serial.print( (result==0) ? " found!":"       ");
  Serial.print( (addr%4) ? "\t":"\n");
}


byte start_address = 8;       // lower addresses are reserved to prevent conflicts with other protocols
byte end_address = 119;       // higher addresses unlock other modes, like 10-bit addressing

// standard Arduino setup()
void setup()
{
    Wire.begin();

    Serial.begin(115200);                   // Changed from 19200 to 9600 which seems to be default for Arduino serial monitor
    Serial.println("\nI2CScanner ready!");

    Serial.print("starting scanning of I2C bus from ");
    Serial.print(start_address,DEC);
    Serial.print(" to ");
    Serial.print(end_address,DEC);
    Serial.println("...");

    // start the scan, will call "scanFunc()" on result from each address
    scanI2CBus( start_address, end_address, scanFunc );

    Serial.println("\ndone");
    
    // Set pin mode so the loop code works ( Not required for the functionality)
    pinMode(13, OUTPUT);
}

// standard Arduino loop()
void loop() 
{
    // Nothing to do here, so we'll just blink the built-in LED
    digitalWrite(13,HIGH);
    delay(300);
    digitalWrite(13,LOW);
    delay(300);
}

Po drugie ustawiłeś sobie kontrast wyświetlacza tak by po podaniu 5V było lekko widać piksele pierwszego i trzeciego wiersza? Kręcisz potencjometrem z tyłu tak by pokazały się dwie linie pikseli, potem z powrotem by prawie znikły. 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.