• 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
Arduino Nano konflikt
#1
Witam!
Jak juz pisalem buduje programowalny generator. Pojawil mi sie kolejny problem techniczny. Generator jest wyposazony w wyswietlacz LCD 2x16 i ze wzgledu na ilosc tablic z zestawami czestotliwosci i brakiem miejsca w RAM zdecydowalem sie wyposazyc go w dodatkowa karte pamieci microSD (2GB). Karte pamieci podlaczylem do zlacza ICSP dla sygnalow MISO, MOSI i SCK oraz pin CS podlaczylem do jedynego wolnego pinu cyfrowego D12. Niestety test karty SD nie dzialal. Zaczalem sie zastanawiac na przyczyna i podlaczylem sygnal CS do pinu 10 na Arduino jak sugerowal opis programu testujacego i test karty wykonal sie poprawnie.Przelaczylem wiec sygnal dla LCD z pinu D10 do jedynego wolnego pinu D12, poprawiajac konfiguracje skeczu i mimo to wyswietlacz nie dziala. Zostala mi tylko jedna mozliwosc wiec odlaczylem kabel sygnalowy od modulu karty SD i wyswietlacz ozyl ale nie mam dostepu do karty.
Czy ktos moze mi podpowiedzic jak rozwiazac problem konfliktu wyswietlacza LCD i modulu karty microSD?
Plytka Arduino Nano Wszystkie piny cyfrowe zajete analogowe sa jeszcze wolne oprocz 3 uzytych na klawiature.
Wydaje mi sie ze korzystanie z sygnalow ICSP powinno zalezec od sygnalu CS ktory "mowi" z ktorym urzadzeniem procesor ma wymieniac informacje. Mozliwe jest zawieszanie komunikacji z LCD na czas odczytu z karty zestawu czestotliwosci do wykonania tylko jak to w takiej kombinacji zrealizowac?
Poczatki zawsze sa trudne :-)
Arduino Mega256, Nano, Pro Mini.
 
Odpowiedź
#2
Troche musialem pozmieniac wykorzystanie pinow w Arduino Nano i mam takie ustawienia przy ktorych nie ma konfliktu pomiedzy modulem karty na starcie z wyswietlaczem LCD:
LiquidCrystal lcd(11, 12, 9, 8, 7, 6);
Pojawil sie natomiast inny powazny problem z odczytem danych z karty SD. Chcialem utworzyc fukcje odczytu danych z pliku ale wynik na monitorze jest porazajacy. W pliku zapisalem Notatnikiem zestaw czestotliwosci  tak jak w procedurze w wywolaniu "case" ale po odczycie otrzymuje kaszane na przyklad:

{86,32,42,06,20,84,69,02,12,92,62,06,62,24,22,46,62,516538520490580398384370516460490312336308480370412430400560460308336312528538464458480460434340412350,
600320,400380,800380,700380,06,6,7,7,5,3,5,0,5025,0052,50100200450550730850900930970150,150256,320291,500455,200553,400971}
To w ogole nie sa wartosci zapisane w pliku na karcie (notatnikiem)
Funkcja wyglada nastepujaco:
Kod:
// funkcja czytania z pliku na karcie
void czytajplik(char Name[10], int n, unsigned long freq[])
{
   digitalWrite(ctrlpin, LOW); //sygnal "Enable" LCD down
   File Preset;
    SD.begin(10);   // CS to pin 10
  Preset = SD.open(Name,FILE_READ);                            
Serial.println(Name);     //kontrola wynik poprawny
    n=(Preset.available()); // blad bo wyswietla liczbe znakow - bajtow?
    Serial.println(n);                               
     while (Preset.available())                             //wykonuj pętlę dopókiwszystkie dane
    {                                                     //nie zostaną zczytane
        Serial.write(Preset.read());                        //wypisz zawartość pliku
    freq[(Preset.read())]; //podstawienie do tablicy
    }
  Preset.close();                                           //zamknij plik
 //return;
 digitalWrite(ctrlpin, HIGH); // pin "enable" LCD UP
 lcd.clear();
}
Jest zbudowana na podstawie przykladu z Internetu ale moze zawierac bledy wiec prosze o weryfikacje.
Zatrzymalem sie w pracy niestety nie mam pomyslu gdzie jest blad.
Poczatki zawsze sa trudne :-)
Arduino Mega256, Nano, Pro Mini.
 
Odpowiedź
#3
Jak widac na razie pisze sam ze soba :=(
Sprawdzilem czy wplyw na kaszane ma jednoczesna z modulem karty praca wyswietlacza LCD i okazuje sie ze nie ma. Przy odlaczonym wyswietlaczu i bez dzialajacej biblioteki LiquidCrystal mam takie same wyniki (kaszana!) uzywajac skryptu Cardinfo poszerzonego o odczyt zawartosci konkretnego pliku z kartySD( jak wyzej). Parametry polaczenia, obecnosc karty i jej zawartosc (nazwy plikow) wyswietlane sa na "Serial monitorze" poprawnie natomiast zawartosc juz nie.
W zasadzie do zakonczenia projektu brakuje mi tylko  funkcji podstawiania zawartosci konkretnego pliku to tabeli dla odczytu przez funkcje _wykonaj_ do wygenerowania kolejnych czestotliwosci z listy.
Plytka drukowana umozliwia mi uzycie zamiast Arduino Nano plytki Arduino Pro Mini, ktora jest pozbawiona portu USB a poza tym funkcjonalnie taka sama.
Gdzie lezy problem? Moze ktos juz to rozwiazal?
Poczatki zawsze sa trudne :-)
Arduino Mega256, Nano, Pro Mini.
 
Odpowiedź
#4
Ciag dalszy korespondencji sam ze soba.
Po przeprowadzeniu ekpserymentow na roznych skryptach znalezionych w Internecie okazalo sie ze nie mialem racji twierdzac iz podlaczenie LCD 16x2 plus biblioteka nie ma wplywu na odczyt z karty jesli uzywany jest wspolny pin z ICSP. Niestety proba odczytu zmodyfikowanym skryptem cardinfo dziala a ten sam fragment kodu uzyty w obecnosci wyswietlacza LCD daje kaszane zarowno na wyswietlaczu jak i w odczytanych danych. Chyba trzeba bedzie uzyc klucza aby na czas odczytu odlaczyc piny sterujace LCD od pinow ICSP wykorzystywanych do obslugi wyswietlacza. Chodzi wlasciwie o piny 11 i 12 bo sadze, ze piny 6;7;8;9 nie blokuja dzialania odczytu z karty.
Niestety nie jestem tego pewien i pewnie musze sprawdzic sam jako ze nikt nie kwapi sie z podpowiedzia :-(
Poczatki zawsze sa trudne :-)
Arduino Mega256, Nano, Pro Mini.
 
Odpowiedź
#5
Dalszy ciag korespondencji z samym soba.
Okazuje sie ze sie nie da bez dodatkowego sprzetu wykorzystac w projekcie czytnika kart i wyswietlacza LCD 16x2 standard. Cale szczescie ze ktos juz o tym pomyslal i mozna zastosowac do wyswietlacza konwerter I2C ktory potrzebuje 2 pinow analogowych i zwalnia piny cyfrowe dla innych zastosowan.
Szkoda ze nikomu nie chcialo sie napisac jednego zdania w tym watku ze stwierdzeniem zebym przeszedl na I2C z LCD. Oszczedziloby to mi sporo czasu i testow.
Poczatki zawsze sa trudne :-)
Arduino Mega256, Nano, Pro Mini.
 
Odpowiedź
#6
Problem o ktorym zaczalem pisac nie powinien istniec gdyby konstruktorzy modulow przykladali sie do tego co robia. Znalazlem a innym forum informacje, ze do takiego konfliktu sprzetowego jak u mnie nie powinno w ogole dojsc poniewaz modul karty microSD posiada na plytce drukowanej bufor odpowiednik LS125, ktory powinien odlaczac piny MOSI, MISO, SCK od modulu Arduino w czasie jesli nie ma procedury dostepu do karty. Jesli dodatkowo wezmiemy pod uwage ze iistnieje na wyswietlaczu pin Enable to mozna by bylo podczas transmisji z karta blokowac wyswietlacz a po zakonczeniu odlaczac modul karty SD od tych pinow.
Z tego co pisal ow autor wynikalo ze ktorys z sygnalow MOSI lub MISO nie jest odlaczany przez bufor (ls 125) od szyny i dlatego blokowal w moim przypadku poprawna prace wyswietlacza. Myslalem nawet o zbudowaniu przelacznicy sygnalow z dwu takich komplementarnych buforow LS125 i LS126 gdzie w zaleznosci od stanu lini sterujacej przeplywemi (1 lub 0) piny Arduino laczone by byly z wyswietlaczem lub modulem karty. Ze wzgledu na koszty zastosowanie konwertera I2C do LCD wyszlo taniej choc nie obylo sie bez problemow programowych (biblioteka LCD_I2C).
Ot taki kamyczek do ogrodka konstruktorow modulow :-(
Poczatki zawsze sa trudne :-)
Arduino Mega256, Nano, Pro Mini.
 
Odpowiedź
  


Skocz do:


Przeglądający: 2 gości